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  }