github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/wasm/keeper/msg_server.go (about) 1 package keeper 2 3 import ( 4 "context" 5 6 sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types" 7 sdkerrors "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types/errors" 8 9 "github.com/fibonacci-chain/fbc/x/wasm/types" 10 ) 11 12 var _ types.MsgServer = msgServer{} 13 14 type msgServer struct { 15 keeper types.ContractOpsKeeper 16 } 17 18 func NewMsgServerImpl(k types.ContractOpsKeeper) types.MsgServer { 19 return &msgServer{keeper: k} 20 } 21 22 func (m msgServer) StoreCode(goCtx context.Context, msg *types.MsgStoreCode) (*types.MsgStoreCodeResponse, error) { 23 ctx := sdk.UnwrapSDKContext(goCtx) 24 senderAddr, err := sdk.AccAddressFromBech32(msg.Sender) 25 if err != nil { 26 return nil, sdkerrors.Wrap(err, "sender") 27 } 28 29 ctx.EventManager().EmitEvent(sdk.NewEvent( 30 sdk.EventTypeMessage, 31 sdk.NewAttribute(sdk.AttributeKeyModule, types.ModuleName), 32 sdk.NewAttribute(sdk.AttributeKeySender, msg.Sender), 33 )) 34 35 codeID, err := m.keeper.Create(ctx, senderAddr, msg.WASMByteCode, msg.InstantiatePermission) 36 if err != nil { 37 return nil, err 38 } 39 40 return &types.MsgStoreCodeResponse{ 41 CodeID: codeID, 42 }, nil 43 } 44 45 func (m msgServer) InstantiateContract(goCtx context.Context, msg *types.MsgInstantiateContract) (*types.MsgInstantiateContractResponse, error) { 46 ctx := sdk.UnwrapSDKContext(goCtx) 47 48 senderAddr, err := sdk.AccAddressFromBech32(msg.Sender) 49 if err != nil { 50 return nil, sdkerrors.Wrap(err, "sender") 51 } 52 var adminAddr sdk.AccAddress 53 if msg.Admin != "" { 54 if adminAddr, err = sdk.AccAddressFromBech32(msg.Admin); err != nil { 55 return nil, sdkerrors.Wrap(err, "admin") 56 } 57 } 58 59 ctx.EventManager().EmitEvent(sdk.NewEvent( 60 sdk.EventTypeMessage, 61 sdk.NewAttribute(sdk.AttributeKeyModule, types.ModuleName), 62 sdk.NewAttribute(sdk.AttributeKeySender, msg.Sender), 63 )) 64 65 contractAddr, data, err := m.keeper.Instantiate(ctx, msg.CodeID, senderAddr, adminAddr, msg.Msg, msg.Label, sdk.CoinAdaptersToCoins(msg.Funds)) 66 if err != nil { 67 return nil, err 68 } 69 70 return &types.MsgInstantiateContractResponse{ 71 Address: contractAddr.String(), 72 Data: data, 73 }, nil 74 } 75 76 func (m msgServer) ExecuteContract(goCtx context.Context, msg *types.MsgExecuteContract) (*types.MsgExecuteContractResponse, error) { 77 ctx := sdk.UnwrapSDKContext(goCtx) 78 senderAddr, err := sdk.AccAddressFromBech32(msg.Sender) 79 if err != nil { 80 return nil, sdkerrors.Wrap(err, "sender") 81 } 82 contractAddr, err := sdk.AccAddressFromBech32(msg.Contract) 83 if err != nil { 84 return nil, sdkerrors.Wrap(err, "contract") 85 } 86 87 ctx.EventManager().EmitEvent(sdk.NewEvent( 88 sdk.EventTypeMessage, 89 sdk.NewAttribute(sdk.AttributeKeyModule, types.ModuleName), 90 sdk.NewAttribute(sdk.AttributeKeySender, msg.Sender), 91 )) 92 93 data, err := m.keeper.Execute(ctx, contractAddr, senderAddr, msg.Msg, sdk.CoinAdaptersToCoins(msg.Funds)) 94 if err != nil { 95 return nil, err 96 } 97 98 return &types.MsgExecuteContractResponse{ 99 Data: data, 100 }, nil 101 } 102 103 func (m msgServer) MigrateContract(goCtx context.Context, msg *types.MsgMigrateContract) (*types.MsgMigrateContractResponse, error) { 104 ctx := sdk.UnwrapSDKContext(goCtx) 105 senderAddr, err := sdk.AccAddressFromBech32(msg.Sender) 106 if err != nil { 107 return nil, sdkerrors.Wrap(err, "sender") 108 } 109 contractAddr, err := sdk.AccAddressFromBech32(msg.Contract) 110 if err != nil { 111 return nil, sdkerrors.Wrap(err, "contract") 112 } 113 114 ctx.EventManager().EmitEvent(sdk.NewEvent( 115 sdk.EventTypeMessage, 116 sdk.NewAttribute(sdk.AttributeKeyModule, types.ModuleName), 117 sdk.NewAttribute(sdk.AttributeKeySender, msg.Sender), 118 )) 119 120 data, err := m.keeper.Migrate(ctx, contractAddr, senderAddr, msg.CodeID, msg.Msg) 121 if err != nil { 122 return nil, err 123 } 124 125 return &types.MsgMigrateContractResponse{ 126 Data: data, 127 }, nil 128 } 129 130 func (m msgServer) UpdateAdmin(goCtx context.Context, msg *types.MsgUpdateAdmin) (*types.MsgUpdateAdminResponse, error) { 131 ctx := sdk.UnwrapSDKContext(goCtx) 132 senderAddr, err := sdk.AccAddressFromBech32(msg.Sender) 133 if err != nil { 134 return nil, sdkerrors.Wrap(err, "sender") 135 } 136 contractAddr, err := sdk.AccAddressFromBech32(msg.Contract) 137 if err != nil { 138 return nil, sdkerrors.Wrap(err, "contract") 139 } 140 newAdminAddr, err := sdk.AccAddressFromBech32(msg.NewAdmin) 141 if err != nil { 142 return nil, sdkerrors.Wrap(err, "new admin") 143 } 144 145 ctx.EventManager().EmitEvent(sdk.NewEvent( 146 sdk.EventTypeMessage, 147 sdk.NewAttribute(sdk.AttributeKeyModule, types.ModuleName), 148 sdk.NewAttribute(sdk.AttributeKeySender, msg.Sender), 149 )) 150 151 if err := m.keeper.UpdateContractAdmin(ctx, contractAddr, senderAddr, newAdminAddr); err != nil { 152 return nil, err 153 } 154 155 return &types.MsgUpdateAdminResponse{}, nil 156 } 157 158 func (m msgServer) ClearAdmin(goCtx context.Context, msg *types.MsgClearAdmin) (*types.MsgClearAdminResponse, error) { 159 ctx := sdk.UnwrapSDKContext(goCtx) 160 senderAddr, err := sdk.AccAddressFromBech32(msg.Sender) 161 if err != nil { 162 return nil, sdkerrors.Wrap(err, "sender") 163 } 164 contractAddr, err := sdk.AccAddressFromBech32(msg.Contract) 165 if err != nil { 166 return nil, sdkerrors.Wrap(err, "contract") 167 } 168 169 ctx.EventManager().EmitEvent(sdk.NewEvent( 170 sdk.EventTypeMessage, 171 sdk.NewAttribute(sdk.AttributeKeyModule, types.ModuleName), 172 sdk.NewAttribute(sdk.AttributeKeySender, msg.Sender), 173 )) 174 175 if err := m.keeper.ClearContractAdmin(ctx, contractAddr, senderAddr); err != nil { 176 return nil, err 177 } 178 179 return &types.MsgClearAdminResponse{}, nil 180 }