github.com/unicornultrafoundation/go-u2u@v1.0.0-rc1.0.20240205080301-e74a83d3fadc/native/transaction_serializer_test.go (about) 1 package native 2 3 import ( 4 "encoding/hex" 5 "math/big" 6 "testing" 7 8 "github.com/stretchr/testify/require" 9 10 "github.com/unicornultrafoundation/go-u2u/common" 11 "github.com/unicornultrafoundation/go-u2u/core/types" 12 13 "github.com/unicornultrafoundation/go-u2u/utils/cser" 14 ) 15 16 func TestSerializeLegacyTx(t *testing.T) { 17 require := require.New(t) 18 19 addr := common.HexToAddress("727fc6a68321b754475c668a6abfb6e9e71c169a") 20 value := big.NewInt(10) 21 value = value.Mul(value, big.NewInt(1_000_000_000)) 22 value = value.Mul(value, big.NewInt(1_000_000_000)) 23 24 data, _ := hex.DecodeString("a9059cbb000000000213ed0f886efd100b67c7e4ec0a85a7d20dc971600000000000000000000015af1d78b58c4000") 25 26 r := new(big.Int) 27 r.SetString("be67e0a07db67da8d446f76add590e54b6e92cb6b8f9835aeb67540579a27717", 16) 28 29 s := new(big.Int) 30 s.SetString("2d690516512020171c1ec870f6ff45398cc8609250326be89915fb538e7bd718", 16) 31 32 v := types.NewTx(&types.LegacyTx{ 33 Nonce: 12, 34 GasPrice: big.NewInt(20_000_000_000), 35 Gas: 21_000, 36 To: &addr, 37 Value: value, 38 Data: data, 39 V: big.NewInt(40), 40 R: r, 41 S: s, 42 }) 43 44 encoded, err := cser.MarshalBinaryAdapter(func(w *cser.Writer) error { 45 return TransactionMarshalCSER(w, v) 46 }) 47 require.NoError(err) 48 require.Equal("0c08520504a817c800088ac7230489e80000727fc6a68321b754475c668a6abfb6e9e71c169a2fa9059cbb000000000213ed0f886efd100b67c7e4ec0a85a7d20dc971600000000000000000000015af1d78b58c40000128be67e0a07db67da8d446f76add590e54b6e92cb6b8f9835aeb67540579a277172d690516512020171c1ec870f6ff45398cc8609250326be89915fb538e7bd71848320183", hex.EncodeToString(encoded)) 49 } 50 51 func TestSerializeAccessListTx(t *testing.T) { 52 require := require.New(t) 53 54 addr := common.HexToAddress("811a752c8cd697e3cb27279c330ed1ada745a8d7") 55 value := big.NewInt(2) 56 value = value.Mul(value, big.NewInt(1_000_000_000)) 57 value = value.Mul(value, big.NewInt(1_000_000_000)) 58 59 data, _ := hex.DecodeString("6ebaf477f83e051589c1188bcc6ddccd") 60 61 r := new(big.Int) 62 r.SetString("36b241b061a36a32ab7fe86c7aa9eb592dd59018cd0443adc0903590c16b02b0", 16) 63 64 s := new(big.Int) 65 s.SetString("5edcc541b4741c5cc6dd347c5ed9577ef293a62787b4510465fadbfe39ee4094", 16) 66 67 v := types.NewTx(&types.AccessListTx{ 68 ChainID: big.NewInt(5), 69 Nonce: 7, 70 GasPrice: big.NewInt(30_000_000_000), 71 Gas: 5_748_100, 72 To: &addr, 73 Value: value, 74 Data: data, 75 AccessList: []types.AccessTuple{ 76 types.AccessTuple{ 77 Address: common.HexToAddress("de0b295669a9fd93d5f28d9ec85e40f4cb697bae"), 78 StorageKeys: []common.Hash{ 79 common.HexToHash("0000000000000000000000000000000000000000000000000000000000000003"), 80 common.HexToHash("0000000000000000000000000000000000000000000000000000000000000007"), 81 }, 82 }, 83 types.AccessTuple{ 84 Address: common.HexToAddress("bb9bc244d798123fde783fcc1c72d3bb8c189413"), 85 }, 86 }, 87 V: big.NewInt(45), 88 R: r, 89 S: s, 90 }) 91 92 encoded, err := cser.MarshalBinaryAdapter(func(w *cser.Writer) error { 93 return TransactionMarshalCSER(w, v) 94 }) 95 require.NoError(err) 96 require.Equal("010784b5570506fc23ac00081bc16d674ec80000811a752c8cd697e3cb27279c330ed1ada745a8d7106ebaf477f83e051589c1188bcc6ddccd012d36b241b061a36a32ab7fe86c7aa9eb592dd59018cd0443adc0903590c16b02b05edcc541b4741c5cc6dd347c5ed9577ef293a62787b4510465fadbfe39ee4094010502de0b295669a9fd93d5f28d9ec85e40f4cb697bae0200000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000007bb9bc244d798123fde783fcc1c72d3bb8c1894130000944c020085", hex.EncodeToString(encoded)) 97 } 98 99 func TestSerializeDynamicFeeTx(t *testing.T) { 100 require := require.New(t) 101 102 addr := common.HexToAddress("811a752c8cd697e3cb27279c330ed1ada745a8d7") 103 value := big.NewInt(2) 104 value = value.Mul(value, big.NewInt(1_000_000_000)) 105 value = value.Mul(value, big.NewInt(1_000_000_000)) 106 107 data, _ := hex.DecodeString("6ebaf477f83e051589c1188bcc6ddccd") 108 109 r := new(big.Int) 110 r.SetString("36b241b061a36a32ab7fe86c7aa9eb592dd59018cd0443adc0903590c16b02b0", 16) 111 112 s := new(big.Int) 113 s.SetString("5edcc541b4741c5cc6dd347c5ed9577ef293a62787b4510465fadbfe39ee4094", 16) 114 115 v := types.NewTx(&types.DynamicFeeTx{ 116 ChainID: big.NewInt(5), 117 Nonce: 7, 118 GasTipCap: big.NewInt(10_000_000_000), 119 GasFeeCap: big.NewInt(30_000_000_000), 120 Gas: 5_748_100, 121 To: &addr, 122 Value: value, 123 Data: data, 124 AccessList: []types.AccessTuple{ 125 types.AccessTuple{ 126 Address: common.HexToAddress("de0b295669a9fd93d5f28d9ec85e40f4cb697bae"), 127 StorageKeys: []common.Hash{ 128 common.HexToHash("0000000000000000000000000000000000000000000000000000000000000003"), 129 common.HexToHash("0000000000000000000000000000000000000000000000000000000000000007"), 130 }, 131 }, 132 types.AccessTuple{ 133 Address: common.HexToAddress("bb9bc244d798123fde783fcc1c72d3bb8c189413"), 134 }, 135 }, 136 V: big.NewInt(45), 137 R: r, 138 S: s, 139 }) 140 141 encoded, err := cser.MarshalBinaryAdapter(func(w *cser.Writer) error { 142 return TransactionMarshalCSER(w, v) 143 }) 144 require.NoError(err) 145 require.Equal("020784b5570502540be4000506fc23ac00081bc16d674ec80000811a752c8cd697e3cb27279c330ed1ada745a8d7106ebaf477f83e051589c1188bcc6ddccd012d36b241b061a36a32ab7fe86c7aa9eb592dd59018cd0443adc0903590c16b02b05edcc541b4741c5cc6dd347c5ed9577ef293a62787b4510465fadbfe39ee4094010502de0b295669a9fd93d5f28d9ec85e40f4cb697bae0200000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000007bb9bc244d798123fde783fcc1c72d3bb8c18941300009464120085", hex.EncodeToString(encoded)) 146 }