github.com/trezor/blockbook@v0.4.1-0.20240328132726-e9a08582ee2c/bchain/coins/eth/dataparser_test.go (about)

     1  //go:build unittest
     2  
     3  package eth
     4  
     5  import (
     6  	"reflect"
     7  	"testing"
     8  
     9  	"github.com/trezor/blockbook/bchain"
    10  )
    11  
    12  func Test_parseSimpleStringProperty(t *testing.T) {
    13  	tests := []struct {
    14  		name string
    15  		args string
    16  		want string
    17  	}{
    18  		{
    19  			name: "1",
    20  			args: "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000758504c4f44444500000000000000000000000000000000000000000000000000",
    21  			want: "XPLODDE",
    22  		},
    23  		{
    24  			name: "2",
    25  			args: "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000022426974436c617665202d20436f6e73756d657220416374697669747920546f6b656e00000000000000",
    26  			want: "BitClave - Consumer Activity Token",
    27  		},
    28  		{
    29  			name: "short",
    30  			args: "0x44616920537461626c65636f696e2076312e3000000000000000000000000000",
    31  			want: "Dai Stablecoin v1.0",
    32  		},
    33  		{
    34  			name: "short2",
    35  			args: "0x44616920537461626c65636f696e2076312e3020444444444444444444444444",
    36  			want: "Dai Stablecoin v1.0 DDDDDDDDDDDD",
    37  		},
    38  		{
    39  			name: "long",
    40  			args: "0x556e6973776170205631000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
    41  			want: "Uniswap V1",
    42  		},
    43  		{
    44  			name: "garbage",
    45  			args: "0x2234880850896048596206002535425366538144616734015984380565810000",
    46  			want: "",
    47  		},
    48  		{
    49  			name: "garbage",
    50  			args: "6080604052600436106100225760003560e01c80630cbcae701461003957610031565b366100315761002f610077565b005b61002f610077565b34801561004557600080fd5b5061004e61014e565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b7f000000000000000000000000000000000000000000000000000000000000000061011c565b60043560601b60601c6bca11c0de15dead10cced00006000195460a01c036100e9577f696d706c6f63000000000000000000000000000000000000000000000000000060005260206000fd5b8060001955005b60405136810160405236600082376000803683600019545af43d6000833e80610117573d82fd5b503d81f35b80330361014357602436036101435763ca11c0de60003560e01c036101435761014361009d565b61014b6100f0565b50565b600073ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff541660005260206000f3fea2646970667358221220f27ad3f3b75609baa5d26d65ec1001c4a59f38e89088d6b47517c1cd1faf22ab64736f6c634300080d0033",
    51  			want: "",
    52  		},
    53  	}
    54  	for _, tt := range tests {
    55  		t.Run(tt.name, func(t *testing.T) {
    56  			got := parseSimpleStringProperty(tt.args)
    57  			// the addresses could have different case
    58  			if got != tt.want {
    59  				t.Errorf("parseSimpleStringProperty = %v, want %v", got, tt.want)
    60  			}
    61  		})
    62  	}
    63  }
    64  
    65  func TestGetSignatureFromData(t *testing.T) {
    66  	tests := []struct {
    67  		name string
    68  		data string
    69  		want uint32
    70  	}{
    71  		{
    72  			name: "0x9e53a69a",
    73  			data: "0x9e53a69a000000000000000000000000000000000000000000000",
    74  			want: 2656282266,
    75  		},
    76  		{
    77  			name: "9e53a69b",
    78  			data: "9e53a69b000000000000000000000000000000000000000000000",
    79  			want: 2656282267,
    80  		},
    81  		{
    82  			name: "0x9e53 short",
    83  			data: "0x9e53",
    84  			want: 0,
    85  		},
    86  	}
    87  	for _, tt := range tests {
    88  		t.Run(tt.name, func(t *testing.T) {
    89  			if got := GetSignatureFromData(tt.data); got != tt.want {
    90  				t.Errorf("GetSignatureFromData() = %v, want %v", got, tt.want)
    91  			}
    92  		})
    93  	}
    94  }
    95  
    96  func TestParseInputData(t *testing.T) {
    97  	signatures := []bchain.FourByteSignature{
    98  		{
    99  			Name:       "mintFighter",
   100  			Parameters: []string{},
   101  		},
   102  		{
   103  			Name:       "cancelMultipleMakerOrders",
   104  			Parameters: []string{"uint256[]"},
   105  		},
   106  		{
   107  			Name:       "mockRegisterFact",
   108  			Parameters: []string{"bytes32"},
   109  		},
   110  		{
   111  			Name:       "vestingDeposits",
   112  			Parameters: []string{"address"},
   113  		},
   114  		{
   115  			Name:       "addLiquidityETHToContract",
   116  			Parameters: []string{"address", "uint256", "uint256", "uint256", "address", "uint256"},
   117  		},
   118  		{
   119  			Name:       "spread",
   120  			Parameters: []string{"uint256", "address[]"},
   121  		},
   122  		{
   123  			Name:       "registerWithConfig",
   124  			Parameters: []string{"string", "address", "uint256", "bytes32", "address", "address"},
   125  		},
   126  		{
   127  			Name:       "atomicMatch_",
   128  			Parameters: []string{"address[14]", "uint256[18]", "uint8[8]", "bytes", "bytes", "bytes", "bytes", "bytes", "bytes", "uint8[2]", "bytes32[5]"},
   129  		},
   130  		{
   131  			Name:       "transmitAndSellTokenForEth",
   132  			Parameters: []string{"address", "uint256", "uint256", "uint256", "address", "(uint8,bytes32,bytes32)", "bytes"},
   133  		},
   134  		{
   135  			Name:       "execute",
   136  			Parameters: []string{"bytes", "bytes[]", "uint256"},
   137  		},
   138  	}
   139  	tests := []struct {
   140  		name       string
   141  		signatures *[]bchain.FourByteSignature
   142  		data       string
   143  		want       *bchain.EthereumParsedInputData
   144  		wantErr    bool
   145  	}{
   146  		{
   147  			name:       "transfer",
   148  			signatures: &signatures,
   149  			data:       "",
   150  			want: &bchain.EthereumParsedInputData{
   151  				Name: "Transfer",
   152  			},
   153  		},
   154  		{
   155  			name:       "mintFighter",
   156  			signatures: &signatures,
   157  			data:       "0xa19b9082",
   158  			want: &bchain.EthereumParsedInputData{
   159  				MethodId: "0xa19b9082",
   160  				Name:     "Mint Fighter",
   161  				Function: "mintFighter()",
   162  				Params:   []bchain.EthereumParsedInputParam{},
   163  			},
   164  		},
   165  		{
   166  			name:       "mockRegisterFact",
   167  			signatures: &signatures,
   168  			data:       "0xf69507abdc8fa8fe57a22de66a1d5898496c524068cb04c31f72497b3ac9f3b449e58725",
   169  			want: &bchain.EthereumParsedInputData{
   170  				MethodId: "0xf69507ab",
   171  				Name:     "Mock Register Fact",
   172  				Function: "mockRegisterFact(bytes32)",
   173  				Params: []bchain.EthereumParsedInputParam{
   174  					{
   175  						Type:   "bytes32",
   176  						Values: []string{"0xdc8fa8fe57a22de66a1d5898496c524068cb04c31f72497b3ac9f3b449e58725"},
   177  					},
   178  				},
   179  			},
   180  		},
   181  		{
   182  			name:       "cancelMultipleMakerOrders",
   183  			signatures: &signatures,
   184  			data:       "0x9e53a69a000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000017f62f8db30",
   185  			want: &bchain.EthereumParsedInputData{
   186  				MethodId: "0x9e53a69a",
   187  				Name:     "Cancel Multiple Maker Orders",
   188  				Function: "cancelMultipleMakerOrders(uint256[])",
   189  				Params: []bchain.EthereumParsedInputParam{
   190  					{
   191  						Type:   "uint256[]",
   192  						Values: []string{"1646632950576"},
   193  					},
   194  				},
   195  			},
   196  		},
   197  		{
   198  			name:       "addLiquidityETHToContract",
   199  			signatures: &signatures,
   200  			data:       "0xf305d719000000000000000000000000b80e5aaa2131c07568128f68b8538ed3c8951234000000000000000000000000000000000000007e37be2022c0914b2680000000000000000000000000000000000000000000007e37be2022c0914b26800000000000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000009f64b014ca26f2def573246543dd1115b229e4f400000000000000000000000000000000000000000000000000000000623f56f8",
   201  			want: &bchain.EthereumParsedInputData{
   202  				MethodId: "0xf305d719",
   203  				Name:     "Add Liquidity ETH To Contract",
   204  				Function: "addLiquidityETHToContract(address, uint256, uint256, uint256, address, uint256)",
   205  				Params: []bchain.EthereumParsedInputParam{
   206  					{
   207  						Type:   "address",
   208  						Values: []string{"0xB80e5AaA2131c07568128f68b8538eD3C8951234"},
   209  					},
   210  					{
   211  						Type:   "uint256",
   212  						Values: []string{"10000000000000000000000000000000"},
   213  					},
   214  					{
   215  						Type:   "uint256",
   216  						Values: []string{"10000000000000000000000000000000"},
   217  					},
   218  					{
   219  						Type:   "uint256",
   220  						Values: []string{"1000000000000000000"},
   221  					},
   222  					{
   223  						Type:   "address",
   224  						Values: []string{"0x9f64B014CA26F2DeF573246543DD1115b229e4F4"},
   225  					},
   226  					{
   227  						Type:   "uint256",
   228  						Values: []string{"1648318200"},
   229  					},
   230  				},
   231  			},
   232  		},
   233  		{
   234  			name:       "addLiquidityETHToContract data don't match - too long",
   235  			signatures: &signatures,
   236  			data:       "0xf305d719000000000000000000000000b80e5aaa2131c07568128f68b8538ed3c8951234000000000000000000000000000000000000007e37be2022c0914b2680000000000000000000000000000000000000000000007e37be2022c0914b26800000000000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000009f64b014ca26f2def573246543dd1115b229e4f400000000000000000000000000000000000000000000000000000000623f56f800000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
   237  			want: &bchain.EthereumParsedInputData{
   238  				MethodId: "0xf305d719",
   239  			},
   240  		},
   241  		{
   242  			name:       "addLiquidityETHToContract data don't match - too short",
   243  			signatures: &signatures,
   244  			data:       "0xf305d719000000000000000000000000b80e5aaa2131c07568128f68b8538ed3c8951234000000000000000000000000000000000000007e37be2022c0914b2680000000000000000000000000000000000000000000007e37be2022c0914b26800000000000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000009f64b014ca26f2def573246543dd1115b229e4f4",
   245  			want: &bchain.EthereumParsedInputData{
   246  				MethodId: "0xf305d719",
   247  			},
   248  		},
   249  		{
   250  			name:       "spread",
   251  			signatures: &signatures,
   252  			data:       "0xcd51b093000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000200000000000000000000000048c999d9206fcf2a0ecde10049de6dc2d1704bb2000000000000000000000000d2dae6b2309ada5d4c983b4c7d2c942452adc759",
   253  			want: &bchain.EthereumParsedInputData{
   254  				MethodId: "0xcd51b093",
   255  				Name:     "Spread",
   256  				Function: "spread(uint256, address[])",
   257  				Params: []bchain.EthereumParsedInputParam{
   258  					{
   259  						Type:   "uint256",
   260  						Values: []string{"100000000000000000"},
   261  					},
   262  					{
   263  						Type:   "address[]",
   264  						Values: []string{"0x48c999d9206fcf2A0ecdE10049de6Dc2d1704Bb2", "0xD2DAE6B2309aDa5d4c983B4c7D2c942452aDC759"},
   265  					},
   266  				},
   267  			},
   268  		},
   269  		{
   270  			name:       "atomicMatch_", // mainnet tx 0x57aff22b0f812e05467fb73caec8ac0364a535382496e5f64eb9df9fb32bd85f
   271  			signatures: &signatures,
   272  			data:       "0xab834bab0000000000000000000000007f268357a8c2552623316e2562d90e642bb538e50000000000000000000000001676b0ab0aeb83122c58abc3d6a50b6c4a9d376300000000000000000000000024c57fbb5c260edf158583818177cfd5c2dec4700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000baf2127b49fc93cbca6269fade0f7f31df4c88a7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007f268357a8c2552623316e2562d90e642bb538e500000000000000000000000024c57fbb5c260edf158583818177cfd5c2dec47000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005b3256965e7c3cf26e11fcaf296dfc8807c01073000000000000000000000000baf2127b49fc93cbca6269fade0f7f31df4c88a70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ee000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000062531f6400000000000000000000000000000000000000000000000000000000000000000227db897c05fe6409bc72c6bee932b99a92ca45e155cf85e763424e7a3ee61500000000000000000000000000000000000000000000000000000000000002ee000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002386f26fc10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000625313f800000000000000000000000000000000000000000000000000000000627aa14b79166058af7dd96e2190730f926c56d6131af9d72b4dd2138b58c30e268c7f300000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000006a000000000000000000000000000000000000000000000000000000000000007c000000000000000000000000000000000000000000000000000000000000008e00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000b200000000000000000000000000000000000000000000000000000000000000b20000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000001c77e6196859305642ea4751b9597a9507472acb04b9f1f4759aa0f27af41edd8960513f1649f58782cacce26b1341575b584594f940bba0614aff302d25b4b10477e6196859305642ea4751b9597a9507472acb04b9f1f4759aa0f27af41edd8960513f1649f58782cacce26b1341575b584594f940bba0614aff302d25b4b104000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e4fb16a59500000000000000000000000000000000000000000000000000000000000000000000000000000000000000001676b0ab0aeb83122c58abc3d6a50b6c4a9d3763000000000000000000000000f25f4f4f6517101dc947d1c0370571ebdd25f14a00000000000000000000000000000000000000000000000000000000000002c7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e4fb16a59500000000000000000000000024c57fbb5c260edf158583818177cfd5c2dec4700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f25f4f4f6517101dc947d1c0370571ebdd25f14a00000000000000000000000000000000000000000000000000000000000002c7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e400000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e4000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
   273  			want: &bchain.EthereumParsedInputData{
   274  				MethodId: "0xab834bab",
   275  				Name:     "Atomic Match_",
   276  				Function: "atomicMatch_(address[14], uint256[18], uint8[8], bytes, bytes, bytes, bytes, bytes, bytes, uint8[2], bytes32[5])",
   277  				Params: []bchain.EthereumParsedInputParam{
   278  					{
   279  						Type: "address[14]",
   280  						Values: []string{
   281  							"0x7f268357A8c2552623316e2562D90e642bB538E5", "0x1676b0AB0Aeb83122C58ABC3d6a50B6c4A9d3763", "0x24C57FBB5c260EDf158583818177Cfd5C2dec470", "0x0000000000000000000000000000000000000000",
   282  							"0xBAf2127B49fC93CbcA6269FAdE0F7F31dF4c88a7", "0x0000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000", "0x7f268357A8c2552623316e2562D90e642bB538E5",
   283  							"0x24C57FBB5c260EDf158583818177Cfd5C2dec470", "0x0000000000000000000000000000000000000000", "0x5b3256965e7C3cF26E11FCAf296DfC8807C01073", "0xBAf2127B49fC93CbcA6269FAdE0F7F31dF4c88a7",
   284  							"0x0000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000"},
   285  					},
   286  					{
   287  						Type: "uint256[18]",
   288  						Values: []string{
   289  							"750", "0", "0", "0", "10000000000000000", "0", "1649614692", "0", "975047921716720136517384107537725863826800092678142650456874303300963329557",
   290  							"750", "0", "0", "0", "10000000000000000", "0", "1649611768", "1652203851", "54769390272606378508076535204478407261307419838517394120712398796227861053232"},
   291  					},
   292  					{
   293  						Type:   "uint8[8]",
   294  						Values: []string{"1", "0", "0", "1", "1", "1", "0", "1"},
   295  					},
   296  					{
   297  						Type:   "bytes",
   298  						Values: []string{"0xfb16a59500000000000000000000000000000000000000000000000000000000000000000000000000000000000000001676b0ab0aeb83122c58abc3d6a50b6c4a9d3763000000000000000000000000f25f4f4f6517101dc947d1c0370571ebdd25f14a00000000000000000000000000000000000000000000000000000000000002c7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000"},
   299  					},
   300  					{
   301  						Type:   "bytes",
   302  						Values: []string{"0xfb16a59500000000000000000000000024c57fbb5c260edf158583818177cfd5c2dec4700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f25f4f4f6517101dc947d1c0370571ebdd25f14a00000000000000000000000000000000000000000000000000000000000002c7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000"},
   303  					},
   304  					{
   305  						Type:   "bytes",
   306  						Values: []string{"0x00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"},
   307  					},
   308  					{
   309  						Type:   "bytes",
   310  						Values: []string{"0x000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"},
   311  					},
   312  					{
   313  						Type:   "bytes",
   314  						Values: []string{""},
   315  					},
   316  					{
   317  						Type:   "bytes",
   318  						Values: []string{""},
   319  					},
   320  					{
   321  						Type:   "uint8[2]",
   322  						Values: []string{"28", "28"},
   323  					},
   324  					{
   325  						Type: "bytes32[5]",
   326  						Values: []string{"0x77e6196859305642ea4751b9597a9507472acb04b9f1f4759aa0f27af41edd89", "0x60513f1649f58782cacce26b1341575b584594f940bba0614aff302d25b4b104",
   327  							"0x77e6196859305642ea4751b9597a9507472acb04b9f1f4759aa0f27af41edd89", "0x60513f1649f58782cacce26b1341575b584594f940bba0614aff302d25b4b104",
   328  							"0x0000000000000000000000000000000000000000000000000000000000000000"},
   329  					},
   330  				},
   331  			},
   332  		},
   333  		{
   334  			name:       "registerWithConfig",
   335  			signatures: &signatures,
   336  			data:       "0xf7a1696300000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000769cbf44073741ccb4c39c945402130b46fa8a70000000000000000000000000000000000000000000000000000000012cf35707a8c22626793047f41a428e815e2bb12ced6d5db4246a8b0bda488c541647bef0000000000000000000000004976fb03c32e5b8cfe2b6ccb31c09ba78ebaba410000000000000000000000000769cbf44073741ccb4c39c945402130b46fa8a700000000000000000000000000000000000000000000000000000000000000076d6f6e7369746100000000000000000000000000000000000000000000000000",
   337  			want: &bchain.EthereumParsedInputData{
   338  				MethodId: "0xf7a16963",
   339  				Name:     "Register With Config",
   340  				Function: "registerWithConfig(string, address, uint256, bytes32, address, address)",
   341  				Params: []bchain.EthereumParsedInputParam{
   342  					{
   343  						Type:   "string",
   344  						Values: []string{"monsita"},
   345  					},
   346  					{
   347  						Type:   "address",
   348  						Values: []string{"0x0769cBf44073741cCb4C39c945402130B46fa8A7"},
   349  					},
   350  					{
   351  						Type:   "uint256",
   352  						Values: []string{"315569520"},
   353  					},
   354  					{
   355  						Type:   "bytes32",
   356  						Values: []string{"0x7a8c22626793047f41a428e815e2bb12ced6d5db4246a8b0bda488c541647bef"},
   357  					},
   358  					{
   359  						Type:   "address",
   360  						Values: []string{"0x4976fb03C32e5B8cfe2b6cCB31c09Ba78EBaBa41"},
   361  					},
   362  					{
   363  						Type:   "address",
   364  						Values: []string{"0x0769cBf44073741cCb4C39c945402130B46fa8A7"},
   365  					},
   366  				},
   367  			},
   368  		},
   369  		{
   370  			name:       "execute",
   371  			signatures: &signatures,
   372  			data:       "0x3593564c000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000063fd167b00000000000000000000000000000000000000000000000000000000000000010800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000021e19e0c9bab2400000000000000000000000000000000000000000000000000000000000002fa5e9a300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003000000000000000000000000cda4e840411c00a614ad9205caec807c7458a0e3000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
   373  			want: &bchain.EthereumParsedInputData{
   374  				MethodId: "0x3593564c",
   375  				Name:     "Execute",
   376  				Function: "execute(bytes, bytes[], uint256)",
   377  				Params: []bchain.EthereumParsedInputParam{
   378  					{
   379  						Type:   "bytes",
   380  						Values: []string{"0x08"},
   381  					},
   382  					{
   383  						Type:   "bytes[]",
   384  						Values: []string{"0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000021e19e0c9bab2400000000000000000000000000000000000000000000000000000000000002fa5e9a300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003000000000000000000000000cda4e840411c00a614ad9205caec807c7458a0e3000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"},
   385  					},
   386  					{
   387  						Type:   "uint256",
   388  						Values: []string{"1677530747"},
   389  					},
   390  				},
   391  			},
   392  		},
   393  		{
   394  			name:       "execute2",
   395  			signatures: &signatures,
   396  			data:       "0x3593564c000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000063ffd82300000000000000000000000000000000000000000000000000000000000000020b080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000006f05b59d3b200000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000006f05b59d3b20000000000000000000000000000000000000000000000491478480c282e75df8b5700000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000f0f9d895aca5c8678f706fb8216fa22957685a13",
   397  			want: &bchain.EthereumParsedInputData{
   398  				MethodId: "0x3593564c",
   399  				Name:     "Execute",
   400  				Function: "execute(bytes, bytes[], uint256)",
   401  				Params: []bchain.EthereumParsedInputParam{
   402  					{
   403  						Type:   "bytes",
   404  						Values: []string{"0x0b08"},
   405  					},
   406  					{
   407  						Type: "bytes[]",
   408  						Values: []string{
   409  							"0x000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000006f05b59d3b20000",
   410  							"0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000006f05b59d3b20000000000000000000000000000000000000000000000491478480c282e75df8b5700000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000f0f9d895aca5c8678f706fb8216fa22957685a13",
   411  						},
   412  					},
   413  					{
   414  						Type:   "uint256",
   415  						Values: []string{"1677711395"},
   416  					},
   417  				},
   418  			},
   419  		},
   420  	}
   421  	for _, tt := range tests {
   422  		t.Run(tt.name, func(t *testing.T) {
   423  			got := ParseInputData(tt.signatures, tt.data)
   424  			if !reflect.DeepEqual(got, tt.want) {
   425  				t.Errorf("ParseInputData() = %v, want %v", got, tt.want)
   426  			}
   427  		})
   428  	}
   429  }
   430  
   431  func Test_getEnsRecord(t *testing.T) {
   432  	tests := []struct {
   433  		name string
   434  		log  rpcLogWithTxHash
   435  		want *bchain.AddressAliasRecord
   436  	}{
   437  		{
   438  			name: "unraveled",
   439  			log: rpcLogWithTxHash{
   440  				RpcLog: bchain.RpcLog{
   441  					Address: "0x283Af0B28c62C092C9727F1Ee09c02CA627EB7F5",
   442  					Topics: []string{
   443  						"0xca6abbe9d7f11422cb6ca7629fbf6fe9efb1c621f71ce8f02b9f2a230097404f",
   444  						"0x40ce2aa8cd9ee9fef4bf3a68abab7fbcceb6bac89370518caf6a602cefe836bd",
   445  						"0x0000000000000000000000002c630b16aa53ae0189880e15c23323688acb607c",
   446  					},
   447  					Data: "0x00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000017629245f5a86f0000000000000000000000000000000000000000000000000000000069dbb21d0000000000000000000000000000000000000000000000000000000000000009756e726176656c65640000000000000000000000000000000000000000000000",
   448  				},
   449  			},
   450  			want: &bchain.AddressAliasRecord{Address: "0x2C630b16Aa53ae0189880e15C23323688acb607c", Name: "unraveled"},
   451  		},
   452  		{
   453  			name: "4x unraveled",
   454  			log: rpcLogWithTxHash{
   455  				RpcLog: bchain.RpcLog{
   456  					Address: "0x283Af0B28c62C092C9727F1Ee09c02CA627EB7F5",
   457  					Topics: []string{
   458  						"0xca6abbe9d7f11422cb6ca7629fbf6fe9efb1c621f71ce8f02b9f2a230097404f",
   459  						"0x40ce2aa8cd9ee9fef4bf3a68abab7fbcceb6bac89370518caf6a602cefe836bd",
   460  						"0x0000000000000000000000002c630b16aa53ae0189880e15c23323688acb607c",
   461  					},
   462  					Data: "0x00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000017629245f5a86f0000000000000000000000000000000000000000000000000000000069dbb21d0000000000000000000000000000000000000000000000000000000000000024756e726176656c6564756e726176656c6564756e726176656c6564756e726176656c656400000000000000000000000000000000000000000000000000000000",
   463  				},
   464  			},
   465  			want: &bchain.AddressAliasRecord{Address: "0x2C630b16Aa53ae0189880e15C23323688acb607c", Name: "unraveledunraveledunraveledunraveled"},
   466  		},
   467  		{
   468  			name: "no signature",
   469  			log: rpcLogWithTxHash{
   470  				RpcLog: bchain.RpcLog{
   471  					Address: "0x283Af0B28c62C092C9727F1Ee09c02CA627EB7F5",
   472  					Topics: []string{
   473  						"0xca6abbe9d7f11422cb6ca7629fbf6fe9efb1c621f71ce8f02b9f2a230097404e",
   474  						"0x40ce2aa8cd9ee9fef4bf3a68abab7fbcceb6bac89370518caf6a602cefe836bd",
   475  						"0x0000000000000000000000002c630b16aa53ae0189880e15c23323688acb607c",
   476  					},
   477  					Data: "0x00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000017629245f5a86f0000000000000000000000000000000000000000000000000000000069dbb21d0000000000000000000000000000000000000000000000000000000000000009756e726176656c65640000000000000000000000000000000000000000000000",
   478  				},
   479  			},
   480  			want: nil,
   481  		},
   482  		{
   483  			name: "name length does not match",
   484  			log: rpcLogWithTxHash{
   485  				RpcLog: bchain.RpcLog{
   486  					Address: "0x283Af0B28c62C092C9727F1Ee09c02CA627EB7F5",
   487  					Topics: []string{
   488  						"0xca6abbe9d7f11422cb6ca7629fbf6fe9efb1c621f71ce8f02b9f2a230097404f",
   489  						"0x40ce2aa8cd9ee9fef4bf3a68abab7fbcceb6bac89370518caf6a602cefe836bd",
   490  						"0x0000000000000000000000002c630b16aa53ae0189880e15c23323688acb607c",
   491  					},
   492  					Data: "0x00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000017629245f5a86f0000000000000000000000000000000000000000000000000000000069dbb21d0000000000000000000000000000000000000000000000000000000000000ff9756e726176656c65640000000000000000000000000000000000000000000000",
   493  				},
   494  			},
   495  			want: nil,
   496  		},
   497  	}
   498  	for _, tt := range tests {
   499  		t.Run(tt.name, func(t *testing.T) {
   500  			if got := getEnsRecord(&tt.log); !reflect.DeepEqual(got, tt.want) {
   501  				t.Errorf("getEnsRecord() = %v, want %v", got, tt.want)
   502  			}
   503  		})
   504  	}
   505  }