diff --git a/cmd/algoh/blockstats_test.go b/cmd/algoh/blockstats_test.go index a8f1cf1129..a47d8c3c18 100644 --- a/cmd/algoh/blockstats_test.go +++ b/cmd/algoh/blockstats_test.go @@ -77,7 +77,7 @@ func TestEventWithDetails(t *testing.T) { // Create blocks with some senders in the payload. makeStxnWithAddr := func(addr basics.Address) transactions.SignedTxnInBlock { - return transactions.SignedTxnInBlock{SignedTxnWithAD: transactions.SignedTxnWithAD{SignedTxn: transactions.SignedTxn{Txn: transactions.Transaction{Header: transactions.Header{Sender: addr}}}}} + return transactions.SignedTxnInBlock{SignedTxnWithAD: transactions.SignedTxn{Txn: transactions.Transaction{Header: transactions.Header{Sender: addr}}}.WithAD()} } addr := basics.Address{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff} otherAddr := basics.Address{0x7, 0xda, 0xcb, 0x4b, 0x6d, 0x9e, 0xd1, 0x41, 0xb1, 0x75, 0x76, 0xbd, 0x45, 0x9a, 0xe6, 0x42, 0x1d, 0x48, 0x6d, 0xa3, 0xd4, 0xef, 0x22, 0x47, 0xc4, 0x9, 0xa3, 0x96, 0xb8, 0x2e, 0xa2, 0x21} diff --git a/daemon/algod/api/server/v2/test/handlers_test.go b/daemon/algod/api/server/v2/test/handlers_test.go index 1e989332f2..9705092e01 100644 --- a/daemon/algod/api/server/v2/test/handlers_test.go +++ b/daemon/algod/api/server/v2/test/handlers_test.go @@ -1261,17 +1261,12 @@ int 1`, FailedAt: expectedFailedAt, Txns: []v2.PreEncodedSimulateTxnResult{ { - Txn: makePendingTxnResponse(t, transactions.SignedTxnWithAD{ - SignedTxn: stxns[0], - // expect no ApplyData info - }), + // expect no ApplyData info + Txn: makePendingTxnResponse(t, stxns[0].WithAD()), AppBudgetConsumed: txnAppBudgetUsed[0], }, { - Txn: makePendingTxnResponse(t, transactions.SignedTxnWithAD{ - SignedTxn: stxns[1], - ApplyData: scenario.ExpectedSimulationAD, - }), + Txn: makePendingTxnResponse(t, stxns[1].WithAD(scenario.ExpectedSimulationAD)), AppBudgetConsumed: txnAppBudgetUsed[1], }, }, @@ -1997,7 +1992,7 @@ func addStateProof(blk bookkeeping.Block) bookkeeping.Block { }, }, } - txnib := transactions.SignedTxnInBlock{SignedTxnWithAD: transactions.SignedTxnWithAD{SignedTxn: tx}} + txnib := transactions.SignedTxnInBlock{SignedTxnWithAD: tx.WithAD()} blk.Payset = append(blk.Payset, txnib) updatedStateProofTracking := bookkeeping.StateProofTrackingData{ @@ -2316,13 +2311,13 @@ func TestDeltasForTxnGroup(t *testing.T) { blk2 := bookkeeping.BlockHeader{Round: 2} delta1 := ledgercore.StateDelta{Hdr: &blk1} delta2 := ledgercore.StateDelta{Hdr: &blk2, KvMods: map[string]ledgercore.KvValueDelta{"bx1": {Data: []byte("foobar")}}} - txn1 := transactions.SignedTxnWithAD{SignedTxn: transactions.SignedTxn{Txn: transactions.Transaction{Type: protocol.PaymentTx}}} + txn1 := transactions.SignedTxn{Txn: transactions.Transaction{Type: protocol.PaymentTx}}.WithAD() groupID1, err := crypto.DigestFromString(crypto.Hash([]byte("hello")).String()) require.NoError(t, err) - txn2 := transactions.SignedTxnWithAD{SignedTxn: transactions.SignedTxn{Txn: transactions.Transaction{ + txn2 := transactions.SignedTxn{Txn: transactions.Transaction{ Type: protocol.AssetTransferTx, Header: transactions.Header{Group: groupID1}}, - }} + }.WithAD() tracer := eval.MakeTxnGroupDeltaTracer(2) handlers := v2.Handlers{ diff --git a/data/bookkeeping/encoding_test.go b/data/bookkeeping/encoding_test.go index 3de80f0ea6..3aa6c8afaf 100644 --- a/data/bookkeeping/encoding_test.go +++ b/data/bookkeeping/encoding_test.go @@ -54,9 +54,7 @@ func TestBlockWithTxnEncoding(t *testing.T) { var b Block b.Payset = []transactions.SignedTxnInBlock{ { - SignedTxnWithAD: transactions.SignedTxnWithAD{ - SignedTxn: sigtxn, - }, + SignedTxnWithAD: sigtxn.WithAD(), }, } enc := protocol.Encode(&b) diff --git a/data/ledger_test.go b/data/ledger_test.go index 00d633e232..93a18dec65 100644 --- a/data/ledger_test.go +++ b/data/ledger_test.go @@ -190,9 +190,7 @@ func TestLedgerCirculation(t *testing.T) { tx.Type = protocol.PaymentTx signedTx := tx.Sign(srcAccountKey) blk.Payset = transactions.Payset{transactions.SignedTxnInBlock{ - SignedTxnWithAD: transactions.SignedTxnWithAD{ - SignedTxn: signedTx, - }, + SignedTxnWithAD: signedTx.WithAD(), }} require.NoError(t, l.AddBlock(blk, agreement.Certificate{})) l.WaitForCommit(rnd) diff --git a/data/pools/transactionPool.go b/data/pools/transactionPool.go index 83799b821d..073b95ee30 100644 --- a/data/pools/transactionPool.go +++ b/data/pools/transactionPool.go @@ -109,8 +109,7 @@ type BlockEvaluator interface { TestTransactionGroup(txgroup []transactions.SignedTxn) error Round() basics.Round PaySetSize() int - TransactionGroup(txads []transactions.SignedTxnWithAD) error - Transaction(txn transactions.SignedTxn, ad transactions.ApplyData) error + TransactionGroup(txads ...transactions.SignedTxnWithAD) error GenerateBlock(addrs []basics.Address) (*ledgercore.UnfinishedBlock, error) ResetTxnBytes() } @@ -616,7 +615,7 @@ func (pool *TransactionPool) addToPendingBlockEvaluatorOnce(txgroup []transactio transactionGroupStartsTime = time.Now() } - err := pool.pendingBlockEvaluator.TransactionGroup(txgroupad) + err := pool.pendingBlockEvaluator.TransactionGroup(txgroupad...) if recomputing { if !pool.assemblyResults.assemblyCompletedOrAbandoned { diff --git a/data/pools/transactionPool_test.go b/data/pools/transactionPool_test.go index 405502b825..16534f9ca1 100644 --- a/data/pools/transactionPool_test.go +++ b/data/pools/transactionPool_test.go @@ -565,7 +565,7 @@ func TestRememberForget(t *testing.T) { tx.Note[1] = byte(j) signedTx := tx.Sign(secrets[i]) transactionPool.RememberOne(signedTx) - err := eval.Transaction(signedTx, transactions.ApplyData{}) + err := eval.TransactionGroup(signedTx.WithAD()) require.NoError(t, err) } } @@ -733,7 +733,7 @@ func TestFixOverflowOnNewBlock(t *testing.T) { signedTx := tx.Sign(secrets[0]) blockEval := newBlockEvaluator(t, mockLedger) - err := blockEval.Transaction(signedTx, transactions.ApplyData{}) + err := blockEval.TransactionGroup(signedTx.WithAD()) require.NoError(t, err) // simulate this transaction was applied @@ -1272,7 +1272,7 @@ func BenchmarkTransactionPoolSteadyState(b *testing.B) { eval := newBlockEvaluator(b, l) for len(ledgerTxnQueue) > 0 { stx := ledgerTxnQueue[0] - err := eval.Transaction(stx, transactions.ApplyData{}) + err := eval.TransactionGroup(stx.WithAD()) if err == ledgercore.ErrNoSpace { break } @@ -1522,7 +1522,7 @@ func TestStateProofLogging(t *testing.T) { eval, err := mockLedger.StartEvaluator(b.BlockHeader, 0, 1000000, nil) require.NoError(t, err) - err = eval.Transaction(stxn, transactions.ApplyData{}) + err = eval.TransactionGroup(stxn.WithAD()) require.NoError(t, err) err = transactionPool.RememberOne(stxn) diff --git a/data/transactions/logic/blackbox_test.go b/data/transactions/logic/blackbox_test.go index 7a32ef3833..bf2b7e60fe 100644 --- a/data/transactions/logic/blackbox_test.go +++ b/data/transactions/logic/blackbox_test.go @@ -43,13 +43,13 @@ func TestNewAppEvalParams(t *testing.T) { Sender: basics.Address{1, 2, 3, 4}, Receiver: basics.Address{4, 3, 2, 1}, Amount: 100, - }.SignedTxnWithAD() + }.SignedTxn().WithAD() appcall1 := txntest.Txn{ Type: protocol.ApplicationCallTx, Sender: basics.Address{1, 2, 3, 4}, ApplicationID: basics.AppIndex(1), - }.SignedTxnWithAD() + }.SignedTxn().WithAD() appcall2 := appcall1 appcall2.Txn.ApplicationID = basics.AppIndex(2) diff --git a/data/transactions/logic/eval.go b/data/transactions/logic/eval.go index 79cc1b1291..995804442a 100644 --- a/data/transactions/logic/eval.go +++ b/data/transactions/logic/eval.go @@ -2986,12 +2986,12 @@ func TxnFieldToTealValue(txn *transactions.Transaction, groupIndex int, field Tx return basics.TealValue{}, fmt.Errorf("negative groupIndex %d", groupIndex) } var cx EvalContext - stxnad := &transactions.SignedTxnWithAD{SignedTxn: transactions.SignedTxn{Txn: *txn}} + stxnad := transactions.SignedTxn{Txn: *txn}.WithAD() fs, ok := txnFieldSpecByField(field) if !ok { return basics.TealValue{}, fmt.Errorf("invalid field %s", field) } - sv, err := cx.txnFieldToStack(stxnad, &fs, arrayFieldIdx, groupIndex, inner) + sv, err := cx.txnFieldToStack(&stxnad, &fs, arrayFieldIdx, groupIndex, inner) return sv.ToTealValue(), err } diff --git a/data/transactions/payset_test.go b/data/transactions/payset_test.go index 7a86439a7f..d2ec894cf6 100644 --- a/data/transactions/payset_test.go +++ b/data/transactions/payset_test.go @@ -27,9 +27,7 @@ func generatePayset(txnCount, acctCount int) Payset { stxnb := make([]SignedTxnInBlock, txnCount) for i, stxn := range generateSignedTxns(txnCount, acctCount) { stxnb[i] = SignedTxnInBlock{ - SignedTxnWithAD: SignedTxnWithAD{ - SignedTxn: stxn, - }, + SignedTxnWithAD: stxn.WithAD(), } } return Payset(stxnb) diff --git a/data/transactions/signedtxn.go b/data/transactions/signedtxn.go index f43cc18acd..fc23d03691 100644 --- a/data/transactions/signedtxn.go +++ b/data/transactions/signedtxn.go @@ -62,6 +62,18 @@ func (s SignedTxn) ID() Txid { return s.Txn.ID() } +// WithAD returns a SignedTxnWithAD with an (optional) ApplyData. +func (s SignedTxn) WithAD(ad ...ApplyData) SignedTxnWithAD { + switch len(ad) { + case 0: + return SignedTxnWithAD{SignedTxn: s} + case 1: + return SignedTxnWithAD{SignedTxn: s, ApplyData: ad[0]} + default: + panic("WithAD called incorrectly") + } +} + // ID on SignedTxnInBlock should never be called, because the ID depends // on the block from which this transaction will be decoded. By having // a different return value from SignedTxn.ID(), we will catch errors at diff --git a/data/txntest/txn.go b/data/txntest/txn.go index 4a476a4061..63bcd1a3ba 100644 --- a/data/txntest/txn.go +++ b/data/txntest/txn.go @@ -320,13 +320,6 @@ func (tx Txn) SignedTxn() transactions.SignedTxn { return transactions.SignedTxn{Txn: tx.Txn()} } -// SignedTxnWithAD produces unsigned, transactions.SignedTxnWithAD -// from the fields in this Txn. This seemingly pointless operation -// exists, again, for convenience when driving tests. -func (tx Txn) SignedTxnWithAD() transactions.SignedTxnWithAD { - return transactions.SignedTxnWithAD{SignedTxn: tx.SignedTxn()} -} - // Group turns a list of Txns into a slice of SignedTxns with // GroupIDs set properly to make them a transaction group. The input // Txns are modified with the calculated GroupID. diff --git a/ledger/archival_test.go b/ledger/archival_test.go index 6c83d74ce2..65b2b37fa3 100644 --- a/ledger/archival_test.go +++ b/ledger/archival_test.go @@ -655,11 +655,9 @@ func TestArchivalCreatables(t *testing.T) { func makeSignedTxnInBlock(tx transactions.Transaction) transactions.SignedTxnInBlock { return transactions.SignedTxnInBlock{ - SignedTxnWithAD: transactions.SignedTxnWithAD{ - SignedTxn: transactions.SignedTxn{ + SignedTxnWithAD: transactions.SignedTxn{ Txn: tx, - }, - }, + }.WithAD(), HasGenesisID: true, } } diff --git a/ledger/eval/eval.go b/ledger/eval/eval.go index d5432fd480..9e567ae65f 100644 --- a/ledger/eval/eval.go +++ b/ledger/eval/eval.go @@ -932,7 +932,7 @@ func (eval *BlockEvaluator) TestTransactionGroup(txgroup []transactions.SignedTx var group transactions.TxGroup for gi, txn := range txgroup { - err := eval.TestTransaction(txn) + err := eval.testTransaction(txn) if err != nil { return err } @@ -973,10 +973,10 @@ func (eval *BlockEvaluator) TestTransactionGroup(txgroup []transactions.SignedTx return nil } -// TestTransaction performs basic duplicate detection and well-formedness checks +// testTransaction performs basic duplicate detection and well-formedness checks // on a single transaction, but does not actually add the transaction to the block // evaluator, or modify the block evaluator state in any other visible way. -func (eval *BlockEvaluator) TestTransaction(txn transactions.SignedTxn) error { +func (eval *BlockEvaluator) testTransaction(txn transactions.SignedTxn) error { // Transaction valid (not expired)? err := eval.block.Alive(txn.Txn.Header) if err != nil { @@ -999,22 +999,10 @@ func (eval *BlockEvaluator) TestTransaction(txn transactions.SignedTxn) error { return nil } -// Transaction tentatively adds a new transaction as part of this block evaluation. -// If the transaction cannot be added to the block without violating some constraints, -// an error is returned and the block evaluator state is unchanged. -func (eval *BlockEvaluator) Transaction(txn transactions.SignedTxn, ad transactions.ApplyData) error { - return eval.TransactionGroup([]transactions.SignedTxnWithAD{ - { - SignedTxn: txn, - ApplyData: ad, - }, - }) -} - // TransactionGroup tentatively adds a new transaction group as part of this block evaluation. // If the transaction group cannot be added to the block without violating some constraints, // an error is returned and the block evaluator state is unchanged. -func (eval *BlockEvaluator) TransactionGroup(txgroup []transactions.SignedTxnWithAD) (err error) { +func (eval *BlockEvaluator) TransactionGroup(txgroup ...transactions.SignedTxnWithAD) (err error) { // Nothing to do if there are no transactions. if len(txgroup) == 0 { return nil @@ -2168,7 +2156,7 @@ transactionGroupLoop: } } } - err = eval.TransactionGroup(txgroup.TxnGroup) + err = eval.TransactionGroup(txgroup.TxnGroup...) if err != nil { return ledgercore.StateDelta{}, err } diff --git a/ledger/eval/eval_test.go b/ledger/eval/eval_test.go index 86af7863f4..b671662a69 100644 --- a/ledger/eval/eval_test.go +++ b/ledger/eval/eval_test.go @@ -165,7 +165,7 @@ ok: if err != nil { return eval, addrs[0], err } - err = eval.TransactionGroup(g) + err = eval.TransactionGroup(g...) return eval, addrs[0], err } @@ -221,12 +221,12 @@ func TestPrivateTransactionGroup(t *testing.T) { var txgroup []transactions.SignedTxnWithAD eval := BlockEvaluator{} - err := eval.TransactionGroup(txgroup) + err := eval.TransactionGroup(txgroup...) require.NoError(t, err) // nothing to do, no problem eval.proto = config.Consensus[protocol.ConsensusCurrentVersion] txgroup = make([]transactions.SignedTxnWithAD, eval.proto.MaxTxGroupSize+1) - err = eval.TransactionGroup(txgroup) + err = eval.TransactionGroup(txgroup...) require.ErrorContains(t, err, "group size") } @@ -399,7 +399,7 @@ int 1`, require.Len(t, eval.block.Payset, 0) - err = eval.TransactionGroup(txgroup) + err = eval.TransactionGroup(txgroup...) switch testCase.firstTxnBehavior { case "approve": if len(scenario.ExpectedError) != 0 { @@ -666,7 +666,7 @@ func testnetFixupExecution(t *testing.T, headerRound basics.Round, poolBonus uin }, } st := txn.Sign(keys[0]) - err = eval.Transaction(st, transactions.ApplyData{}) + err = eval.TransactionGroup(st.WithAD()) require.NoError(t, err) poolOld, err := eval.workaroundOverspentRewards(rewardPoolBalance, headerRound) @@ -1420,12 +1420,11 @@ func TestAbsenteeChecks(t *testing.T) { return pay(i, addrs[i]).Sign(keys[i]) } - require.NoError(t, blkEval.Transaction(selfpay(0), transactions.ApplyData{})) - require.NoError(t, blkEval.Transaction(selfpay(1), transactions.ApplyData{})) - require.NoError(t, blkEval.Transaction(selfpay(2), transactions.ApplyData{})) + require.NoError(t, blkEval.TransactionGroup(selfpay(0).WithAD())) + require.NoError(t, blkEval.TransactionGroup(selfpay(1).WithAD())) + require.NoError(t, blkEval.TransactionGroup(selfpay(2).WithAD())) for i := 0; i < 32; i++ { - require.NoError(t, blkEval.Transaction(pay(0, basics.Address{byte(i << 3), 0xaa}).Sign(keys[0]), - transactions.ApplyData{})) + require.NoError(t, blkEval.TransactionGroup(pay(0, basics.Address{byte(i << 3), 0xaa}).Sign(keys[0]).WithAD())) } // Make sure we validate our block as well diff --git a/ledger/eval/evalindexer.go b/ledger/eval/evalindexer.go index 1d2b217922..0b293efb26 100644 --- a/ledger/eval/evalindexer.go +++ b/ledger/eval/evalindexer.go @@ -33,7 +33,7 @@ func (eval *BlockEvaluator) ProcessBlockForIndexer(block *bookkeeping.Block) (le } for _, group := range paysetgroups { - err = eval.TransactionGroup(group) + err = eval.TransactionGroup(group...) if err != nil { return ledgercore.StateDelta{}, []transactions.SignedTxnInBlock{}, fmt.Errorf("ProcessBlockForIndexer() err: %w", err) diff --git a/ledger/eval/prefetcher/prefetcher_alignment_test.go b/ledger/eval/prefetcher/prefetcher_alignment_test.go index 8344ddb269..7ef3b0480c 100644 --- a/ledger/eval/prefetcher/prefetcher_alignment_test.go +++ b/ledger/eval/prefetcher/prefetcher_alignment_test.go @@ -331,7 +331,7 @@ func runEval(t *testing.T, l *prefetcherAlignmentTestLedger, txn transactions.Tr eval, err := eval.StartEvaluator(l, block.BlockHeader, eval.EvaluatorOptions{}) require.NoError(t, err) - err = eval.TransactionGroup(makeGroupFromTxn(txn)) + err = eval.TransactionGroup(makeGroupFromTxn(txn)...) require.NoError(t, err) } diff --git a/ledger/eval/txntracer_test.go b/ledger/eval/txntracer_test.go index ca00414dba..37bdf8e123 100644 --- a/ledger/eval/txntracer_test.go +++ b/ledger/eval/txntracer_test.go @@ -212,7 +212,7 @@ int 1` require.Len(t, eval.block.Payset, 0) - err = eval.TransactionGroup(txgroup) + err = eval.TransactionGroup(txgroup...) require.NoError(t, err) require.Len(t, eval.block.Payset, 4) @@ -226,10 +226,7 @@ int 1` Fee: minFee, GenesisHash: genHash, } - secondTxGroup := transactions.WrapSignedTxnsWithAD([]transactions.SignedTxn{ - secondPayTxn.Txn().Sign(keys[2]), - }) - err = eval.TransactionGroup(secondTxGroup) + err = eval.TransactionGroup(secondPayTxn.Txn().Sign(keys[2]).WithAD()) require.NoError(t, err) // Calculate expected balances dynamically based on proto.MinTxnFee diff --git a/ledger/eval_simple_test.go b/ledger/eval_simple_test.go index dda547a7b0..a485e025e0 100644 --- a/ledger/eval_simple_test.go +++ b/ledger/eval_simple_test.go @@ -79,7 +79,7 @@ func TestBlockEvaluator(t *testing.T) { // Correct signature should work st := txn.Sign(keys[0]) - err = eval.Transaction(st, transactions.ApplyData{}) + err = eval.TransactionGroup(st.WithAD()) require.NoError(t, err) // Broken signature should fail @@ -93,7 +93,7 @@ func TestBlockEvaluator(t *testing.T) { txgroup = []transactions.SignedTxn{st} err = eval.TestTransactionGroup(txgroup) require.Error(t, err) - err = eval.Transaction(st, transactions.ApplyData{}) + err = eval.TransactionGroup(st.WithAD()) require.Error(t, err) // out of range should fail @@ -104,7 +104,7 @@ func TestBlockEvaluator(t *testing.T) { txgroup = []transactions.SignedTxn{st} err = eval.TestTransactionGroup(txgroup) require.Error(t, err) - err = eval.Transaction(st, transactions.ApplyData{}) + err = eval.TransactionGroup(st.WithAD()) require.Error(t, err) // bogus group should fail @@ -114,7 +114,7 @@ func TestBlockEvaluator(t *testing.T) { txgroup = []transactions.SignedTxn{st} err = eval.TestTransactionGroup(txgroup) require.Error(t, err) - err = eval.Transaction(st, transactions.ApplyData{}) + err = eval.TransactionGroup(st.WithAD()) require.Error(t, err) // mixed fields should fail @@ -149,7 +149,7 @@ func TestBlockEvaluator(t *testing.T) { err = eval.TestTransactionGroup(txgroup) require.NoError(t, err) - err = eval.Transaction(stxn, transactions.ApplyData{}) + err = eval.TransactionGroup(stxn.WithAD()) require.NoError(t, err) t3 := txn @@ -164,7 +164,7 @@ func TestBlockEvaluator(t *testing.T) { err = eval.TestTransactionGroup(txgroup) require.Error(t, err) txgroupad := transactions.WrapSignedTxnsWithAD(txgroup) - err = eval.TransactionGroup(txgroupad) + err = eval.TransactionGroup(txgroupad...) require.Error(t, err) // Test a group that should work @@ -186,7 +186,7 @@ func TestBlockEvaluator(t *testing.T) { err = eval.TestTransactionGroup(txgroup) require.Error(t, err) txgroupad = transactions.WrapSignedTxnsWithAD(txgroup) - err = eval.TransactionGroup(txgroupad) + err = eval.TransactionGroup(txgroupad...) require.Error(t, err) // missing part of the group should fail @@ -1290,7 +1290,7 @@ func TestRekeying(t *testing.T) { require.NoError(t, err) for _, stxn := range stxns { - err = eval.Transaction(stxn, transactions.ApplyData{}) + err = eval.TransactionGroup(stxn.WithAD()) if err != nil { return err } diff --git a/ledger/evalbench_test.go b/ledger/evalbench_test.go index a9cc6d4fad..64f136d5fa 100644 --- a/ledger/evalbench_test.go +++ b/ledger/evalbench_test.go @@ -520,7 +520,7 @@ func benchmarkPreparePaymentTransactionsTesting(b *testing.B, numTxns int, txnSo // there might be more transactions than MaxTxnBytesPerBlock allows so // make smaller blocks to fit for i, stxn := range initSignedTxns { - err := bev.Transaction(stxn, transactions.ApplyData{}) + err := bev.TransactionGroup(stxn.WithAD()) require.NoError(b, err) if maxTxnPerBlock > 0 && i%maxTxnPerBlock == 0 || i == len(initSignedTxns)-1 { unfinishedBlock, err = bev.GenerateBlock(nil) @@ -564,7 +564,7 @@ func benchmarkPreparePaymentTransactionsTesting(b *testing.B, numTxns int, txnSo for i := 0; i < numTxns; i++ { stxn := txnSource.Txn(b, addrs, keys, newBlock.Round(), genHash) - err = bev.Transaction(stxn, transactions.ApplyData{}) + err = bev.TransactionGroup(stxn.WithAD()) require.NoError(b, err) } diff --git a/ledger/fullblock_perf_test.go b/ledger/fullblock_perf_test.go index b2c86c20f8..665480e3cd 100644 --- a/ledger/fullblock_perf_test.go +++ b/ledger/fullblock_perf_test.go @@ -302,7 +302,7 @@ func addNewAccount(bc *benchConfig) (acct basics.Address) { } func addTransaction(bc *benchConfig, stxn transactions.SignedTxn) uint64 { - err := bc.eval.Transaction(stxn, transactions.ApplyData{}) + err := bc.eval.TransactionGroup(stxn.WithAD()) if err == ledgercore.ErrNoSpace { addBlock(bc) addTransaction(bc, stxn) diff --git a/ledger/ledger_perf_test.go b/ledger/ledger_perf_test.go index 80ecbf227f..a385e58990 100644 --- a/ledger/ledger_perf_test.go +++ b/ledger/ledger_perf_test.go @@ -256,7 +256,7 @@ func benchmarkFullBlocks(params testParams, b *testing.B) { var stxn transactions.SignedTxn stxn.Txn = tx stxn.Sig = crypto.Signature{1} - err = eval.Transaction(stxn, transactions.ApplyData{}) + err = eval.TransactionGroup(stxn.WithAD()) } @@ -287,7 +287,7 @@ func benchmarkFullBlocks(params testParams, b *testing.B) { var stxn transactions.SignedTxn stxn.Txn = tx stxn.Sig = crypto.Signature{1} - err = eval.Transaction(stxn, transactions.ApplyData{}) + err = eval.TransactionGroup(stxn.WithAD()) require.NoError(b, err) } break diff --git a/ledger/simple_test.go b/ledger/simple_test.go index d8c24c1c14..900bb5d764 100644 --- a/ledger/simple_test.go +++ b/ledger/simple_test.go @@ -137,7 +137,7 @@ func txns(t testing.TB, ledger *Ledger, eval *eval.BlockEvaluator, txns ...*txnt func txn(t testing.TB, ledger *Ledger, eval *eval.BlockEvaluator, txn *txntest.Txn, problem ...string) { t.Helper() fillDefaults(t, ledger, eval, txn) - err := eval.Transaction(txn.SignedTxn(), transactions.ApplyData{}) + err := eval.TransactionGroup(txn.SignedTxn().WithAD()) if err != nil { if len(problem) == 1 && problem[0] != "" { require.Contains(t, err.Error(), problem[0]) @@ -156,7 +156,7 @@ func txgroup(t testing.TB, ledger *Ledger, eval *eval.BlockEvaluator, txns ...*t } txgroup := txntest.Group(txns...) - return eval.TransactionGroup(transactions.WrapSignedTxnsWithAD(txgroup)) + return eval.TransactionGroup(transactions.WrapSignedTxnsWithAD(txgroup)...) } // endBlock completes the block being created, returning the ValidatedBlock for diff --git a/ledger/simulation/simulator.go b/ledger/simulation/simulator.go index 47e4f4b819..ede74d2de8 100644 --- a/ledger/simulation/simulator.go +++ b/ledger/simulation/simulator.go @@ -191,7 +191,7 @@ func (s Simulator) evaluate(hdr bookkeeping.BlockHeader, group []transactions.Si return nil, err } - err = eval.TransactionGroup(group) + err = eval.TransactionGroup(group...) if err != nil { return nil, EvalFailureError{SimulatorError{err}} } diff --git a/ledger/simulation/testing/utils.go b/ledger/simulation/testing/utils.go index 27f45a4e13..374c37c541 100644 --- a/ledger/simulation/testing/utils.go +++ b/ledger/simulation/testing/utils.go @@ -118,7 +118,7 @@ func (env *Environment) Txn(txn transactions.SignedTxn) transactions.ApplyData { env.t.Helper() evaluator := env.nextBlock() - err := evaluator.Transaction(txn, transactions.ApplyData{}) + err := evaluator.TransactionGroup(txn.WithAD()) require.NoError(env.t, err) newBlock := env.endBlock(evaluator).Block() diff --git a/ledger/simulation/trace.go b/ledger/simulation/trace.go index 7808be54d9..17a275b378 100644 --- a/ledger/simulation/trace.go +++ b/ledger/simulation/trace.go @@ -77,9 +77,7 @@ type TxnGroupResult struct { func makeTxnGroupResult(txgroup []transactions.SignedTxn) TxnGroupResult { groupResult := TxnGroupResult{Txns: make([]TxnResult, len(txgroup))} for i, tx := range txgroup { - groupResult.Txns[i] = TxnResult{Txn: transactions.SignedTxnWithAD{ - SignedTxn: tx, - }} + groupResult.Txns[i] = TxnResult{Txn: tx.WithAD()} } return groupResult } diff --git a/ledger/txnbench_test.go b/ledger/txnbench_test.go index 7cee882d9c..d5685c97a9 100644 --- a/ledger/txnbench_test.go +++ b/ledger/txnbench_test.go @@ -24,7 +24,6 @@ import ( "github.com/algorand/go-algorand/config" "github.com/algorand/go-algorand/data/basics" - "github.com/algorand/go-algorand/data/transactions" "github.com/algorand/go-algorand/data/txntest" "github.com/algorand/go-algorand/ledger/ledgercore" ledgertesting "github.com/algorand/go-algorand/ledger/testing" @@ -237,7 +236,7 @@ func BenchmarkTxnTypes(b *testing.B) { signed := t.SignedTxn() for n := 0; n < b.N; n++ { signed.Txn.Note = []byte(strconv.Itoa(n)) - err := eval.Transaction(signed, transactions.ApplyData{}) + err := eval.TransactionGroup(signed.WithAD()) if errors.Is(err, ledgercore.ErrNoSpace) { endBlock(b, l, eval) eval = nextBlock(b, l) diff --git a/tools/block-generator/generator/generate.go b/tools/block-generator/generator/generate.go index 5efe9d016d..b52eea2d90 100644 --- a/tools/block-generator/generator/generate.go +++ b/tools/block-generator/generator/generate.go @@ -552,7 +552,7 @@ func (g *generator) generateTxGroup(round basics.Round, intra uint64) ([]txn.Sig txnGroupAD := make([]txn.SignedTxnWithAD, len(signedTxns)) for i := range signedTxns { - txnGroupAD[i] = txn.SignedTxnWithAD{SignedTxn: signedTxns[i]} + txnGroupAD[i] = signedTxns[i].WithAD() // for debugging: g.latestPaysetWithExpectedID = append( diff --git a/tools/block-generator/generator/generator_ledger.go b/tools/block-generator/generator/generator_ledger.go index 71f95aa9d7..4b0eacd10d 100644 --- a/tools/block-generator/generator/generator_ledger.go +++ b/tools/block-generator/generator/generator_ledger.go @@ -179,7 +179,7 @@ func (g *generator) evaluateBlock(hdr bookkeeping.BlockHeader, txGroups [][]txn. } for i, txGroup := range txGroups { for { - txErr := eval.TransactionGroup(txGroup) + txErr := eval.TransactionGroup(txGroup...) if txErr != nil { if strings.Contains(txErr.Error(), "database table is locked") { time.Sleep(waitDelay)