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 }