public async Task Persist(Transaction transaction) { await SpendOutputs(transaction.Inputs); await GainOutputs(transaction.Hash, transaction.Outputs); switch (transaction) { case ContractTransaction _: case MinerTransaction _: break; case ClaimTransaction claim: await _claimTransactionPersister.Persist(claim); break; case InvocationTransaction invocation: await _invocationTransactionPersister.Persist(invocation); break; case StateTransaction state: await _stateTransactionPersister.Persist(state); break; case IssueTransaction issue: await _issueTransactionPersister.Persist(issue); break; case PublishTransaction publish: await _publishTransactionPersister.Persist(publish); break; case RegisterTransaction register: await _registerTransactionPersister.Persist(register); break; case EnrollmentTransaction enrollment: await _enrollmentTransactionPersister.Persist(enrollment); break; default: throw new ArgumentException("Unknown Transaction Type"); } await _repository.AddTransaction(transaction); _transactionPool.Remove(transaction.Hash); }