Upgrade to wasmvm 1.2.1 (#1245)
* Use wasmvm store adapter * Bump wasmvm to v1.2.1
This commit is contained in:
@@ -15,10 +15,10 @@ RUN apk add git
|
|||||||
WORKDIR /code
|
WORKDIR /code
|
||||||
COPY . /code/
|
COPY . /code/
|
||||||
# See https://github.com/CosmWasm/wasmvm/releases
|
# See https://github.com/CosmWasm/wasmvm/releases
|
||||||
ADD https://github.com/CosmWasm/wasmvm/releases/download/v1.2.0/libwasmvm_muslc.aarch64.a /lib/libwasmvm_muslc.aarch64.a
|
ADD https://github.com/CosmWasm/wasmvm/releases/download/v1.2.1/libwasmvm_muslc.aarch64.a /lib/libwasmvm_muslc.aarch64.a
|
||||||
ADD https://github.com/CosmWasm/wasmvm/releases/download/v1.2.0/libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.x86_64.a
|
ADD https://github.com/CosmWasm/wasmvm/releases/download/v1.2.1/libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.x86_64.a
|
||||||
RUN sha256sum /lib/libwasmvm_muslc.aarch64.a | grep cba4b334893456c64df177939cbdd09afe4812432c02ae37d60d69a111b1b50d
|
RUN sha256sum /lib/libwasmvm_muslc.aarch64.a | grep 86bc5fdc0f01201481c36e17cd3dfed6e9650d22e1c5c8983a5b78c231789ee0
|
||||||
RUN sha256sum /lib/libwasmvm_muslc.x86_64.a | grep 6f87082f7a62602f9725d529677f330b9c4dd4607887be52a86328c6c919495b
|
RUN sha256sum /lib/libwasmvm_muslc.x86_64.a | grep a00700aa19f5bfe0f46290ddf69bf51eb03a6dfcd88b905e1081af2e42dbbafc
|
||||||
|
|
||||||
# Copy the library you want to the final location that will be found by the linker flag `-lwasmvm_muslc`
|
# Copy the library you want to the final location that will be found by the linker flag `-lwasmvm_muslc`
|
||||||
RUN cp /lib/libwasmvm_muslc.${arch}.a /lib/libwasmvm_muslc.a
|
RUN cp /lib/libwasmvm_muslc.${arch}.a /lib/libwasmvm_muslc.a
|
||||||
|
|||||||
2
go.mod
2
go.mod
@@ -3,7 +3,7 @@ module github.com/CosmWasm/wasmd
|
|||||||
go 1.19
|
go 1.19
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/CosmWasm/wasmvm v1.2.0
|
github.com/CosmWasm/wasmvm v1.2.1
|
||||||
github.com/cosmos/cosmos-proto v1.0.0-beta.2
|
github.com/cosmos/cosmos-proto v1.0.0-beta.2
|
||||||
github.com/cosmos/cosmos-sdk v0.45.14
|
github.com/cosmos/cosmos-sdk v0.45.14
|
||||||
github.com/cosmos/gogoproto v1.4.6
|
github.com/cosmos/gogoproto v1.4.6
|
||||||
|
|||||||
4
go.sum
4
go.sum
@@ -70,8 +70,8 @@ github.com/CloudyKit/fastprinter v0.0.0-20170127035650-74b38d55f37a/go.mod h1:EF
|
|||||||
github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53/go.mod h1:+3IMCy2vIlbG1XG/0ggNQv0SvxCAIpPM5b1nCz56Xno=
|
github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53/go.mod h1:+3IMCy2vIlbG1XG/0ggNQv0SvxCAIpPM5b1nCz56Xno=
|
||||||
github.com/CloudyKit/jet v2.1.3-0.20180809161101-62edd43e4f88+incompatible/go.mod h1:HPYO+50pSWkPoj9Q/eq0aRGByCL6ScRlUmiEX5Zgm+w=
|
github.com/CloudyKit/jet v2.1.3-0.20180809161101-62edd43e4f88+incompatible/go.mod h1:HPYO+50pSWkPoj9Q/eq0aRGByCL6ScRlUmiEX5Zgm+w=
|
||||||
github.com/CloudyKit/jet/v3 v3.0.0/go.mod h1:HKQPgSJmdK8hdoAbKUUWajkHyHo4RaU5rMdUywE7VMo=
|
github.com/CloudyKit/jet/v3 v3.0.0/go.mod h1:HKQPgSJmdK8hdoAbKUUWajkHyHo4RaU5rMdUywE7VMo=
|
||||||
github.com/CosmWasm/wasmvm v1.2.0 h1:pNCp175id+r/dSa4Ii5zoTkmauOoeipkvepvEJM1bao=
|
github.com/CosmWasm/wasmvm v1.2.1 h1:si0tRsRDdUShV0k51Wn6zRKlmj3/WWP9Yr4cLmDTf+8=
|
||||||
github.com/CosmWasm/wasmvm v1.2.0/go.mod h1:OIhXFPi9BbcEL1USBj4OIrBTtSSds+9eEql56fsdyfE=
|
github.com/CosmWasm/wasmvm v1.2.1/go.mod h1:vW/E3h8j9xBQs9bCoijDuawKo9kCtxOaS8N8J7KFtkc=
|
||||||
github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ=
|
github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ=
|
||||||
github.com/DataDog/zstd v1.4.1/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo=
|
github.com/DataDog/zstd v1.4.1/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo=
|
||||||
github.com/DataDog/zstd v1.4.5 h1:EndNeuB0l9syBZhut0wns3gV1hL8zX8LIu6ZiVHWLIQ=
|
github.com/DataDog/zstd v1.4.5 h1:EndNeuB0l9syBZhut0wns3gV1hL8zX8LIu6ZiVHWLIQ=
|
||||||
|
|||||||
@@ -289,14 +289,14 @@ func (k Keeper) instantiate(
|
|||||||
// create prefixed data store
|
// create prefixed data store
|
||||||
// 0x03 | BuildContractAddressClassic (sdk.AccAddress)
|
// 0x03 | BuildContractAddressClassic (sdk.AccAddress)
|
||||||
prefixStoreKey := types.GetContractStorePrefix(contractAddress)
|
prefixStoreKey := types.GetContractStorePrefix(contractAddress)
|
||||||
prefixStore := prefix.NewStore(ctx.KVStore(k.storeKey), prefixStoreKey)
|
vmStore := types.NewStoreAdapter(prefix.NewStore(ctx.KVStore(k.storeKey), prefixStoreKey))
|
||||||
|
|
||||||
// prepare querier
|
// prepare querier
|
||||||
querier := k.newQueryHandler(ctx, contractAddress)
|
querier := k.newQueryHandler(ctx, contractAddress)
|
||||||
|
|
||||||
// instantiate wasm contract
|
// instantiate wasm contract
|
||||||
gas := k.runtimeGasForContract(ctx)
|
gas := k.runtimeGasForContract(ctx)
|
||||||
res, gasUsed, err := k.wasmVM.Instantiate(codeInfo.CodeHash, env, info, initMsg, prefixStore, cosmwasmAPI, querier, k.gasMeter(ctx), gas, costJSONDeserialization)
|
res, gasUsed, err := k.wasmVM.Instantiate(codeInfo.CodeHash, env, info, initMsg, vmStore, cosmwasmAPI, querier, k.gasMeter(ctx), gas, costJSONDeserialization)
|
||||||
k.consumeRuntimeGas(ctx, gasUsed)
|
k.consumeRuntimeGas(ctx, gasUsed)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, sdkerrors.Wrap(types.ErrInstantiateFailed, err.Error())
|
return nil, nil, sdkerrors.Wrap(types.ErrInstantiateFailed, err.Error())
|
||||||
@@ -428,9 +428,9 @@ func (k Keeper) migrate(ctx sdk.Context, contractAddress sdk.AccAddress, caller
|
|||||||
querier := k.newQueryHandler(ctx, contractAddress)
|
querier := k.newQueryHandler(ctx, contractAddress)
|
||||||
|
|
||||||
prefixStoreKey := types.GetContractStorePrefix(contractAddress)
|
prefixStoreKey := types.GetContractStorePrefix(contractAddress)
|
||||||
prefixStore := prefix.NewStore(ctx.KVStore(k.storeKey), prefixStoreKey)
|
vmStore := types.NewStoreAdapter(prefix.NewStore(ctx.KVStore(k.storeKey), prefixStoreKey))
|
||||||
gas := k.runtimeGasForContract(ctx)
|
gas := k.runtimeGasForContract(ctx)
|
||||||
res, gasUsed, err := k.wasmVM.Migrate(newCodeInfo.CodeHash, env, msg, &prefixStore, cosmwasmAPI, &querier, k.gasMeter(ctx), gas, costJSONDeserialization)
|
res, gasUsed, err := k.wasmVM.Migrate(newCodeInfo.CodeHash, env, msg, vmStore, cosmwasmAPI, &querier, k.gasMeter(ctx), gas, costJSONDeserialization)
|
||||||
k.consumeRuntimeGas(ctx, gasUsed)
|
k.consumeRuntimeGas(ctx, gasUsed)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, sdkerrors.Wrap(types.ErrMigrationFailed, err.Error())
|
return nil, sdkerrors.Wrap(types.ErrMigrationFailed, err.Error())
|
||||||
@@ -705,25 +705,26 @@ func (k Keeper) QueryRaw(ctx sdk.Context, contractAddress sdk.AccAddress, key []
|
|||||||
return prefixStore.Get(key)
|
return prefixStore.Get(key)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (k Keeper) contractInstance(ctx sdk.Context, contractAddress sdk.AccAddress) (types.ContractInfo, types.CodeInfo, prefix.Store, error) {
|
// internal helper function
|
||||||
|
func (k Keeper) contractInstance(ctx sdk.Context, contractAddress sdk.AccAddress) (types.ContractInfo, types.CodeInfo, wasmvm.KVStore, error) {
|
||||||
store := ctx.KVStore(k.storeKey)
|
store := ctx.KVStore(k.storeKey)
|
||||||
|
|
||||||
contractBz := store.Get(types.GetContractAddressKey(contractAddress))
|
contractBz := store.Get(types.GetContractAddressKey(contractAddress))
|
||||||
if contractBz == nil {
|
if contractBz == nil {
|
||||||
return types.ContractInfo{}, types.CodeInfo{}, prefix.Store{}, sdkerrors.Wrap(types.ErrNotFound, "contract")
|
return types.ContractInfo{}, types.CodeInfo{}, nil, sdkerrors.Wrap(types.ErrNotFound, "contract")
|
||||||
}
|
}
|
||||||
var contractInfo types.ContractInfo
|
var contractInfo types.ContractInfo
|
||||||
k.cdc.MustUnmarshal(contractBz, &contractInfo)
|
k.cdc.MustUnmarshal(contractBz, &contractInfo)
|
||||||
|
|
||||||
codeInfoBz := store.Get(types.GetCodeKey(contractInfo.CodeID))
|
codeInfoBz := store.Get(types.GetCodeKey(contractInfo.CodeID))
|
||||||
if codeInfoBz == nil {
|
if codeInfoBz == nil {
|
||||||
return contractInfo, types.CodeInfo{}, prefix.Store{}, sdkerrors.Wrap(types.ErrNotFound, "code info")
|
return contractInfo, types.CodeInfo{}, nil, sdkerrors.Wrap(types.ErrNotFound, "code info")
|
||||||
}
|
}
|
||||||
var codeInfo types.CodeInfo
|
var codeInfo types.CodeInfo
|
||||||
k.cdc.MustUnmarshal(codeInfoBz, &codeInfo)
|
k.cdc.MustUnmarshal(codeInfoBz, &codeInfo)
|
||||||
prefixStoreKey := types.GetContractStorePrefix(contractAddress)
|
prefixStoreKey := types.GetContractStorePrefix(contractAddress)
|
||||||
prefixStore := prefix.NewStore(ctx.KVStore(k.storeKey), prefixStoreKey)
|
prefixStore := prefix.NewStore(ctx.KVStore(k.storeKey), prefixStoreKey)
|
||||||
return contractInfo, codeInfo, prefixStore, nil
|
return contractInfo, codeInfo, types.NewStoreAdapter(prefixStore), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (k Keeper) GetContractInfo(ctx sdk.Context, contractAddress sdk.AccAddress) *types.ContractInfo {
|
func (k Keeper) GetContractInfo(ctx sdk.Context, contractAddress sdk.AccAddress) *types.ContractInfo {
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package types
|
|||||||
import (
|
import (
|
||||||
wasmvm "github.com/CosmWasm/wasmvm"
|
wasmvm "github.com/CosmWasm/wasmvm"
|
||||||
wasmvmtypes "github.com/CosmWasm/wasmvm/types"
|
wasmvmtypes "github.com/CosmWasm/wasmvm/types"
|
||||||
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
)
|
)
|
||||||
|
|
||||||
// DefaultMaxQueryStackSize maximum size of the stack of contract instances doing queries
|
// DefaultMaxQueryStackSize maximum size of the stack of contract instances doing queries
|
||||||
@@ -239,3 +240,38 @@ type WasmerEngine interface {
|
|||||||
// GetMetrics some internal metrics for monitoring purposes.
|
// GetMetrics some internal metrics for monitoring purposes.
|
||||||
GetMetrics() (*wasmvmtypes.Metrics, error)
|
GetMetrics() (*wasmvmtypes.Metrics, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var _ wasmvm.KVStore = &StoreAdapter{}
|
||||||
|
|
||||||
|
// StoreAdapter adapter to bridge SDK store impl to wasmvm
|
||||||
|
type StoreAdapter struct {
|
||||||
|
parent sdk.KVStore
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewStoreAdapter constructor
|
||||||
|
func NewStoreAdapter(s sdk.KVStore) *StoreAdapter {
|
||||||
|
if s == nil {
|
||||||
|
panic("store must not be nil")
|
||||||
|
}
|
||||||
|
return &StoreAdapter{parent: s}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s StoreAdapter) Get(key []byte) []byte {
|
||||||
|
return s.parent.Get(key)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s StoreAdapter) Set(key, value []byte) {
|
||||||
|
s.parent.Set(key, value)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s StoreAdapter) Delete(key []byte) {
|
||||||
|
s.parent.Delete(key)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s StoreAdapter) Iterator(start, end []byte) wasmvmtypes.Iterator {
|
||||||
|
return s.parent.Iterator(start, end)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s StoreAdapter) ReverseIterator(start, end []byte) wasmvmtypes.Iterator {
|
||||||
|
return s.parent.ReverseIterator(start, end)
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user