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 }