github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/wasm/simulate.go (about) 1 package wasm 2 3 import ( 4 "github.com/fibonacci-chain/fbc/app/rpc/simulator" 5 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/baseapp" 6 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/codec" 7 types2 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/codec/types" 8 sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types" 9 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/bank" 10 "github.com/fibonacci-chain/fbc/x/wasm/keeper" 11 "github.com/fibonacci-chain/fbc/x/wasm/proxy" 12 "github.com/fibonacci-chain/fbc/x/wasm/types" 13 ) 14 15 type Simulator struct { 16 handler sdk.Handler 17 ctx sdk.Context 18 k *keeper.Keeper 19 } 20 21 func NewWasmSimulator() simulator.Simulator { 22 k := NewProxyKeeper() 23 h := NewHandler(keeper.NewDefaultPermissionKeeper(k)) 24 ctx := proxy.MakeContext(k.GetStoreKey()) 25 return &Simulator{ 26 handler: h, 27 k: &k, 28 ctx: ctx, 29 } 30 } 31 32 func (w *Simulator) Simulate(msgs []sdk.Msg) (*sdk.Result, error) { 33 //wasm Result has no Logs 34 data := make([]byte, 0, len(msgs)) 35 events := sdk.EmptyEvents() 36 37 for _, msg := range msgs { 38 res, err := w.handler(w.ctx, msg) 39 if err != nil { 40 return nil, err 41 } 42 data = append(data, res.Data...) 43 events = events.AppendEvents(res.Events) 44 } 45 return &sdk.Result{ 46 Data: data, 47 Events: events, 48 }, nil 49 } 50 51 func (w *Simulator) Context() *sdk.Context { 52 return &w.ctx 53 } 54 55 func NewProxyKeeper() keeper.Keeper { 56 cdc := codec.New() 57 RegisterCodec(cdc) 58 bank.RegisterCodec(cdc) 59 interfaceReg := types2.NewInterfaceRegistry() 60 RegisterInterfaces(interfaceReg) 61 bank.RegisterInterface(interfaceReg) 62 protoCdc := codec.NewProtoCodec(interfaceReg) 63 64 ss := proxy.SubspaceProxy{} 65 akp := proxy.NewAccountKeeperProxy() 66 bkp := proxy.NewBankKeeperProxy(akp) 67 pkp := proxy.PortKeeperProxy{} 68 ckp := proxy.CapabilityKeeperProxy{} 69 skp := proxy.SupplyKeeperProxy{} 70 msgRouter := baseapp.NewMsgServiceRouter() 71 msgRouter.SetInterfaceRegistry(interfaceReg) 72 queryRouter := baseapp.NewGRPCQueryRouter() 73 queryRouter.SetInterfaceRegistry(interfaceReg) 74 75 k := keeper.NewSimulateKeeper(codec.NewCodecProxy(protoCdc, cdc), sdk.NewKVStoreKey(StoreKey), ss, akp, bkp, nil, pkp, ckp, nil, msgRouter, queryRouter, WasmDir(), WasmConfig(), SupportedFeatures) 76 types.RegisterMsgServer(msgRouter, keeper.NewMsgServerImpl(keeper.NewDefaultPermissionKeeper(k))) 77 types.RegisterQueryServer(queryRouter, NewQuerier(&k)) 78 bank.RegisterBankMsgServer(msgRouter, bank.NewMsgServerImpl(bkp)) 79 bank.RegisterQueryServer(queryRouter, bank.NewBankQueryServer(bkp, skp)) 80 return k 81 }