github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/wasm/proxy/context.go (about) 1 package proxy 2 3 import ( 4 "sync" 5 "time" 6 7 "github.com/ethereum/go-ethereum/common" 8 clientcontext "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/client/context" 9 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/store" 10 sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types" 11 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/auth" 12 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/params" 13 abci "github.com/fibonacci-chain/fbc/libs/tendermint/abci/types" 14 tmlog "github.com/fibonacci-chain/fbc/libs/tendermint/libs/log" 15 dbm "github.com/fibonacci-chain/fbc/libs/tm-db" 16 evmwatcher "github.com/fibonacci-chain/fbc/x/evm/watcher" 17 ) 18 19 const ( 20 simulationGasLimit = 3000000 21 ) 22 23 var clientCtx clientcontext.CLIContext 24 25 func SetCliContext(ctx clientcontext.CLIContext) { 26 clientCtx = ctx 27 } 28 29 func MakeContext(storeKey sdk.StoreKey) sdk.Context { 30 db := dbm.NewMemDB() 31 cms := store.NewCommitMultiStore(db) 32 authKey := sdk.NewKVStoreKey(auth.StoreKey) 33 paramsKey := sdk.NewKVStoreKey(params.StoreKey) 34 paramsTKey := sdk.NewTransientStoreKey(params.TStoreKey) 35 cms.MountStoreWithDB(authKey, sdk.StoreTypeIAVL, db) 36 cms.MountStoreWithDB(paramsKey, sdk.StoreTypeIAVL, db) 37 cms.MountStoreWithDB(storeKey, sdk.StoreTypeIAVL, db) 38 cms.MountStoreWithDB(paramsTKey, sdk.StoreTypeTransient, db) 39 40 err := cms.LoadLatestVersion() 41 if err != nil { 42 panic(err) 43 } 44 45 header := getHeader() 46 47 ctx := sdk.NewContext(cms, header, true, tmlog.NewNopLogger()) 48 ctx.SetGasMeter(sdk.NewGasMeter(simulationGasLimit)) 49 return ctx 50 } 51 52 var ( 53 qOnce sync.Once 54 evmQuerier *evmwatcher.Querier 55 ) 56 57 func getHeader() abci.Header { 58 qOnce.Do(func() { 59 evmQuerier = evmwatcher.NewQuerier() 60 }) 61 timestamp := time.Now() 62 latest, _ := evmQuerier.GetLatestBlockNumber() 63 hash, e := evmQuerier.GetBlockHashByNumber(latest) 64 if e != nil { 65 hash = common.HexToHash("0x000000000000000000000000000000") 66 } 67 68 block, e := evmQuerier.GetBlockByHash(hash, false) 69 if e == nil { 70 timestamp = time.Unix(int64(block.Timestamp), 0) 71 } 72 73 header := abci.Header{ 74 LastBlockId: abci.BlockID{ 75 Hash: hash.Bytes(), 76 }, 77 Height: int64(latest), 78 Time: timestamp, 79 } 80 return header 81 }