diff --git a/.codecov.yml b/.codecov.yml index bd21a4f4..844ab091 100644 --- a/.codecov.yml +++ b/.codecov.yml @@ -14,6 +14,7 @@ comment: behavior: default # update if exists else create new ignore: + - "api" - "*.md" - "*.rst" - "cmd/" diff --git a/Dockerfile b/Dockerfile index 50cd5442..eb654216 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,8 +1,8 @@ FROM golang:1.21-alpine AS go-builder #ARG arch=x86_64 -# See https://github.com/initia-labs/initiavm/releases -ENV LIBINITIAVM_VERSION=v0.2.0-beta.2.1 +# See https://github.com/initia-labs/movevm/releases +ENV LIBINITIAVM_VERSION=v0.2.0 # this comes from standard alpine nightly file # https://github.com/rust-lang/docker-rust-nightly/blob/master/alpine3.12/Dockerfile @@ -20,18 +20,18 @@ COPY . /code/ RUN git clone --depth 1 https://github.com/microsoft/mimalloc; cd mimalloc; mkdir build; cd build; cmake ..; make -j$(nproc); make install ENV MIMALLOC_RESERVE_HUGE_OS_PAGES=4 -# See https://github.com/initia-labs/initiavm/releases -ADD https://github.com/initia-labs/initiavm/releases/download/${LIBINITIAVM_VERSION}/libinitia_muslc.aarch64.a /lib/libinitia_muslc.aarch64.a -ADD https://github.com/initia-labs/initiavm/releases/download/${LIBINITIAVM_VERSION}/libinitia_muslc.x86_64.a /lib/libinitia_muslc.x86_64.a +# See https://github.com/initia-labs/movevm/releases +ADD https://github.com/initia-labs/movevm/releases/download/${LIBINITIAVM_VERSION}/libmovevm_muslc.aarch64.a /lib/libmovevm_muslc.aarch64.a +ADD https://github.com/initia-labs/movevm/releases/download/${LIBINITIAVM_VERSION}/libmovevm_muslc.x86_64.a /lib/libmovevm_muslc.x86_64.a # Highly recommend to verify the version hash -# RUN sha256sum /lib/libinitia_muslc.aarch64.a | grep a5e63292ec67f5bdefab51b42c3fbc3fa307c6aefeb6b409d971f1df909c3927 -# RUN sha256sum /lib/libinitia_muslc.x86_64.a | grep 762307147bf8f550bd5324b7f7c4f17ee20805ff93dc06cc073ffbd909438320 +# RUN sha256sum /lib/libmovevm_muslc.aarch64.a | grep a5e63292ec67f5bdefab51b42c3fbc3fa307c6aefeb6b409d971f1df909c3927 +# RUN sha256sum /lib/libmovevm_muslc.x86_64.a | grep 762307147bf8f550bd5324b7f7c4f17ee20805ff93dc06cc073ffbd909438320 # Copy the library you want to the final location that will be found by the linker flag `-linitia_muslc` -RUN cp /lib/libinitia_muslc.`uname -m`.a /lib/libinitia_muslc.a +RUN cp /lib/libmovevm_muslc.`uname -m`.a /lib/libmovevm_muslc.a -# force it to use static lib (from above) not standard libinitia.so file +# force it to use static lib (from above) not standard libmovevm.so file RUN LEDGER_ENABLED=false BUILD_TAGS=muslc LDFLAGS="-linkmode=external -extldflags \"-L/code/mimalloc/build -lmimalloc -Wl,-z,muldefs -static\"" make build FROM alpine:3.15.4 diff --git a/Makefile b/Makefile index 3ba9cbc9..e4c8da19 100644 --- a/Makefile +++ b/Makefile @@ -130,7 +130,7 @@ build-linux-with-shared-library: docker build --tag initia/initiad-shared ./ -f ./shared.Dockerfile docker create --name temp initia/initiad-shared:latest docker cp temp:/usr/local/bin/initiad $(BUILDDIR)/ - docker cp temp:/lib/libinitia.so $(BUILDDIR)/ + docker cp temp:/lib/libmovevm.so $(BUILDDIR)/ docker rm temp install: go.sum diff --git a/app/app.go b/app/app.go index 385e65c7..4f33dc21 100644 --- a/app/app.go +++ b/app/app.go @@ -824,6 +824,7 @@ func NewInitiaApp( app.OracleKeeper, // app.NftTransferKeeper, app.BaseApp.MsgServiceRouter(), + app.BaseApp.GRPCQueryRouter(), moveConfig, // staking feature app.DistrKeeper, diff --git a/benchmark/app_test.go b/benchmark/app_test.go index 23d8f238..179c9157 100644 --- a/benchmark/app_test.go +++ b/benchmark/app_test.go @@ -14,7 +14,7 @@ import ( simappparams "cosmossdk.io/simapp/params" initiaapp "github.com/initia-labs/initia/app" movetypes "github.com/initia-labs/initia/x/move/types" - vmtypes "github.com/initia-labs/initiavm/types" + vmtypes "github.com/initia-labs/movevm/types" dbm "github.com/cosmos/cosmos-db" "github.com/cosmos/cosmos-sdk/client" diff --git a/cmd/move/move.go b/cmd/move/move.go index 119daf07..f6de506d 100644 --- a/cmd/move/move.go +++ b/cmd/move/move.go @@ -16,13 +16,13 @@ import ( movecli "github.com/initia-labs/initia/x/move/client/cli" movetypes "github.com/initia-labs/initia/x/move/types" - "github.com/initia-labs/initiavm/api" - "github.com/initia-labs/initiavm/types/compiler" - buildtypes "github.com/initia-labs/initiavm/types/compiler/build" - coveragetypes "github.com/initia-labs/initiavm/types/compiler/coverage" - docgentypes "github.com/initia-labs/initiavm/types/compiler/docgen" - provetypes "github.com/initia-labs/initiavm/types/compiler/prove" - testtypes "github.com/initia-labs/initiavm/types/compiler/test" + "github.com/initia-labs/movevm/api" + "github.com/initia-labs/movevm/types/compiler" + buildtypes "github.com/initia-labs/movevm/types/compiler/build" + coveragetypes "github.com/initia-labs/movevm/types/compiler/coverage" + docgentypes "github.com/initia-labs/movevm/types/compiler/docgen" + provetypes "github.com/initia-labs/movevm/types/compiler/prove" + testtypes "github.com/initia-labs/movevm/types/compiler/test" "github.com/pelletier/go-toml" "github.com/spf13/cobra" ) @@ -143,7 +143,7 @@ func moveBuildCmd() *cobra.Command { Long: "Build a move package. The provided path must specify the path of move package to build", Args: cobra.ExactArgs(0), RunE: func(cmd *cobra.Command, args []string) error { - arg, err := getInitiaCompilerArgument(cmd) + arg, err := getCompilerArgument(cmd) if err != nil { return err } @@ -168,7 +168,7 @@ func moveTestCmd() *cobra.Command { Long: "Run tests in a move package. The provided path must specify the path of move package to test", Args: cobra.ExactArgs(0), RunE: func(cmd *cobra.Command, args []string) error { - arg, err := getInitiaCompilerArgument(cmd) + arg, err := getCompilerArgument(cmd) if err != nil { return err } @@ -198,7 +198,7 @@ func moveCoverageSummaryCmd() *cobra.Command { Short: "Display a coverage summary for all modules in this package", Args: cobra.ExactArgs(0), RunE: func(cmd *cobra.Command, args []string) error { - arg, err := getInitiaCompilerArgument(cmd) + arg, err := getCompilerArgument(cmd) if err != nil { return err } @@ -229,7 +229,7 @@ func moveCoverageSourceCmd() *cobra.Command { Short: "Display coverage information about the module against source code", Args: cobra.ExactArgs(1), RunE: func(cmd *cobra.Command, args []string) error { - arg, err := getInitiaCompilerArgument(cmd) + arg, err := getCompilerArgument(cmd) if err != nil { return err } @@ -256,7 +256,7 @@ func moveCoverageBytecodeCmd() *cobra.Command { Short: "Display coverage information about the module against disassembled bytecode", Args: cobra.ExactArgs(1), RunE: func(cmd *cobra.Command, args []string) error { - arg, err := getInitiaCompilerArgument(cmd) + arg, err := getCompilerArgument(cmd) if err != nil { return err } @@ -284,7 +284,7 @@ func moveNewCmd() *cobra.Command { Long: "Create a new Move package with name `name` at `path`. If `path` is not provided the package will be created in the directory `name`", Args: cobra.ExactArgs(1), RunE: func(cmd *cobra.Command, args []string) error { - arg, err := getInitiaCompilerArgument(cmd) + arg, err := getCompilerArgument(cmd) if err != nil { return err } @@ -309,7 +309,7 @@ func moveCleanCmd() *cobra.Command { Long: "Remove previously built data and its cache", Args: cobra.ExactArgs(0), RunE: func(cmd *cobra.Command, args []string) error { - arg := compiler.InitiaCompilerArgument{} + arg := compiler.CompilerArgument{} cleanCache, err := cmd.Flags().GetBool(flagCleanCache) if err != nil { @@ -448,7 +448,7 @@ func moveProveCmd() *cobra.Command { Long: "run formal verification of a Move package using the Move prover", Args: cobra.ExactArgs(0), RunE: func(cmd *cobra.Command, args []string) error { - arg, err := getInitiaCompilerArgument(cmd) + arg, err := getCompilerArgument(cmd) if err != nil { return err } @@ -506,7 +506,7 @@ func moveDocgenCmd() *cobra.Command { Long: "Generate documents of a move package. The provided path must specify the path of move package to generate docs", Args: cobra.ExactArgs(0), RunE: func(cmd *cobra.Command, args []string) error { - arg, err := getInitiaCompilerArgument(cmd) + arg, err := getCompilerArgument(cmd) if err != nil { return err } @@ -597,7 +597,7 @@ func addMoveDocgenFlags(cmd *cobra.Command) { cmd.Flags().String(flagReferencesFile, "", "Package-relative path to a file whose content is added to each generated markdown file.") } -func getInitiaCompilerArgument(cmd *cobra.Command) (*compiler.InitiaCompilerArgument, error) { +func getCompilerArgument(cmd *cobra.Command) (*compiler.CompilerArgument, error) { bc, err := getBuildConfig(cmd) if err != nil { return nil, err @@ -613,7 +613,7 @@ func getInitiaCompilerArgument(cmd *cobra.Command) (*compiler.InitiaCompilerArgu return nil, err } - return &compiler.InitiaCompilerArgument{ + return &compiler.CompilerArgument{ PackagePath: packagePath, Verbose: verbose, BuildConfig: *bc, diff --git a/go.mod b/go.mod index 24ee4236..26a14255 100644 --- a/go.mod +++ b/go.mod @@ -39,7 +39,7 @@ require ( github.com/hashicorp/go-metrics v0.5.2 github.com/initia-labs/OPinit v0.2.0-beta.1 // we also need to update `LIBINITIAVM_VERSION` of images/private/Dockerfile#5 - github.com/initia-labs/initiavm v0.2.0-beta.2.0.20240226025020-6e778c96c52f + github.com/initia-labs/movevm v0.0.0-20240228123400-2951cc64c945 github.com/pelletier/go-toml v1.9.5 github.com/pkg/errors v0.9.1 github.com/rakyll/statik v0.1.7 diff --git a/go.sum b/go.sum index 2bf84a9e..85292ca9 100644 --- a/go.sum +++ b/go.sum @@ -725,8 +725,8 @@ github.com/initia-labs/cosmos-sdk v0.0.0-20240123082052-77e8b246064a h1:wD9ynlE7 github.com/initia-labs/cosmos-sdk v0.0.0-20240123082052-77e8b246064a/go.mod h1:tlrkY1sntOt1q0OX/rqF0zRJtmXNoffAS6VFTcky+w8= github.com/initia-labs/iavl v0.0.0-20240208034922-5d81c449d4c0 h1:GQ7/UD5mB6q104roqZK5jxb6ff9sBk0/uwFxgERQIaU= github.com/initia-labs/iavl v0.0.0-20240208034922-5d81c449d4c0/go.mod h1:CmTGqMnRnucjxbjduneZXT+0vPgNElYvdefjX2q9tYc= -github.com/initia-labs/initiavm v0.2.0-beta.2.0.20240226025020-6e778c96c52f h1:zNxqfWC8MymWOakk2JL+PkzVHIX309cNBCnMJJRfUJM= -github.com/initia-labs/initiavm v0.2.0-beta.2.0.20240226025020-6e778c96c52f/go.mod h1:Yq+GksFbLNwnyNHKd84yDUTqFpzye3F1ic7Ax9sur10= +github.com/initia-labs/movevm v0.0.0-20240228123400-2951cc64c945 h1:aoPuGF00i+yo39QfiJwLv7QMnhaGJJ/jzkW2NNAas9o= +github.com/initia-labs/movevm v0.0.0-20240228123400-2951cc64c945/go.mod h1:1EyJ06+Hn43MfaXZ+30a2gmhS5zjqiFF8oSF5CHai28= github.com/jhump/protoreflect v1.15.3 h1:6SFRuqU45u9hIZPJAoZ8c28T3nK64BNdp9w6jFonzls= github.com/jhump/protoreflect v1.15.3/go.mod h1:4ORHmSBmlCW8fh3xHmJMGyul1zNqZK4Elxc8qKP+p1k= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= diff --git a/images/private/Dockerfile b/images/private/Dockerfile index 84a7ce86..12fda8a9 100644 --- a/images/private/Dockerfile +++ b/images/private/Dockerfile @@ -1,8 +1,8 @@ FROM golang:1.21-alpine AS go-builder #ARG arch=x86_64 -# See https://github.com/initia-labs/initiavm/releases -ARG LIBINITIAVM_VERSION=v0.2.0-beta.2.1 +# See https://github.com/initia-labs/movevm/releases +ARG LIBINITIAVM_VERSION=v0.2.0 # this comes from standard alpine nightly file # https://github.com/rust-lang/docker-rust-nightly/blob/master/alpine3.12/Dockerfile @@ -24,14 +24,14 @@ ARG GITHUB_ACCESS_TOKEN ENV GOPRIVATE=github.com/initia-labs/* RUN git config --global url."https://${GITHUB_ACCESS_TOKEN}:x-oauth-basic@github.com/".insteadOf "https://github.com/" -# See https://github.com/initia-labs/initiavm/releases +# See https://github.com/initia-labs/movevm/releases ADD https://github.com/gruntwork-io/fetch/releases/download/v0.4.6/fetch_linux_amd64 /usr/bin/fetch RUN chmod +x /usr/bin/fetch ENV GITHUB_OAUTH_TOKEN=$GITHUB_ACCESS_TOKEN -RUN fetch --repo="https://github.com/initia-labs/initiavm" --tag="${LIBINITIAVM_VERSION}" --release-asset="libinitia_muslc.*.a" /lib/ -RUN cp /lib/libinitia_muslc.`uname -m`.a /lib/libinitia_muslc.a +RUN fetch --repo="https://github.com/initia-labs/movevm" --tag="${LIBINITIAVM_VERSION}" --release-asset="libmovevm_muslc.*.a" /lib/ +RUN cp /lib/libmovevm_muslc.`uname -m`.a /lib/libmovevm_muslc.a -# force it to use static lib (from above) not standard libinitia.so file +# force it to use static lib (from above) not standard libmovevm.so file RUN LEDGER_ENABLED=false BUILD_TAGS=muslc LDFLAGS="-linkmode=external -extldflags \"-L/code/mimalloc/build -lmimalloc -Wl,-z,muldefs -static\"" make build FROM alpine:3.15.4 diff --git a/shared.Dockerfile b/shared.Dockerfile index 553f9342..71bcb3dc 100644 --- a/shared.Dockerfile +++ b/shared.Dockerfile @@ -11,14 +11,14 @@ COPY . /code/ RUN LEDGER_ENABLED=false make build -RUN cp /go/pkg/mod/github.com/initia\-labs/initiavm@v*/api/libinitia.`uname -m`.so /lib/libinitia.so +RUN cp /go/pkg/mod/github.com/initia\-labs/initiavm@v*/api/libmovevm.`uname -m`.so /lib/libmovevm.so FROM ubuntu:20.04 WORKDIR /root COPY --from=go-builder /code/build/initiad /usr/local/bin/initiad -COPY --from=go-builder /lib/libinitia.so /lib/libinitia.so +COPY --from=go-builder /lib/libmovevm.so /lib/libmovevm.so # rest server EXPOSE 1317 diff --git a/x/bank/keeper/common_test.go b/x/bank/keeper/common_test.go index 1cd701da..b030df11 100644 --- a/x/bank/keeper/common_test.go +++ b/x/bank/keeper/common_test.go @@ -65,7 +65,7 @@ import ( rewardtypes "github.com/initia-labs/initia/x/reward/types" "github.com/initia-labs/initia/x/slashing" - "github.com/initia-labs/initiavm/precompile" + "github.com/initia-labs/movevm/precompile" "github.com/skip-mev/slinky/x/oracle" oraclekeeper "github.com/skip-mev/slinky/x/oracle/keeper" @@ -373,6 +373,7 @@ func _createTestInput( bankKeeper, oracleKeeper, nil, + nil, moveConfig, distKeeper, stakingKeeper, @@ -401,7 +402,7 @@ func _createTestInput( msgRouter := baseapp.NewMsgServiceRouter() msgRouter.SetInterfaceRegistry(encodingConfig.InterfaceRegistry) banktypes.RegisterMsgServer(msgRouter, bankkeeper.NewMsgServerImpl(bankKeeper)) - movetypes.RegisterMsgServer(msgRouter, movekeeper.NewMsgServerImpl(*moveKeeper)) + movetypes.RegisterMsgServer(msgRouter, movekeeper.NewMsgServerImpl(moveKeeper)) govConfig := govtypes.DefaultConfig() govKeeper := govkeeper.NewKeeper( diff --git a/x/bank/types/expected_keeper.go b/x/bank/types/expected_keeper.go index 6f7c6851..6e9a40c2 100644 --- a/x/bank/types/expected_keeper.go +++ b/x/bank/types/expected_keeper.go @@ -9,7 +9,7 @@ import ( "github.com/cosmos/cosmos-sdk/types/query" cosmosbanktypes "github.com/cosmos/cosmos-sdk/x/bank/types" - vmtypes "github.com/initia-labs/initiavm/types" + vmtypes "github.com/initia-labs/movevm/types" ) type MoveBankKeeper interface { diff --git a/x/distribution/keeper/common_test.go b/x/distribution/keeper/common_test.go index 4a832099..2d8ed654 100644 --- a/x/distribution/keeper/common_test.go +++ b/x/distribution/keeper/common_test.go @@ -70,7 +70,7 @@ import ( rewardkeeper "github.com/initia-labs/initia/x/reward/keeper" rewardtypes "github.com/initia-labs/initia/x/reward/types" "github.com/initia-labs/initia/x/slashing" - "github.com/initia-labs/initiavm/precompile" + "github.com/initia-labs/movevm/precompile" ) var ModuleBasics = module.NewBasicManager( @@ -353,8 +353,9 @@ func _createTestInput( runtime.NewKVStoreService(keys[movetypes.StoreKey]), accountKeeper, bankKeeper, - nil, // oracle keeper unused - nil, // msg router unused + nil, + nil, + nil, moveConfig, distKeeper, stakingKeeper, @@ -383,7 +384,7 @@ func _createTestInput( msgRouter := baseapp.NewMsgServiceRouter() msgRouter.SetInterfaceRegistry(encodingConfig.InterfaceRegistry) banktypes.RegisterMsgServer(msgRouter, bankkeeper.NewMsgServerImpl(bankKeeper)) - movetypes.RegisterMsgServer(msgRouter, movekeeper.NewMsgServerImpl(*moveKeeper)) + movetypes.RegisterMsgServer(msgRouter, movekeeper.NewMsgServerImpl(moveKeeper)) govConfig := govtypes.DefaultConfig() govKeeper := govkeeper.NewKeeper( diff --git a/x/gov/keeper/common_test.go b/x/gov/keeper/common_test.go index f94c1c69..64f6b9ae 100644 --- a/x/gov/keeper/common_test.go +++ b/x/gov/keeper/common_test.go @@ -73,7 +73,7 @@ import ( rewardtypes "github.com/initia-labs/initia/x/reward/types" "github.com/initia-labs/initia/x/slashing" - "github.com/initia-labs/initiavm/precompile" + "github.com/initia-labs/movevm/precompile" ) var ModuleBasics = module.NewBasicManager( @@ -383,8 +383,9 @@ func _createTestInput( runtime.NewKVStoreService(keys[movetypes.StoreKey]), accountKeeper, bankKeeper, - nil, // oracle keeper unused - nil, // msg router unused + nil, + nil, + nil, moveConfig, distKeeper, stakingKeeper, @@ -413,7 +414,7 @@ func _createTestInput( msgRouter := baseapp.NewMsgServiceRouter() msgRouter.SetInterfaceRegistry(encodingConfig.InterfaceRegistry) banktypes.RegisterMsgServer(msgRouter, bankkeeper.NewMsgServerImpl(bankKeeper)) - movetypes.RegisterMsgServer(msgRouter, movekeeper.NewMsgServerImpl(*moveKeeper)) + movetypes.RegisterMsgServer(msgRouter, movekeeper.NewMsgServerImpl(moveKeeper)) govConfig := govtypes.DefaultConfig() govKeeper := govkeeper.NewKeeper( diff --git a/x/ibc-hooks/keeper/common_test.go b/x/ibc-hooks/keeper/common_test.go index 3e27e106..07de8199 100644 --- a/x/ibc-hooks/keeper/common_test.go +++ b/x/ibc-hooks/keeper/common_test.go @@ -73,7 +73,7 @@ import ( rewardkeeper "github.com/initia-labs/initia/x/reward/keeper" rewardtypes "github.com/initia-labs/initia/x/reward/types" "github.com/initia-labs/initia/x/slashing" - "github.com/initia-labs/initiavm/precompile" + "github.com/initia-labs/movevm/precompile" ) var ModuleBasics = module.NewBasicManager( @@ -376,6 +376,7 @@ func _createTestInput( bankKeeper, nil, // oracle keeper unused nil, // msg router unused + nil, // query router unused moveConfig, distKeeper, stakingKeeper, @@ -412,7 +413,7 @@ func _createTestInput( msgRouter := baseapp.NewMsgServiceRouter() msgRouter.SetInterfaceRegistry(encodingConfig.InterfaceRegistry) banktypes.RegisterMsgServer(msgRouter, bankkeeper.NewMsgServerImpl(bankKeeper)) - movetypes.RegisterMsgServer(msgRouter, movekeeper.NewMsgServerImpl(*moveKeeper)) + movetypes.RegisterMsgServer(msgRouter, movekeeper.NewMsgServerImpl(moveKeeper)) govConfig := govtypes.DefaultConfig() govKeeper := govkeeper.NewKeeper( diff --git a/x/ibc-hooks/move-hooks/ack.go b/x/ibc-hooks/move-hooks/ack.go index c124c676..c81772cd 100644 --- a/x/ibc-hooks/move-hooks/ack.go +++ b/x/ibc-hooks/move-hooks/ack.go @@ -8,7 +8,7 @@ import ( ibchooks "github.com/initia-labs/initia/x/ibc-hooks" nfttransfertypes "github.com/initia-labs/initia/x/ibc/nft-transfer/types" movetypes "github.com/initia-labs/initia/x/move/types" - vmtypes "github.com/initia-labs/initiavm/types" + vmtypes "github.com/initia-labs/movevm/types" ) func (h MoveHooks) onAckIcs20Packet( diff --git a/x/ibc-hooks/move-hooks/receive.go b/x/ibc-hooks/move-hooks/receive.go index 6a700474..2bf95efc 100644 --- a/x/ibc-hooks/move-hooks/receive.go +++ b/x/ibc-hooks/move-hooks/receive.go @@ -131,6 +131,6 @@ func (h MoveHooks) execMsg(ctx sdk.Context, msg *movetypes.MsgExecute) (*movetyp return nil, err } - moveMsgServer := movekeeper.NewMsgServerImpl(*h.moveKeeper) + moveMsgServer := movekeeper.NewMsgServerImpl(h.moveKeeper) return moveMsgServer.Execute(ctx, msg) } diff --git a/x/ibc-hooks/move-hooks/timeout.go b/x/ibc-hooks/move-hooks/timeout.go index f26e3cc9..4bd8670c 100644 --- a/x/ibc-hooks/move-hooks/timeout.go +++ b/x/ibc-hooks/move-hooks/timeout.go @@ -8,7 +8,7 @@ import ( ibchooks "github.com/initia-labs/initia/x/ibc-hooks" nfttransfertypes "github.com/initia-labs/initia/x/ibc/nft-transfer/types" movetypes "github.com/initia-labs/initia/x/move/types" - vmtypes "github.com/initia-labs/initiavm/types" + vmtypes "github.com/initia-labs/movevm/types" ) func (h MoveHooks) onTimeoutIcs20Packet( diff --git a/x/ibc-hooks/move-hooks/util_test.go b/x/ibc-hooks/move-hooks/util_test.go index 6bf6de66..1f46085a 100644 --- a/x/ibc-hooks/move-hooks/util_test.go +++ b/x/ibc-hooks/move-hooks/util_test.go @@ -8,7 +8,7 @@ import ( nfttransfertypes "github.com/initia-labs/initia/x/ibc/nft-transfer/types" movetypes "github.com/initia-labs/initia/x/move/types" - vmtypes "github.com/initia-labs/initiavm/types" + vmtypes "github.com/initia-labs/movevm/types" transfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" diff --git a/x/ibc/nft-transfer/keeper/integration_test.go b/x/ibc/nft-transfer/keeper/integration_test.go index f5395b09..7a250372 100644 --- a/x/ibc/nft-transfer/keeper/integration_test.go +++ b/x/ibc/nft-transfer/keeper/integration_test.go @@ -10,7 +10,7 @@ import ( ibctesting "github.com/initia-labs/initia/x/ibc/testing" movekeeper "github.com/initia-labs/initia/x/move/keeper" movetypes "github.com/initia-labs/initia/x/move/types" - vmtypes "github.com/initia-labs/initiavm/types" + vmtypes "github.com/initia-labs/movevm/types" ) func (suite *KeeperTestSuite) CreateNftClass( diff --git a/x/move/abci.go b/x/move/abci.go index 87e3850a..eb1b6a8a 100644 --- a/x/move/abci.go +++ b/x/move/abci.go @@ -10,7 +10,7 @@ import ( "github.com/cosmos/cosmos-sdk/telemetry" - vmtypes "github.com/initia-labs/initiavm/types" + vmtypes "github.com/initia-labs/movevm/types" ) func BeginBlocker(ctx context.Context, k keeper.Keeper, vc address.Codec) error { diff --git a/x/move/abci_test.go b/x/move/abci_test.go index dd38bbcd..dc6dd981 100644 --- a/x/move/abci_test.go +++ b/x/move/abci_test.go @@ -12,7 +12,7 @@ import ( distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types" "github.com/initia-labs/initia/x/move/types" - vmtypes "github.com/initia-labs/initiavm/types" + vmtypes "github.com/initia-labs/movevm/types" ) func Test_BeginBlocker(t *testing.T) { diff --git a/x/move/client/cli/query.go b/x/move/client/cli/query.go index 9330e878..7e1fef7d 100644 --- a/x/move/client/cli/query.go +++ b/x/move/client/cli/query.go @@ -14,7 +14,7 @@ import ( "github.com/cosmos/cosmos-sdk/version" "github.com/initia-labs/initia/x/move/types" - vmapi "github.com/initia-labs/initiavm/api" + vmapi "github.com/initia-labs/movevm/api" ) func GetQueryCmd(ac address.Codec) *cobra.Command { diff --git a/x/move/common_test.go b/x/move/common_test.go index 249aaadf..731a0a51 100644 --- a/x/move/common_test.go +++ b/x/move/common_test.go @@ -9,7 +9,7 @@ import ( customdistrtypes "github.com/initia-labs/initia/x/distribution/types" "github.com/initia-labs/initia/x/move/types" stakingtypes "github.com/initia-labs/initia/x/mstaking/types" - vmtypes "github.com/initia-labs/initiavm/types" + vmtypes "github.com/initia-labs/movevm/types" "github.com/stretchr/testify/require" diff --git a/x/move/keeper/api.go b/x/move/keeper/api.go index 7d8c89d8..23c9acbc 100644 --- a/x/move/keeper/api.go +++ b/x/move/keeper/api.go @@ -10,8 +10,10 @@ import ( authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" "github.com/initia-labs/initia/x/move/types" - vmapi "github.com/initia-labs/initiavm/api" - vmtypes "github.com/initia-labs/initiavm/types" + vmapi "github.com/initia-labs/movevm/api" + vmtypes "github.com/initia-labs/movevm/types" + + storetypes "cosmossdk.io/store/types" oracletypes "github.com/skip-mev/slinky/x/oracle/types" ) @@ -118,6 +120,17 @@ func (api GoApi) GetPrice(pairId string) ([]byte, uint64, uint64, error) { return priceBz, uint64(price.BlockTimestamp.Unix()), uint64(cp.Decimals()), nil } +func (api GoApi) Query(req vmtypes.QueryRequest, gasBalance uint64) ([]byte, uint64, error) { + // use gas meter to meter gas consumption during query + sdkCtx := sdk.UnwrapSDKContext(api.ctx).WithGasMeter(storetypes.NewGasMeter(gasBalance)) + res, err := api.Keeper.HandleVMQuery(sdkCtx, &req) + if err != nil { + return nil, 0, err + } + + return res, sdkCtx.GasMeter().GasConsumed(), err +} + // convert math.Int to little endian bytes // with u256 size assertion. func getLittleEndianBytes(num math.Int) ([]byte, error) { diff --git a/x/move/keeper/api_test.go b/x/move/keeper/api_test.go index 59cd6b74..69bf5a85 100644 --- a/x/move/keeper/api_test.go +++ b/x/move/keeper/api_test.go @@ -9,12 +9,14 @@ import ( "github.com/stretchr/testify/require" sdk "github.com/cosmos/cosmos-sdk/types" + govtypesv1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1" + govtypes "github.com/initia-labs/initia/x/gov/types" "github.com/initia-labs/initia/x/move/keeper" "github.com/initia-labs/initia/x/move/types" stakingkeeper "github.com/initia-labs/initia/x/mstaking/keeper" - vmtypes "github.com/initia-labs/initiavm/types" + vmtypes "github.com/initia-labs/movevm/types" oracletypes "github.com/skip-mev/slinky/x/oracle/types" ) @@ -209,3 +211,49 @@ func Test_GetPrice(t *testing.T) { require.NoError(t, err) require.Equal(t, fmt.Sprintf("[\"%s\",\"%d\",\"%d\"]", price.String(), now.Unix(), cp.Decimals()), res) } + +func Test_API_Query(t *testing.T) { + ctx, input := createDefaultTestInput(t) + + proposal := govtypes.Proposal{ + Id: 1, + Title: "title", + Summary: "summary", + Status: govtypesv1.ProposalStatus_PROPOSAL_STATUS_DEPOSIT_PERIOD, + } + + // set Proposal + err := input.GovKeeper.SetProposal(ctx, proposal) + require.NoError(t, err) + + now := time.Now() + api := keeper.NewApi(input.MoveKeeper, ctx.WithBlockTime(now)) + + // out of gas + require.Panics(t, func() { + _, _, _ = api.Query(vmtypes.QueryRequest{ + Stargate: &vmtypes.StargateQuery{ + Path: "/initia.gov.v1.Query/Proposal", + Data: []byte(`{"proposal_id": "1"}`), + }, + }, 100) + }) + + // valid query + gasBalance := uint64(2000) + resBz, gasUsed, err := api.Query(vmtypes.QueryRequest{ + Stargate: &vmtypes.StargateQuery{ + Path: "/initia.gov.v1.Query/Proposal", + Data: []byte(`{"proposal_id": "1"}`), + }, + }, gasBalance) + require.NoError(t, err) + require.Greater(t, gasBalance, gasUsed) + + // expected proposal res json bytes + expectedResBz, err := input.EncodingConfig.Codec.MarshalJSON(&govtypes.QueryProposalResponse{ + Proposal: &proposal, + }) + require.NoError(t, err) + require.Equal(t, expectedResBz, resBz) +} diff --git a/x/move/keeper/bank.go b/x/move/keeper/bank.go index 227cc249..d5069631 100644 --- a/x/move/keeper/bank.go +++ b/x/move/keeper/bank.go @@ -14,7 +14,7 @@ import ( banktypes "github.com/initia-labs/initia/x/bank/types" "github.com/initia-labs/initia/x/move/types" - vmtypes "github.com/initia-labs/initiavm/types" + vmtypes "github.com/initia-labs/movevm/types" ) var _ banktypes.MoveBankKeeper = MoveBankKeeper{} diff --git a/x/move/keeper/code.go b/x/move/keeper/code.go index 49a84978..774adc0f 100644 --- a/x/move/keeper/code.go +++ b/x/move/keeper/code.go @@ -4,7 +4,7 @@ import ( "context" "github.com/initia-labs/initia/x/move/types" - vmtypes "github.com/initia-labs/initiavm/types" + vmtypes "github.com/initia-labs/movevm/types" ) type CodeKeeper struct { diff --git a/x/move/keeper/code_test.go b/x/move/keeper/code_test.go index 50246b24..269811c3 100644 --- a/x/move/keeper/code_test.go +++ b/x/move/keeper/code_test.go @@ -5,7 +5,7 @@ import ( "github.com/initia-labs/initia/x/move/keeper" "github.com/initia-labs/initia/x/move/types" - vmtypes "github.com/initia-labs/initiavm/types" + vmtypes "github.com/initia-labs/movevm/types" "github.com/stretchr/testify/require" ) diff --git a/x/move/keeper/common_test.go b/x/move/keeper/common_test.go index 210b7f63..d2e326a9 100644 --- a/x/move/keeper/common_test.go +++ b/x/move/keeper/common_test.go @@ -42,7 +42,6 @@ import ( "github.com/cosmos/cosmos-sdk/x/auth/tx" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" authzkeeper "github.com/cosmos/cosmos-sdk/x/authz/keeper" - "github.com/cosmos/cosmos-sdk/x/bank" bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" distributiontypes "github.com/cosmos/cosmos-sdk/x/distribution/types" @@ -52,6 +51,7 @@ import ( initiaapp "github.com/initia-labs/initia/app" initiaappparams "github.com/initia-labs/initia/app/params" + "github.com/initia-labs/initia/x/bank" movebank "github.com/initia-labs/initia/x/bank/keeper" "github.com/initia-labs/initia/x/distribution" distrkeeper "github.com/initia-labs/initia/x/distribution/keeper" @@ -59,8 +59,6 @@ import ( "github.com/initia-labs/initia/x/gov" govkeeper "github.com/initia-labs/initia/x/gov/keeper" customgovtypes "github.com/initia-labs/initia/x/gov/types" - - // nfttransfertypes "github.com/initia-labs/initia/x/ibc/nft-transfer/types" "github.com/initia-labs/initia/x/move" moveconfig "github.com/initia-labs/initia/x/move/config" movekeeper "github.com/initia-labs/initia/x/move/keeper" @@ -73,9 +71,9 @@ import ( rewardtypes "github.com/initia-labs/initia/x/reward/types" "github.com/initia-labs/initia/x/slashing" - vmapi "github.com/initia-labs/initiavm/api" - "github.com/initia-labs/initiavm/precompile" - vmtypes "github.com/initia-labs/initiavm/types" + vmapi "github.com/initia-labs/movevm/api" + "github.com/initia-labs/movevm/precompile" + vmtypes "github.com/initia-labs/movevm/types" "github.com/skip-mev/slinky/x/oracle" oraclekeeper "github.com/skip-mev/slinky/x/oracle/keeper" @@ -386,6 +384,9 @@ func _createTestInput( authtypes.NewModuleAddress(govtypes.ModuleName), ) + queryRouter := baseapp.NewGRPCQueryRouter() + queryRouter.SetInterfaceRegistry(encodingConfig.InterfaceRegistry) + *moveKeeper = *movekeeper.NewKeeper( appCodec, runtime.NewKVStoreService(keys[movetypes.StoreKey]), @@ -393,6 +394,7 @@ func _createTestInput( bankKeeper, oracleKeeper, TestMsgRouter{}, + queryRouter, moveConfig, distKeeper, stakingKeeper, @@ -429,8 +431,6 @@ func _createTestInput( // register bank & move msgRouter := baseapp.NewMsgServiceRouter() msgRouter.SetInterfaceRegistry(encodingConfig.InterfaceRegistry) - banktypes.RegisterMsgServer(msgRouter, bankkeeper.NewMsgServerImpl(bankKeeper)) - movetypes.RegisterMsgServer(msgRouter, movekeeper.NewMsgServerImpl(*moveKeeper)) govConfig := govtypes.DefaultConfig() govKeeper := govkeeper.NewKeeper( @@ -451,6 +451,16 @@ func _createTestInput( cfg := sdk.GetConfig() cfg.SetAddressVerifier(initiaapp.VerifyAddressLen()) + am := module.NewManager( // minimal module set that we use for message/ query tests + bank.NewAppModule(appCodec, bankKeeper, accountKeeper), + staking.NewAppModule(appCodec, *stakingKeeper), + distribution.NewAppModule(appCodec, *distKeeper), + gov.NewAppModule(appCodec, govKeeper, accountKeeper, bankKeeper), + ) + am.RegisterServices(module.NewConfigurator(appCodec, msgRouter, queryRouter)) //nolint:errcheck + movetypes.RegisterMsgServer(msgRouter, movekeeper.NewMsgServerImpl(moveKeeper)) + movetypes.RegisterQueryServer(queryRouter, movekeeper.NewQuerier(moveKeeper)) + keepers := TestKeepers{ AccountKeeper: accountKeeper, StakingKeeper: *stakingKeeper, diff --git a/x/move/keeper/connector_test.go b/x/move/keeper/connector_test.go index aabddee7..68d12802 100644 --- a/x/move/keeper/connector_test.go +++ b/x/move/keeper/connector_test.go @@ -8,7 +8,7 @@ import ( "github.com/initia-labs/initia/x/move/keeper" "github.com/initia-labs/initia/x/move/types" - vmtypes "github.com/initia-labs/initiavm/types" + vmtypes "github.com/initia-labs/movevm/types" ) func TestInitializeIBCCoin(t *testing.T) { diff --git a/x/move/keeper/dex.go b/x/move/keeper/dex.go index 367a659a..2a02f60f 100644 --- a/x/move/keeper/dex.go +++ b/x/move/keeper/dex.go @@ -11,7 +11,7 @@ import ( distrtypes "github.com/initia-labs/initia/x/distribution/types" "github.com/initia-labs/initia/x/move/types" - vmtypes "github.com/initia-labs/initiavm/types" + vmtypes "github.com/initia-labs/movevm/types" ) var _ types.AnteKeeper = DexKeeper{} diff --git a/x/move/keeper/dex_test.go b/x/move/keeper/dex_test.go index 4dda0797..774aba37 100644 --- a/x/move/keeper/dex_test.go +++ b/x/move/keeper/dex_test.go @@ -12,7 +12,7 @@ import ( "github.com/initia-labs/initia/x/move/keeper" "github.com/initia-labs/initia/x/move/types" - vmtypes "github.com/initia-labs/initiavm/types" + vmtypes "github.com/initia-labs/movevm/types" ) func decToVmArgument(t *testing.T, val math.LegacyDec) []byte { diff --git a/x/move/keeper/fungible_asset.go b/x/move/keeper/fungible_asset.go index fc60a6b2..417536ce 100644 --- a/x/move/keeper/fungible_asset.go +++ b/x/move/keeper/fungible_asset.go @@ -11,7 +11,7 @@ import ( cosmosbanktypes "github.com/cosmos/cosmos-sdk/x/bank/types" "github.com/initia-labs/initia/x/move/types" - vmtypes "github.com/initia-labs/initiavm/types" + vmtypes "github.com/initia-labs/movevm/types" ) var _ types.FungibleAssetKeeper = MoveBankKeeper{} diff --git a/x/move/keeper/genesis.go b/x/move/keeper/genesis.go index 99c8be3f..c7f8c4bb 100644 --- a/x/move/keeper/genesis.go +++ b/x/move/keeper/genesis.go @@ -6,8 +6,8 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/initia-labs/initia/x/move/types" - vmapi "github.com/initia-labs/initiavm/api" - vmtypes "github.com/initia-labs/initiavm/types" + vmapi "github.com/initia-labs/movevm/api" + vmtypes "github.com/initia-labs/movevm/types" ) func (k Keeper) Initialize( diff --git a/x/move/keeper/handler.go b/x/move/keeper/handler.go index b6d33ccc..e8b41206 100644 --- a/x/move/keeper/handler.go +++ b/x/move/keeper/handler.go @@ -11,10 +11,11 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + "github.com/cosmos/gogoproto/proto" "github.com/initia-labs/initia/x/move/ante" "github.com/initia-labs/initia/x/move/types" - vmapi "github.com/initia-labs/initiavm/api" - vmtypes "github.com/initia-labs/initiavm/types" + vmapi "github.com/initia-labs/movevm/api" + vmtypes "github.com/initia-labs/movevm/types" ) func isSimulation( @@ -337,9 +338,18 @@ func (k Keeper) handleExecuteResponse( func (k Keeper) DispatchMessages(ctx context.Context, messages []vmtypes.CosmosMessage) error { sdkCtx := sdk.UnwrapSDKContext(ctx) for _, message := range messages { - msg, err := types.ConvertToSDKMessage(ctx, NewMoveBankKeeper(&k), NewNftKeeper(&k), message, k.ac, k.vc) - if err != nil { - return err + var msg proto.Message + var err error + if stargateMsg, ok := message.(*vmtypes.CosmosMessage__Stargate); ok { + msg, err = k.HandleVMStargateMsg(ctx, &stargateMsg.Value) + if err != nil { + return err + } + } else { + msg, err = types.ConvertToSDKMessage(ctx, NewMoveBankKeeper(&k), NewNftKeeper(&k), message, k.ac, k.vc) + if err != nil { + return err + } } // validate msg diff --git a/x/move/keeper/handler_test.go b/x/move/keeper/handler_test.go index 83b7c608..77fbfc54 100644 --- a/x/move/keeper/handler_test.go +++ b/x/move/keeper/handler_test.go @@ -15,7 +15,7 @@ import ( "github.com/initia-labs/initia/x/move/ante" "github.com/initia-labs/initia/x/move/types" - vmtypes "github.com/initia-labs/initiavm/types" + vmtypes "github.com/initia-labs/movevm/types" ) func TestPublishModuleBundle(t *testing.T) { diff --git a/x/move/keeper/keeper.go b/x/move/keeper/keeper.go index 3b28ada2..ddffc38a 100644 --- a/x/move/keeper/keeper.go +++ b/x/move/keeper/keeper.go @@ -16,9 +16,9 @@ import ( moveconfig "github.com/initia-labs/initia/x/move/config" "github.com/initia-labs/initia/x/move/types" - vm "github.com/initia-labs/initiavm" - vmapi "github.com/initia-labs/initiavm/api" - vmtypes "github.com/initia-labs/initiavm/types" + vm "github.com/initia-labs/movevm" + vmapi "github.com/initia-labs/movevm/api" + vmtypes "github.com/initia-labs/movevm/types" ) type Keeper struct { @@ -37,7 +37,8 @@ type Keeper struct { oracleKeeper types.OracleKeeper // Msg server router - msgRouter baseapp.MessageRouter + msgRouter baseapp.MessageRouter + grpcRouter *baseapp.GRPCQueryRouter config moveconfig.MoveConfig @@ -55,6 +56,8 @@ type Keeper struct { ac address.Codec vc address.Codec + + vmQueryWhiteList types.VMQueryWhiteList } func NewKeeper( @@ -64,6 +67,7 @@ func NewKeeper( bankKeeper types.BankKeeper, oracleKeeper types.OracleKeeper, msgRouter baseapp.MessageRouter, + grpcRouter *baseapp.GRPCQueryRouter, moveConfig moveconfig.MoveConfig, distrKeeper types.DistributionKeeper, // can be nil, if staking not used stakingKeeper types.StakingKeeper, // can be nil, if staking not used @@ -104,6 +108,7 @@ func NewKeeper( bankKeeper: bankKeeper, oracleKeeper: oracleKeeper, msgRouter: msgRouter, + grpcRouter: grpcRouter, config: moveConfig, moveVM: &moveVM, distrKeeper: distrKeeper, @@ -120,6 +125,8 @@ func NewKeeper( ac: ac, vc: vc, + + vmQueryWhiteList: types.DefaultVMQueryWhiteList(ac), } schema, err := sb.Build() if err != nil { @@ -129,9 +136,15 @@ func NewKeeper( return k } +// WithVMQueryWhitelist overrides vmQueryWhitelist +func (k Keeper) WithVMQueryWhitelist(vmQueryWhiteList types.VMQueryWhiteList) Keeper { + k.vmQueryWhiteList = vmQueryWhiteList + return k +} + // GetAuthority returns the x/move module's authority. -func (ak Keeper) GetAuthority() string { - return ak.authority +func (k Keeper) GetAuthority() string { + return k.authority } // Logger returns a module-specific logger. diff --git a/x/move/keeper/keeper_test.go b/x/move/keeper/keeper_test.go index f11e1b83..1052dbf5 100644 --- a/x/move/keeper/keeper_test.go +++ b/x/move/keeper/keeper_test.go @@ -7,8 +7,8 @@ import ( "github.com/stretchr/testify/require" "github.com/initia-labs/initia/x/move/types" - vmapi "github.com/initia-labs/initiavm/api" - vmtypes "github.com/initia-labs/initiavm/types" + vmapi "github.com/initia-labs/movevm/api" + vmtypes "github.com/initia-labs/movevm/types" ) func TestGetModule(t *testing.T) { diff --git a/x/move/keeper/msg_server.go b/x/move/keeper/msg_server.go index 6d1eb973..dd3ec464 100644 --- a/x/move/keeper/msg_server.go +++ b/x/move/keeper/msg_server.go @@ -11,17 +11,17 @@ import ( govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" "github.com/initia-labs/initia/x/move/types" - vmtypes "github.com/initia-labs/initiavm/types" + vmtypes "github.com/initia-labs/movevm/types" ) type MsgServer struct { - Keeper + *Keeper } var _ types.MsgServer = MsgServer{} // NewMsgServerImpl return MsgServer instance -func NewMsgServerImpl(k Keeper) MsgServer { +func NewMsgServerImpl(k *Keeper) MsgServer { return MsgServer{k} } diff --git a/x/move/keeper/msg_server_test.go b/x/move/keeper/msg_server_test.go index 9493955e..efc33eeb 100644 --- a/x/move/keeper/msg_server_test.go +++ b/x/move/keeper/msg_server_test.go @@ -16,7 +16,7 @@ func TestScriptMsg(t *testing.T) { moduleAddr := sdk.AccAddress([]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}) wrongAddr := sdk.AccAddress([]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1}) - msgServer := keeper.NewMsgServerImpl(input.MoveKeeper) + msgServer := keeper.NewMsgServerImpl(&input.MoveKeeper) _, err := msgServer.Publish(ctx, &types.MsgPublish{ Sender: moduleAddr.String(), CodeBytes: [][]byte{basicCoinModule}, diff --git a/x/move/keeper/nft.go b/x/move/keeper/nft.go index 19a76b50..6b5fb3ae 100644 --- a/x/move/keeper/nft.go +++ b/x/move/keeper/nft.go @@ -8,7 +8,7 @@ import ( nfttransfertypes "github.com/initia-labs/initia/x/ibc/nft-transfer/types" "github.com/initia-labs/initia/x/move/types" - vmtypes "github.com/initia-labs/initiavm/types" + vmtypes "github.com/initia-labs/movevm/types" ) var _ nfttransfertypes.NftKeeper = NftKeeper{} diff --git a/x/move/keeper/params.go b/x/move/keeper/params.go index ecb50dd0..010d570b 100644 --- a/x/move/keeper/params.go +++ b/x/move/keeper/params.go @@ -6,7 +6,7 @@ import ( "cosmossdk.io/math" "github.com/initia-labs/initia/x/move/types" - vmtypes "github.com/initia-labs/initiavm/types" + vmtypes "github.com/initia-labs/movevm/types" ) // BaseDenom - base denom of native move dex diff --git a/x/move/keeper/querier.go b/x/move/keeper/querier.go index c96b0324..62e56975 100644 --- a/x/move/keeper/querier.go +++ b/x/move/keeper/querier.go @@ -11,8 +11,8 @@ import ( "github.com/cosmos/cosmos-sdk/types/query" "github.com/initia-labs/initia/x/move/types" - vmapi "github.com/initia-labs/initiavm/api" - vmtypes "github.com/initia-labs/initiavm/types" + vmapi "github.com/initia-labs/movevm/api" + vmtypes "github.com/initia-labs/movevm/types" ) type Querier struct { diff --git a/x/move/keeper/querier_test.go b/x/move/keeper/querier_test.go index 1e6ca512..0a5b599f 100644 --- a/x/move/keeper/querier_test.go +++ b/x/move/keeper/querier_test.go @@ -12,7 +12,7 @@ import ( "github.com/initia-labs/initia/x/move/keeper" "github.com/initia-labs/initia/x/move/types" - vmtypes "github.com/initia-labs/initiavm/types" + vmtypes "github.com/initia-labs/movevm/types" ) func TestViewFunction(t *testing.T) { diff --git a/x/move/keeper/staking.go b/x/move/keeper/staking.go index fbb5bc8f..678004dc 100644 --- a/x/move/keeper/staking.go +++ b/x/move/keeper/staking.go @@ -13,7 +13,7 @@ import ( distrtypes "github.com/initia-labs/initia/x/distribution/types" "github.com/initia-labs/initia/x/move/types" stakingtypes "github.com/initia-labs/initia/x/mstaking/types" - vmtypes "github.com/initia-labs/initiavm/types" + vmtypes "github.com/initia-labs/movevm/types" ) // AmountToShare convert token to share in the ratio of a validator's share/token diff --git a/x/move/keeper/staking_test.go b/x/move/keeper/staking_test.go index 9588a74c..33de8226 100644 --- a/x/move/keeper/staking_test.go +++ b/x/move/keeper/staking_test.go @@ -18,7 +18,7 @@ import ( "github.com/initia-labs/initia/x/move/keeper" "github.com/initia-labs/initia/x/move/types" - vmtypes "github.com/initia-labs/initiavm/types" + vmtypes "github.com/initia-labs/movevm/types" ) // newTestMsgCreateValidator test msg creator diff --git a/x/move/keeper/vm_msg_stargate.go b/x/move/keeper/vm_msg_stargate.go new file mode 100644 index 00000000..e335b32b --- /dev/null +++ b/x/move/keeper/vm_msg_stargate.go @@ -0,0 +1,48 @@ +package keeper + +import ( + "context" + "encoding/hex" + + errorsmod "cosmossdk.io/errors" + + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + "github.com/cosmos/gogoproto/proto" + + "github.com/initia-labs/initia/x/move/types" + vmtypes "github.com/initia-labs/movevm/types" +) + +func (k Keeper) HandleVMStargateMsg(ctx context.Context, req *vmtypes.StargateMessage) (proto.Message, error) { + var sdkMsg sdk.Msg + err := k.cdc.UnmarshalInterfaceJSON(req.Data, &sdkMsg) + if err != nil { + return nil, err + } + + if m, ok := sdkMsg.(sdk.HasValidateBasic); ok { + if err := m.ValidateBasic(); err != nil { + return nil, err + } + } + + // make sure this account can send it + signer := types.ConvertVMAddressToSDKAddress(req.Sender) + signers, _, err := k.cdc.GetMsgV1Signers(sdkMsg) + if err != nil { + return nil, err + } + for _, acct := range signers { + if !signer.Equals(sdk.AccAddress(acct)) { + return nil, errorsmod.Wrapf( + sdkerrors.ErrUnauthorized, + "required signer: `%s`, given signer: `%s`", + hex.EncodeToString(acct), + hex.EncodeToString(signer), + ) + } + } + + return sdkMsg, nil +} diff --git a/x/move/keeper/vm_msg_stargate_test.go b/x/move/keeper/vm_msg_stargate_test.go new file mode 100644 index 00000000..80f3c188 --- /dev/null +++ b/x/move/keeper/vm_msg_stargate_test.go @@ -0,0 +1,52 @@ +package keeper_test + +import ( + "fmt" + "testing" + + "github.com/stretchr/testify/require" + + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types/v1" + + vmtypes "github.com/initia-labs/movevm/types" +) + +func Test_HandleVMStargateMsg(t *testing.T) { + ctx, input := createDefaultTestInput(t) + + addr0, err := vmtypes.NewAccountAddressFromBytes(addrs[0]) + require.NoError(t, err) + + addr1, err := vmtypes.NewAccountAddressFromBytes(addrs[1]) + require.NoError(t, err) + + jsonData := []byte(fmt.Sprintf(`{ + "@type": "%s", + "proposal_id": "1", + "voter": "%s", + "option": 2, + "metadata": "" + }`, sdk.MsgTypeURL(&govtypes.MsgVote{}), addrs[1])) + + // unauthorized test + _, err = input.MoveKeeper.HandleVMStargateMsg(ctx, &vmtypes.StargateMessage{ + Sender: addr0, + Data: jsonData, + }) + require.ErrorIs(t, err, sdkerrors.ErrUnauthorized) + + // valid test + res, err := input.MoveKeeper.HandleVMStargateMsg(ctx, &vmtypes.StargateMessage{ + Sender: addr1, + Data: jsonData, + }) + require.NoError(t, err) + require.Equal(t, &govtypes.MsgVote{ + ProposalId: 1, + Voter: addrs[1].String(), + Option: 2, + Metadata: "", + }, res) +} diff --git a/x/move/keeper/vm_query.go b/x/move/keeper/vm_query.go new file mode 100644 index 00000000..dc117054 --- /dev/null +++ b/x/move/keeper/vm_query.go @@ -0,0 +1,56 @@ +package keeper + +import ( + abci "github.com/cometbft/cometbft/abci/types" + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/initia-labs/initia/x/move/types" + vmtypes "github.com/initia-labs/movevm/types" +) + +func (k Keeper) HandleVMQuery(ctx sdk.Context, req *vmtypes.QueryRequest) ([]byte, error) { + switch { + case req.Custom != nil: + return k.queryCustom(ctx, req.Custom) + case req.Stargate != nil: + return k.queryStargate(ctx, req.Stargate) + } + + return nil, types.ErrInvalidQueryRequest +} + +func (k Keeper) queryCustom(ctx sdk.Context, req *vmtypes.CustomQuery) ([]byte, error) { + customQuery, exists := k.vmQueryWhiteList.Custom[req.Name] + if !exists { + return nil, types.ErrNotSupportedCustomQuery + } + + return customQuery(ctx, req.Data) +} + +func (k Keeper) queryStargate(ctx sdk.Context, req *vmtypes.StargateQuery) ([]byte, error) { + protoSet, exists := k.vmQueryWhiteList.Stargate[req.Path] + if !exists { + return nil, types.ErrNotSupportedStargateQuery + } + + route := k.grpcRouter.Route(req.Path) + if route == nil { + return nil, types.ErrNotSupportedStargateQuery + } + + reqData, err := types.ConvertJSONMarshalToProto(k.cdc, protoSet.Request, req.Data) + if err != nil { + return nil, err + } + + res, err := route(ctx, &abci.RequestQuery{ + Data: reqData, + Path: req.Path, + }) + if err != nil { + return nil, err + } + + return types.ConvertProtoToJSONMarshal(k.cdc, protoSet.Response, res.Value) +} diff --git a/x/move/keeper/vm_query_test.go b/x/move/keeper/vm_query_test.go new file mode 100644 index 00000000..8d4c99c9 --- /dev/null +++ b/x/move/keeper/vm_query_test.go @@ -0,0 +1,86 @@ +package keeper_test + +import ( + "encoding/json" + "testing" + + "github.com/stretchr/testify/require" + + govtypesv1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1" + + govtypes "github.com/initia-labs/initia/x/gov/types" + "github.com/initia-labs/initia/x/move/types" + + vmtypes "github.com/initia-labs/movevm/types" +) + +func Test_VMQuery_Stargate(t *testing.T) { + ctx, input := createDefaultTestInput(t) + + // not existing + _, err := input.MoveKeeper.HandleVMQuery(ctx, &vmtypes.QueryRequest{ + Stargate: &vmtypes.StargateQuery{ + Path: "/initia.gov.v1.Query/Proposals", + Data: nil, + }, + }) + require.ErrorIs(t, err, types.ErrNotSupportedStargateQuery) + + proposal := govtypes.Proposal{ + Id: 1, + Title: "title", + Summary: "summary", + Status: govtypesv1.ProposalStatus_PROPOSAL_STATUS_DEPOSIT_PERIOD, + } + + // set Proposal + err = input.GovKeeper.SetProposal(ctx, proposal) + require.NoError(t, err) + + // query proposal + resBz, err := input.MoveKeeper.HandleVMQuery(ctx, &vmtypes.QueryRequest{ + Stargate: &vmtypes.StargateQuery{ + Path: "/initia.gov.v1.Query/Proposal", + Data: []byte(`{"proposal_id": "1"}`), + }, + }) + require.NoError(t, err) + + // expected proposal res json bytes + expectedResBz, err := input.EncodingConfig.Codec.MarshalJSON(&govtypes.QueryProposalResponse{ + Proposal: &proposal, + }) + require.NoError(t, err) + require.Equal(t, expectedResBz, resBz) +} + +func Test_VMQuery_Custom(t *testing.T) { + ctx, input := createDefaultTestInput(t) + + // not existing + _, err := input.MoveKeeper.HandleVMQuery(ctx, &vmtypes.QueryRequest{ + Custom: &vmtypes.CustomQuery{ + Name: "aaa", + Data: nil, + }, + }) + require.ErrorIs(t, err, types.ErrNotSupportedCustomQuery) + + reqBz, err := json.Marshal(types.ToSDKAddressRequest{ + VMAddr: vmtypes.StdAddress.String(), + }) + require.NoError(t, err) + + resBz, err := input.MoveKeeper.HandleVMQuery(ctx, &vmtypes.QueryRequest{ + Custom: &vmtypes.CustomQuery{ + Name: "to_sdk_address", + Data: reqBz, + }, + }) + require.NoError(t, err) + + var res types.ToSDKAddressResponse + err = json.Unmarshal(resBz, &res) + require.NoError(t, err) + require.Equal(t, types.StdAddr[12:].String(), res.SDKAddr) +} diff --git a/x/move/keeper/whitelist.go b/x/move/keeper/whitelist.go index e4de26c5..9b846925 100644 --- a/x/move/keeper/whitelist.go +++ b/x/move/keeper/whitelist.go @@ -9,7 +9,7 @@ import ( distrtypes "github.com/initia-labs/initia/x/distribution/types" "github.com/initia-labs/initia/x/move/types" - vmtypes "github.com/initia-labs/initiavm/types" + vmtypes "github.com/initia-labs/movevm/types" ) func (k Keeper) Whitelist(ctx context.Context, msg types.MsgWhitelist) error { diff --git a/x/move/module.go b/x/move/module.go index 9cf9d897..4034da76 100644 --- a/x/move/module.go +++ b/x/move/module.go @@ -120,7 +120,7 @@ func NewAppModule( } func (am AppModule) RegisterServices(cfg module.Configurator) { - types.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(am.keeper)) + types.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(&am.keeper)) types.RegisterQueryServer(cfg.QueryServer(), keeper.NewQuerier(&am.keeper)) } diff --git a/x/move/types/address.go b/x/move/types/address.go index 306126c9..ec7c68a0 100644 --- a/x/move/types/address.go +++ b/x/move/types/address.go @@ -5,7 +5,7 @@ import ( "strings" "cosmossdk.io/core/address" - vmtypes "github.com/initia-labs/initiavm/types" + vmtypes "github.com/initia-labs/movevm/types" sdk "github.com/cosmos/cosmos-sdk/types" ) diff --git a/x/move/types/authz.go b/x/move/types/authz.go index fc72bb9a..50a0bfe2 100644 --- a/x/move/types/authz.go +++ b/x/move/types/authz.go @@ -13,7 +13,7 @@ import ( "github.com/cosmos/cosmos-sdk/x/auth/codec" "github.com/cosmos/cosmos-sdk/x/authz" - "github.com/initia-labs/initiavm/api" + "github.com/initia-labs/movevm/api" ) // it has similar issue with gasCostPerIterarion in staking/type/authz.go diff --git a/x/move/types/class.go b/x/move/types/class.go index db536f16..a368cf99 100644 --- a/x/move/types/class.go +++ b/x/move/types/class.go @@ -5,7 +5,7 @@ import ( "encoding/hex" "strings" - vmtypes "github.com/initia-labs/initiavm/types" + vmtypes "github.com/initia-labs/movevm/types" ) var ( diff --git a/x/move/types/connector.go b/x/move/types/connector.go index 5b11160c..37628f10 100644 --- a/x/move/types/connector.go +++ b/x/move/types/connector.go @@ -6,8 +6,8 @@ import ( "cosmossdk.io/errors" "cosmossdk.io/math" - vmapi "github.com/initia-labs/initiavm/api" - vmtypes "github.com/initia-labs/initiavm/types" + vmapi "github.com/initia-labs/movevm/api" + vmtypes "github.com/initia-labs/movevm/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" ) diff --git a/x/move/types/cosmos_message.go b/x/move/types/cosmos_message.go index c18b874c..695d186e 100644 --- a/x/move/types/cosmos_message.go +++ b/x/move/types/cosmos_message.go @@ -13,10 +13,8 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types" - opchildtypes "github.com/initia-labs/OPinit/x/opchild/types" - ophosttypes "github.com/initia-labs/OPinit/x/ophost/types" stakingtypes "github.com/initia-labs/initia/x/mstaking/types" - vmtypes "github.com/initia-labs/initiavm/types" + vmtypes "github.com/initia-labs/movevm/types" ) // ConvertToSDKMessage convert vm CosmosMessage to sdk.Msg @@ -182,58 +180,6 @@ func ConvertToSDKMessage( return payPacketFeeMsg, nil } - case *vmtypes.CosmosMessage__OPinit: - switch msg := msg.Value.(type) { - case *vmtypes.OPinitMessage__InitiateTokenDeposit: - denom, err := DenomFromMetadataAddress(ctx, fk, msg.Amount.Metadata) - if err != nil { - return nil, err - } - - senderAddr, err := ac.BytesToString(ConvertVMAddressToSDKAddress(msg.SenderAddress)) - if err != nil { - return nil, err - } - - toAddr, err := ac.BytesToString(ConvertVMAddressToSDKAddress(msg.ToAddress)) - if err != nil { - return nil, err - } - - depositMsg := ophosttypes.NewMsgInitiateTokenDeposit( - senderAddr, - msg.BridgeId, - toAddr, - sdk.NewCoin(denom, math.NewIntFromUint64(msg.Amount.Amount)), - msg.Data, - ) - - return depositMsg, nil - - case *vmtypes.OPinitMessage__InitiateTokenWithdrawal: // for l2 (minitia) - denom, err := DenomFromMetadataAddress(ctx, fk, msg.Amount.Metadata) - if err != nil { - return nil, err - } - - senderAddr, err := ac.BytesToString(ConvertVMAddressToSDKAddress(msg.SenderAddress)) - if err != nil { - return nil, err - } - - toAddr, err := ac.BytesToString(ConvertVMAddressToSDKAddress(msg.ToAddress)) - if err != nil { - return nil, err - } - - withdrawMsg := opchildtypes.NewMsgInitiateTokenWithdrawal( - senderAddr, - toAddr, - sdk.NewCoin(denom, math.NewIntFromUint64(msg.Amount.Amount)), - ) - - return withdrawMsg, nil - } } return nil, ErrNotSupportedCosmosMessage diff --git a/x/move/types/denom.go b/x/move/types/denom.go index 12af4d30..f73073a2 100644 --- a/x/move/types/denom.go +++ b/x/move/types/denom.go @@ -9,7 +9,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" - vmtypes "github.com/initia-labs/initiavm/types" + vmtypes "github.com/initia-labs/movevm/types" ) type FungibleAssetKeeper interface { diff --git a/x/move/types/env.go b/x/move/types/env.go index 41df93c3..2fa3c75a 100644 --- a/x/move/types/env.go +++ b/x/move/types/env.go @@ -8,7 +8,7 @@ import ( "github.com/cometbft/cometbft/crypto/tmhash" sdk "github.com/cosmos/cosmos-sdk/types" - vmtypes "github.com/initia-labs/initiavm/types" + vmtypes "github.com/initia-labs/movevm/types" ) func NewEnv(ctx context.Context, nextAccountNumber uint64, executionCounter uint64) vmtypes.Env { diff --git a/x/move/types/errors.go b/x/move/types/errors.go index 67982a34..d59f696f 100644 --- a/x/move/types/errors.go +++ b/x/move/types/errors.go @@ -30,6 +30,18 @@ var ( // ErrNotSupportedCosmosMessage error raised when the returned cosmos messages are not supported ErrNotSupportedCosmosMessage = errorsmod.Register(ModuleName, 9, "malformed cosmos message") + // ErrMalformedSenderCosmosMessage error raised when sender data is not signer address + ErrMalformedSenderCosmosMessage = errorsmod.Register(ModuleName, 10, "malformed sender") + // ErrInvalidRequest error raised when the request is invalid - ErrInvalidRequest = errorsmod.Register(ModuleName, 10, "invalid request") + ErrInvalidRequest = errorsmod.Register(ModuleName, 11, "invalid request") + + // ErrInvalidQueryRequest error raised when the query request is invalid + ErrInvalidQueryRequest = errorsmod.Register(ModuleName, 12, "invalid query request") + + // ErrNotSupportedCustomQuery error raised when the custom request is not supported + ErrNotSupportedCustomQuery = errorsmod.Register(ModuleName, 13, "not supported custom query") + + // ErrNotSupportedStargateQuery error raised when the stargate request is not supported or accepted + ErrNotSupportedStargateQuery = errorsmod.Register(ModuleName, 14, "not supported stargate query") ) diff --git a/x/move/types/genesis.go b/x/move/types/genesis.go index 85bd4dc8..249c103e 100644 --- a/x/move/types/genesis.go +++ b/x/move/types/genesis.go @@ -8,7 +8,7 @@ import ( "github.com/cosmos/cosmos-sdk/codec" - vmprecom "github.com/initia-labs/initiavm/precompile" + vmprecom "github.com/initia-labs/movevm/precompile" ) // NewGenesisState creates a new GenesisState object diff --git a/x/move/types/keys.go b/x/move/types/keys.go index e6bf5e1a..b9435db3 100644 --- a/x/move/types/keys.go +++ b/x/move/types/keys.go @@ -6,7 +6,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" - vmtypes "github.com/initia-labs/initiavm/types" + vmtypes "github.com/initia-labs/movevm/types" ) const ( diff --git a/x/move/types/vm_engine.go b/x/move/types/vm_engine.go index 76fe835e..8cdea4c2 100644 --- a/x/move/types/vm_engine.go +++ b/x/move/types/vm_engine.go @@ -1,8 +1,8 @@ package types import ( - "github.com/initia-labs/initiavm/api" - vmtypes "github.com/initia-labs/initiavm/types" + "github.com/initia-labs/movevm/api" + vmtypes "github.com/initia-labs/movevm/types" ) // VMEngine defines required VM features diff --git a/x/move/types/vm_query.go b/x/move/types/vm_query.go new file mode 100644 index 00000000..0560b943 --- /dev/null +++ b/x/move/types/vm_query.go @@ -0,0 +1,73 @@ +package types + +import ( + "cosmossdk.io/core/address" + "github.com/cosmos/cosmos-sdk/codec" + "github.com/cosmos/gogoproto/proto" + govtypes "github.com/initia-labs/initia/x/gov/types" +) + +type VMQueryWhiteList struct { + Custom CustomQueryWhiteList + Stargate StargateQueryWhiteList +} + +func DefaultVMQueryWhiteList(ac address.Codec) VMQueryWhiteList { + return VMQueryWhiteList{ + Custom: DefaultCustomQueryWhiteList(ac), + Stargate: DefaultStargateQueryWhiteList(), + } +} + +type ProtoSet struct { + Request proto.Message + Response proto.Message +} + +type StargateQueryWhiteList map[string]ProtoSet + +func DefaultStargateQueryWhiteList() StargateQueryWhiteList { + res := make(StargateQueryWhiteList) + res["/initia.gov.v1.Query/Proposal"] = ProtoSet{ + Request: &govtypes.QueryProposalRequest{}, + Response: &govtypes.QueryProposalResponse{}, + } + return res +} + +func EmptyStargateQueryWhitelist() StargateQueryWhiteList { + return make(StargateQueryWhiteList) +} + +// ConvertProtoToJSONMarshal unmarshals the given bytes into a proto message and then marshals it to json. +func ConvertProtoToJSONMarshal(cdc codec.Codec, protoResponse proto.Message, bz []byte) ([]byte, error) { + // unmarshal binary into stargate response data structure + err := cdc.Unmarshal(bz, protoResponse) + if err != nil { + return nil, err + } + + bz, err = cdc.MarshalJSON(protoResponse) + if err != nil { + return nil, err + } + + protoResponse.Reset() + return bz, nil +} + +func ConvertJSONMarshalToProto(cdc codec.Codec, protoRequest proto.Message, bz []byte) ([]byte, error) { + // unmarshal binary into stargate response data structure + err := cdc.UnmarshalJSON(bz, protoRequest) + if err != nil { + return nil, err + } + + bz, err = cdc.Marshal(protoRequest) + if err != nil { + return nil, err + } + + protoRequest.Reset() + return bz, nil +} diff --git a/x/move/types/vm_query_custom.go b/x/move/types/vm_query_custom.go new file mode 100644 index 00000000..a4cb627a --- /dev/null +++ b/x/move/types/vm_query_custom.go @@ -0,0 +1,87 @@ +package types + +import ( + "context" + "encoding/json" + + "cosmossdk.io/core/address" + sdk "github.com/cosmos/cosmos-sdk/types" +) + +// The whitelist of custom queries. +type CustomQueryWhiteList map[string]CustomQuery + +// Default CustomQueryWhiteList +func DefaultCustomQueryWhiteList(ac address.Codec) CustomQueryWhiteList { + res := make(CustomQueryWhiteList) + res["to_sdk_address"] = ToSDKAddress(ac) + res["from_sdk_address"] = FromSDKAddress(ac) + return res +} + +// CustomQuery interface for registration +type CustomQuery func(context.Context, []byte) ([]byte, error) + +/////////////////////////////////////// +// move address => SDK string address + +type ToSDKAddressRequest struct { + VMAddr string `json:"vm_addr"` +} + +type ToSDKAddressResponse struct { + SDKAddr string `json:"sdk_addr"` +} + +func ToSDKAddress(ac address.Codec) func(ctx context.Context, req []byte) ([]byte, error) { + return func(_ context.Context, req []byte) ([]byte, error) { + tc := ToSDKAddressRequest{} + err := json.Unmarshal(req, &tc) + if err != nil { + return nil, err + } + + accAddr, err := AccAddressFromString(ac, tc.VMAddr) + if err != nil { + return nil, err + } + + sdkAddr := ConvertVMAddressToSDKAddress(accAddr) + res := &ToSDKAddressResponse{ + SDKAddr: sdkAddr.String(), + } + return json.Marshal(res) + } +} + +/////////////////////////////////////// +// SDK string address => move address + +type FromSDKAddressRequest struct { + SDKAddr string `json:"sdk_addr"` +} + +type FromSDKAddressResponse struct { + VMAddr string `json:"vm_addr"` +} + +func FromSDKAddress(ac address.Codec) func(ctx context.Context, req []byte) ([]byte, error) { + return func(_ context.Context, req []byte) ([]byte, error) { + fs := FromSDKAddressRequest{} + err := json.Unmarshal(req, &fs) + if err != nil { + return nil, err + } + + accAddr, err := sdk.AccAddressFromBech32(fs.SDKAddr) + if err != nil { + return nil, err + } + vmAddr := ConvertSDKAddressToVMAddress(accAddr) + + res := &FromSDKAddressResponse{ + VMAddr: vmAddr.CanonicalString(), + } + return json.Marshal(res) + } +} diff --git a/x/move/types/vm_query_custom_test.go b/x/move/types/vm_query_custom_test.go new file mode 100644 index 00000000..567f7bf8 --- /dev/null +++ b/x/move/types/vm_query_custom_test.go @@ -0,0 +1,48 @@ +package types_test + +import ( + "context" + "encoding/json" + "testing" + + "github.com/cosmos/cosmos-sdk/codec/address" + "github.com/initia-labs/initia/x/move/types" + vmtypes "github.com/initia-labs/movevm/types" + "github.com/stretchr/testify/require" +) + +func Test_ToSDKAddress(t *testing.T) { + ac := address.NewBech32Codec("init") + + reqBz, err := json.Marshal(types.ToSDKAddressRequest{ + VMAddr: vmtypes.StdAddress.String(), + }) + require.NoError(t, err) + + toSDKAddrFn := types.ToSDKAddress(ac) + resBz, err := toSDKAddrFn(context.Background(), reqBz) + require.NoError(t, err) + + var res types.ToSDKAddressResponse + err = json.Unmarshal(resBz, &res) + require.NoError(t, err) + require.Equal(t, types.StdAddr[12:].String(), res.SDKAddr) +} + +func Test_FromSDKAddress(t *testing.T) { + ac := address.NewBech32Codec("init") + + reqBz, err := json.Marshal(types.FromSDKAddressRequest{ + SDKAddr: types.StdAddr[12:].String(), + }) + require.NoError(t, err) + + fromSDKAddressFn := types.FromSDKAddress(ac) + resBz, err := fromSDKAddressFn(context.Background(), reqBz) + require.NoError(t, err) + + var res types.FromSDKAddressResponse + err = json.Unmarshal(resBz, &res) + require.NoError(t, err) + require.Equal(t, vmtypes.StdAddress.CanonicalString(), res.VMAddr) +} diff --git a/x/mstaking/keeper/common_test.go b/x/mstaking/keeper/common_test.go index 34a91341..3905c663 100644 --- a/x/mstaking/keeper/common_test.go +++ b/x/mstaking/keeper/common_test.go @@ -73,7 +73,7 @@ import ( rewardtypes "github.com/initia-labs/initia/x/reward/types" "github.com/initia-labs/initia/x/slashing" - "github.com/initia-labs/initiavm/precompile" + "github.com/initia-labs/movevm/precompile" ) var ModuleBasics = module.NewBasicManager( @@ -398,8 +398,9 @@ func _createTestInput( runtime.NewKVStoreService(keys[movetypes.StoreKey]), accountKeeper, bankKeeper, - nil, // oracle keeper unused - nil, // msg router unused + nil, + nil, + nil, moveConfig, distKeeper, stakingKeeper, @@ -428,7 +429,7 @@ func _createTestInput( msgRouter := baseapp.NewMsgServiceRouter() msgRouter.SetInterfaceRegistry(encodingConfig.InterfaceRegistry) banktypes.RegisterMsgServer(msgRouter, bankkeeper.NewMsgServerImpl(bankKeeper)) - movetypes.RegisterMsgServer(msgRouter, movekeeper.NewMsgServerImpl(*moveKeeper)) + movetypes.RegisterMsgServer(msgRouter, movekeeper.NewMsgServerImpl(moveKeeper)) govConfig := govtypes.DefaultConfig() govKeeper := govkeeper.NewKeeper( diff --git a/x/mstaking/keeper/delegation_test.go b/x/mstaking/keeper/delegation_test.go index 402ef784..309162a8 100644 --- a/x/mstaking/keeper/delegation_test.go +++ b/x/mstaking/keeper/delegation_test.go @@ -13,7 +13,7 @@ import ( movekeeper "github.com/initia-labs/initia/x/move/keeper" movetypes "github.com/initia-labs/initia/x/move/types" "github.com/initia-labs/initia/x/mstaking/types" - vmtypes "github.com/initia-labs/initiavm/types" + vmtypes "github.com/initia-labs/movevm/types" sdk "github.com/cosmos/cosmos-sdk/types" ) diff --git a/x/reward/keeper/common_test.go b/x/reward/keeper/common_test.go index 5f259118..fbc0950a 100644 --- a/x/reward/keeper/common_test.go +++ b/x/reward/keeper/common_test.go @@ -69,7 +69,7 @@ import ( rewardkeeper "github.com/initia-labs/initia/x/reward/keeper" rewardtypes "github.com/initia-labs/initia/x/reward/types" "github.com/initia-labs/initia/x/slashing" - "github.com/initia-labs/initiavm/precompile" + "github.com/initia-labs/movevm/precompile" ) var ModuleBasics = module.NewBasicManager( @@ -353,8 +353,9 @@ func _createTestInput( runtime.NewKVStoreService(keys[movetypes.StoreKey]), accountKeeper, bankKeeper, - nil, // oracle keeper unused - nil, // msg router unused + nil, + nil, + nil, moveConfig, distKeeper, stakingKeeper, @@ -383,7 +384,7 @@ func _createTestInput( msgRouter := baseapp.NewMsgServiceRouter() msgRouter.SetInterfaceRegistry(encodingConfig.InterfaceRegistry) banktypes.RegisterMsgServer(msgRouter, bankkeeper.NewMsgServerImpl(bankKeeper)) - movetypes.RegisterMsgServer(msgRouter, movekeeper.NewMsgServerImpl(*moveKeeper)) + movetypes.RegisterMsgServer(msgRouter, movekeeper.NewMsgServerImpl(moveKeeper)) govConfig := govtypes.DefaultConfig() govKeeper := govkeeper.NewKeeper( diff --git a/x/slashing/keeper/common_test.go b/x/slashing/keeper/common_test.go index dd76eed8..1cc42909 100644 --- a/x/slashing/keeper/common_test.go +++ b/x/slashing/keeper/common_test.go @@ -73,7 +73,7 @@ import ( rewardtypes "github.com/initia-labs/initia/x/reward/types" "github.com/initia-labs/initia/x/slashing" slashingkeeper "github.com/initia-labs/initia/x/slashing/keeper" - "github.com/initia-labs/initiavm/precompile" + "github.com/initia-labs/movevm/precompile" ) var ModuleBasics = module.NewBasicManager( @@ -355,8 +355,9 @@ func _createTestInput( runtime.NewKVStoreService(keys[movetypes.StoreKey]), accountKeeper, bankKeeper, - nil, // oracle keeper unused - nil, // msg router unused + nil, + nil, + nil, moveConfig, distKeeper, stakingKeeper, @@ -397,7 +398,7 @@ func _createTestInput( msgRouter := baseapp.NewMsgServiceRouter() msgRouter.SetInterfaceRegistry(encodingConfig.InterfaceRegistry) banktypes.RegisterMsgServer(msgRouter, bankkeeper.NewMsgServerImpl(bankKeeper)) - movetypes.RegisterMsgServer(msgRouter, movekeeper.NewMsgServerImpl(*moveKeeper)) + movetypes.RegisterMsgServer(msgRouter, movekeeper.NewMsgServerImpl(moveKeeper)) govConfig := govtypes.DefaultConfig() govKeeper := govkeeper.NewKeeper(