Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
1f9c08e
feat(upgrade): add v10 upgrade
AdriaCarrera Feb 17, 2026
f222816
fix(cosmos-sdk): update dependency to xrplevm/cosmos-sdk v0.53.5-xrpl…
AdriaCarrera Feb 18, 2026
fc51788
feat: upgrade cosmos/evm dependency to v0.6.0-sec-papyrus
AdriaCarrera Feb 18, 2026
10cea98
fix: missing upgrade handler registered & ante handler not being used
AdriaCarrera Feb 18, 2026
dc111eb
Merge branch 'feat/upgrade/evm-v0.5' into feat/upgrade/evm-v0.6
AdriaCarrera Feb 18, 2026
cf5f29a
fix: remove comments and add Logging to EthAccount migration
AdriaCarrera Feb 18, 2026
d47dbf8
fix: remove comment for unprotected transactions removal (https://git…
AdriaCarrera Feb 18, 2026
61bb419
Merge branch 'feat/upgrade/evm-v0.5' into feat/upgrade/evm-v0.6
AdriaCarrera Feb 18, 2026
8117556
fix: use local MustGetDefaultNodeHome
AdriaCarrera Feb 18, 2026
3e757f5
fix: use local MustGetDefaultNodeHome
AdriaCarrera Feb 18, 2026
987044b
fix: lint
AdriaCarrera Feb 18, 2026
7af337c
Merge branch 'feat/upgrade/evm-v0.5' into feat/upgrade/evm-v0.6
AdriaCarrera Feb 18, 2026
7718000
fix: rollback v9 upgrade handler logic and split upgrades
AdriaCarrera Feb 18, 2026
574f266
Merge branch 'feat/upgrade/evm-v0.5' into feat/upgrade/evm-v0.6
AdriaCarrera Feb 18, 2026
6082abe
chore: migrate imports to use `v10` module
AdriaCarrera Feb 18, 2026
a1d15c1
fix: update proto generation
AdriaCarrera Feb 18, 2026
7a9d50d
fix: removed fixme comment
AdriaCarrera Feb 19, 2026
85c379e
fix: removed fixme comment
AdriaCarrera Feb 19, 2026
5ca551b
Merge branch 'feat/upgrade/evm-v0.5' into feat/upgrade/evm-v0.6
AdriaCarrera Feb 19, 2026
edee45c
Merge branch 'feat/upgrade/evm-v0.6' into feat/upgrade/bump-package-t…
AdriaCarrera Feb 19, 2026
5857430
chore: update evm-sec-papyrus version
AdriaCarrera Feb 19, 2026
0be93c3
Merge branch 'feat/upgrade/evm-v0.6' into feat/upgrade/bump-package-t…
AdriaCarrera Feb 19, 2026
f5a6511
fix: configure SSH for private Go modules in Dockerfile and workflows
AdriaCarrera Feb 19, 2026
75774d4
style: rename ibctransfer to transfer and ibctransferkeeper to transf…
JordiParraCrespo Feb 19, 2026
b3cf7f4
fix: configure SSH for private Go modules in Dockerfile and workflows
AdriaCarrera Feb 19, 2026
126fec9
Merge pull request #108 from xrplevm/feat/upgrade/add-ci-cd-workflows…
AdriaCarrera Feb 19, 2026
150ddcc
fix: comment proto registration to avoid conflicts
AdriaCarrera Feb 19, 2026
4e9028c
Merge remote-tracking branch 'origin/feat/upgrade/bump-package-to-v10…
AdriaCarrera Feb 19, 2026
c2971c7
fix: remove simulation tests from Dockerfile and workflows
AdriaCarrera Feb 19, 2026
e11d167
Merge pull request #107 from xrplevm/feat/upgrade/bump-package-to-v10
AdriaCarrera Feb 19, 2026
35acace
fix: ensure chain-id is preserved in client config
AdriaCarrera Feb 19, 2026
0a032e5
fix: lint
AdriaCarrera Feb 19, 2026
39271da
Merge pull request #106 from xrplevm/feat/upgrade/evm-v0.6
AdriaCarrera Feb 19, 2026
476e40c
fix: update evm-sec-papyrus tag to v0.6.0-xrplevm.2
AdriaCarrera Feb 19, 2026
c9fd307
fix: update evm-sec-papyrus tag to v0.6.0-xrplevm.3
AdriaCarrera Feb 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 14 additions & 2 deletions .github/workflows/goreleaser.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,21 @@ jobs:
ref: ${{ inputs.commit_branch }}
fetch-depth: 0
fetch-tags: true
- uses: docker/setup-qemu-action@v2
- uses: docker/setup-buildx-action@v2
# Configure SSH for private Go modules
- name: Setup SSH for private modules
run: |
mkdir -p ~/.ssh
echo "${{ secrets.SSH_KEY_B64 }}" | base64 -d > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
ssh-keyscan github.com >> ~/.ssh/known_hosts
# Build and push docker image
- name: Run go releaser
run: |
docker run --rm -e CGO_ENABLED -e GITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }} \
docker run --rm -e CGO_ENABLED -e GITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }} -e GOPRIVATE=github.com/xrplevm/evm-sec-papyrus\
-v /var/run/docker.sock:/var/run/docker.sock -v $PWD:/go/src/exrp -w /go/src/exrp \
goreleaser/goreleaser-cross:v1.22 release --clean --skip validate
-v ~/.ssh:/root/.ssh:ro \
--entrypoint /bin/sh \
goreleaser/goreleaser-cross:v1.22 -c \
'git config --global --add safe.directory /go/src/exrp && git config --global url."ssh://git@github.com/xrplevm/evm-sec-papyrus".insteadOf "https://github.com/xrplevm/evm-sec-papyrus" && goreleaser release --clean --skip validate'
26 changes: 8 additions & 18 deletions .github/workflows/pull-request.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,22 +16,12 @@ jobs:
- uses: actions/checkout@v2
- uses: docker/setup-qemu-action@v2
- uses: docker/setup-buildx-action@v2
- uses: actions/cache@v3
with:
path: /tmp/.buildx-cache
key: ${{ github.job }}-${{ runner.os }}-${{ github.event.pull_request.number }}-buildx
restore-keys: |
${{ github.job }}-${{ runner.os }}-${{ github.event.pull_request.number }}-buildx
# Build docker image
- name: Build docker image
uses: docker/build-push-action@v4
with:
target: integration
push: false
cache-from: type=local,src=/tmp/.buildx-cache
cache-to: type=local,dest=/tmp/.buildx-cache-new
- name: Move cache
if: always()
run: |
rm -rf /tmp/.buildx-cache
mv /tmp/.buildx-cache-new /tmp/.buildx-cache
- name: Build docker image
uses: docker/build-push-action@v4
with:
context: .
target: integration
push: false
secrets: |
ssh_key_b64=${{ secrets.SSH_KEY_B64 }}
2 changes: 2 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,8 @@ jobs:
tags: |
peersyst/exrp:${{ github.event.inputs.tag }}
${{ fromJSON('["", "peersyst/exrp:latest"]')[github.event.inputs.is_latest_release == 'true'] }}
secrets: |
ssh_key_b64=${{ secrets.SSH_KEY_B64 }}
- name: Publish the Release
uses: softprops/action-gh-release@v1
with:
Expand Down
14 changes: 12 additions & 2 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,15 @@ RUN apt update && \
ca-certificates
WORKDIR /app
COPY . .

# Hotfix to allow download of private go module
ENV GOPRIVATE=github.com/xrplevm/evm-sec-papyrus
RUN mkdir -p ~/.ssh
RUN --mount=type=secret,id=ssh_key_b64 base64 -d -i /run/secrets/ssh_key_b64 > ~/.ssh/id_rsa
RUN chmod 600 ~/.ssh/id_rsa
RUN ssh-keyscan github.com >> ~/.ssh/known_hosts
RUN git config --global url."ssh://git@github.com/xrplevm/evm-sec-papyrus".insteadOf "https://github.com/xrplevm/evm-sec-papyrus"

RUN make install


Expand All @@ -21,8 +30,9 @@ RUN make test-poa
# Integration tests
RUN make test-integration
# Simulation tests
RUN make test-sim-benchmark-simulation
RUN make test-sim-full-app-fast
# TODO: Restore simulation tests if possible
# RUN make test-sim-benchmark-simulation
# RUN make test-sim-full-app-fast

RUN touch /test.lock

Expand Down
17 changes: 9 additions & 8 deletions app/ante/ante.go
Original file line number Diff line number Diff line change
@@ -1,35 +1,36 @@
package ante

import (
baseevmante "github.com/cosmos/evm/ante"

errorsmod "cosmossdk.io/errors"
"github.com/cosmos/evm/ante"

sdk "github.com/cosmos/cosmos-sdk/types"
errortypes "github.com/cosmos/cosmos-sdk/types/errors"
authante "github.com/cosmos/cosmos-sdk/x/auth/ante"
"github.com/cosmos/cosmos-sdk/x/auth/ante"
)

// NewAnteHandler returns an ante handler responsible for attempting to route an
// Ethereum or SDK transaction to an internal ante handler for performing
// transaction-level processing (e.g. fee payment, signature verification) before
// being passed onto it's respective handler.
func NewAnteHandler(options ante.HandlerOptions) sdk.AnteHandler {
func NewAnteHandler(options baseevmante.HandlerOptions) sdk.AnteHandler {
return func(
ctx sdk.Context, tx sdk.Tx, sim bool,
) (newCtx sdk.Context, err error) {
var anteHandler sdk.AnteHandler

txWithExtensions, ok := tx.(authante.HasExtensionOptionsTx)
txWithExtensions, ok := tx.(ante.HasExtensionOptionsTx)
if ok {
opts := txWithExtensions.GetExtensionOptions()
if len(opts) > 0 {
switch typeURL := opts[0].GetTypeUrl(); typeURL {
case "/cosmos.evm.vm.v1.ExtensionOptionsEthereumTx":
// handle as *evmtypes.MsgEthereumTx
anteHandler = newMonoEVMAnteHandler(options)
case "/cosmos.evm.types.v1.ExtensionOptionDynamicFeeTx":
anteHandler = newMonoEVMAnteHandler(ctx, options)
case "/cosmos.evm.ante.v1.ExtensionOptionDynamicFeeTx":
// cosmos-sdk tx with dynamic fee extension
anteHandler = newCosmosAnteHandler(options)
anteHandler = newCosmosAnteHandler(ctx, options)
default:
return ctx, errorsmod.Wrapf(
errortypes.ErrUnknownExtensionOptions,
Expand All @@ -44,7 +45,7 @@ func NewAnteHandler(options ante.HandlerOptions) sdk.AnteHandler {
// handle as totally normal Cosmos SDK tx
switch tx.(type) {
case sdk.Tx:
anteHandler = newCosmosAnteHandler(options)
anteHandler = newCosmosAnteHandler(ctx, options)
default:
return ctx, errorsmod.Wrapf(errortypes.ErrUnknownRequest, "invalid transaction type: %T", tx)
}
Expand Down
16 changes: 11 additions & 5 deletions app/ante/cosmos_handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,21 @@ import (
evmante "github.com/cosmos/evm/ante/evm"
evmtypes "github.com/cosmos/evm/x/vm/types"
ibcante "github.com/cosmos/ibc-go/v10/modules/core/ante"
poaante "github.com/xrplevm/node/v9/x/poa/ante"
poaante "github.com/xrplevm/node/v10/x/poa/ante"

sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/x/auth/ante"
sdkvesting "github.com/cosmos/cosmos-sdk/x/auth/vesting/types"
)

// newCosmosAnteHandler creates the default ante handler for Cosmos transactions
func newCosmosAnteHandler(options baseevmante.HandlerOptions) sdk.AnteHandler {
func newCosmosAnteHandler(ctx sdk.Context, options baseevmante.HandlerOptions) sdk.AnteHandler {
feemarketParams := options.FeeMarketKeeper.GetParams(ctx)
var txFeeChecker ante.TxFeeChecker
if options.DynamicFeeChecker {
txFeeChecker = evmante.NewDynamicFeeChecker(&feemarketParams)
}

return sdk.ChainAnteDecorators(
cosmosante.NewRejectMessagesDecorator(), // reject MsgEthereumTxs
cosmosante.NewAuthzLimiterDecorator( // disable the Msg types that cannot be included on an authz.MsgExec msgs field
Expand All @@ -31,17 +37,17 @@ func newCosmosAnteHandler(options baseevmante.HandlerOptions) sdk.AnteHandler {
ante.NewValidateBasicDecorator(),
ante.NewTxTimeoutHeightDecorator(),
ante.NewValidateMemoDecorator(options.AccountKeeper),
cosmosante.NewMinGasPriceDecorator(options.FeeMarketKeeper, options.EvmKeeper),
cosmosante.NewMinGasPriceDecorator(&feemarketParams),
ante.NewConsumeGasForTxSizeDecorator(options.AccountKeeper),
ante.NewDeductFeeDecorator(options.AccountKeeper, options.BankKeeper, options.FeegrantKeeper, options.TxFeeChecker),
ante.NewDeductFeeDecorator(options.AccountKeeper, options.BankKeeper, options.FeegrantKeeper, txFeeChecker),
// SetPubKeyDecorator must be called before all signature verification decorators
ante.NewSetPubKeyDecorator(options.AccountKeeper),
ante.NewValidateSigCountDecorator(options.AccountKeeper),
ante.NewSigGasConsumeDecorator(options.AccountKeeper, options.SigGasConsumer),
ante.NewSigVerificationDecorator(options.AccountKeeper, options.SignModeHandler),
ante.NewIncrementSequenceDecorator(options.AccountKeeper),
ibcante.NewRedundantRelayDecorator(options.IBCKeeper),
evmante.NewGasWantedDecorator(options.EvmKeeper, options.FeeMarketKeeper),
evmante.NewGasWantedDecorator(options.EvmKeeper, options.FeeMarketKeeper, &feemarketParams),
poaante.NewPoaDecorator(),
)
}
10 changes: 7 additions & 3 deletions app/ante/evm_handler.go
Original file line number Diff line number Diff line change
@@ -1,22 +1,26 @@
package ante

import (
"github.com/cosmos/evm/ante"
baseevmante "github.com/cosmos/evm/ante"
evmante "github.com/cosmos/evm/ante/evm"

sdk "github.com/cosmos/cosmos-sdk/types"
)

// newMonoEVMAnteHandler creates the sdk.AnteHandler implementation for the EVM transactions.
func newMonoEVMAnteHandler(options ante.HandlerOptions) sdk.AnteHandler {
func newMonoEVMAnteHandler(ctx sdk.Context, options baseevmante.HandlerOptions) sdk.AnteHandler {
evmParams := options.EvmKeeper.GetParams(ctx)
feemarketParams := options.FeeMarketKeeper.GetParams(ctx)
decorators := []sdk.AnteDecorator{
evmante.NewEVMMonoDecorator(
options.AccountKeeper,
options.FeeMarketKeeper,
options.EvmKeeper,
options.MaxTxGasWanted,
&evmParams,
&feemarketParams,
),
ante.NewTxListenerDecorator(options.PendingTxListener),
baseevmante.NewTxListenerDecorator(options.PendingTxListener),
}

return sdk.ChainAnteDecorators(decorators...)
Expand Down
Loading