github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/wasm/keeper/contract_keeper.go (about)

     1  package keeper
     2  
     3  import (
     4  	sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types"
     5  	"github.com/fibonacci-chain/fbc/x/wasm/types"
     6  )
     7  
     8  var _ types.ContractOpsKeeper = PermissionedKeeper{}
     9  
    10  // decoratedKeeper contains a subset of the wasm keeper that are already or can be guarded by an authorization policy in the future
    11  type decoratedKeeper interface {
    12  	create(ctx sdk.Context, creator sdk.AccAddress, wasmCode []byte, instantiateAccess *types.AccessConfig, authZ AuthorizationPolicy) (codeID uint64, err error)
    13  	instantiate(ctx sdk.Context, codeID uint64, creator, admin sdk.AccAddress, initMsg []byte, label string, deposit sdk.Coins, authZ AuthorizationPolicy) (sdk.AccAddress, []byte, error)
    14  	migrate(ctx sdk.Context, contractAddress sdk.AccAddress, caller sdk.AccAddress, newCodeID uint64, msg []byte, authZ AuthorizationPolicy) ([]byte, error)
    15  	setContractAdmin(ctx sdk.Context, contractAddress, caller, newAdmin sdk.AccAddress, authZ AuthorizationPolicy) error
    16  	pinCode(ctx sdk.Context, codeID uint64) error
    17  	unpinCode(ctx sdk.Context, codeID uint64) error
    18  	execute(ctx sdk.Context, contractAddress sdk.AccAddress, caller sdk.AccAddress, msg []byte, coins sdk.Coins) ([]byte, error)
    19  	Sudo(ctx sdk.Context, contractAddress sdk.AccAddress, msg []byte) ([]byte, error)
    20  	setContractInfoExtension(ctx sdk.Context, contract sdk.AccAddress, extra types.ContractInfoExtension) error
    21  	setAccessConfig(ctx sdk.Context, codeID uint64, config types.AccessConfig) error
    22  	updateUploadAccessConfig(ctx sdk.Context, config types.AccessConfig)
    23  	updateContractMethodBlockedList(ctx sdk.Context, blockedMethods *types.ContractMethods, isDelete bool) error
    24  
    25  	GetParams(ctx sdk.Context) types.Params
    26  }
    27  
    28  type PermissionedKeeper struct {
    29  	authZPolicy AuthorizationPolicy
    30  	nested      decoratedKeeper
    31  }
    32  
    33  func NewPermissionedKeeper(nested decoratedKeeper, authZPolicy AuthorizationPolicy) *PermissionedKeeper {
    34  	return &PermissionedKeeper{authZPolicy: authZPolicy, nested: nested}
    35  }
    36  
    37  func NewGovPermissionKeeper(nested decoratedKeeper) *PermissionedKeeper {
    38  	return NewPermissionedKeeper(nested, GovAuthorizationPolicy{})
    39  }
    40  
    41  func NewDefaultPermissionKeeper(nested decoratedKeeper) *PermissionedKeeper {
    42  	return NewPermissionedKeeper(nested, DefaultAuthorizationPolicy{})
    43  }
    44  
    45  func (p PermissionedKeeper) Create(ctx sdk.Context, creator sdk.AccAddress, wasmCode []byte, instantiateAccess *types.AccessConfig) (codeID uint64, err error) {
    46  	return p.nested.create(ctx, creator, wasmCode, instantiateAccess, p.authZPolicy)
    47  }
    48  
    49  func (p PermissionedKeeper) Instantiate(ctx sdk.Context, codeID uint64, creator, admin sdk.AccAddress, initMsg []byte, label string, deposit sdk.Coins) (sdk.AccAddress, []byte, error) {
    50  	return p.nested.instantiate(ctx, codeID, creator, admin, initMsg, label, deposit, p.authZPolicy)
    51  }
    52  
    53  func (p PermissionedKeeper) Execute(ctx sdk.Context, contractAddress sdk.AccAddress, caller sdk.AccAddress, msg []byte, coins sdk.Coins) ([]byte, error) {
    54  	return p.nested.execute(ctx, contractAddress, caller, msg, coins)
    55  }
    56  
    57  func (p PermissionedKeeper) Migrate(ctx sdk.Context, contractAddress sdk.AccAddress, caller sdk.AccAddress, newCodeID uint64, msg []byte) ([]byte, error) {
    58  	return p.nested.migrate(ctx, contractAddress, caller, newCodeID, msg, p.authZPolicy)
    59  }
    60  
    61  func (p PermissionedKeeper) Sudo(ctx sdk.Context, contractAddress sdk.AccAddress, msg []byte) ([]byte, error) {
    62  	return p.nested.Sudo(ctx, contractAddress, msg)
    63  }
    64  
    65  func (p PermissionedKeeper) UpdateContractAdmin(ctx sdk.Context, contractAddress sdk.AccAddress, caller sdk.AccAddress, newAdmin sdk.AccAddress) error {
    66  	return p.nested.setContractAdmin(ctx, contractAddress, caller, newAdmin, p.authZPolicy)
    67  }
    68  
    69  func (p PermissionedKeeper) ClearContractAdmin(ctx sdk.Context, contractAddress sdk.AccAddress, caller sdk.AccAddress) error {
    70  	return p.nested.setContractAdmin(ctx, contractAddress, caller, nil, p.authZPolicy)
    71  }
    72  
    73  func (p PermissionedKeeper) PinCode(ctx sdk.Context, codeID uint64) error {
    74  	return p.nested.pinCode(ctx, codeID)
    75  }
    76  
    77  func (p PermissionedKeeper) UnpinCode(ctx sdk.Context, codeID uint64) error {
    78  	return p.nested.unpinCode(ctx, codeID)
    79  }
    80  
    81  // SetExtraContractAttributes updates the extra attributes that can be stored with the contract info
    82  func (p PermissionedKeeper) SetContractInfoExtension(ctx sdk.Context, contract sdk.AccAddress, extra types.ContractInfoExtension) error {
    83  	return p.nested.setContractInfoExtension(ctx, contract, extra)
    84  }
    85  
    86  // SetAccessConfig updates the access config of a code id.
    87  func (p PermissionedKeeper) SetAccessConfig(ctx sdk.Context, codeID uint64, config types.AccessConfig) error {
    88  	return p.nested.setAccessConfig(ctx, codeID, config)
    89  }
    90  
    91  func (p PermissionedKeeper) UpdateUploadAccessConfig(ctx sdk.Context, config types.AccessConfig) {
    92  	p.nested.updateUploadAccessConfig(ctx, config)
    93  }
    94  
    95  func (p PermissionedKeeper) UpdateContractMethodBlockedList(ctx sdk.Context, blockedMethods *types.ContractMethods, isDelete bool) error {
    96  	return p.nested.updateContractMethodBlockedList(ctx, blockedMethods, isDelete)
    97  }
    98  
    99  func (p PermissionedKeeper) GetParams(ctx sdk.Context) types.Params {
   100  	return p.nested.GetParams(ctx)
   101  }