@@ -5,6 +5,7 @@ package jsonrpctest
5
5
6
6
import (
7
7
"context"
8
+ "encoding/hex"
8
9
"encoding/json"
9
10
"math/big"
10
11
"slices"
@@ -791,6 +792,74 @@ func TestRPCTraceBlock(t *testing.T) {
791
792
require .NotEmpty (t , p )
792
793
}
793
794
})
795
+ t .Run ("trace_block" , func (t * testing.T ) {
796
+ var res json.RawMessage
797
+ err = env .RawClient .CallContext (
798
+ context .Background (),
799
+ & res ,
800
+ "trace_block" ,
801
+ rpc .BlockNumber (env .BlockNumber ()),
802
+ )
803
+ require .NoError (t , err )
804
+
805
+ var result jsonrpc.TraceBlock
806
+ err = json .Unmarshal (res , & result )
807
+ require .NoError (t , err )
808
+ require .Len (t , result .Result , 4 )
809
+
810
+ traceTx1Index := slices .IndexFunc (result .Result , func (v * jsonrpc.Trace ) bool {
811
+ return * v .TransactionHash == tx1 .Hash ()
812
+ })
813
+ traceTx2Index := slices .IndexFunc (result .Result , func (v * jsonrpc.Trace ) bool {
814
+ return * v .TransactionHash == tx2 .Hash ()
815
+ })
816
+
817
+ call11 := result .Result [traceTx1Index ]
818
+ call12 := result .Result [traceTx1Index + 1 ]
819
+ call21 := result .Result [traceTx2Index ]
820
+ call22 := result .Result [traceTx2Index + 1 ]
821
+
822
+ call11Action := call11 .Action .(map [string ]interface {})
823
+ call12Action := call12 .Action .(map [string ]interface {})
824
+ call21Action := call21 .Action .(map [string ]interface {})
825
+ call22Action := call22 .Action .(map [string ]interface {})
826
+
827
+ require .Equal (t , strings .ToLower (creatorAddress .String ()), strings .ToLower (call11Action ["from" ].(string )))
828
+ require .Equal (t , strings .ToLower (contractAddress .String ()), strings .ToLower (call11Action ["to" ].(string )))
829
+ require .Equal (t , "0x7b" , call11Action ["value" ].(string ))
830
+ expectedInput , err := contractABI .Pack ("sendTo" , common.Address {0x1 }, big .NewInt (2 ))
831
+ require .NoError (t , err )
832
+ require .Equal (t , hex .EncodeToString (expectedInput ), call11Action ["input" ].(string )[2 :])
833
+ require .Empty (t , call11 .Error )
834
+ require .Equal (t , 1 , call11 .Subtraces )
835
+ require .Equal (t , []int {}, call11 .TraceAddress )
836
+
837
+ require .Equal (t , strings .ToLower (contractAddress .String ()), strings .ToLower (call12Action ["from" ].(string )))
838
+ require .Equal (t , common.Address {0x1 }.String (), strings .ToLower (call12Action ["to" ].(string )))
839
+ require .Equal (t , "0x2" , call12Action ["value" ].(string ))
840
+ require .Equal (t , "0x" , call12Action ["input" ])
841
+ require .Empty (t , call12 .Error )
842
+ require .Equal (t , 0 , call12 .Subtraces )
843
+ require .Equal (t , []int {0 }, call12 .TraceAddress )
844
+
845
+ require .Equal (t , strings .ToLower (creatorAddress2 .String ()), strings .ToLower (call21Action ["from" ].(string )))
846
+ require .Equal (t , strings .ToLower (contractAddress .String ()), strings .ToLower (call21Action ["to" ].(string )))
847
+ require .Equal (t , "0x141" , call21Action ["value" ].(string ))
848
+ expectedInput , err = contractABI .Pack ("sendTo" , common.Address {0x2 }, big .NewInt (3 ))
849
+ require .NoError (t , err )
850
+ require .Equal (t , hex .EncodeToString (expectedInput ), call21Action ["input" ].(string )[2 :])
851
+ require .Empty (t , call21 .Error )
852
+ require .Equal (t , 1 , call21 .Subtraces )
853
+ require .Equal (t , []int {}, call21 .TraceAddress )
854
+
855
+ require .Equal (t , strings .ToLower (contractAddress .String ()), strings .ToLower (call22Action ["from" ].(string )))
856
+ require .Equal (t , common.Address {0x2 }.String (), strings .ToLower (call22Action ["to" ].(string )))
857
+ require .Equal (t , "0x3" , call22Action ["value" ].(string ))
858
+ require .Equal (t , "0x" , call22Action ["input" ])
859
+ require .Empty (t , call22 .Error )
860
+ require .Equal (t , 0 , call22 .Subtraces )
861
+ require .Equal (t , []int {0 }, call22 .TraceAddress )
862
+ })
794
863
}
795
864
796
865
func TestRPCTraceBlockSingleCall (t * testing.T ) {
0 commit comments