@@ -4,28 +4,31 @@ import (
44 "context"
55 "math/big"
66 "testing"
7+ "time"
78
89 "github.com/0xsequence/ethkit/ethcoder"
10+ "github.com/0xsequence/ethkit/go-ethereum/common"
911 "github.com/0xsequence/ethkit/go-ethereum/core/types"
1012 "github.com/0xsequence/go-sequence"
1113 "github.com/0xsequence/go-sequence/receipts"
1214 "github.com/0xsequence/go-sequence/testutil"
1315 "github.com/stretchr/testify/assert"
16+ "github.com/stretchr/testify/require"
1417)
1518
1619func TestGetReceiptOfTransaction (t * testing.T ) {
1720 // Ensure dummy sequence wallet from seed 1 is deployed
18- wallet , err := testChain .V1DummySequenceWallet (1 )
19- assert .NoError (t , err )
20- assert .NotNil (t , wallet )
21+ wallet , err := testChain .V3DummySequenceWallet (1 )
22+ require .NoError (t , err )
23+ require .NotNil (t , wallet )
2124
2225 // Create normal txn of: callmockContract.testCall(55, 0x112255)
2326 callmockContract := testChain .UniDeploy (t , "WALLET_CALL_RECV_MOCK" , 0 )
2427 calldata , err := callmockContract .Encode ("testCall" , big .NewInt (55 ), ethcoder .MustHexDecode ("0x112255" ))
25- assert .NoError (t , err )
28+ require .NoError (t , err )
2629
2730 nonce , err := wallet .GetNonce ()
28- assert .NoError (t , err )
31+ require .NoError (t , err )
2932
3033 stx := & sequence.Transaction {
3134 To : callmockContract .Address ,
@@ -37,20 +40,64 @@ func TestGetReceiptOfTransaction(t *testing.T) {
3740 Nonce : nonce ,
3841 }
3942
40- err = testutil .SignAndSendRawTransaction (t , wallet , stx )
41- assert .NoError (t , err )
43+ origReceipt , err := testutil .SignAndSendRawTransaction (t , wallet , stx )
44+ require .NoError (t , err )
45+ require .NotNil (t , origReceipt )
46+ t .Logf ("original receipt txn hash: %v" , origReceipt .TxHash .Hex ())
4247
4348 // Get transactions digest
44- metaTxnID , _ , err := sequence .ComputeMetaTxnID (testChain .ChainID (), wallet .Address (), stx .Bundle (), nonce , 0 )
45- assert .NoError (t , err )
46- assert .NotEmpty (t , metaTxnID )
49+ // Build V3 CallsPayload to compute the exact V3 metaTxnID
50+ // payload := v3.NewCallsPayload(
51+ // wallet.Address(),
52+ // testChain.ChainID(),
53+ // []v3.Call{{
54+ // To: callmockContract.Address,
55+ // Value: big.NewInt(0),
56+ // Data: calldata,
57+ // GasLimit: big.NewInt(190000),
58+ // DelegateCall: false,
59+ // OnlyFallback: false,
60+ // BehaviorOnError: v3.BehaviorOnErrorIgnore,
61+ // }},
62+ // big.NewInt(0), // space
63+ // nonce, // v3 nonce
64+ // )
65+ payload , err := stx .Bundle ().Payload (wallet .Address (), testChain .ChainID (), big .NewInt (0 ), nonce )
66+ require .NoError (t , err )
67+
68+ metaTxnID , _ , err := sequence .ComputeMetaTxnIDFromCallsPayload (& payload )
69+ require .NoError (t , err )
70+ require .NotEmpty (t , metaTxnID )
71+ t .Logf ("metaTxnID: 0x%s" , string (metaTxnID ))
72+
73+ // NOTE: we can delay here by uncommenting, which will make it so we don't find the
74+ // receipt in the cache, and we depend on the QueryOnChain function to find it.
75+ time .Sleep (3 * time .Second )
4776
4877 // Find receipt
4978 // status, receipt, err := sequence.WaitForMetaTxn(context.Background(), testChain.Provider, metaTxnId)
5079 result , receipt , _ , err := receipts .FetchMetaTransactionReceipt (context .Background (), testChain .ReceiptsListener , metaTxnID )
51- assert .NoError (t , err )
52- assert .NotNil (t , receipt )
53- assert .Equal (t , sequence .MetaTxnExecuted , result .Status )
80+ require .NoError (t , err )
81+ require .NotNil (t , receipt )
82+ require .Equal (t , sequence .MetaTxnExecuted , result .Status )
83+ t .Logf ("listener found receipt of txn hash: %v" , receipt .TransactionHash ().Hex ())
84+
85+ // Find receipt again via eth_getLogs method directly
86+ latestBlock := testChain .ReceiptsListener .LatestBlockNum ()
87+ fromBlock := new (big.Int ).Sub (latestBlock , big .NewInt (5000 ))
88+ if fromBlock .Cmp (big .NewInt (0 )) < 0 {
89+ fromBlock = big .NewInt (0 )
90+ }
91+ var toBlock * big.Int = nil
92+
93+ metaTxnHash := common .HexToHash (string (metaTxnID ))
94+ _ , receipt2 , err := receipts .FetchMetaTransactionReceiptByETHGetLogs (context .Background (), metaTxnHash , testChain .ReceiptsListener .RPCProvider (), fromBlock , toBlock )
95+ require .NoError (t , err )
96+ require .NotNil (t , receipt2 )
97+ require .Equal (t , types .ReceiptStatusSuccessful , receipt2 .Status )
98+ require .Equal (t , receipt .Status (), receipt2 .Status )
99+ require .Equal (t , receipt .TransactionHash (), receipt2 .TxHash )
100+ t .Logf ("fetch via eth_getLogs found receipt of txn hash: %v" , receipt2 .TxHash .Hex ())
54101}
55102
56103func TestGetReceiptOfErrorTransaction (t * testing.T ) {
@@ -64,7 +111,7 @@ func TestGetReceiptOfErrorTransaction(t *testing.T) {
64111 calldata , err := callmockContract .Encode ("setRevertFlag" , true )
65112 assert .NoError (t , err )
66113
67- err = testutil .SignAndSend (t , wallet , callmockContract .Address , calldata )
114+ _ , err = testutil .SignAndSend (t , wallet , callmockContract .Address , calldata )
68115 assert .NoError (t , err )
69116
70117 // Call callmock, this should revert and fail the transaction
@@ -84,7 +131,7 @@ func TestGetReceiptOfErrorTransaction(t *testing.T) {
84131 Nonce : nonce ,
85132 }
86133
87- err = testutil .SignAndSendRawTransaction (t , wallet , stx )
134+ _ , err = testutil .SignAndSendRawTransaction (t , wallet , stx )
88135 assert .NoError (t , err )
89136
90137 // Get transactions digest
@@ -117,14 +164,14 @@ func TestGetReceiptOfFailedTransactionBetweenTransactions(t *testing.T) {
117164 for i := 1 ; i <= 3 ; i ++ {
118165 calldata , err := callmockContract .Encode ("testCall" , big .NewInt (int64 (i )), ethcoder .MustHexDecode ("0x112255" ))
119166 assert .NoError (t , err )
120- err = testutil .SignAndSend (t , wallet , callmockContract .Address , calldata )
167+ _ , err = testutil .SignAndSend (t , wallet , callmockContract .Address , calldata )
121168 assert .NoError (t , err )
122169 }
123170
124171 calldata , err := callmockContract .Encode ("setRevertFlag" , true )
125172 assert .NoError (t , err )
126173
127- err = testutil .SignAndSend (t , wallet , callmockContract .Address , calldata )
174+ _ , err = testutil .SignAndSend (t , wallet , callmockContract .Address , calldata )
128175 assert .NoError (t , err )
129176
130177 for i := 1 ; i <= 3 ; i ++ {
@@ -136,7 +183,7 @@ func TestGetReceiptOfFailedTransactionBetweenTransactions(t *testing.T) {
136183 GasLimit : big .NewInt (190000 ),
137184 RevertOnError : false ,
138185 }
139- err = testutil .SignAndSendRawTransaction (t , wallet , stx )
186+ _ , err = testutil .SignAndSendRawTransaction (t , wallet , stx )
140187 assert .NoError (t , err )
141188 }
142189
@@ -156,7 +203,7 @@ func TestGetReceiptOfFailedTransactionBetweenTransactions(t *testing.T) {
156203 Nonce : nonce ,
157204 }
158205
159- err = testutil .SignAndSendRawTransaction (t , wallet , stx )
206+ _ , err = testutil .SignAndSendRawTransaction (t , wallet , stx )
160207 assert .NoError (t , err )
161208
162209 for i := 1 ; i <= 3 ; i ++ {
@@ -168,7 +215,7 @@ func TestGetReceiptOfFailedTransactionBetweenTransactions(t *testing.T) {
168215 GasLimit : big .NewInt (190000 ),
169216 RevertOnError : false ,
170217 }
171- err = testutil .SignAndSendRawTransaction (t , wallet , stx )
218+ _ , err = testutil .SignAndSendRawTransaction (t , wallet , stx )
172219 assert .NoError (t , err )
173220 }
174221
@@ -202,7 +249,7 @@ func TestGetReceiptOfTransactionBetweenTransactions(t *testing.T) {
202249 for i := 1 ; i <= 3 ; i ++ {
203250 calldata , err := callmockContract .Encode ("testCall" , big .NewInt (int64 (i )), ethcoder .MustHexDecode ("0x112255" ))
204251 assert .NoError (t , err )
205- err = testutil .SignAndSend (t , wallet , callmockContract .Address , calldata )
252+ _ , err = testutil .SignAndSend (t , wallet , callmockContract .Address , calldata )
206253 assert .NoError (t , err )
207254 }
208255
@@ -222,13 +269,13 @@ func TestGetReceiptOfTransactionBetweenTransactions(t *testing.T) {
222269 Nonce : nonce ,
223270 }
224271
225- err = testutil .SignAndSendRawTransaction (t , wallet , stx )
272+ _ , err = testutil .SignAndSendRawTransaction (t , wallet , stx )
226273 assert .NoError (t , err )
227274
228275 for i := 1 ; i <= 3 ; i ++ {
229276 calldata , err = callmockContract .Encode ("testCall" , big .NewInt (int64 (i )), ethcoder .MustHexDecode ("0x112255" ))
230277 assert .NoError (t , err )
231- err = testutil .SignAndSend (t , wallet , callmockContract .Address , calldata )
278+ _ , err = testutil .SignAndSend (t , wallet , callmockContract .Address , calldata )
232279 assert .NoError (t , err )
233280 }
234281
0 commit comments