github.com/hyperledger/burrow@v0.34.5-0.20220512172541-77f09336001d/execution/evm/abi/abi_test.go (about) 1 package abi 2 3 import ( 4 "bytes" 5 "math/big" 6 "strings" 7 "testing" 8 9 "github.com/tmthrgd/go-hex" 10 11 "github.com/hyperledger/burrow/crypto" 12 "github.com/hyperledger/burrow/logging" 13 "github.com/stretchr/testify/assert" 14 "github.com/stretchr/testify/require" 15 ) 16 17 //To Test: 18 //Bools, Arrays, Addresses, Hashes 19 //Test Packing different things 20 //After that, should be good to go 21 22 func TestPacker(t *testing.T) { 23 for _, test := range []struct { 24 ABI string 25 args []interface{} 26 name string 27 expectedOutput []byte 28 }{ 29 // Test string address 30 { 31 `[{"constant":false,"inputs":[{"internalType":"address payable","name":"friend","type":"address"}],"name":"sendToAFriend","outputs":[],"payable":true,"stateMutability":"payable","type":"function"}]`, 32 []interface{}{"C42DEED84BDF2CA695F2E91F4E6395D191CF35FC"}, 33 "sendToAFriend", 34 pad([]byte{196, 45, 238, 216, 75, 223, 44, 166, 149, 242, 233, 31, 78, 99, 149, 209, 145, 207, 53, 252}, 32, true), 35 }, 36 // From: https://github.com/hyperledger/burrow/issues/1326 37 { 38 `[{"constant":false,"inputs":[{"internalType":"address payable","name":"friend","type":"address"}],"name":"sendToAFriend","outputs":[],"payable":true,"stateMutability":"payable","type":"function"}]`, 39 []interface{}{crypto.Address{1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4}}, 40 "sendToAFriend", 41 pad([]byte{1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4}, 32, true), 42 }, 43 { 44 `[{"constant":false,"inputs":[{"name":"","type":"uint256"}],"name":"UInt","outputs":[],"payable":false,"type":"function"}]`, 45 []interface{}{"1"}, 46 "UInt", 47 pad([]byte{1}, 32, true), 48 }, 49 { 50 `[{"constant":false,"inputs":[{"name":"","type":"int256"}],"name":"Int","outputs":[],"payable":false,"type":"function"}]`, 51 []interface{}{"-1"}, 52 "Int", 53 []byte{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}, 54 }, 55 { 56 `[{"constant":false,"inputs":[{"name":"","type":"bool"}],"name":"Bool","outputs":[],"payable":false,"type":"function"}]`, 57 []interface{}{"true"}, 58 "Bool", 59 pad([]byte{1}, 32, true), 60 }, 61 { 62 `[{"constant":false,"inputs":[{"name":"","type":"string"}],"name":"String","outputs":[],"payable":false,"type":"function"}]`, 63 []interface{}{"marmots"}, 64 "String", 65 append(hexToBytes(t, "00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000007"), pad([]byte("marmots"), 32, false)...), 66 }, 67 { 68 `[{"constant":false,"inputs":[{"name":"x","type":"bytes32"}],"name":"Bytes32","outputs":[],"payable":false,"type":"function"}]`, 69 []interface{}{"marmatoshi"}, 70 "Bytes32", 71 pad([]byte("marmatoshi"), 32, false), 72 }, 73 { 74 `[{"constant":false,"inputs":[{"name":"","type":"uint8"}],"name":"UInt8","outputs":[],"payable":false,"type":"function"}]`, 75 []interface{}{"1"}, 76 "UInt8", 77 pad([]byte{1}, 32, true), 78 }, 79 { 80 `[{"constant":false,"inputs":[{"name":"","type":"int8"}],"name":"Int8","outputs":[],"payable":false,"type":"function"}]`, 81 []interface{}{"-1"}, 82 "Int8", 83 []byte{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}, 84 }, 85 { 86 `[{"constant":false,"inputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"name":"multiPackUInts","outputs":[],"payable":false,"type":"function"}]`, 87 []interface{}{"1", "1"}, 88 "multiPackUInts", 89 append(pad([]byte{1}, 32, true), pad([]byte{1}, 32, true)...), 90 }, 91 { 92 `[{"constant":false,"inputs":[{"name":"","type":"bool"},{"name":"","type":"bool"}],"name":"multiPackBools","outputs":[],"payable":false,"type":"function"}]`, 93 []interface{}{"true", "false"}, 94 "multiPackBools", 95 append(pad([]byte{1}, 32, true), pad([]byte{0}, 32, true)...), 96 }, 97 { 98 `[{"constant":false,"inputs":[{"name":"","type":"int256"},{"name":"","type":"int256"}],"name":"multiPackInts","outputs":[],"payable":false,"type":"function"}]`, 99 []interface{}{"-1", "-1"}, 100 "multiPackInts", 101 []byte{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}, 102 }, 103 104 { 105 `[{"constant":false,"inputs":[{"name":"","type":"string"},{"name":"","type":"string"}],"name":"multiPackStrings","outputs":[],"payable":false,"type":"function"}]`, 106 []interface{}{"hello", "world"}, 107 "multiPackStrings", 108 append( 109 hexToBytes(t, "000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000005"), 110 append(pad([]byte("hello"), 32, false), 111 append(hexToBytes(t, "0000000000000000000000000000000000000000000000000000000000000005"), 112 pad([]byte("world"), 32, false)...)...)..., 113 ), 114 }, 115 { 116 `[{"constant":false,"inputs":[],"name":"arrayOfBytes32Pack","inputs":[{"name":"","type":"bytes32[3]"}],"payable":false,"type":"function"}]`, 117 []interface{}{`[den,of,marmots]`}, 118 "arrayOfBytes32Pack", 119 append( 120 pad([]byte("den"), 32, false), 121 append(pad([]byte("of"), 32, false), pad([]byte("marmots"), 32, false)...)..., 122 ), 123 }, 124 { 125 `[{"constant":false,"inputs":[{"name":"","type":"uint256[3]"}],"name":"arrayOfUIntsPack","outputs":[],"payable":false,"type":"function"}]`, 126 []interface{}{"[1,2,3]"}, 127 "arrayOfUIntsPack", 128 hexToBytes(t, "000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003"), 129 }, 130 { 131 `[{"constant":false,"inputs":[{"name":"","type":"int256[3]"}],"name":"arrayOfIntsPack","outputs":[],"payable":false,"type":"function"}]`, 132 []interface{}{"[-1,-2,-3]"}, 133 "arrayOfIntsPack", 134 []byte{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 253}, 135 }, 136 { 137 `[{"constant":false,"inputs":[{"name":"","type":"bool[2]"}],"name":"arrayOfBoolsPack","outputs":[],"payable":false,"type":"function"}]`, 138 []interface{}{"[true,false]"}, 139 "arrayOfBoolsPack", 140 append(pad([]byte{1}, 32, true), pad([]byte{0}, 32, true)...), 141 }, 142 // test dynamic objet uint[] 143 { 144 `[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"},{"internalType":"string","name":"_uri","type":"string"}],"name":"increase","outputs":[],"stateMutability":"nonpayable","type":"function"}]`, 145 []interface{}{[]string{"201", "202", "203"}, "hello"}, 146 "increase", 147 []byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 104, 101, 108, 108, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 148 }, 149 } { 150 t.Log(test.args) 151 if output, _, err := EncodeFunctionCall(test.ABI, test.name, logging.NewNoopLogger(), test.args...); err != nil { 152 t.Errorf("Unexpected error in %s: %v", test.name, err) 153 } else { 154 if !bytes.Equal(output[4:], test.expectedOutput) { 155 t.Errorf("Incorrect output,\n\t expected %v,\n\t got %v", test.expectedOutput, output[4:]) 156 } 157 } 158 } 159 } 160 161 func TestUnpackerString(t *testing.T) { 162 for _, test := range []struct { 163 abi string 164 packed []byte 165 name string 166 expectedOutput []Variable 167 }{ 168 { 169 `[{"constant":true,"inputs":[],"name":"String","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"}]`, 170 append(pad(hexToBytes(t, "0000000000000000000000000000000000000000000000000000000000000020"), 32, true), append(pad(hexToBytes(t, "0000000000000000000000000000000000000000000000000000000000000005"), 32, true), pad([]byte("Hello"), 32, false)...)...), 171 "String", 172 []Variable{ 173 { 174 Name: "0", 175 Value: "Hello", 176 }, 177 }, 178 }, 179 { 180 `[{"constant":true,"inputs":[],"name":"UInt","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"}]`, 181 hexToBytes(t, "0000000000000000000000000000000000000000000000000000000000000001"), 182 "UInt", 183 []Variable{ 184 { 185 Name: "0", 186 Value: "1", 187 }, 188 }, 189 }, 190 { 191 `[{"constant":false,"inputs":[],"name":"Int","outputs":[{"name":"retVal","type":"int256"}],"payable":false,"type":"function"}]`, 192 []byte{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}, 193 "Int", 194 []Variable{ 195 { 196 Name: "retVal", 197 Value: "-1", 198 }, 199 }, 200 }, 201 { 202 `[{"constant":true,"inputs":[],"name":"Bool","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"}]`, 203 hexToBytes(t, "0000000000000000000000000000000000000000000000000000000000000001"), 204 "Bool", 205 []Variable{ 206 { 207 Name: "0", 208 Value: "true", 209 }, 210 }, 211 }, 212 { 213 `[{"constant":true,"inputs":[],"name":"Address","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"}]`, 214 hexToBytes(t, "0000000000000000000000001040E6521541DAB4E7EE57F21226DD17CE9F0FB7"), 215 "Address", 216 []Variable{ 217 { 218 Name: "0", 219 Value: "1040E6521541DAB4E7EE57F21226DD17CE9F0FB7", 220 }, 221 }, 222 }, 223 { 224 `[{"constant":false,"inputs":[],"name":"Bytes32","outputs":[{"name":"retBytes","type":"bytes32"}],"payable":false,"type":"function"}]`, 225 pad([]byte("marmatoshi"), 32, true), 226 "Bytes32", 227 []Variable{ 228 { 229 Name: "retBytes", 230 Value: "marmatoshi", 231 }, 232 }, 233 }, 234 { 235 `[{"constant":false,"inputs":[],"name":"multiReturnUIntInt","outputs":[{"name":"","type":"uint256"},{"name":"","type":"int256"}],"payable":false,"type":"function"}]`, 236 append( 237 hexToBytes(t, "0000000000000000000000000000000000000000000000000000000000000001"), 238 []byte{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}..., 239 ), 240 "multiReturnUIntInt", 241 []Variable{ 242 { 243 Name: "0", 244 Value: "1", 245 }, 246 { 247 Name: "1", 248 Value: "-1", 249 }, 250 }, 251 }, 252 { 253 `[{"constant":false,"inputs":[],"name":"multiReturnMixed","outputs":[{"name":"","type":"string"},{"name":"","type":"uint256"}],"payable":false,"type":"function"}]`, 254 append( 255 hexToBytes(t, "00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000001"), 256 append(hexToBytes(t, "0000000000000000000000000000000000000000000000000000000000000005"), pad([]byte("Hello"), 32, false)...)..., 257 ), 258 "multiReturnMixed", 259 []Variable{ 260 { 261 Name: "0", 262 Value: "Hello", 263 }, 264 { 265 Name: "1", 266 Value: "1", 267 }, 268 }, 269 }, 270 { 271 `[{"constant":false,"inputs":[],"name":"multiPackBytes32","outputs":[{"name":"","type":"bytes32"},{"name":"","type":"bytes32"},{"name":"","type":"bytes32"}],"payable":false,"type":"function"}]`, 272 append( 273 pad([]byte("den"), 32, true), 274 append(pad([]byte("of"), 32, true), pad([]byte("marmots"), 32, true)...)..., 275 ), 276 "multiPackBytes32", 277 []Variable{ 278 { 279 Name: "0", 280 Value: "den", 281 }, 282 { 283 Name: "1", 284 Value: "of", 285 }, 286 { 287 Name: "2", 288 Value: "marmots", 289 }, 290 }, 291 }, 292 { 293 `[{"constant":false,"inputs":[],"name":"arrayReturnBytes32","outputs":[{"name":"","type":"bytes32[3]"}],"payable":false,"type":"function"}]`, 294 append( 295 pad([]byte("den"), 32, true), 296 append(pad([]byte("of"), 32, true), pad([]byte("marmots"), 32, true)...)..., 297 ), 298 "arrayReturnBytes32", 299 []Variable{ 300 { 301 Name: "0", 302 Value: "[den,of,marmots]", 303 }, 304 }, 305 }, 306 { 307 `[{"constant":false,"inputs":[],"name":"arrayReturnUInt","outputs":[{"name":"","type":"uint256[3]"}],"payable":false,"type":"function"}]`, 308 hexToBytes(t, "000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003"), 309 "arrayReturnUInt", 310 []Variable{ 311 { 312 Name: "0", 313 Value: "[1,2,3]", 314 }, 315 }, 316 }, 317 { 318 `[{"constant":false,"inputs":[],"name":"arrayReturnInt","outputs":[{"name":"","type":"int256[2]"}],"payable":false,"type":"function"}]`, 319 []byte{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 254}, 320 "arrayReturnInt", 321 []Variable{ 322 { 323 Name: "0", 324 Value: "[-3,-2]", 325 }, 326 }, 327 }, 328 } { 329 //t.Log(test.name) 330 t.Log(test.packed) 331 output, err := DecodeFunctionReturn(test.abi, test.name, test.packed) 332 if err != nil { 333 t.Errorf("Unpacker failed: %v", err) 334 } 335 for i, expectedOutput := range test.expectedOutput { 336 337 if output[i].Name != expectedOutput.Name { 338 t.Errorf("Unpacker failed: Incorrect Name, got %v expected %v", output[i].Name, expectedOutput.Name) 339 } 340 //t.Log("Test: ", output[i].Value) 341 //t.Log("Test: ", expectedOutput.Value) 342 if strings.Compare(output[i].Value, expectedOutput.Value) != 0 { 343 t.Errorf("Unpacker failed: Incorrect value, got %v expected %v", output[i].Value, expectedOutput.Value) 344 } 345 } 346 } 347 } 348 349 func TestUnpacker(t *testing.T) { 350 for _, test := range []struct { 351 evm EVMType 352 packed []byte 353 data interface{} 354 expectedOutput interface{} 355 }{ 356 /* positive numbers */ 357 { 358 EVMInt{M: 256}, 359 pad([]byte{42}, 32, true), 360 new(int64), 361 func() *int64 { var v int64 = 42; return &v }(), 362 }, 363 { 364 EVMInt{M: 256}, 365 pad([]byte{42}, 32, true), 366 new(int32), 367 func() *int32 { var v int32; v = 42; return &v }(), 368 }, 369 { 370 EVMInt{M: 256}, 371 pad([]byte{0x7f, 0xff}, 32, true), 372 new(int16), 373 func() *int16 { var v int16; v = 0x7fff; return &v }(), 374 }, 375 { 376 EVMInt{M: 256}, 377 pad([]byte{0xfd, 0xca}, 32, true), 378 new(uint16), 379 func() *uint16 { var v uint16; v = 0xfdca; return &v }(), 380 }, 381 { 382 EVMInt{M: 256}, 383 pad([]byte{0xfd, 0xca}, 32, true), 384 new(uint32), 385 func() *uint32 { var v uint32; v = 0xfdca; return &v }(), 386 }, 387 { 388 EVMInt{M: 256}, 389 pad([]byte{0xfd, 0xca, 0, 0, 0, 0, 0, 0}, 32, true), 390 new(uint64), 391 func() *uint64 { var v uint64 = 0xfdca000000000000; return &v }(), 392 }, 393 { 394 EVMInt{M: 256}, 395 pad([]byte{42}, 32, true), 396 new(big.Int), 397 big.NewInt(42), 398 }, 399 /* Negative numbers */ 400 { 401 EVMInt{M: 256}, 402 hexToBytes(t, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6"), 403 new(int64), 404 func() *int64 { var v int64 = -42; return &v }(), 405 }, 406 { 407 EVMInt{M: 256}, 408 hexToBytes(t, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6"), 409 new(int32), 410 func() *int32 { var v int32; v = -42; return &v }(), 411 }, 412 { 413 EVMInt{M: 256}, 414 hexToBytes(t, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8001"), 415 new(int16), 416 func() *int16 { var v int16; v = -0x7fff; return &v }(), 417 }, 418 { 419 EVMInt{M: 256}, 420 hexToBytes(t, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB6C20"), 421 new(int32), 422 func() *int32 { var v int32; v = -300000; return &v }(), 423 }, 424 { 425 EVMInt{M: 256}, 426 hexToBytes(t, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF35010124111"), 427 new(int64), 428 func() *int64 { var v int64 = -0xcafefedbeef; return &v }(), 429 }, 430 { 431 EVMInt{M: 256}, 432 hexToBytes(t, "80000000000000000000000000000000000000000000000000000CAFEFEDBEEF"), 433 new(big.Int), 434 func() *big.Int { 435 v := new(big.Int) 436 x, _ := v.SetString("-57896044618658097711785492504343953926634992332820282019728791990006780674321", 10) 437 return x 438 }(), 439 }, 440 { 441 EVMUint{M: 256}, 442 pad([]byte{42}, 32, true), 443 new(int64), 444 func() *int64 { var v int64 = 42; return &v }(), 445 }, 446 { 447 EVMUint{M: 256}, 448 pad([]byte{42}, 32, true), 449 new(int32), 450 func() *int32 { var v int32 = 42; return &v }(), 451 }, 452 { 453 EVMUint{M: 256}, 454 pad([]byte{0x7f, 0xff}, 32, true), 455 new(int16), 456 func() *int16 { var v int16 = 0x7fff; return &v }(), 457 }, 458 { 459 EVMUint{M: 256}, 460 pad([]byte{0xfd, 0xca}, 32, true), 461 new(uint16), 462 func() *uint16 { var v uint16 = 0xfdca; return &v }(), 463 }, 464 { 465 EVMUint{M: 256}, 466 pad([]byte{0xfd, 0xca}, 32, true), 467 new(uint32), 468 func() *uint32 { var v uint32 = 0xfdca; return &v }(), 469 }, 470 { 471 EVMUint{M: 256}, 472 pad([]byte{0xfd, 0xca, 0, 0, 0, 0, 0, 0}, 32, true), 473 new(uint64), 474 func() *uint64 { var v uint64 = 0xfdca000000000000; return &v }(), 475 }, 476 { 477 EVMUint{M: 256}, 478 pad([]byte{42}, 32, true), 479 new(big.Int), 480 big.NewInt(42), 481 }, 482 } { 483 //t.Log(test.name) 484 t.Log(test.packed) 485 _, err := test.evm.unpack(test.packed, 0, test.data) 486 if err != nil { 487 t.Errorf("Unpacker failed: %v", err) 488 } 489 assert.EqualValues(t, test.expectedOutput, test.data) 490 } 491 } 492 493 func hexToBytes(t testing.TB, hexString string) []byte { 494 bs, err := hex.DecodeString(hexString) 495 require.NoError(t, err) 496 return bs 497 }