From b3dfff1873a00cd84b451102d7815ce2d0f047a4 Mon Sep 17 00:00:00 2001 From: libangzhu <601276804@qq.com> Date: Wed, 17 Jan 2024 11:01:25 +0800 Subject: [PATCH 1/7] update maxTxFeeLimit --- cmd/chain33/bityuan.toml | 4 ++ cmd/chain33/chain33.fork.toml | 1 + cmd/chain33/chain33.system.fork.toml | 1 + cmd/chain33/chain33.test.toml | 4 ++ cmd/chain33/chain33.toml | 5 +++ executor/execenv.go | 4 +- rpc/client/client.go | 8 ++-- rpc/client/client_test.go | 2 +- rpc/grpchandler.go | 23 +++++++---- rpc/jrpchandler.go | 31 ++++++++------ rpc/jrpchandler_test.go | 2 +- system/dapp/commands/coins.go | 4 +- system/dapp/driver.go | 18 ++++---- system/mempool/base.go | 2 +- system/mempool/check.go | 2 +- types/config.go | 62 +++++++++++++++------------- types/config_test.go | 12 ++++-- types/fork.go | 18 ++++---- types/testdata/chain33.toml | 8 +++- types/tx_test.go | 12 +++--- 20 files changed, 133 insertions(+), 90 deletions(-) diff --git a/cmd/chain33/bityuan.toml b/cmd/chain33/bityuan.toml index be81209879..f6858ad42d 100644 --- a/cmd/chain33/bityuan.toml +++ b/cmd/chain33/bityuan.toml @@ -79,6 +79,10 @@ maxTxFeeRate=10000000 # 单笔交易最大的手续费, 10 coins maxTxFee=1000000000 +[mver.mempool.ForkMaxTxFeeV1] +# 单笔交易最大的手续费, 50 coins +maxTxFee=5000000000 + [store] # 数据文件存储路径 dbPath="datadir/mavltree" diff --git a/cmd/chain33/chain33.fork.toml b/cmd/chain33/chain33.fork.toml index 921312d6d3..089e0083b2 100644 --- a/cmd/chain33/chain33.fork.toml +++ b/cmd/chain33/chain33.fork.toml @@ -26,6 +26,7 @@ ForkRootHash=4500000 ForkFormatAddressKey=0 ForkCheckEthTxSort=0 ForkProxyExec=0 +ForkMaxTxFeeV1=0 [fork.sub.none] ForkUseTimeDelay=0 diff --git a/cmd/chain33/chain33.system.fork.toml b/cmd/chain33/chain33.system.fork.toml index 74f579ecda..e926a3f028 100644 --- a/cmd/chain33/chain33.system.fork.toml +++ b/cmd/chain33/chain33.system.fork.toml @@ -26,3 +26,4 @@ ForkRootHash=4500000 ForkFormatAddressKey=0 ForkCheckEthTxSort=0 ForkProxyExec=0 +ForkMaxTxFeeV1=0 \ No newline at end of file diff --git a/cmd/chain33/chain33.test.toml b/cmd/chain33/chain33.test.toml index 1ee425815a..02cf92cd8c 100644 --- a/cmd/chain33/chain33.test.toml +++ b/cmd/chain33/chain33.test.toml @@ -103,6 +103,10 @@ maxTxFee=1000000000 maxTxNumPerAccount=10240 isLevelFee=false +[mver.mempool.ForkMaxTxFeeV1] +# 单笔交易最大的手续费, 50 coins +maxTxFee=5000000000 + [mempool.sub.timeline] poolCacheSize=10240 diff --git a/cmd/chain33/chain33.toml b/cmd/chain33/chain33.toml index c0f7e99b46..a43e2283b4 100644 --- a/cmd/chain33/chain33.toml +++ b/cmd/chain33/chain33.toml @@ -152,6 +152,11 @@ maxTxFee=1000000000 # 是否开启阶梯手续费 isLevelFee=false +[mver.mempool.ForkMaxTxFeeV1] +# 单笔交易最大的手续费, 50 coins +maxTxFee=5000000000 + + [mempool.sub.timeline] # mempool缓存容量大小,默认10240 poolCacheSize=10240 diff --git a/executor/execenv.go b/executor/execenv.go index f3a8677460..799a9083a1 100644 --- a/executor/execenv.go +++ b/executor/execenv.go @@ -159,7 +159,7 @@ func (e *executor) checkTx(tx *types.Transaction, index int) error { //如果已经过期 return types.ErrTxExpire } - if err := tx.Check(e.cfg, e.height, e.cfg.GetMinTxFeeRate(), e.cfg.GetMaxTxFee()); err != nil { + if err := tx.Check(e.cfg, e.height, e.cfg.GetMinTxFeeRate(), e.cfg.GetMaxTxFee(e.height)); err != nil { return err } //允许重写的情况 @@ -191,7 +191,7 @@ func (e *executor) checkTxGroup(txgroup *types.Transactions, index int) error { //如果已经过期 return types.ErrTxExpire } - if err := txgroup.Check(e.cfg, e.height, e.cfg.GetMinTxFeeRate(), e.cfg.GetMaxTxFee()); err != nil { + if err := txgroup.Check(e.cfg, e.height, e.cfg.GetMinTxFeeRate(), e.cfg.GetMaxTxFee(e.height)); err != nil { return err } return nil diff --git a/rpc/client/client.go b/rpc/client/client.go index fa9113d6c5..451197018a 100644 --- a/rpc/client/client.go +++ b/rpc/client/client.go @@ -26,7 +26,7 @@ import ( var log = log15.New("module", "rpc_client") -//ChannelClient ... +// ChannelClient ... type ChannelClient struct { client.QueueProtocolAPI accountdb *account.DB @@ -96,7 +96,7 @@ func (c *ChannelClient) CreateRawTransaction(param *types.CreateTx) ([]byte, err return types.Encode(tx), nil } -//ReWriteRawTx rewrite tx +// ReWriteRawTx rewrite tx func (c *ChannelClient) ReWriteRawTx(param *types.ReWriteRawTx) ([]byte, error) { types.AssertConfig(c.QueueProtocolAPI) cfg := c.QueueProtocolAPI.GetConfig() @@ -262,7 +262,7 @@ func (c *ChannelClient) CreateNoBalanceTxs(in *types.NoBalanceTxs) (*types.Trans if err != nil { return nil, err } - err = group.Check(cfg, 0, cfg.GetMinTxFeeRate(), cfg.GetMaxTxFee()) + err = group.Check(cfg, 0, cfg.GetMinTxFeeRate(), cfg.GetMaxTxFee(0)) if err != nil { return nil, err } @@ -281,7 +281,7 @@ func (c *ChannelClient) CreateNoBalanceTxs(in *types.NoBalanceTxs) (*types.Trans return newtx, nil } -//DecodeTx decode hextx +// DecodeTx decode hextx func DecodeTx(hexstr string) (*types.Transaction, error) { var tx types.Transaction data, err := common.FromHex(hexstr) diff --git a/rpc/client/client_test.go b/rpc/client/client_test.go index d4b459010e..a4ef5b4392 100644 --- a/rpc/client/client_test.go +++ b/rpc/client/client_test.go @@ -370,7 +370,7 @@ func TestChannelClient_CreateNoBalanceTransaction(t *testing.T) { tx, err := client.CreateNoBalanceTxs(params) assert.NoError(t, err) gtx, _ := tx.GetTxGroup() - assert.NoError(t, gtx.Check(cfg, 0, fee, cfg.GetMaxTxFee())) + assert.NoError(t, gtx.Check(cfg, 0, fee, cfg.GetMaxTxFee(0))) assert.NoError(t, err) params.Expire = "300s" tx, err = client.CreateNoBalanceTxs(params) diff --git a/rpc/grpchandler.go b/rpc/grpchandler.go index 48aaa122b4..d3cd7a821b 100755 --- a/rpc/grpchandler.go +++ b/rpc/grpchandler.go @@ -551,7 +551,7 @@ func (g *Grpc) GetParaTxByHeight(ctx context.Context, in *pb.ReqParaTxByHeight) return g.cli.GetParaTxByHeight(in) } -//GetAccount 通过地址标签获取账户地址以及账户余额信息 +// GetAccount 通过地址标签获取账户地址以及账户余额信息 func (g *Grpc) GetAccount(ctx context.Context, in *pb.ReqGetAccount) (*pb.WalletAccount, error) { acc, err := g.cli.ExecWalletFunc("wallet", "WalletGetAccount", in) if err != nil { @@ -597,6 +597,11 @@ func (g *Grpc) SignWalletRecoverTx(ctx context.Context, in *pb.ReqSignWalletReco // GetChainConfig 获取chain config 参数 func (g *Grpc) GetChainConfig(ctx context.Context, in *pb.ReqNil) (*pb.ChainConfigInfo, error) { cfg := g.cli.GetConfig() + currentH := int64(0) + lastH, err := g.GetLastHeader(ctx, in) + if err == nil { + currentH = lastH.GetHeight() + } return &pb.ChainConfigInfo{ Title: cfg.GetTitle(), CoinExec: cfg.GetCoinExec(), @@ -604,7 +609,7 @@ func (g *Grpc) GetChainConfig(ctx context.Context, in *pb.ReqNil) (*pb.ChainConf CoinPrecision: cfg.GetCoinPrecision(), TokenPrecision: cfg.GetTokenPrecision(), ChainID: cfg.GetChainID(), - MaxTxFee: cfg.GetMaxTxFee(), + MaxTxFee: cfg.GetMaxTxFee(currentH), MinTxFeeRate: cfg.GetMinTxFeeRate(), MaxTxFeeRate: cfg.GetMaxTxFeeRate(), IsPara: cfg.IsPara(), @@ -612,28 +617,28 @@ func (g *Grpc) GetChainConfig(ctx context.Context, in *pb.ReqNil) (*pb.ChainConf }, nil } -//ConvertExectoAddr 根据执行器的名字创建地址 +// ConvertExectoAddr 根据执行器的名字创建地址 func (g *Grpc) ConvertExectoAddr(ctx context.Context, in *pb.ReqString) (*pb.ReplyString, error) { addr := address.ExecAddress(in.GetData()) return &pb.ReplyString{Data: addr}, nil } -//GetCoinSymbol get coin symbol +// GetCoinSymbol get coin symbol func (g *Grpc) GetCoinSymbol(ctx context.Context, in *pb.ReqNil) (*pb.ReplyString, error) { return &pb.ReplyString{Data: g.cli.GetConfig().GetCoinSymbol()}, nil } -//GetBlockSequences ... +// GetBlockSequences ... func (g *Grpc) GetBlockSequences(ctx context.Context, in *pb.ReqBlocks) (*pb.BlockSequences, error) { return g.cli.GetBlockSequences(in) } -//AddPushSubscribe ... +// AddPushSubscribe ... func (g *Grpc) AddPushSubscribe(ctx context.Context, in *pb.PushSubscribeReq) (*pb.ReplySubscribePush, error) { return g.cli.AddPushSubscribe(in) } -//ListPushes 列举推送服务 +// ListPushes 列举推送服务 func (g *Grpc) ListPushes(ctx context.Context, in *pb.ReqNil) (*pb.PushSubscribes, error) { resp, err := g.cli.ListPushes() if err != nil { @@ -647,7 +652,7 @@ func (g *Grpc) GetPushSeqLastNum(ctx context.Context, in *pb.ReqString) (*pb.Int return g.cli.GetPushSeqLastNum(in) } -//SubEvent 订阅消息推送服务 +// SubEvent 订阅消息推送服务 func (g *Grpc) SubEvent(in *pb.ReqSubscribe, resp pb.Chain33_SubEventServer) error { sub := g.hashTopic(in.Name) dataChan := make(chan *queue.Message, 128) @@ -708,7 +713,7 @@ func (g *Grpc) SubEvent(in *pb.ReqSubscribe, resp pb.Chain33_SubEventServer) err return err } -//UnSubEvent 取消订阅 +// UnSubEvent 取消订阅 func (g *Grpc) UnSubEvent(ctx context.Context, in *pb.ReqString) (*pb.Reply, error) { //删除缓存的TopicID err := g.delSubInfo(in.GetData(), nil) diff --git a/rpc/jrpchandler.go b/rpc/jrpchandler.go index 2d58dedf7e..04432dbf12 100644 --- a/rpc/jrpchandler.go +++ b/rpc/jrpchandler.go @@ -556,7 +556,7 @@ func (c *Chain33) SetLabl(in *types.ReqWalletSetLabel, result *interface{}) erro return nil } -//GetAccount getAddress by lable +// GetAccount getAddress by lable func (c *Chain33) GetAccount(in *types.ReqGetAccount, result *interface{}) error { reply, err := c.cli.ExecWalletFunc("wallet", "WalletGetAccount", in) if err != nil { @@ -1391,7 +1391,7 @@ func (c *Chain33) NetProtocols(in *types.ReqNil, result *interface{}) error { return nil } -//GetSequenceByHash get sequcen by hashes +// GetSequenceByHash get sequcen by hashes func (c *Chain33) GetSequenceByHash(in rpctypes.ReqHashes, result *interface{}) error { if len(in.Hashes) != 0 && common.IsHex(in.Hashes[0]) { var req types.ReqHash @@ -1409,7 +1409,7 @@ func (c *Chain33) GetSequenceByHash(in rpctypes.ReqHashes, result *interface{}) } -//GetBlockBySeq get block by seq +// GetBlockBySeq get block by seq func (c *Chain33) GetBlockBySeq(in *types.Int64, result *interface{}) error { blockSeq, err := c.cli.GetBlockBySeq(in) @@ -1445,7 +1445,7 @@ func convertHeader(header *types.Header, message *rpctypes.Header) { } } -//GetParaTxByTitle get paraTx by title +// GetParaTxByTitle get paraTx by title func (c *Chain33) GetParaTxByTitle(req *types.ReqParaTxByTitle, result *interface{}) error { paraTxDetails, err := c.cli.GetParaTxByTitle(req) if err != nil { @@ -1457,7 +1457,7 @@ func (c *Chain33) GetParaTxByTitle(req *types.ReqParaTxByTitle, result *interfac return nil } -//LoadParaTxByTitle load paratx by title +// LoadParaTxByTitle load paratx by title func (c *Chain33) LoadParaTxByTitle(req *types.ReqHeightByTitle, result *interface{}) error { reply, err := c.cli.LoadParaTxByTitle(req) @@ -1511,7 +1511,7 @@ func convertParaTxDetails(details *types.ParaTxDetails, message *rpctypes.ParaTx } -//GetParaTxByHeight get paraTx by block height +// GetParaTxByHeight get paraTx by block height func (c *Chain33) GetParaTxByHeight(req *types.ReqParaTxByHeight, result *interface{}) error { paraTxDetails, err := c.cli.GetParaTxByHeight(req) if err != nil { @@ -1524,7 +1524,7 @@ func (c *Chain33) GetParaTxByHeight(req *types.ReqParaTxByHeight, result *interf } -//QueryChain querychain by chain executor +// QueryChain querychain by chain executor func (c *Chain33) QueryChain(in rpctypes.ChainExecutor, result *interface{}) error { var qin = new(types.ChainExecutor) msg, err := types.QueryFunc.DecodeJSON(in.Driver, in.FuncName, in.Payload) @@ -1614,6 +1614,11 @@ func (c *Chain33) SignWalletRecoverTx(req *types.ReqSignWalletRecoverTx, result // GetChainConfig 获取chain config 参数 func (c *Chain33) GetChainConfig(in *types.ReqNil, result *interface{}) error { cfg := c.cli.GetConfig() + currentH := int64(0) + lastH, err := c.cli.GetLastHeader() + if err == nil { + currentH = lastH.GetHeight() + } info := rpctypes.ChainConfigInfo{ Title: cfg.GetTitle(), CoinExec: cfg.GetCoinExec(), @@ -1621,7 +1626,7 @@ func (c *Chain33) GetChainConfig(in *types.ReqNil, result *interface{}) error { CoinPrecision: cfg.GetCoinPrecision(), TokenPrecision: cfg.GetTokenPrecision(), ChainID: cfg.GetChainID(), - MaxTxFee: cfg.GetMaxTxFee(), + MaxTxFee: cfg.GetMaxTxFee(currentH), MinTxFeeRate: cfg.GetMinTxFeeRate(), MaxTxFeeRate: cfg.GetMaxTxFeeRate(), IsPara: cfg.IsPara(), @@ -1631,7 +1636,7 @@ func (c *Chain33) GetChainConfig(in *types.ReqNil, result *interface{}) error { return nil } -//AddBlacklist add peer to blacklist ,time deadline:10 years +// AddBlacklist add peer to blacklist ,time deadline:10 years func (c *Chain33) AddBlacklist(in *types.BlackPeer, result *interface{}) error { reply, err := c.cli.AddBlacklist(in) if err != nil { @@ -1645,7 +1650,7 @@ func (c *Chain33) AddBlacklist(in *types.BlackPeer, result *interface{}) error { } -//DelBlacklist delete peer from blacklist +// DelBlacklist delete peer from blacklist func (c *Chain33) DelBlacklist(in *types.BlackPeer, result *interface{}) error { reply, err := c.cli.DelBlacklist(in) if err != nil { @@ -1659,7 +1664,7 @@ func (c *Chain33) DelBlacklist(in *types.BlackPeer, result *interface{}) error { } -//ShowBlacklist show all peers from blacklist +// ShowBlacklist show all peers from blacklist func (c *Chain33) ShowBlacklist(in *types.ReqNil, result *interface{}) error { reply, err := c.cli.ShowBlacklist(in) if err != nil { @@ -1670,7 +1675,7 @@ func (c *Chain33) ShowBlacklist(in *types.ReqNil, result *interface{}) error { return nil } -//DialPeer dial the specified peer +// DialPeer dial the specified peer func (c *Chain33) DialPeer(in *types.SetPeer, result *interface{}) error { reply, err := c.cli.DialPeer(in) if err != nil { @@ -1683,7 +1688,7 @@ func (c *Chain33) DialPeer(in *types.SetPeer, result *interface{}) error { return nil } -//ClosePeer close the specified peer +// ClosePeer close the specified peer func (c *Chain33) ClosePeer(in *types.SetPeer, result *interface{}) error { reply, err := c.cli.ClosePeer(in) if err != nil { diff --git a/rpc/jrpchandler_test.go b/rpc/jrpchandler_test.go index 956074374f..7a33475eef 100644 --- a/rpc/jrpchandler_test.go +++ b/rpc/jrpchandler_test.go @@ -470,7 +470,7 @@ func TestChain33_CreateTxGroup(t *testing.T) { t.Error("Test createtxgroup failed") return } - err = tx.Check(cfg, 0, cfg.GetMinTxFeeRate(), cfg.GetMaxTxFee()) + err = tx.Check(cfg, 0, cfg.GetMinTxFeeRate(), cfg.GetMaxTxFee(0)) assert.Nil(t, err) } diff --git a/system/dapp/commands/coins.go b/system/dapp/commands/coins.go index dca17b486d..33da215e7c 100644 --- a/system/dapp/commands/coins.go +++ b/system/dapp/commands/coins.go @@ -64,7 +64,7 @@ func addCreateEthTransferFlags(cmd *cobra.Command) { } -//createTransferEthMode eth 交易构造 +// createTransferEthMode eth 交易构造 func createTransferEthMode(cmd *cobra.Command, args []string) { rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr") toAddr, _ := cmd.Flags().GetString("to") @@ -327,7 +327,7 @@ func createTxGroup(cmd *cobra.Command, args []string) { fmt.Fprintln(os.Stderr, err) return } - err = group.CheckWithFork(cfg, true, true, 0, cfg.GetMinTxFeeRate(), cfg.GetMaxTxFee()) + err = group.CheckWithFork(cfg, true, true, 0, cfg.GetMinTxFeeRate(), cfg.GetMaxTxFee(0)) if err != nil { fmt.Fprintln(os.Stderr, err) return diff --git a/system/dapp/driver.go b/system/dapp/driver.go index 1a0fa58a58..4e39628714 100644 --- a/system/dapp/driver.go +++ b/system/dapp/driver.go @@ -101,7 +101,7 @@ type DriverBase struct { ety types.ExecutorType } -//Upgrade default upgrade only print a message +// Upgrade default upgrade only print a message func (d *DriverBase) Upgrade() (*types.LocalDBSet, error) { blog.Info("upgrade ", "dapp", d.GetName()) return nil, nil @@ -120,13 +120,13 @@ func (d *DriverBase) GetExecutorType() types.ExecutorType { return d.ety } -//ExecutorOrder 执行顺序, 如果要使用 ExecLocalSameTime -//那么会同时执行 ExecLocal +// ExecutorOrder 执行顺序, 如果要使用 ExecLocalSameTime +// 那么会同时执行 ExecLocal func (d *DriverBase) ExecutorOrder() int64 { return 0 } -//GetLastHash 获取最后区块的hash,主链和平行链不同 +// GetLastHash 获取最后区块的hash,主链和平行链不同 func (d *DriverBase) GetLastHash() []byte { types.AssertConfig(d.api) cfg := d.api.GetConfig() @@ -136,7 +136,7 @@ func (d *DriverBase) GetLastHash() []byte { return d.parentHash } -//GetParentHash 获取上一个区块的hash +// GetParentHash 获取上一个区块的hash func (d *DriverBase) GetParentHash() []byte { return d.parentHash } @@ -176,7 +176,7 @@ func (d *DriverBase) SetEnv(height, blocktime int64, difficulty uint64) { d.difficulty = difficulty } -//SetBlockInfo 设置区块的信息 +// SetBlockInfo 设置区块的信息 func (d *DriverBase) SetBlockInfo(parentHash, mainHash []byte, mainHeight int64) { d.parentHash = parentHash d.mainHash = mainHash @@ -384,7 +384,7 @@ func (d *DriverBase) GetTxGroup(index int) ([]*types.Transaction, error) { for i := index; i >= 0 && i >= index-c; i-- { if bytes.Equal(d.txs[i].Header, d.txs[i].Hash()) { //find header txgroup := types.Transactions{Txs: d.txs[i : i+c]} - err := txgroup.Check(cfg, d.GetHeight(), cfg.GetMinTxFeeRate(), cfg.GetMaxTxFee()) + err := txgroup.Check(cfg, d.GetHeight(), cfg.GetMinTxFeeRate(), cfg.GetMaxTxFee(d.GetHeight())) if err != nil { return nil, err } @@ -509,7 +509,7 @@ func (d *DriverBase) CheckReceiptExecOk() bool { return false } -//AddRollbackKV add rollback kv +// AddRollbackKV add rollback kv func (d *DriverBase) AddRollbackKV(tx *types.Transaction, execer []byte, kvs []*types.KeyValue) []*types.KeyValue { k := types.CalcRollbackKey(types.GetRealExecName(execer), tx.Hash()) kvc := NewKVCreator(d.GetLocalDB(), types.CalcLocalPrefix(execer), k) @@ -518,7 +518,7 @@ func (d *DriverBase) AddRollbackKV(tx *types.Transaction, execer []byte, kvs []* return kvc.KVList() } -//DelRollbackKV del rollback kv when exec_del_local +// DelRollbackKV del rollback kv when exec_del_local func (d *DriverBase) DelRollbackKV(tx *types.Transaction, execer []byte) ([]*types.KeyValue, error) { krollback := types.CalcRollbackKey(types.GetRealExecName(execer), tx.Hash()) kvc := NewKVCreator(d.GetLocalDB(), types.CalcLocalPrefix(execer), krollback) diff --git a/system/mempool/base.go b/system/mempool/base.go index 202c325863..fedf797db9 100644 --- a/system/mempool/base.go +++ b/system/mempool/base.go @@ -468,7 +468,7 @@ func (mem *Mempool) delBlock(block *types.Block) { tx = group.Tx() i = i + groupCount - 1 } - err := tx.Check(cfg, mem.GetHeader().GetHeight(), mem.cfg.MinTxFeeRate, mem.cfg.MaxTxFee) + err := tx.Check(cfg, mem.GetHeader().GetHeight(), mem.cfg.MinTxFeeRate, mem.api.GetConfig().GetMaxTxFee(mem.GetHeader().GetHeight())) if err != nil { continue } diff --git a/system/mempool/check.go b/system/mempool/check.go index e7e02c4442..45fe4ec8a3 100644 --- a/system/mempool/check.go +++ b/system/mempool/check.go @@ -104,7 +104,7 @@ func (mem *Mempool) checkTxs(msg *queue.Message) *queue.Message { return msg } - err := cacheTx.Check(cfg, mem.GetHeader().GetHeight()+1, mem.cfg.MinTxFeeRate, mem.cfg.MaxTxFee) + err := cacheTx.Check(cfg, mem.GetHeader().GetHeight()+1, mem.cfg.MinTxFeeRate, mem.api.GetConfig().GetMaxTxFee(mem.GetHeader().GetHeight()+1)) if err == nil && mem.cfg.IsLevelFee { err = mem.checkLevelFee(cacheTx) } diff --git a/types/config.go b/types/config.go index 99014b4fca..4b8972723b 100644 --- a/types/config.go +++ b/types/config.go @@ -20,10 +20,10 @@ import ( tml "github.com/BurntSushi/toml" ) -//Create ... +// Create ... type Create func(cfg *Chain33Config) -//区块链共识相关的参数,重要参数不要随便修改 +// 区块链共识相关的参数,重要参数不要随便修改 var ( AllowUserExec = [][]byte{ExecerNone} EmptyValue = []byte("FFFFFFFFemptyBVBiCj5jvE15pEiwro8TQRGnJSNsJF") //这字符串表示数据库中的空值 @@ -46,7 +46,7 @@ const ( DefaultMinFee int64 = 1e5 ) -//Chain33Config ... +// Chain33Config ... type Chain33Config struct { mcfg *Config scfg *ConfigSubModule @@ -65,13 +65,13 @@ type Chain33Config struct { chainID int32 } -//ChainParam 结构体 +// ChainParam 结构体 type ChainParam struct { MaxTxNumber int64 PowLimitBits uint32 } -//RegFork Reg 注册每个模块的自动初始化函数 +// RegFork Reg 注册每个模块的自动初始化函数 func RegFork(name string, create Create) { if create == nil { panic("config: Register Module Init is nil") @@ -82,14 +82,14 @@ func RegFork(name string, create Create) { regModuleInit[name] = create } -//RegForkInit ... +// RegForkInit ... func RegForkInit(cfg *Chain33Config) { for _, item := range regModuleInit { item(cfg) } } -//RegExec ... +// RegExec ... func RegExec(name string, create Create) { if create == nil { panic("config: Register Exec Init is nil") @@ -100,7 +100,7 @@ func RegExec(name string, create Create) { regExecInit[name] = create } -//RegExecInit ... +// RegExecInit ... func RegExecInit(cfg *Chain33Config) { runonce.Do(func() { for _, item := range regExecInit { @@ -109,14 +109,14 @@ func RegExecInit(cfg *Chain33Config) { }) } -//NewChain33Config ... +// NewChain33Config ... func NewChain33Config(cfgstring string) *Chain33Config { chain33Cfg := NewChain33ConfigNoInit(cfgstring) chain33Cfg.chain33CfgInit(chain33Cfg.mcfg) return chain33Cfg } -//NewChain33ConfigNoInit ... +// NewChain33ConfigNoInit ... func NewChain33ConfigNoInit(cfgstring string) *Chain33Config { cfg, sub := InitCfgString(cfgstring) chain33Cfg := &Chain33Config{ @@ -147,22 +147,22 @@ func NewChain33ConfigNoInit(cfgstring string) *Chain33Config { return chain33Cfg } -//GetModuleConfig ... +// GetModuleConfig ... func (c *Chain33Config) GetModuleConfig() *Config { return c.mcfg } -//GetSubConfig ... +// GetSubConfig ... func (c *Chain33Config) GetSubConfig() *ConfigSubModule { return c.scfg } -//DisableCheckFork ... +// DisableCheckFork ... func (c *Chain33Config) DisableCheckFork(d bool) { c.disableCheckFork = d } -//GetForks ... +// GetForks ... func (c *Chain33Config) GetForks() (map[string]int64, error) { if c.forks == nil { return nil, ErrNotFound @@ -306,7 +306,7 @@ func (c *Chain33Config) chain33CfgInit(cfg *Config) { } } -//只检查是否是10的指数,不限制最大精度 +// 只检查是否是10的指数,不限制最大精度 func checkPrecision(precision int64) bool { s := strconv.Itoa(int(precision)) n := strings.Count(s, "0") @@ -475,7 +475,7 @@ func (c *Chain33Config) S(key string, value interface{}) { c.setChainConfig(key, value) } -//SetTitleOnlyForTest set title only for test use +// SetTitleOnlyForTest set title only for test use func (c *Chain33Config) SetTitleOnlyForTest(ti string) { c.mu.Lock() defer c.mu.Unlock() @@ -539,9 +539,15 @@ func (c *Chain33Config) GetMaxTxFeeRate() int64 { return c.GInt("MaxTxFeeRate") } -// GetMaxTxFee get max transaction fee -func (c *Chain33Config) GetMaxTxFee() int64 { +// GetMaxTxFee get max transaction fee by blockheight +func (c *Chain33Config) GetMaxTxFee(height int64) int64 { + if c.IsFork(height, "ForkMaxTxFeeV1") { + conf := Conf(c, "mver.mempool") + return conf.MGInt("maxTxFee", height) + } + return c.GInt("MaxTxFee") + } // SetTxFeeConfig 设置交易费相关配置 @@ -592,12 +598,12 @@ func IsParaExecName(exec string) bool { return strings.HasPrefix(exec, ParaKeyX) } -//IsMyParaExecName 是否是我的para链的执行器 +// IsMyParaExecName 是否是我的para链的执行器 func (c *Chain33Config) IsMyParaExecName(exec string) bool { return IsParaExecName(exec) && strings.HasPrefix(exec, c.GetTitle()) } -//IsSpecificParaExecName 是否是某一个平行链的执行器 +// IsSpecificParaExecName 是否是某一个平行链的执行器 func IsSpecificParaExecName(title, exec string) bool { return IsParaExecName(exec) && strings.HasPrefix(exec, title) } @@ -659,7 +665,7 @@ func IsForward2MainChainTx(cfg *Chain33Config, tx *Transaction) bool { return false } -//GetParaExecTitleName 如果是平行链执行器,获取对应title +// GetParaExecTitleName 如果是平行链执行器,获取对应title func GetParaExecTitleName(exec string) (string, bool) { if IsParaExecName(exec) { for i := len(ParaKey); i < len(exec); i++ { @@ -699,7 +705,7 @@ func MergeConfig(conf map[string]interface{}, def map[string]interface{}) string return "" } -//检查默认配置文件 +// 检查默认配置文件 func checkConfig(key string, conf map[string]interface{}, def map[string]interface{}) string { errstr := "" for key1, value1 := range conf { @@ -738,7 +744,7 @@ func getkey(key, key1 string) string { return key + "." + key1 } -//MergeCfg ... +// MergeCfg ... func MergeCfg(cfgstring, cfgdefault string) string { if cfgdefault != "" { return mergeCfgString(cfgstring, cfgdefault) @@ -821,7 +827,7 @@ func InitCfgString(cfgstring string) (*Config, *ConfigSubModule) { return cfg, sub } -//ReadFile ... +// ReadFile ... func ReadFile(path string) string { return readFile(path) } @@ -856,7 +862,7 @@ func parseSubModule(cfg *subModule) (*ConfigSubModule, error) { return &subcfg, nil } -//ModifySubConfig json data modify +// ModifySubConfig json data modify func ModifySubConfig(sub []byte, key string, value interface{}) ([]byte, error) { var data map[string]interface{} err := json.Unmarshal(sub, &data) @@ -973,7 +979,7 @@ func (query *ConfQuery) MIsEnable(key string, height int64) bool { return query.cfg.MIsEnable(getkey(query.prefix, key), height) } -//SetCliSysParam ... +// SetCliSysParam ... func SetCliSysParam(title string, cfg *Chain33Config) { if cfg == nil { panic("set cli system Chain33Config param is nil") @@ -981,7 +987,7 @@ func SetCliSysParam(title string, cfg *Chain33Config) { cliSysParam[title] = cfg } -//GetCliSysParam ... +// GetCliSysParam ... func GetCliSysParam(title string) *Chain33Config { if v, ok := cliSysParam[title]; ok { return v @@ -989,7 +995,7 @@ func GetCliSysParam(title string) *Chain33Config { panic(fmt.Sprintln("can not find CliSysParam title", title)) } -//AssertConfig ... +// AssertConfig ... func AssertConfig(check interface{}) { if check == nil { panic("check object is nil (Chain33Config)") diff --git a/types/config_test.go b/types/config_test.go index 38bddf5a47..840e54628e 100644 --- a/types/config_test.go +++ b/types/config_test.go @@ -26,7 +26,7 @@ func TestChainConfig(t *testing.T) { assert.Equal(t, adata.(bool), true) // tx fee config - assert.Equal(t, cfg.GetMaxTxFee(), int64(1e9)) + assert.Equal(t, cfg.GetMaxTxFee(0), int64(1e9)) assert.Equal(t, cfg.GetMaxTxFeeRate(), int64(1e7)) assert.Equal(t, cfg.GetMinTxFeeRate(), int64(1e5)) height, ok := cfg.GetModuleConfig().Crypto.EnableHeight[secp256k1.Name] @@ -36,7 +36,7 @@ func TestChainConfig(t *testing.T) { assert.Equal(t, int64(0), height) } -//测试实际的配置文件 +// 测试实际的配置文件 func TestSubConfig(t *testing.T) { cfg, err := initSubModuleString(readFile("testdata/chain33.toml")) assert.Equal(t, 0, len(cfg.Consensus)) @@ -64,11 +64,15 @@ func TestConfigNoInit(t *testing.T) { confsubtoken := Conf(cfg, "config.fork.sub.token") assert.Equal(t, confsubtoken.GInt("Enable"), int64(100899)) // tx fee config - assert.Equal(t, int64(1e8), cfg.GetMaxTxFee()) + assert.Equal(t, int64(1e8), cfg.GetMaxTxFee(0)) assert.Equal(t, int64(1e6), cfg.GetMaxTxFeeRate()) assert.Equal(t, int64(1e5), cfg.GetMinTxFeeRate()) cfg.SetTxFeeConfig(1e9, 1e9, 1e9) - assert.True(t, int64(1e9) == cfg.GetMinTxFeeRate() && cfg.GetMaxTxFeeRate() == cfg.GetMaxTxFee()) + assert.True(t, int64(1e9) == cfg.GetMinTxFeeRate() && cfg.GetMaxTxFeeRate() == cfg.GetMaxTxFee(0)) + //分叉高度30839600 + assert.True(t, 5000000000 == cfg.GetMaxTxFee(30839600)) + //分叉高度30939600 + assert.True(t, 2000000000 == cfg.GetMaxTxFee(30939600)) } func TestBityuanInit(t *testing.T) { diff --git a/types/fork.go b/types/fork.go index a2bdf29f47..8e6aa0f307 100644 --- a/types/fork.go +++ b/types/fork.go @@ -16,7 +16,7 @@ MaxHeight 出于forks 过程安全的考虑,比如代码更新,出现了新 */ const MaxHeight = 10000000000000000 -//Forks fork分叉结构体 +// Forks fork分叉结构体 type Forks struct { forks map[string]int64 } @@ -27,25 +27,25 @@ func checkKey(key string) { } } -//SetFork 设置fork信息 +// SetFork 设置fork信息 func (f *Forks) SetFork(key string, height int64) { checkKey(key) f.setFork(key, height) } -//ReplaceFork 替换fork信息 +// ReplaceFork 替换fork信息 func (f *Forks) ReplaceFork(key string, height int64) { checkKey(key) f.replaceFork(key, height) } -//SetDappFork 设置dapp的fork信息 +// SetDappFork 设置dapp的fork信息 func (f *Forks) SetDappFork(dapp, key string, height int64) { checkKey(key) f.setFork(dapp+"."+key, height) } -//ReplaceDappFork 替换dapp的fork信息 +// ReplaceDappFork 替换dapp的fork信息 func (f *Forks) ReplaceDappFork(dapp, key string, height int64) { checkKey(key) f.replaceFork(dapp+"."+key, height) @@ -144,6 +144,8 @@ func (f *Forks) SetTestNetFork() { f.SetFork(address.ForkFormatAddressKey, 0) f.setFork("ForkCheckEthTxSort", 0) f.setFork("ForkProxyExec", 0) + f.setFork("ForkMaxTxFeeV1", 0) + f.setFork("ForkMaxTxFeeV2", 0) } func (f *Forks) setLocalFork() { @@ -152,7 +154,7 @@ func (f *Forks) setLocalFork() { f.ReplaceFork("ForkRootHash", 1) } -//paraName not used currently +// paraName not used currently func (f *Forks) setForkForParaZero() { f.SetAllFork(0) f.ReplaceFork("ForkBlockHash", 1) @@ -214,8 +216,8 @@ func (c *Chain33Config) IsEnableFork(height int64, fork string, enable bool) boo return c.IsFork(height, fork) } -//fork 设置规则: -//所有的fork都需要有明确的配置,不开启fork 配置为 -1; forks即为从toml中读入文件 +// fork 设置规则: +// 所有的fork都需要有明确的配置,不开启fork 配置为 -1; forks即为从toml中读入文件 func (c *Chain33Config) initForkConfig(forks *ForkList) { chain33fork := c.forks.GetAll() if chain33fork == nil { diff --git a/types/testdata/chain33.toml b/types/testdata/chain33.toml index b40afe7acf..7e814ca32e 100644 --- a/types/testdata/chain33.toml +++ b/types/testdata/chain33.toml @@ -68,6 +68,11 @@ maxTxFeeRate=1000000 maxTxFee=100000000 maxTxNumPerAccount=10000 +[mver.mempool.ForkMaxTxFeeV1] +maxTxFee=5000000000 +[mver.mempool.ForkMaxTxFeeV2] +maxTxFee=2000000000 + [consensus] name="ticket" minerstart=true @@ -149,7 +154,8 @@ ForkV22ExecRollback= 706531 ForkV23TxHeight= 806578 ForkV24TxGroupPara= 806578 ForkStateDBSet=-1 - +ForkMaxTxFeeV1=30839600 +ForkMaxTxFeeV2=30939600 [fork.sub.manage] Enable=120000 ForkV11ManageExec= 400000 diff --git a/types/tx_test.go b/types/tx_test.go index 1167708d20..11ed57e60d 100644 --- a/types/tx_test.go +++ b/types/tx_test.go @@ -42,7 +42,7 @@ func TestCreateGroupTx(t *testing.T) { t.Error(err) return } - err = group.Check(cfg, 0, cfg.GetMinTxFeeRate(), cfg.GetMaxTxFee()) + err = group.Check(cfg, 0, cfg.GetMinTxFeeRate(), cfg.GetMaxTxFee(0)) if err != nil { for i := 0; i < len(group.Txs); i++ { t.Log(group.Txs[i].JSON()) @@ -85,7 +85,7 @@ func TestCreateParaGroupTx(t *testing.T) { t.Error(err) return } - err = group.Check(cfg, testHeight, cfg.GetMinTxFeeRate(), cfg.GetMaxTxFee()) + err = group.Check(cfg, testHeight, cfg.GetMinTxFeeRate(), cfg.GetMaxTxFee(0)) if err != nil { for i := 0; i < len(group.Txs); i++ { t.Log(group.Txs[i].JSON()) @@ -101,7 +101,7 @@ func TestCreateParaGroupTx(t *testing.T) { t.Error(err) return } - err = group.Check(cfg, testHeight, cfg.GetMinTxFeeRate(), cfg.GetMaxTxFee()) + err = group.Check(cfg, testHeight, cfg.GetMinTxFeeRate(), cfg.GetMaxTxFee(0)) assert.Equal(t, ErrTxGroupParaCount, err) tx22.Execer = []byte("user.p.test.paracross") @@ -110,7 +110,7 @@ func TestCreateParaGroupTx(t *testing.T) { t.Error(err) return } - err = group.Check(cfg, testHeight, cfg.GetMinTxFeeRate(), cfg.GetMaxTxFee()) + err = group.Check(cfg, testHeight, cfg.GetMinTxFeeRate(), cfg.GetMaxTxFee(0)) assert.Nil(t, err) newtx := group.Tx() grouptx := hex.EncodeToString(Encode(newtx)) @@ -151,7 +151,7 @@ func TestCreateGroupTxWithSize(t *testing.T) { return } - err = group.Check(cfg, 0, cfg.GetMinTxFeeRate(), cfg.GetMaxTxFee()) + err = group.Check(cfg, 0, cfg.GetMinTxFeeRate(), cfg.GetMaxTxFee(0)) if err != nil { for i := 0; i < len(group.Txs); i++ { t.Log(group.Txs[i].JSON()) @@ -236,7 +236,7 @@ func TestSignGroupTx(t *testing.T) { return } } - err = group.Check(cfg, 0, cfg.GetMinTxFeeRate(), cfg.GetMaxTxFee()) + err = group.Check(cfg, 0, cfg.GetMinTxFeeRate(), cfg.GetMaxTxFee(0)) if err != nil { t.Error(err) return From 176df2a3819a7864581aa0102aaeef83a68e3b58 Mon Sep 17 00:00:00 2001 From: libangzhu <601276804@qq.com> Date: Wed, 17 Jan 2024 11:51:18 +0800 Subject: [PATCH 2/7] update test --- cmd/chain33/chain33.fork.toml | 1 - types/config.go | 8 +++++--- types/fork.go | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/cmd/chain33/chain33.fork.toml b/cmd/chain33/chain33.fork.toml index 089e0083b2..f73c0a932f 100644 --- a/cmd/chain33/chain33.fork.toml +++ b/cmd/chain33/chain33.fork.toml @@ -27,7 +27,6 @@ ForkFormatAddressKey=0 ForkCheckEthTxSort=0 ForkProxyExec=0 ForkMaxTxFeeV1=0 - [fork.sub.none] ForkUseTimeDelay=0 diff --git a/types/config.go b/types/config.go index 4b8972723b..360bb74a93 100644 --- a/types/config.go +++ b/types/config.go @@ -541,13 +541,15 @@ func (c *Chain33Config) GetMaxTxFeeRate() int64 { // GetMaxTxFee get max transaction fee by blockheight func (c *Chain33Config) GetMaxTxFee(height int64) int64 { + if c.IsFork(height, "ForkMaxTxFeeV1") { conf := Conf(c, "mver.mempool") - return conf.MGInt("maxTxFee", height) - } + if conf.MGInt("maxTxFee", height) != 0 { + return conf.MGInt("maxTxFee", height) + } + } return c.GInt("MaxTxFee") - } // SetTxFeeConfig 设置交易费相关配置 diff --git a/types/fork.go b/types/fork.go index 8e6aa0f307..b01b6c78eb 100644 --- a/types/fork.go +++ b/types/fork.go @@ -145,7 +145,7 @@ func (f *Forks) SetTestNetFork() { f.setFork("ForkCheckEthTxSort", 0) f.setFork("ForkProxyExec", 0) f.setFork("ForkMaxTxFeeV1", 0) - f.setFork("ForkMaxTxFeeV2", 0) + } func (f *Forks) setLocalFork() { From 5de6bc4d527f932da366a898fea39001c0396329 Mon Sep 17 00:00:00 2001 From: libangzhu <601276804@qq.com> Date: Wed, 17 Jan 2024 14:04:36 +0800 Subject: [PATCH 3/7] fxi rpctest --- rpc/jrpchandler_test.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/rpc/jrpchandler_test.go b/rpc/jrpchandler_test.go index 7a33475eef..f919531daf 100644 --- a/rpc/jrpchandler_test.go +++ b/rpc/jrpchandler_test.go @@ -1862,9 +1862,11 @@ func TestChain33_GetChainConfig(t *testing.T) { cfg := types.NewChain33Config(types.GetDefaultCfgstring()) api := new(mocks.QueueProtocolAPI) api.On("GetConfig", mock.Anything).Return(cfg) + api.On("GetLastHeader", mock.Anything).Return(&types.Header{Height: 0}, nil) client := newTestChain33(api) var result interface{} api.On("GetChainConfig").Return(nil) + err := client.GetChainConfig(&types.ReqNil{}, &result) assert.Nil(t, err) } From ee8af863764d467c072f28bcae934401573acfed Mon Sep 17 00:00:00 2001 From: jiangpeng <11565373+bysomeone@users.noreply.github.com> Date: Mon, 8 Apr 2024 18:15:22 +0800 Subject: [PATCH 4/7] [[FIX]] add format eth address fork --- account/account_test.go | 2 +- cmd/chain33/chain33.fork.toml | 1 + cmd/chain33/chain33.system.fork.toml | 3 ++- common/address/util.go | 7 +++++-- common/address/util_test.go | 2 +- system/address/eth/address.go | 3 +-- system/address/eth/address_test.go | 2 +- system/dapp/manage/executor/exec.go | 2 +- system/dapp/manage/executor/manage.go | 6 +++++- types/config.go | 2 +- types/fork.go | 8 ++++---- 11 files changed, 23 insertions(+), 15 deletions(-) diff --git a/account/account_test.go b/account/account_test.go index de5a81cffa..831a75d67c 100644 --- a/account/account_test.go +++ b/account/account_test.go @@ -612,7 +612,7 @@ func TestAccountKey(t *testing.T) { acc := NewCoinsAccount(types.NewChain33Config(types.GetDefaultCfgstring())) addr := "0x6c0d7BE0d2C8350042890a77393158181716b0d6" - addr1 := address.ToLower(addr) + addr1 := address.FormatEthAddress(addr) accKey := acc.accountReadKey(addr) require.Equal(t, accKey, acc.AccountKey(addr)) require.Equal(t, accKey, acc.AccountKey(addr1)) diff --git a/cmd/chain33/chain33.fork.toml b/cmd/chain33/chain33.fork.toml index f73c0a932f..434226c1c7 100644 --- a/cmd/chain33/chain33.fork.toml +++ b/cmd/chain33/chain33.fork.toml @@ -24,6 +24,7 @@ ForkCacheDriver=2580000 ForkTicketFundAddrV1=3350000 ForkRootHash=4500000 ForkFormatAddressKey=0 +ForkEthAddressFormat=0 ForkCheckEthTxSort=0 ForkProxyExec=0 ForkMaxTxFeeV1=0 diff --git a/cmd/chain33/chain33.system.fork.toml b/cmd/chain33/chain33.system.fork.toml index e926a3f028..e4a7dd7acb 100644 --- a/cmd/chain33/chain33.system.fork.toml +++ b/cmd/chain33/chain33.system.fork.toml @@ -24,6 +24,7 @@ ForkCacheDriver=2580000 ForkTicketFundAddrV1=3350000 ForkRootHash=4500000 ForkFormatAddressKey=0 +ForkEthAddressFormat=0 ForkCheckEthTxSort=0 ForkProxyExec=0 -ForkMaxTxFeeV1=0 \ No newline at end of file +ForkMaxTxFeeV1=0 diff --git a/common/address/util.go b/common/address/util.go index 26d28cc4a4..538517ea16 100644 --- a/common/address/util.go +++ b/common/address/util.go @@ -9,14 +9,17 @@ import ( // ForkFormatAddressKey 地址key格式化分叉名称,主要针对eth地址 const ForkFormatAddressKey = "ForkFormatAddressKey" +// ForkEthAddressFormat eth地址统一格式化 +const ForkEthAddressFormat = "ForkEthAddressFormat" + // IsEthAddress verifies whether a string can represent // a valid hex-encoded eth address func IsEthAddress(addr string) bool { return common.IsHexAddress(addr) } -// ToLower to lower case string -func ToLower(addr string) string { +// FormatEthAddress eth地址格式化 +func FormatEthAddress(addr string) string { return strings.ToLower(addr) } diff --git a/common/address/util_test.go b/common/address/util_test.go index 6988d92656..ebecf13060 100644 --- a/common/address/util_test.go +++ b/common/address/util_test.go @@ -17,7 +17,7 @@ func TestFormatAddrKey(t *testing.T) { addrKey1 := fmt.Sprintf("%s:%s", "addrKey:", FormatAddrKey(addr1)) addrKey2 := fmt.Sprintf("%s:%s", "addrKey:", FormatAddrKey(addr2)) - expect := fmt.Sprintf("%s:%s", "addrKey:", string(FormatAddrKey(ToLower(addr1)))) + expect := fmt.Sprintf("%s:%s", "addrKey:", string(FormatAddrKey(FormatEthAddress(addr1)))) require.Equal(t, expect, addrKey1) require.Equal(t, expect, addrKey2) diff --git a/system/address/eth/address.go b/system/address/eth/address.go index 66fb8208e9..40588730da 100644 --- a/system/address/eth/address.go +++ b/system/address/eth/address.go @@ -2,7 +2,6 @@ package eth import ( "errors" - "github.com/33cn/chain33/common/crypto/client" "github.com/33cn/chain33/common/address" @@ -82,7 +81,7 @@ func (e *eth) FormatAddr(addr string) string { func formatAddr(addr string) string { ctx := client.GetCryptoContext() if ctx.API == nil || ctx.API.GetConfig().IsFork(ctx.CurrBlockHeight, address.ForkFormatAddressKey) { - return address.ToLower(addr) + return address.FormatEthAddress(addr) } return addr } diff --git a/system/address/eth/address_test.go b/system/address/eth/address_test.go index 6d6e7d1cbd..0370776bed 100644 --- a/system/address/eth/address_test.go +++ b/system/address/eth/address_test.go @@ -29,7 +29,7 @@ func TestFormatEthAddr(t *testing.T) { err = ethDriver.ValidateAddr(ethAddr) require.Nil(t, err) addr := ethDriver.PubKeyToAddr(chain33Priv.PubKey().Bytes()) - require.Equal(t, address.ToLower(ethAddr), addr) + require.Equal(t, address.FormatEthAddress(ethAddr), addr) } require.Equal(t, eth.Name, ethDriver.GetName()) } diff --git a/system/dapp/manage/executor/exec.go b/system/dapp/manage/executor/exec.go index fcdd8d2ff5..60fe1cb0f7 100644 --- a/system/dapp/manage/executor/exec.go +++ b/system/dapp/manage/executor/exec.go @@ -42,7 +42,7 @@ func (c *Manage) Exec_Modify(manageAction *types.ModifyConfig, tx *types.Transac } } action := newAction(c, tx, int32(index)) - if !IsSuperManager(cfg, action.fromaddr) { + if !IsSuperManager(cfg, action.fromaddr, c.GetHeight()) { return nil, mty.ErrNoPrivilege } return action.modifyConfig(manageAction) diff --git a/system/dapp/manage/executor/manage.go b/system/dapp/manage/executor/manage.go index 80e7c26922..fbca840d9f 100644 --- a/system/dapp/manage/executor/manage.go +++ b/system/dapp/manage/executor/manage.go @@ -6,6 +6,7 @@ package executor import ( + "github.com/33cn/chain33/common/address" log "github.com/33cn/chain33/common/log/log15" drivers "github.com/33cn/chain33/system/dapp" "github.com/33cn/chain33/types" @@ -57,9 +58,12 @@ func (c *Manage) CheckTx(tx *types.Transaction, index int) error { } // IsSuperManager is supper manager or not -func IsSuperManager(cfg *types.Chain33Config, addr string) bool { +func IsSuperManager(cfg *types.Chain33Config, addr string, height int64) bool { conf := types.ConfSub(cfg, driverName) for _, m := range conf.GStrList("superManager") { + if address.IsEthAddress(m) && cfg.IsFork(height, address.ForkEthAddressFormat) { + m = address.FormatEthAddress(addr) + } if addr == m { return true } diff --git a/types/config.go b/types/config.go index 360bb74a93..2ad8c9f412 100644 --- a/types/config.go +++ b/types/config.go @@ -219,7 +219,7 @@ func (c *Chain33Config) chain33CfgInit(cfg *Config) { if c.forks == nil { c.forks = &Forks{} } - c.forks.SetTestNetFork() + c.forks.RegisterSystemFork() if cfg != nil { if c.isLocal() { diff --git a/types/fork.go b/types/fork.go index b01b6c78eb..b8aa9a3741 100644 --- a/types/fork.go +++ b/types/fork.go @@ -5,9 +5,8 @@ package types import ( - "strings" - "github.com/33cn/chain33/common/address" + "strings" ) /* @@ -115,8 +114,8 @@ func (f *Forks) IsDappFork(height int64, dapp, fork string) bool { return f.IsFork(height, dapp+"."+fork) } -// SetTestNetFork bityuan test net fork -func (f *Forks) SetTestNetFork() { +// RegisterSystemFork 注册系统分叉, 部分分叉高度设为测试网分叉值 +func (f *Forks) RegisterSystemFork() { f.SetFork("ForkChainParamV1", 110000) f.SetFork("ForkChainParamV2", 1692674) f.SetFork("ForkCheckTxDup", 75260) @@ -142,6 +141,7 @@ func (f *Forks) SetTestNetFork() { f.SetFork("ForkTicketFundAddrV1", 3350000) f.SetFork("ForkRootHash", 4500000) f.SetFork(address.ForkFormatAddressKey, 0) + f.SetFork(address.ForkEthAddressFormat, 0) f.setFork("ForkCheckEthTxSort", 0) f.setFork("ForkProxyExec", 0) f.setFork("ForkMaxTxFeeV1", 0) From dd53927529e38e2e07723b240b6bb37262b66ff7 Mon Sep 17 00:00:00 2001 From: jiangpeng <11565373+bysomeone@users.noreply.github.com> Date: Tue, 9 Apr 2024 15:28:01 +0800 Subject: [PATCH 5/7] update ci --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 3f32de9d84..4fd08c2d42 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -77,7 +77,7 @@ jobs: fetch-depth: 0 - uses: actions/setup-go@v3 with: - go-version: 'oldstable' + go-version: '1.20' - run: | go env make build From 95a8b16c0f0f53f31c808a937128249621ee42b9 Mon Sep 17 00:00:00 2001 From: jiangpeng <11565373+bysomeone@users.noreply.github.com> Date: Thu, 11 Apr 2024 17:12:56 +0800 Subject: [PATCH 6/7] add address format --- system/dapp/manage/executor/exec.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/system/dapp/manage/executor/exec.go b/system/dapp/manage/executor/exec.go index 60fe1cb0f7..f4b2ffbf01 100644 --- a/system/dapp/manage/executor/exec.go +++ b/system/dapp/manage/executor/exec.go @@ -29,7 +29,9 @@ func (c *Manage) Exec_Modify(manageAction *types.ModifyConfig, tx *types.Transac // 兼容在区块上没有To地址检查的交易数据 types.AssertConfig(c.GetAPI()) cfg := c.GetAPI().GetConfig() - + if address.IsEthAddress(manageAction.Addr) && cfg.IsFork(c.GetHeight(), address.ForkEthAddressFormat) { + manageAction.Addr = address.FormatEthAddress(manageAction.Addr) + } confManager := types.ConfSub(cfg, mty.ManageX) autonomyExec := confManager.GStr(types.AutonomyCfgKey) if cfg.IsDappFork(c.GetHeight(), mty.ManageX, mty.ForkManageAutonomyEnable) && len(autonomyExec) > 0 { From ca0c2c69e9d74c991928af21a8daa8add08312ac Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Fri, 12 Apr 2024 03:29:41 +0000 Subject: [PATCH 7/7] chore(release): 1.68.2 [skip ci] ## [1.68.2](https://github.com/33cn/chain33/compare/v1.68.1...v1.68.2) (2024-04-12) ### Bug Fixes * add format eth address fork ([ee8af86](https://github.com/33cn/chain33/commit/ee8af86)) --- CHANGELOG.md | 8 ++++++++ common/version/version.go | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index eb7d13e9f9..61828a3668 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ changelog + +## [1.68.2](https://github.com/33cn/chain33/compare/v1.68.1...v1.68.2) (2024-04-12) + + +### Bug Fixes + +* add format eth address fork ([ee8af86](https://github.com/33cn/chain33/commit/ee8af86)) + ## [1.68.1](https://github.com/33cn/chain33/compare/v1.68.0...v1.68.1) (2023-09-12) diff --git a/common/version/version.go b/common/version/version.go index ed73941aba..a4c731bdc1 100644 --- a/common/version/version.go +++ b/common/version/version.go @@ -6,7 +6,7 @@ package version //Version chain33 version -var Version = "1.68.1" +var Version = "1.68.2" //var version key var (