Skip to content

Commit b006963

Browse files
author
Maxim
committed
Use wasm types from github.com/cosmoscontracts/wasmd v1.0.0-juno6
1 parent 9325dca commit b006963

19 files changed

+18101
-0
lines changed

wasm/types/README.md

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
## Referencing WASM types
2+
3+
Please don't include `github.com/CosmWasm/wasmd` as an sdk-go project dependency, those types needed on the client side should be included in this repo directly.
4+
5+
### Used types files:
6+
7+
```
8+
wasm/types/ante.go
9+
wasm/types/codec.go
10+
wasm/types/errors.go
11+
wasm/types/events.go
12+
wasm/types/genesis.go
13+
wasm/types/genesis.pb.go
14+
wasm/types/ibc.pb.go
15+
wasm/types/params.go
16+
wasm/types/proposal.go
17+
wasm/types/proposal.pb.go
18+
wasm/types/query.pb.go
19+
wasm/types/query.pb.gw.go
20+
wasm/types/tx.go
21+
wasm/types/tx.pb.go
22+
wasm/types/types.go
23+
wasm/types/types.pb.go
24+
```

wasm/types/ante.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package types
2+
3+
import (
4+
sdk "github.com/cosmos/cosmos-sdk/types"
5+
)
6+
7+
type contextKey int
8+
9+
const (
10+
// private type creates an interface key for Context that cannot be accessed by any other package
11+
contextKeyTXCount contextKey = iota
12+
)
13+
14+
// WithTXCounter stores a transaction counter value in the context
15+
func WithTXCounter(ctx sdk.Context, counter uint32) sdk.Context {
16+
return ctx.WithValue(contextKeyTXCount, counter)
17+
}
18+
19+
// TXCounter returns the tx counter value and found bool from the context.
20+
// The result will be (0, false) for external queries or simulations where no counter available.
21+
func TXCounter(ctx sdk.Context) (uint32, bool) {
22+
val, ok := ctx.Value(contextKeyTXCount).(uint32)
23+
return val, ok
24+
}

wasm/types/codec.go

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
package types
2+
3+
import (
4+
"github.com/cosmos/cosmos-sdk/codec"
5+
"github.com/cosmos/cosmos-sdk/codec/types"
6+
cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec"
7+
sdk "github.com/cosmos/cosmos-sdk/types"
8+
"github.com/cosmos/cosmos-sdk/types/msgservice"
9+
govtypes "github.com/cosmos/cosmos-sdk/x/gov/types"
10+
)
11+
12+
// RegisterLegacyAminoCodec registers the account types and interface
13+
func RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { //nolint:staticcheck
14+
cdc.RegisterConcrete(&MsgStoreCode{}, "wasm/MsgStoreCode", nil)
15+
cdc.RegisterConcrete(&MsgInstantiateContract{}, "wasm/MsgInstantiateContract", nil)
16+
cdc.RegisterConcrete(&MsgExecuteContract{}, "wasm/MsgExecuteContract", nil)
17+
cdc.RegisterConcrete(&MsgMigrateContract{}, "wasm/MsgMigrateContract", nil)
18+
cdc.RegisterConcrete(&MsgUpdateAdmin{}, "wasm/MsgUpdateAdmin", nil)
19+
cdc.RegisterConcrete(&MsgClearAdmin{}, "wasm/MsgClearAdmin", nil)
20+
cdc.RegisterConcrete(&PinCodesProposal{}, "wasm/PinCodesProposal", nil)
21+
cdc.RegisterConcrete(&UnpinCodesProposal{}, "wasm/UnpinCodesProposal", nil)
22+
23+
cdc.RegisterConcrete(&StoreCodeProposal{}, "wasm/StoreCodeProposal", nil)
24+
cdc.RegisterConcrete(&InstantiateContractProposal{}, "wasm/InstantiateContractProposal", nil)
25+
cdc.RegisterConcrete(&MigrateContractProposal{}, "wasm/MigrateContractProposal", nil)
26+
cdc.RegisterConcrete(&UpdateAdminProposal{}, "wasm/UpdateAdminProposal", nil)
27+
cdc.RegisterConcrete(&ClearAdminProposal{}, "wasm/ClearAdminProposal", nil)
28+
}
29+
30+
func RegisterInterfaces(registry types.InterfaceRegistry) {
31+
registry.RegisterImplementations(
32+
(*sdk.Msg)(nil),
33+
&MsgStoreCode{},
34+
&MsgInstantiateContract{},
35+
&MsgExecuteContract{},
36+
&MsgMigrateContract{},
37+
&MsgUpdateAdmin{},
38+
&MsgClearAdmin{},
39+
&MsgIBCCloseChannel{},
40+
&MsgIBCSend{},
41+
)
42+
registry.RegisterImplementations(
43+
(*govtypes.Content)(nil),
44+
&StoreCodeProposal{},
45+
&InstantiateContractProposal{},
46+
&MigrateContractProposal{},
47+
&UpdateAdminProposal{},
48+
&ClearAdminProposal{},
49+
&PinCodesProposal{},
50+
&UnpinCodesProposal{},
51+
)
52+
53+
registry.RegisterInterface("ContractInfoExtension", (*ContractInfoExtension)(nil))
54+
55+
msgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc)
56+
}
57+
58+
var (
59+
amino = codec.NewLegacyAmino()
60+
61+
// ModuleCdc references the global x/wasm module codec.
62+
63+
ModuleCdc = codec.NewAminoCodec(amino)
64+
)
65+
66+
func init() {
67+
RegisterLegacyAminoCodec(amino)
68+
cryptocodec.RegisterCrypto(amino)
69+
amino.Seal()
70+
}

wasm/types/errors.go

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
package types
2+
3+
import (
4+
sdkErrors "github.com/cosmos/cosmos-sdk/types/errors"
5+
)
6+
7+
// Codes for wasm contract errors
8+
var (
9+
DefaultCodespace = ModuleName
10+
11+
// Note: never use code 1 for any errors - that is reserved for ErrInternal in the core cosmos sdk
12+
13+
// ErrCreateFailed error for wasm code that has already been uploaded or failed
14+
ErrCreateFailed = sdkErrors.Register(DefaultCodespace, 2, "create wasm contract failed")
15+
16+
// ErrAccountExists error for a contract account that already exists
17+
ErrAccountExists = sdkErrors.Register(DefaultCodespace, 3, "contract account already exists")
18+
19+
// ErrInstantiateFailed error for rust instantiate contract failure
20+
ErrInstantiateFailed = sdkErrors.Register(DefaultCodespace, 4, "instantiate wasm contract failed")
21+
22+
// ErrExecuteFailed error for rust execution contract failure
23+
ErrExecuteFailed = sdkErrors.Register(DefaultCodespace, 5, "execute wasm contract failed")
24+
25+
// ErrGasLimit error for out of gas
26+
ErrGasLimit = sdkErrors.Register(DefaultCodespace, 6, "insufficient gas")
27+
28+
// ErrInvalidGenesis error for invalid genesis file syntax
29+
ErrInvalidGenesis = sdkErrors.Register(DefaultCodespace, 7, "invalid genesis")
30+
31+
// ErrNotFound error for an entry not found in the store
32+
ErrNotFound = sdkErrors.Register(DefaultCodespace, 8, "not found")
33+
34+
// ErrQueryFailed error for rust smart query contract failure
35+
ErrQueryFailed = sdkErrors.Register(DefaultCodespace, 9, "query wasm contract failed")
36+
37+
// ErrInvalidMsg error when we cannot process the error returned from the contract
38+
ErrInvalidMsg = sdkErrors.Register(DefaultCodespace, 10, "invalid CosmosMsg from the contract")
39+
40+
// ErrMigrationFailed error for rust execution contract failure
41+
ErrMigrationFailed = sdkErrors.Register(DefaultCodespace, 11, "migrate wasm contract failed")
42+
43+
// ErrEmpty error for empty content
44+
ErrEmpty = sdkErrors.Register(DefaultCodespace, 12, "empty")
45+
46+
// ErrLimit error for content that exceeds a limit
47+
ErrLimit = sdkErrors.Register(DefaultCodespace, 13, "exceeds limit")
48+
49+
// ErrInvalid error for content that is invalid in this context
50+
ErrInvalid = sdkErrors.Register(DefaultCodespace, 14, "invalid")
51+
52+
// ErrDuplicate error for content that exists
53+
ErrDuplicate = sdkErrors.Register(DefaultCodespace, 15, "duplicate")
54+
55+
// ErrMaxIBCChannels error for maximum number of ibc channels reached
56+
ErrMaxIBCChannels = sdkErrors.Register(DefaultCodespace, 16, "max transfer channels")
57+
58+
// ErrUnsupportedForContract error when a feature is used that is not supported for/ by this contract
59+
ErrUnsupportedForContract = sdkErrors.Register(DefaultCodespace, 17, "unsupported for this contract")
60+
61+
// ErrPinContractFailed error for pinning contract failures
62+
ErrPinContractFailed = sdkErrors.Register(DefaultCodespace, 18, "pinning contract failed")
63+
64+
// ErrUnpinContractFailed error for unpinning contract failures
65+
ErrUnpinContractFailed = sdkErrors.Register(DefaultCodespace, 19, "unpinning contract failed")
66+
67+
// ErrUnknownMsg error by a message handler to show that it is not responsible for this message type
68+
ErrUnknownMsg = sdkErrors.Register(DefaultCodespace, 20, "unknown message from the contract")
69+
70+
// ErrInvalidEvent error if an attribute/event from the contract is invalid
71+
ErrInvalidEvent = sdkErrors.Register(DefaultCodespace, 21, "invalid event")
72+
)

wasm/types/events.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package types
2+
3+
const (
4+
// WasmModuleEventType is stored with any contract TX that returns non empty EventAttributes
5+
WasmModuleEventType = "wasm"
6+
// CustomContractEventPrefix contracts can create custom events. To not mix them with other system events they got the `wasm-` prefix.
7+
CustomContractEventPrefix = "wasm-"
8+
9+
EventTypeStoreCode = "store_code"
10+
EventTypeInstantiate = "instantiate"
11+
EventTypeExecute = "execute"
12+
EventTypeMigrate = "migrate"
13+
EventTypePinCode = "pin_code"
14+
EventTypeUnpinCode = "unpin_code"
15+
EventTypeSudo = "sudo"
16+
EventTypeReply = "reply"
17+
EventTypeGovContractResult = "gov_contract_result"
18+
)
19+
20+
// event attributes returned from contract execution
21+
const (
22+
AttributeReservedPrefix = "_"
23+
24+
AttributeKeyContractAddr = "_contract_address"
25+
AttributeKeyCodeID = "code_id"
26+
AttributeKeyResultDataHex = "result"
27+
AttributeKeyFeature = "feature"
28+
)

wasm/types/genesis.go

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
package types
2+
3+
import (
4+
sdk "github.com/cosmos/cosmos-sdk/types"
5+
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
6+
)
7+
8+
func (s Sequence) ValidateBasic() error {
9+
if len(s.IDKey) == 0 {
10+
return sdkerrors.Wrap(ErrEmpty, "id key")
11+
}
12+
return nil
13+
}
14+
15+
func (s GenesisState) ValidateBasic() error {
16+
if err := s.Params.ValidateBasic(); err != nil {
17+
return sdkerrors.Wrap(err, "params")
18+
}
19+
for i := range s.Codes {
20+
if err := s.Codes[i].ValidateBasic(); err != nil {
21+
return sdkerrors.Wrapf(err, "code: %d", i)
22+
}
23+
}
24+
for i := range s.Contracts {
25+
if err := s.Contracts[i].ValidateBasic(); err != nil {
26+
return sdkerrors.Wrapf(err, "contract: %d", i)
27+
}
28+
}
29+
for i := range s.Sequences {
30+
if err := s.Sequences[i].ValidateBasic(); err != nil {
31+
return sdkerrors.Wrapf(err, "sequence: %d", i)
32+
}
33+
}
34+
for i := range s.GenMsgs {
35+
if err := s.GenMsgs[i].ValidateBasic(); err != nil {
36+
return sdkerrors.Wrapf(err, "gen message: %d", i)
37+
}
38+
}
39+
return nil
40+
}
41+
42+
func (c Code) ValidateBasic() error {
43+
if c.CodeID == 0 {
44+
return sdkerrors.Wrap(ErrEmpty, "code id")
45+
}
46+
if err := c.CodeInfo.ValidateBasic(); err != nil {
47+
return sdkerrors.Wrap(err, "code info")
48+
}
49+
if err := validateWasmCode(c.CodeBytes); err != nil {
50+
return sdkerrors.Wrap(err, "code bytes")
51+
}
52+
return nil
53+
}
54+
55+
func (c Contract) ValidateBasic() error {
56+
if _, err := sdk.AccAddressFromBech32(c.ContractAddress); err != nil {
57+
return sdkerrors.Wrap(err, "contract address")
58+
}
59+
if err := c.ContractInfo.ValidateBasic(); err != nil {
60+
return sdkerrors.Wrap(err, "contract info")
61+
}
62+
63+
if c.ContractInfo.Created != nil {
64+
return sdkerrors.Wrap(ErrInvalid, "created must be empty")
65+
}
66+
for i := range c.ContractState {
67+
if err := c.ContractState[i].ValidateBasic(); err != nil {
68+
return sdkerrors.Wrapf(err, "contract state %d", i)
69+
}
70+
}
71+
return nil
72+
}
73+
74+
// AsMsg returns the underlying cosmos-sdk message instance. Null when can not be mapped to a known type.
75+
func (m GenesisState_GenMsgs) AsMsg() sdk.Msg {
76+
if msg := m.GetStoreCode(); msg != nil {
77+
return msg
78+
}
79+
if msg := m.GetInstantiateContract(); msg != nil {
80+
return msg
81+
}
82+
if msg := m.GetExecuteContract(); msg != nil {
83+
return msg
84+
}
85+
return nil
86+
}
87+
88+
func (m GenesisState_GenMsgs) ValidateBasic() error {
89+
msg := m.AsMsg()
90+
if msg == nil {
91+
return sdkerrors.Wrapf(sdkerrors.ErrInvalidType, "unknown message")
92+
}
93+
return msg.ValidateBasic()
94+
}
95+
96+
// ValidateGenesis performs basic validation of supply genesis data returning an
97+
// error for any failed validation criteria.
98+
func ValidateGenesis(data GenesisState) error {
99+
return data.ValidateBasic()
100+
}

0 commit comments

Comments
 (0)