mirror of https://github.com/certusone/wasmd.git
Upgrade to wasmvm 1.2.1 (#1245)
* Use wasmvm store adapter * Bump wasmvm to v1.2.1
This commit is contained in:
parent
90739a9532
commit
850f901b2e
|
@ -15,10 +15,10 @@ RUN apk add git
|
|||
WORKDIR /code
|
||||
COPY . /code/
|
||||
# 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.0/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.x86_64.a | grep 6f87082f7a62602f9725d529677f330b9c4dd4607887be52a86328c6c919495b
|
||||
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.1/libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.x86_64.a
|
||||
RUN sha256sum /lib/libwasmvm_muslc.aarch64.a | grep 86bc5fdc0f01201481c36e17cd3dfed6e9650d22e1c5c8983a5b78c231789ee0
|
||||
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`
|
||||
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
|
||||
|
||||
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-sdk v0.45.14
|
||||
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/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/CosmWasm/wasmvm v1.2.0 h1:pNCp175id+r/dSa4Ii5zoTkmauOoeipkvepvEJM1bao=
|
||||
github.com/CosmWasm/wasmvm v1.2.0/go.mod h1:OIhXFPi9BbcEL1USBj4OIrBTtSSds+9eEql56fsdyfE=
|
||||
github.com/CosmWasm/wasmvm v1.2.1 h1:si0tRsRDdUShV0k51Wn6zRKlmj3/WWP9Yr4cLmDTf+8=
|
||||
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/zstd v1.4.1/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo=
|
||||
github.com/DataDog/zstd v1.4.5 h1:EndNeuB0l9syBZhut0wns3gV1hL8zX8LIu6ZiVHWLIQ=
|
||||
|
|
|
@ -289,14 +289,14 @@ func (k Keeper) instantiate(
|
|||
// create prefixed data store
|
||||
// 0x03 | BuildContractAddressClassic (sdk.AccAddress)
|
||||
prefixStoreKey := types.GetContractStorePrefix(contractAddress)
|
||||
prefixStore := prefix.NewStore(ctx.KVStore(k.storeKey), prefixStoreKey)
|
||||
vmStore := types.NewStoreAdapter(prefix.NewStore(ctx.KVStore(k.storeKey), prefixStoreKey))
|
||||
|
||||
// prepare querier
|
||||
querier := k.newQueryHandler(ctx, contractAddress)
|
||||
|
||||
// instantiate wasm contract
|
||||
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)
|
||||
if err != nil {
|
||||
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)
|
||||
|
||||
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)
|
||||
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)
|
||||
if err != nil {
|
||||
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)
|
||||
}
|
||||
|
||||
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)
|
||||
|
||||
contractBz := store.Get(types.GetContractAddressKey(contractAddress))
|
||||
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
|
||||
k.cdc.MustUnmarshal(contractBz, &contractInfo)
|
||||
|
||||
codeInfoBz := store.Get(types.GetCodeKey(contractInfo.CodeID))
|
||||
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
|
||||
k.cdc.MustUnmarshal(codeInfoBz, &codeInfo)
|
||||
prefixStoreKey := types.GetContractStorePrefix(contractAddress)
|
||||
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 {
|
||||
|
|
|
@ -3,6 +3,7 @@ package types
|
|||
import (
|
||||
wasmvm "github.com/CosmWasm/wasmvm"
|
||||
wasmvmtypes "github.com/CosmWasm/wasmvm/types"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
)
|
||||
|
||||
// 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() (*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)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue