github.com/unicornultrafoundation/go-u2u@v1.0.0-rc1.0.20240205080301-e74a83d3fadc/u2u/marshal_test.go (about)

     1  package u2u
     2  
     3  import (
     4  	"math/big"
     5  	"testing"
     6  
     7  	"github.com/stretchr/testify/require"
     8  	"github.com/unicornultrafoundation/go-u2u/rlp"
     9  )
    10  
    11  func TestUpdateRules(t *testing.T) {
    12  	require := require.New(t)
    13  
    14  	var exp Rules
    15  	exp.Epochs.MaxEpochGas = 99
    16  
    17  	exp.Dag.MaxParents = 5
    18  	exp.Economy.MinGasPrice = big.NewInt(7)
    19  	exp.Blocks.MaxBlockGas = 1000
    20  	got, err := UpdateRules(exp, []byte(`{"Dag":{"MaxParents":5},"Economy":{"MinGasPrice":7},"Blocks":{"MaxBlockGas":1000}}`))
    21  	require.NoError(err)
    22  	require.Equal(exp.String(), got.String(), "mutate fields")
    23  
    24  	exp.Dag.MaxParents = 0
    25  	got, err = UpdateRules(exp, []byte(`{"Name":"xxx","NetworkID":1,"Dag":{"MaxParents":0}}`))
    26  	require.NoError(err)
    27  	require.Equal(exp.String(), got.String(), "readonly fields")
    28  
    29  	got, err = UpdateRules(exp, []byte(`{}`))
    30  	require.NoError(err)
    31  	require.Equal(exp.String(), got.String(), "empty diff")
    32  
    33  	_, err = UpdateRules(exp, []byte(`}{`))
    34  	require.Error(err)
    35  }
    36  
    37  func TestMainNetRulesRLP(t *testing.T) {
    38  	rules := MainNetRules()
    39  	require := require.New(t)
    40  
    41  	b, err := rlp.EncodeToBytes(rules)
    42  	require.NoError(err)
    43  
    44  	decodedRules := Rules{}
    45  	require.NoError(rlp.DecodeBytes(b, &decodedRules))
    46  
    47  	require.Equal(rules.String(), decodedRules.String())
    48  }
    49  
    50  func TestRulesBerlinRLP(t *testing.T) {
    51  	rules := MainNetRules()
    52  	rules.Upgrades.Berlin = true
    53  	require := require.New(t)
    54  
    55  	b, err := rlp.EncodeToBytes(rules)
    56  	require.NoError(err)
    57  
    58  	decodedRules := Rules{}
    59  	require.NoError(rlp.DecodeBytes(b, &decodedRules))
    60  
    61  	require.Equal(rules.String(), decodedRules.String())
    62  	require.True(decodedRules.Upgrades.Berlin)
    63  }
    64  
    65  func TestRulesLondonRLP(t *testing.T) {
    66  	rules := MainNetRules()
    67  	rules.Upgrades.London = true
    68  	rules.Upgrades.Berlin = true
    69  	require := require.New(t)
    70  
    71  	b, err := rlp.EncodeToBytes(rules)
    72  	require.NoError(err)
    73  
    74  	decodedRules := Rules{}
    75  	require.NoError(rlp.DecodeBytes(b, &decodedRules))
    76  
    77  	require.Equal(rules.String(), decodedRules.String())
    78  	require.True(decodedRules.Upgrades.Berlin)
    79  	require.True(decodedRules.Upgrades.London)
    80  }
    81  
    82  func TestRulesBerlinCompatibilityRLP(t *testing.T) {
    83  	require := require.New(t)
    84  
    85  	b1, err := rlp.EncodeToBytes(Upgrades{
    86  		Berlin: true,
    87  	})
    88  	require.NoError(err)
    89  
    90  	b2, err := rlp.EncodeToBytes(struct {
    91  		Berlin bool
    92  	}{true})
    93  	require.NoError(err)
    94  
    95  	require.Equal(b2, b1)
    96  }
    97  
    98  func TestGasRulesLLRCompatibilityRLP(t *testing.T) {
    99  	require := require.New(t)
   100  
   101  	b1, err := rlp.EncodeToBytes(GasRules{
   102  		MaxEventGas:          1,
   103  		EventGas:             2,
   104  		ParentGas:            3,
   105  		ExtraDataGas:         4,
   106  		BlockVotesBaseGas:    0,
   107  		BlockVoteGas:         0,
   108  		EpochVoteGas:         0,
   109  		MisbehaviourProofGas: 0,
   110  	})
   111  	require.NoError(err)
   112  
   113  	b2, err := rlp.EncodeToBytes(struct {
   114  		MaxEventGas  uint64
   115  		EventGas     uint64
   116  		ParentGas    uint64
   117  		ExtraDataGas uint64
   118  	}{1, 2, 3, 4})
   119  	require.NoError(err)
   120  
   121  	require.Equal(b2, b1)
   122  }