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  }