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 }