github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/evm/proposal_handler.go (about) 1 package evm 2 3 import ( 4 sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types" 5 tmtypes "github.com/fibonacci-chain/fbc/libs/tendermint/types" 6 "github.com/fibonacci-chain/fbc/x/common" 7 "github.com/fibonacci-chain/fbc/x/evm/types" 8 "github.com/fibonacci-chain/fbc/x/evm/watcher" 9 govTypes "github.com/fibonacci-chain/fbc/x/gov/types" 10 ) 11 12 // NewManageContractDeploymentWhitelistProposalHandler handles "gov" type message in "evm" 13 func NewManageContractDeploymentWhitelistProposalHandler(k *Keeper) govTypes.Handler { 14 return func(ctx sdk.Context, proposal *govTypes.Proposal) (err sdk.Error) { 15 if watcher.IsWatcherEnabled() { 16 ctx.SetWatcher(watcher.NewTxWatcher()) 17 } 18 19 defer func() { 20 if err == nil { 21 ctx.GetWatcher().Finalize() 22 } 23 }() 24 25 switch content := proposal.Content.(type) { 26 case types.ManageContractDeploymentWhitelistProposal: 27 return handleManageContractDeploymentWhitelistProposal(ctx, k, content) 28 case types.ManageContractBlockedListProposal: 29 return handleManageContractBlockedlListProposal(ctx, k, content) 30 case types.ManageContractMethodBlockedListProposal: 31 return handleManageContractMethodBlockedlListProposal(ctx, k, content) 32 case types.ManageSysContractAddressProposal: 33 if tmtypes.HigherThanVenus3(ctx.BlockHeight()) { 34 return handleManageSysContractAddressProposal(ctx, k, content) 35 } 36 return common.ErrUnknownProposalType(types.DefaultCodespace, content.ProposalType()) 37 case types.ManageContractByteCodeProposal: 38 return handleManageContractBytecodeProposal(ctx, k, content) 39 default: 40 return common.ErrUnknownProposalType(types.DefaultCodespace, content.ProposalType()) 41 } 42 } 43 } 44 45 func handleManageContractBytecodeProposal(ctx sdk.Context, k *Keeper, p types.ManageContractByteCodeProposal) error { 46 csdb := types.CreateEmptyCommitStateDB(k.GenerateCSDBParams(), ctx) 47 return csdb.UpdateContractBytecode(ctx, p) 48 } 49 50 func handleManageContractDeploymentWhitelistProposal(ctx sdk.Context, k *Keeper, 51 p types.ManageContractDeploymentWhitelistProposal) sdk.Error { 52 csdb := types.CreateEmptyCommitStateDB(k.GeneratePureCSDBParams(), ctx) 53 if p.IsAdded { 54 // add deployer addresses into whitelist 55 csdb.SetContractDeploymentWhitelist(p.DistributorAddrs) 56 return nil 57 } 58 59 // remove deployer addresses from whitelist 60 csdb.DeleteContractDeploymentWhitelist(p.DistributorAddrs) 61 return nil 62 } 63 64 func handleManageContractBlockedlListProposal(ctx sdk.Context, k *Keeper, 65 p types.ManageContractBlockedListProposal) sdk.Error { 66 csdb := types.CreateEmptyCommitStateDB(k.GeneratePureCSDBParams(), ctx) 67 if p.IsAdded { 68 // add contract addresses into blocked list 69 csdb.SetContractBlockedList(p.ContractAddrs) 70 return nil 71 } 72 73 // remove contract addresses from blocked list 74 csdb.DeleteContractBlockedList(p.ContractAddrs) 75 return nil 76 } 77 78 func handleManageContractMethodBlockedlListProposal(ctx sdk.Context, k *Keeper, 79 p types.ManageContractMethodBlockedListProposal) sdk.Error { 80 csdb := types.CreateEmptyCommitStateDB(k.GeneratePureCSDBParams(), ctx) 81 if p.IsAdded { 82 // add contract method into blocked list 83 return csdb.InsertContractMethodBlockedList(p.ContractList) 84 } 85 86 // remove contract method from blocked list 87 return csdb.DeleteContractMethodBlockedList(p.ContractList) 88 } 89 90 func handleManageSysContractAddressProposal(ctx sdk.Context, k *Keeper, 91 p types.ManageSysContractAddressProposal) sdk.Error { 92 if p.IsAdded { 93 // add system contract address 94 return k.SetSysContractAddress(ctx, p.ContractAddr) 95 } 96 97 // remove system contract address 98 return k.DelSysContractAddress(ctx) 99 }