/
wasm_config.go
88 lines (77 loc) · 3.63 KB
/
wasm_config.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
package app
import (
"github.com/CosmWasm/wasmd/x/wasm"
wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper"
"github.com/cosmos/cosmos-sdk/codec"
wasmmage "github.com/magewar/mage/cosmwasm"
postskeeper "github.com/magewar/mage/x/posts/keeper"
postswasm "github.com/magewar/mage/x/posts/wasm"
profileskeeper "github.com/magewar/mage/x/profiles/keeper"
profileswasm "github.com/magewar/mage/x/profiles/wasm"
reactionskeeper "github.com/magewar/mage/x/reactions/keeper"
reactionswasm "github.com/magewar/mage/x/reactions/wasm"
relationshipskeeper "github.com/magewar/mage/x/relationships/keeper"
relationshipswasm "github.com/magewar/mage/x/relationships/wasm"
reportskeeper "github.com/magewar/mage/x/reports/keeper"
reportswasm "github.com/magewar/mage/x/reports/wasm"
subspaceskeeper "github.com/magewar/mage/x/subspaces/keeper"
subspaceswasm "github.com/magewar/mage/x/subspaces/wasm"
)
const (
// DefaultMageInstanceCost is how much SDK gas we charge each time we load a WASM instance
DefaultMageInstanceCost uint64 = 60_000
// DefaultMageCompileCost is how much SDK gas is charged *per byte* for compiling WASM code
DefaultMageCompileCost uint64 = 2
)
// MageWasmGasRegister is defaults plus a custom compile amount
func MageWasmGasRegister() wasmkeeper.WasmGasRegisterConfig {
gasConfig := wasmkeeper.DefaultGasRegisterConfig()
gasConfig.InstanceCost = DefaultMageInstanceCost
gasConfig.CompileCost = DefaultMageCompileCost
return gasConfig
}
func NewMageWasmGasRegister() wasmkeeper.WasmGasRegister {
return wasmkeeper.NewWasmGasRegister(MageWasmGasRegister())
}
// NewMageCustomQueryPlugin initialize the custom querier to handle mage queries for contracts
func NewMageCustomQueryPlugin(
cdc codec.Codec,
profilesKeeper profileskeeper.Keeper,
subspacesKeeper subspaceskeeper.Keeper,
relationshipsKeeper relationshipskeeper.Keeper,
postsKeeper postskeeper.Keeper,
reportsKeeper reportskeeper.Keeper,
reactionsKeeper reactionskeeper.Keeper,
) wasm.QueryPlugins {
queriers := map[string]wasmmage.Querier{
wasmmage.QueryRouteProfiles: profileswasm.NewProfilesWasmQuerier(profilesKeeper, cdc),
wasmmage.QueryRouteSubspaces: subspaceswasm.NewSubspacesWasmQuerier(subspacesKeeper, cdc),
wasmmage.QueryRouteRelationships: relationshipswasm.NewRelationshipsWasmQuerier(relationshipsKeeper, cdc),
wasmmage.QueryRoutePosts: postswasm.NewPostsWasmQuerier(postsKeeper, cdc),
wasmmage.QueryRouteReports: reportswasm.NewReportsWasmQuerier(reportsKeeper, cdc),
wasmmage.QueryRouteReactions: reactionswasm.NewReactionsWasmQuerier(reactionsKeeper, cdc),
// add other modules querier here
}
querier := wasmmage.NewQuerier(queriers)
return wasm.QueryPlugins{
Custom: querier.QueryCustom,
}
}
// NewMageCustomMessageEncoder initialize the custom message encoder to mage app for contracts
func NewMageCustomMessageEncoder(cdc codec.Codec) wasm.MessageEncoders {
// Initialization of custom Mage messages for contracts
parserRouter := wasmmage.NewParserRouter()
parsers := map[string]wasmmage.MsgParserInterface{
wasmmage.WasmMsgParserRouteProfiles: profileswasm.NewWasmMsgParser(cdc),
wasmmage.WasmMsgParserRouteSubspaces: subspaceswasm.NewWasmMsgParser(cdc),
wasmmage.WasmMsgParserRouteRelationships: relationshipswasm.NewWasmMsgParser(cdc),
wasmmage.WasmMsgParserRoutePosts: postswasm.NewWasmMsgParser(cdc),
wasmmage.WasmMsgParserRouteReports: reportswasm.NewWasmMsgParser(cdc),
wasmmage.WasmMsgParserRouteReactions: reactionswasm.NewWasmMsgParser(cdc),
// add other modules parsers here
}
parserRouter.Parsers = parsers
return wasm.MessageEncoders{
Custom: parserRouter.ParseCustom,
}
}