From a8c86f7f8bd358260affd6159c0c8e94d31535ff Mon Sep 17 00:00:00 2001 From: aeryz Date: Wed, 17 Jul 2024 12:47:09 +0300 Subject: [PATCH 1/4] feat: add 08-wasm module Signed-off-by: aeryz --- Dockerfile | 10 ++++++++++ Makefile | 3 +++ app/app.go | 33 +++++++++++++++++++++++++++++++++ go.mod | 3 +++ go.sum | 4 ++++ 5 files changed, 53 insertions(+) diff --git a/Dockerfile b/Dockerfile index fa00e240..52e1b7e8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -19,6 +19,15 @@ RUN --mount=type=cache,target=/root/.cache/go-build \ --mount=type=cache,target=/go/pkg/mod \ go version && go mod download +# Cosmwasm - Download correct libwasmvm version +RUN ARCH=$(uname -m) && WASMVM_VERSION=$(go list -m github.com/CosmWasm/wasmvm | sed 's/.* //') && \ + wget https://github.com/CosmWasm/wasmvm/releases/download/$WASMVM_VERSION/libwasmvm_muslc.$ARCH.a \ + -O /lib/libwasmvm.$ARCH.a && \ + # verify checksum + wget https://github.com/CosmWasm/wasmvm/releases/download/$WASMVM_VERSION/checksums.txt -O /tmp/checksums.txt && \ + sha256sum /lib/libwasmvm.$ARCH.a | grep $(cat /tmp/checksums.txt | grep libwasmvm_muslc.$ARCH | cut -d ' ' -f 1) + + # Add source files COPY . . @@ -27,6 +36,7 @@ COPY . . # Mount go build and mod caches as container caches, persisted between builder invocations RUN --mount=type=cache,target=/root/.cache/go-build \ --mount=type=cache,target=/go/pkg/mod \ + LINK_STATICALLY=true \ make install FROM alpine:3.15 diff --git a/Makefile b/Makefile index 33f261fe..29caf943 100644 --- a/Makefile +++ b/Makefile @@ -174,6 +174,9 @@ endif ifeq (,$(findstring nostrip,$(COSMOS_BUILD_OPTIONS))) ldflags += -w -s endif +ifeq ($(LINK_STATICALLY),true) + ldflags += -linkmode=external -extldflags "-Wl,-z,muldefs -static" +endif ldflags += $(LDFLAGS) ldflags := $(strip $(ldflags)) diff --git a/app/app.go b/app/app.go index 1dc4bcee..db97c48b 100644 --- a/app/app.go +++ b/app/app.go @@ -80,6 +80,9 @@ import ( "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/packetforward" packetforwardkeeper "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/packetforward/keeper" packetforwardtypes "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/packetforward/types" + ibcwasm "github.com/cosmos/ibc-go/modules/light-clients/08-wasm" + ibcwasmkeeper "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/keeper" + ibcwasmtypes "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/types" transfer "github.com/cosmos/ibc-go/v7/modules/apps/transfer" ibctransferkeeper "github.com/cosmos/ibc-go/v7/modules/apps/transfer/keeper" ibctransfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" @@ -90,6 +93,7 @@ import ( ibcporttypes "github.com/cosmos/ibc-go/v7/modules/core/05-port/types" ibcexported "github.com/cosmos/ibc-go/v7/modules/core/exported" ibckeeper "github.com/cosmos/ibc-go/v7/modules/core/keeper" + solomachine "github.com/cosmos/ibc-go/v7/modules/light-clients/06-solomachine" ibctm "github.com/cosmos/ibc-go/v7/modules/light-clients/07-tendermint" evmante "github.com/evmos/ethermint/app/ante" @@ -178,6 +182,7 @@ var ( council.AppModuleBasic{}, dasigners.AppModuleBasic{}, consensus.AppModuleBasic{}, + ibcwasm.AppModuleBasic{}, ) // module account permissions @@ -246,6 +251,7 @@ type App struct { authzKeeper authzkeeper.Keeper crisisKeeper crisiskeeper.Keeper slashingKeeper slashingkeeper.Keeper + ibcWasmClientKeeper ibcwasmkeeper.Keeper ibcKeeper *ibckeeper.Keeper // IBC Keeper must be a pointer in the app, so we can SetRouter on it correctly packetForwardKeeper *packetforwardkeeper.Keeper evmKeeper *evmkeeper.Keeper @@ -314,6 +320,7 @@ func NewApp( dasignerstypes.StoreKey, vestingtypes.StoreKey, consensusparamtypes.StoreKey, crisistypes.StoreKey, + ibcwasmtypes.StoreKey, ) tkeys := sdk.NewTransientStoreKeys(paramstypes.TStoreKey, evmtypes.TransientKey, feemarkettypes.TransientKey) memKeys := sdk.NewMemoryStoreKeys(capabilitytypes.MemStoreKey) @@ -446,6 +453,19 @@ func NewApp( scopedIBCKeeper, ) + app.ibcWasmClientKeeper = ibcwasmkeeper.NewKeeperWithConfig( + appCodec, + keys[ibcwasmtypes.StoreKey], + app.ibcKeeper.ClientKeeper, + authtypes.NewModuleAddress(govtypes.ModuleName).String(), + ibcwasmtypes.WasmConfig{ + DataDir: "ibc_08-wasm", + SupportedCapabilities: "iterator,stargate", + ContractDebugMode: false, + }, + app.GRPCQueryRouter(), + ) + // Create Ethermint keepers app.feeMarketKeeper = feemarketkeeper.NewKeeper( appCodec, @@ -650,6 +670,7 @@ func NewApp( evmutil.NewAppModule(app.evmutilKeeper, app.bankKeeper, app.accountKeeper), // nil InflationCalculationFn, use SDK's default inflation function mint.NewAppModule(appCodec, app.mintKeeper, app.accountKeeper, nil, mintSubspace), + ibcwasm.NewAppModule(app.ibcWasmClientKeeper), ) // Warning: Some begin blockers must run before others. Ensure the dependencies are understood before modifying this list. @@ -693,6 +714,7 @@ func NewApp( evmutiltypes.ModuleName, consensusparamtypes.ModuleName, packetforwardtypes.ModuleName, + ibcwasmtypes.ModuleName, ) // Warning: Some end blockers must run before others. Ensure the dependencies are understood before modifying this list. @@ -726,6 +748,7 @@ func NewApp( minttypes.ModuleName, consensusparamtypes.ModuleName, packetforwardtypes.ModuleName, + ibcwasmtypes.ModuleName, ) // Warning: Some init genesis methods must run before others. Ensure the dependencies are understood before modifying this list @@ -758,6 +781,7 @@ func NewApp( consensusparamtypes.ModuleName, packetforwardtypes.ModuleName, crisistypes.ModuleName, // runs the invariants at genesis, should run after other modules + ibcwasmtypes.ModuleName, ) app.mm.RegisterInvariants(&app.crisisKeeper) @@ -832,6 +856,15 @@ func NewApp( } } + if manager := app.SnapshotManager(); manager != nil { + err := manager.RegisterExtensions( + ibcwasmkeeper.NewWasmSnapshotter(app.CommitMultiStore(), &app.ibcWasmClientKeeper), + ) + if err != nil { + panic(fmt.Errorf("failed to register snapshot extension: %s", err)) + } + } + app.ScopedIBCKeeper = scopedIBCKeeper app.ScopedTransferKeeper = scopedTransferKeeper diff --git a/go.mod b/go.mod index 4c9e850d..7e79f923 100644 --- a/go.mod +++ b/go.mod @@ -16,6 +16,7 @@ require ( github.com/cosmos/gogoproto v1.4.10 github.com/cosmos/iavl v0.20.1 github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.1.3 + github.com/cosmos/ibc-go/modules/light-clients/08-wasm v0.1.1-ibc-go-v7.3-wasmvm-v1.5 github.com/cosmos/ibc-go/v7 v7.4.0 github.com/ethereum/go-ethereum v1.10.26 github.com/evmos/ethermint v0.21.0 @@ -57,6 +58,8 @@ require ( github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect github.com/99designs/keyring v1.2.1 // indirect github.com/ChainSafe/go-schnorrkel v1.0.0 // indirect + github.com/CosmWasm/wasmvm v1.5.2 // indirect + github.com/DataDog/zstd v1.5.2 // indirect github.com/StackExchange/wmi v1.2.1 // indirect github.com/VictoriaMetrics/fastcache v1.6.0 // indirect github.com/armon/go-metrics v0.4.1 // indirect diff --git a/go.sum b/go.sum index eebbd952..4b7c4985 100644 --- a/go.sum +++ b/go.sum @@ -224,6 +224,8 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03 github.com/BurntSushi/toml v1.1.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/ChainSafe/go-schnorrkel v1.0.0 h1:3aDA67lAykLaG1y3AOjs88dMxC88PgUuHRrLeDnvGIM= github.com/ChainSafe/go-schnorrkel v1.0.0/go.mod h1:dpzHYVxLZcp8pjlV+O+UR8K0Hp/z7vcchBSbMBEhCw4= +github.com/CosmWasm/wasmvm v1.5.2 h1:+pKB1Mz9GZVt1vadxB+EDdD1FOz3dMNjIKq/58/lrag= +github.com/CosmWasm/wasmvm v1.5.2/go.mod h1:Q0bSEtlktzh7W2hhEaifrFp1Erx11ckQZmjq8FLCyys= github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/DataDog/zstd v1.5.0/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= @@ -425,6 +427,8 @@ github.com/cosmos/iavl v0.20.1 h1:rM1kqeG3/HBT85vsZdoSNsehciqUQPWrR4BYmqE2+zg= github.com/cosmos/iavl v0.20.1/go.mod h1:WO7FyvaZJoH65+HFOsDir7xU9FWk2w9cHXNW1XHcl7A= github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.1.3 h1:MZGDMETv72suFpTAD6VPGqSIm1FJcChtk2HmVh9D+Bo= github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.1.3/go.mod h1:UvDmcGIWJPIytq+Q78/ff5NTOsuX/7IrNgEugTW5i0s= +github.com/cosmos/ibc-go/modules/light-clients/08-wasm v0.1.1-ibc-go-v7.3-wasmvm-v1.5 h1:sMoHjep+KInjMrppNCEutMVm1p8nI9WhKCuMQ+EcUHw= +github.com/cosmos/ibc-go/modules/light-clients/08-wasm v0.1.1-ibc-go-v7.3-wasmvm-v1.5/go.mod h1:VR2Hg2i/X1bafbmmNsV2Khwsg0PzNeuWoVKmSN5dAwo= github.com/cosmos/ibc-go/v7 v7.4.0 h1:8FqYMptvksgMvlbN4UW9jFxTXzsPyfAzEZurujXac8M= github.com/cosmos/ibc-go/v7 v7.4.0/go.mod h1:L/KaEhzV5TGUCTfGysVgMBQtl5Dm7hHitfpk+GIeoAo= github.com/cosmos/ics23/go v0.10.0 h1:iXqLLgp2Lp+EdpIuwXTYIQU+AiHj9mOC2X9ab++bZDM= From bd3d947e9bfee3344651d109f3a9d11b55873115 Mon Sep 17 00:00:00 2001 From: 0g-wh Date: Sun, 4 Aug 2024 15:25:53 +0800 Subject: [PATCH 2/4] clean code --- app/app.go | 1 - go.mod | 1 - 2 files changed, 2 deletions(-) diff --git a/app/app.go b/app/app.go index db97c48b..b2337526 100644 --- a/app/app.go +++ b/app/app.go @@ -93,7 +93,6 @@ import ( ibcporttypes "github.com/cosmos/ibc-go/v7/modules/core/05-port/types" ibcexported "github.com/cosmos/ibc-go/v7/modules/core/exported" ibckeeper "github.com/cosmos/ibc-go/v7/modules/core/keeper" - solomachine "github.com/cosmos/ibc-go/v7/modules/light-clients/06-solomachine" ibctm "github.com/cosmos/ibc-go/v7/modules/light-clients/07-tendermint" evmante "github.com/evmos/ethermint/app/ante" diff --git a/go.mod b/go.mod index 7e79f923..263211d3 100644 --- a/go.mod +++ b/go.mod @@ -59,7 +59,6 @@ require ( github.com/99designs/keyring v1.2.1 // indirect github.com/ChainSafe/go-schnorrkel v1.0.0 // indirect github.com/CosmWasm/wasmvm v1.5.2 // indirect - github.com/DataDog/zstd v1.5.2 // indirect github.com/StackExchange/wmi v1.2.1 // indirect github.com/VictoriaMetrics/fastcache v1.6.0 // indirect github.com/armon/go-metrics v0.4.1 // indirect From ed5646b71a0a041ffab9d330849c722f5436bb91 Mon Sep 17 00:00:00 2001 From: 0g-wh Date: Sun, 4 Aug 2024 19:39:00 +0800 Subject: [PATCH 3/4] add ibcwasmtypes to upgrades.go --- app/upgrades.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/upgrades.go b/app/upgrades.go index 8f0884ac..1e15234a 100644 --- a/app/upgrades.go +++ b/app/upgrades.go @@ -20,6 +20,7 @@ import ( stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" packetforwardtypes "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/packetforward/types" + ibcwasmtypes "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/types" ibctransfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" ibctmmigrations "github.com/cosmos/ibc-go/v7/modules/light-clients/07-tendermint/migrations" ) @@ -50,6 +51,7 @@ func (app App) RegisterUpgradeHandlers() { crisistypes.ModuleName, consensustypes.ModuleName, packetforwardtypes.ModuleName, + ibcwasmtypes.ModuleName, }, } From 30728b75e946ec190ce40d6a39fca551c49f0982 Mon Sep 17 00:00:00 2001 From: 0g-wh Date: Mon, 5 Aug 2024 23:11:18 +0800 Subject: [PATCH 4/4] fix wasm static link (#57) --- .github/workflows/upload-release-assets.yml | 4 ++-- Makefile | 9 ++++++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/.github/workflows/upload-release-assets.yml b/.github/workflows/upload-release-assets.yml index 2e4fd0ad..3d0915f9 100644 --- a/.github/workflows/upload-release-assets.yml +++ b/.github/workflows/upload-release-assets.yml @@ -14,9 +14,9 @@ jobs: with: go-version: '1.21' - name: Build - run: make build + run: sudo LINK_STATICALLY=true make build-release - name: Rename file - run: mv ./out/linux/0gchaind ./out/linux/0gchaind-linux-${{ github.ref_name }} + run: sudo mv ./out/linux/0gchaind ./out/linux/0gchaind-linux-${{ github.ref_name }} - name: Upload Release Asset uses: softprops/action-gh-release@v2 with: diff --git a/Makefile b/Makefile index 29caf943..f556645c 100644 --- a/Makefile +++ b/Makefile @@ -6,6 +6,8 @@ BINARY_NAME := 0gchaind MAIN_ENTRY := ./cmd/$(BINARY_NAME) DOCKER_IMAGE_NAME := 0glabs/$(PROJECT_NAME) GO_BIN ?= go +ARCH := $(shell uname -m) +WASMVM_VERSION := $(shell $(GO_BIN) list -m github.com/CosmWasm/wasmvm | sed 's/.* //') GIT_BRANCH := $(shell git rev-parse --abbrev-ref HEAD) GIT_COMMIT := $(shell git rev-parse HEAD) @@ -174,8 +176,9 @@ endif ifeq (,$(findstring nostrip,$(COSMOS_BUILD_OPTIONS))) ldflags += -w -s endif + ifeq ($(LINK_STATICALLY),true) - ldflags += -linkmode=external -extldflags "-Wl,-z,muldefs -static" + ldflags += -linkmode=external -extldflags "-Wl,-z,muldefs -static -lm" endif ldflags += $(LDFLAGS) ldflags := $(strip $(ldflags)) @@ -198,6 +201,10 @@ else $(GO_BIN) build -mod=readonly $(BUILD_FLAGS) -o out/$(shell $(GO_BIN) env GOOS)/$(BINARY_NAME) $(MAIN_ENTRY) endif +build-release: go.sum + wget -q https://github.com/CosmWasm/wasmvm/releases/download/$(WASMVM_VERSION)/libwasmvm_muslc.$(ARCH).a -O /lib/libwasmvm.$(ARCH).a + $(GO_BIN) build -mod=readonly $(BUILD_FLAGS) -o out/$(shell $(GO_BIN) env GOOS)/$(BINARY_NAME) $(MAIN_ENTRY) + build-linux: go.sum LEDGER_ENABLED=false GOOS=linux GOARCH=amd64 $(MAKE) build