public async Task <int> VerifyTransaction(Transaction transaction, ICollection <Transaction> siblings) { foreach (var instruction in transaction.Instructions) { if (!await VerifyInstruction(instruction, siblings)) { return(-1); } } var expectedId = await _transactionKeyResolver.ResolveKey(transaction); if (!expectedId.SequenceEqual(transaction.TransactionId)) { return(-2); } foreach (var txnRule in _txnRules) { var txnResult = txnRule.Validate(transaction, siblings); if (txnResult != 0) { return(txnResult); } } return(0); }
public async Task <Transaction> Build(ICollection <Instruction> instructions) { var result = new Transaction(instructions); result.TransactionId = await _keyResolver.ResolveKey(result); return(result); }