From 412cd54480e09912bfee7e71acd0d7a6844b0f15 Mon Sep 17 00:00:00 2001 From: zale144 Date: Fri, 13 Sep 2024 16:22:53 +0200 Subject: [PATCH 1/5] Create account if not found and skip fees for IBC relayer messages --- README.md | 23 ++-- app/ante.go | 5 +- app/bypass_ibc_fee_decorator.go | 66 ++++++++++ app/create_account_decorator.go | 67 ++++++++++ app/sigcheck_decorator.go | 105 ++++++++++++++++ scripts/ibc/setup_ibc.sh | 116 +++++++++--------- scripts/settlement/register_rollapp_to_hub.sh | 114 ++++++++++++++++- .../settlement/register_sequencer_to_hub.sh | 103 ++++++++++++++-- 8 files changed, 512 insertions(+), 87 deletions(-) create mode 100644 app/bypass_ibc_fee_decorator.go create mode 100644 app/create_account_decorator.go create mode 100644 app/sigcheck_decorator.go diff --git a/README.md b/README.md index 0555cc9..a4323f8 100644 --- a/README.md +++ b/README.md @@ -106,6 +106,7 @@ export HUB_RPC_ENDPOINT="http://localhost" export HUB_RPC_PORT="36657" # default: 36657 export HUB_RPC_URL="${HUB_RPC_ENDPOINT}:${HUB_RPC_PORT}" export HUB_CHAIN_ID="dymension_100-1" +export HUB_REST_URL="localhost:1318" # required for relayer dymd config chain-id ${HUB_CHAIN_ID} dymd config node ${HUB_RPC_URL} @@ -140,7 +141,7 @@ NEW_NUMERIC_PART=$(echo "$NUMERIC_PART + 100000000000000000000" | bc) # Append 'adym' back TRANSFER_AMOUNT="${NEW_NUMERIC_PART}adym" -dymd tx bank send $HUB_KEY_WITH_FUNDS $SEQUENCER_ADDR ${TRANSFER_AMOUNT} --keyring-backend test --broadcast-mode block --fees 1dym -y --node ${HUB_RPC_URL} --chain-id ${HUB_CHAIN_ID} +dymd tx bank send $HUB_KEY_WITH_FUNDS $SEQUENCER_ADDR ${TRANSFER_AMOUNT} --keyring-backend test --fees 1dym -y --node ${HUB_RPC_URL} --chain-id ${HUB_CHAIN_ID} ``` ### Generate denommetadata @@ -170,22 +171,14 @@ sh scripts/settlement/register_sequencer_to_hub.sh ### Configure the rollapp Modify `dymint.toml` in the chain directory (`~/.rollapp/config`) -set: - -linux: - -```shell -sed -i 's/settlement_layer.*/settlement_layer = "dymension"/' ${ROLLAPP_HOME_DIR}/config/dymint.toml -sed -i '/node_address =/c\node_address = '\"$HUB_RPC_URL\" "${ROLLAPP_HOME_DIR}/config/dymint.toml" -sed -i '/rollapp_id =/c\rollapp_id = '\"$ROLLAPP_CHAIN_ID\" "${ROLLAPP_HOME_DIR}/config/dymint.toml" -``` - -mac: ```shell -sed -i '' 's/settlement_layer.*/settlement_layer = "dymension"/' ${ROLLAPP_HOME_DIR}/config/dymint.toml -sed -i '' 's|node_address =.*|node_address = '\"$HUB_RPC_URL\"'|' "${ROLLAPP_HOME_DIR}/config/dymint.toml" -sed -i '' 's|rollapp_id =.*|rollapp_id = '\"$ROLLAPP_CHAIN_ID\"'|' "${ROLLAPP_HOME_DIR}/config/dymint.toml" +dasel put -f "${ROLLAPP_HOME_DIR}"/config/dymint.toml "settlement_layer" -v "dymension" +dasel put -f "${ROLLAPP_HOME_DIR}"/config/dymint.toml "node_address" -v "$HUB_RPC_URL" +dasel put -f "${ROLLAPP_HOME_DIR}"/config/dymint.toml "rollapp_id" -v "$ROLLAPP_CHAIN_ID" +dasel put -f "${ROLLAPP_HOME_DIR}"/config/dymint.toml "max_idle_time" -v "2s" +dasel put -f "${ROLLAPP_HOME_DIR}"/config/dymint.toml "max_proof_time" -v "1s" +dasel put -f "${ROLLAPP_HOME_DIR}"/config/app.toml "minimum-gas-prices" -v "1awsm" ``` ### Run rollapp locally diff --git a/app/ante.go b/app/ante.go index 4a6406b..4ca1dcb 100644 --- a/app/ante.go +++ b/app/ante.go @@ -47,12 +47,13 @@ func GetAnteDecorators(options HandlerOptions) []sdk.AnteDecorator { ante.NewTxTimeoutHeightDecorator(), ante.NewValidateMemoDecorator(options.AccountKeeper), + NewCreateAccountDecorator(options.AccountKeeper.(accountKeeper)), ante.NewConsumeGasForTxSizeDecorator(options.AccountKeeper), - gasless.NewDeductFeeDecorator(options.AccountKeeper, options.BankKeeper, options.FeegrantKeeper, options.TxFeeChecker, options.GaslessKeeper), + NewBypassIBCFeeDecorator(gasless.NewDeductFeeDecorator(options.AccountKeeper, options.BankKeeper, options.FeegrantKeeper, options.TxFeeChecker, options.GaslessKeeper)), ante.NewSetPubKeyDecorator(options.AccountKeeper), // SetPubKeyDecorator must be called before all signature verification decorators ante.NewValidateSigCountDecorator(options.AccountKeeper), ante.NewSigGasConsumeDecorator(options.AccountKeeper, sigGasConsumer), - ante.NewSigVerificationDecorator(options.AccountKeeper, options.SignModeHandler), + NewSigCheckDecorator(options.AccountKeeper.(accountKeeper), options.SignModeHandler), ante.NewIncrementSequenceDecorator(options.AccountKeeper), } diff --git a/app/bypass_ibc_fee_decorator.go b/app/bypass_ibc_fee_decorator.go new file mode 100644 index 0000000..505d539 --- /dev/null +++ b/app/bypass_ibc_fee_decorator.go @@ -0,0 +1,66 @@ +package app + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + clienttypes "github.com/cosmos/ibc-go/v6/modules/core/02-client/types" + conntypes "github.com/cosmos/ibc-go/v6/modules/core/03-connection/types" + channeltypes "github.com/cosmos/ibc-go/v6/modules/core/04-channel/types" +) + +type anteHandler interface { + AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, next sdk.AnteHandler) (sdk.Context, error) +} + +type BypassIBCFeeDecorator struct { + nextAnte anteHandler +} + +func NewBypassIBCFeeDecorator(nextAnte anteHandler) BypassIBCFeeDecorator { + return BypassIBCFeeDecorator{nextAnte: nextAnte} +} + +// SKIP FEE DEDUCT and MIN GAS PRICE Ante handlers for IBC relayer messages +func (n BypassIBCFeeDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, next sdk.AnteHandler) (sdk.Context, error) { + // ======== HACK ================ + if isIBCRelayerMsg(tx.GetMsgs()) { + return next(ctx, tx, simulate) + } + // ============================== + + // If it's not an IBC Relayer transfer, proceed with the default fee handling + return n.nextAnte.AnteHandle(ctx, tx, simulate, next) +} + +// isIBCRelayerMsg checks if all the messages in the transaction are IBC relayer messages +func isIBCRelayerMsg(msgs []sdk.Msg) bool { + isIBCRelayer := false + + for _, msg := range msgs { + switch msg.(type) { + // IBC Client Messages + case *clienttypes.MsgCreateClient, *clienttypes.MsgUpdateClient, + *clienttypes.MsgUpgradeClient, *clienttypes.MsgSubmitMisbehaviour: + isIBCRelayer = true + + // IBC Connection Messages + case *conntypes.MsgConnectionOpenInit, *conntypes.MsgConnectionOpenTry, + *conntypes.MsgConnectionOpenAck, *conntypes.MsgConnectionOpenConfirm: + isIBCRelayer = true + + // IBC Channel Messages + case *channeltypes.MsgChannelOpenInit, *channeltypes.MsgChannelOpenTry, + *channeltypes.MsgChannelOpenAck, *channeltypes.MsgChannelOpenConfirm, + *channeltypes.MsgChannelCloseInit, *channeltypes.MsgChannelCloseConfirm: + isIBCRelayer = true + + // IBC Packet Messages + case *channeltypes.MsgRecvPacket, *channeltypes.MsgAcknowledgement, + *channeltypes.MsgTimeout, *channeltypes.MsgTimeoutOnClose: + isIBCRelayer = true + default: + return false + } + } + + return isIBCRelayer +} diff --git a/app/create_account_decorator.go b/app/create_account_decorator.go new file mode 100644 index 0000000..681bdf3 --- /dev/null +++ b/app/create_account_decorator.go @@ -0,0 +1,67 @@ +package app + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + authante "github.com/cosmos/cosmos-sdk/x/auth/ante" + authsigning "github.com/cosmos/cosmos-sdk/x/auth/signing" + "github.com/cosmos/cosmos-sdk/x/auth/types" +) + +type createAccountDecorator struct { + ak accountKeeper +} + +type accountKeeper interface { + authante.AccountKeeper + NewAccountWithAddress(ctx sdk.Context, addr sdk.AccAddress) types.AccountI +} + +func NewCreateAccountDecorator(ak accountKeeper) createAccountDecorator { + return createAccountDecorator{ak: ak} +} + +const newAccountCtxKeyPrefix = "new-account/" + +func CtxKeyNewAccount(acc string) string { + return newAccountCtxKeyPrefix + acc +} + +func (cad createAccountDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, next sdk.AnteHandler) (sdk.Context, error) { + sigTx, ok := tx.(authsigning.SigVerifiableTx) + if !ok { + return ctx, sdkerrors.Wrap(sdkerrors.ErrTxDecode, "invalid tx type") + } + + pubkeys, err := sigTx.GetPubKeys() + if err != nil { + return ctx, err + } + + ibcRelayerMsg := isIBCRelayerMsg(tx.GetMsgs()) + + for i, pk := range pubkeys { + if pk == nil { + continue + } + + acc, err := authante.GetSignerAcc(ctx, cad.ak, sigTx.GetSigners()[i]) + if err != nil { + // ======= HACK ========================= + // for IBC relayer messages, create an account if it doesn't exist + if ibcRelayerMsg { + address := sdk.AccAddress(pk.Address()) + acc = cad.ak.NewAccountWithAddress(ctx, address) + // inject the new account flag into the context, in order to signal + // the account creation to the subsequent decorators (sigchecker) + ctx = ctx.WithValue(CtxKeyNewAccount(address.String()), struct{}{}) + cad.ak.SetAccount(ctx, acc) + } else { + return ctx, err + } + // ====================================== + } + } + + return next(ctx, tx, simulate) +} diff --git a/app/sigcheck_decorator.go b/app/sigcheck_decorator.go new file mode 100644 index 0000000..bfcc4ae --- /dev/null +++ b/app/sigcheck_decorator.go @@ -0,0 +1,105 @@ +package app + +import ( + "fmt" + + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + authante "github.com/cosmos/cosmos-sdk/x/auth/ante" + authsigning "github.com/cosmos/cosmos-sdk/x/auth/signing" +) + +type sigCheckDecorator struct { + ak accountKeeper + signModeHandler authsigning.SignModeHandler +} + +func NewSigCheckDecorator(ak accountKeeper, signModeHandler authsigning.SignModeHandler) sigCheckDecorator { + return sigCheckDecorator{ak: ak, signModeHandler: signModeHandler} +} + +// Copied from github.com/cosmos/cosmos-sdk@v0.46.16/x/auth/ante/sigverify.go:235 +// and modified to set account number to 0 when verifying for IBC relayer messages from a new account +func (svd sigCheckDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, next sdk.AnteHandler) (newCtx sdk.Context, err error) { + sigTx, ok := tx.(authsigning.SigVerifiableTx) + if !ok { + return ctx, sdkerrors.Wrap(sdkerrors.ErrTxDecode, "invalid transaction type") + } + + // stdSigs contains the sequence number, account number, and signatures. + // When simulating, this would just be a 0-length slice. + sigs, err := sigTx.GetSignaturesV2() + if err != nil { + return ctx, err + } + + signerAddrs := sigTx.GetSigners() + + // check that signer length and signature length are the same + if len(sigs) != len(signerAddrs) { + return ctx, sdkerrors.Wrapf(sdkerrors.ErrUnauthorized, "invalid number of signer; expected: %d, got %d", len(signerAddrs), len(sigs)) + } + + ibcRelayerMsg := isIBCRelayerMsg(tx.GetMsgs()) + + for i, sig := range sigs { + acc, err := authante.GetSignerAcc(ctx, svd.ak, signerAddrs[i]) + if err != nil { + return ctx, err + } + + // retrieve pubkey + pubKey := acc.GetPubKey() + if !simulate && pubKey == nil { + return ctx, sdkerrors.Wrap(sdkerrors.ErrInvalidPubKey, "pubkey on account is not set") + } + + // Check account sequence number. + if sig.Sequence != acc.GetSequence() { + return ctx, sdkerrors.Wrapf( + sdkerrors.ErrWrongSequence, + "account sequence mismatch, expected %d, got %d", acc.GetSequence(), sig.Sequence, + ) + } + + // retrieve signer data + genesis := ctx.BlockHeight() == 0 + chainID := ctx.ChainID() + var accNum uint64 + + // ======= HACK ==================== + _, isNewAcc := ctx.Value(CtxKeyNewAccount(acc.GetAddress().String())).(struct{}) + isNewRelayerAcc := ibcRelayerMsg && isNewAcc + if !genesis && !isNewRelayerAcc { + accNum = acc.GetAccountNumber() + } + // ================================= + + signerData := authsigning.SignerData{ + Address: acc.GetAddress().String(), + ChainID: chainID, + AccountNumber: accNum, + Sequence: acc.GetSequence(), + PubKey: pubKey, + } + + // no need to verify signatures on recheck tx + if !simulate && !ctx.IsReCheckTx() { + err := authsigning.VerifySignature(pubKey, signerData, sig.Data, svd.signModeHandler, tx) + if err != nil { + var errMsg string + if authante.OnlyLegacyAminoSigners(sig.Data) { + // If all signers are using SIGN_MODE_LEGACY_AMINO, we rely on VerifySignature to check account sequence number, + // and therefore communicate sequence number as a potential cause of error. + errMsg = fmt.Sprintf("signature verification failed; please verify account number (%d), sequence (%d) and chain-id (%s)", accNum, acc.GetSequence(), chainID) + } else { + errMsg = fmt.Sprintf("signature verification failed; please verify account number (%d) and chain-id (%s)", accNum, chainID) + } + return ctx, sdkerrors.Wrap(sdkerrors.ErrUnauthorized, errMsg) + + } + } + } + + return next(ctx, tx, simulate) +} diff --git a/scripts/ibc/setup_ibc.sh b/scripts/ibc/setup_ibc.sh index d52d9c9..35aee6b 100644 --- a/scripts/ibc/setup_ibc.sh +++ b/scripts/ibc/setup_ibc.sh @@ -1,4 +1,36 @@ #!/bin/bash +EXECUTABLE=$(which rollapp-wasm) + +if ! command -v "$EXECUTABLE" >/dev/null; then + echo "$EXECUTABLE does not exist" + echo "please run make install" + exit 1 +fi + +if [ "$BECH32_PREFIX" = "" ]; then + echo "BECH32_PREFIX is not set" + exit 1 +fi + +if [ "$BASE_DENOM" = "" ]; then + echo "BASE_DENOM is not set" + exit 1 +fi + +if [ "$HUB_KEY_WITH_FUNDS" = "" ]; then + echo "HUB_KEY_WITH_FUNDS is not set" + exit 1 +fi + +if [ "$KEY_NAME_ROLLAPP" = "" ]; then + echo "KEY_NAME_ROLLAPP is not set" + exit 1 +fi + +if [ "$HUB_REST_URL" = "" ]; then + echo "HUB_REST_URL is not set" + exit 1 +fi BASEDIR=$(dirname "$0") @@ -9,31 +41,25 @@ RELAYER_EXECUTABLE="rly" # settlement config SETTLEMENT_EXECUTABLE="dymd" -SETTLEMENT_CHAIN_ID=$($SETTLEMENT_EXECUTABLE config | jq -r '."chain-id"') -SETTLEMENT_RPC_FOR_RELAYER=$($SETTLEMENT_EXECUTABLE config | jq -r '."node"') -SETTLEMENT_BASE_DENOM="adym" -SETTLEMENT_KEY_NAME_GENESIS="hub-user" +SETTLEMENT_CHAIN_ID=$("$SETTLEMENT_EXECUTABLE" config | jq -r '."chain-id"') +SETTLEMENT_RPC_FOR_RELAYER=$("$SETTLEMENT_EXECUTABLE" config | jq -r '."node"') + +SETTLEMENT_KEY_NAME_GENESIS="$HUB_KEY_WITH_FUNDS" # rollapp config -ROLLAPP_CHAIN_ID=$($EXECUTABLE config | jq -r '."chain-id"') -ROLLAPP_RPC_FOR_RELAYER=$($EXECUTABLE config | jq -r '."node"') -ROLLAPP_KEY_NAME_GENESIS="rol-user" +ROLLAPP_CHAIN_ID=$("$EXECUTABLE" config | jq -r '."chain-id"') +ROLLAPP_RPC_FOR_RELAYER=$("$EXECUTABLE" config | jq -r '."node"') RELAYER_KEY_FOR_ROLLAPP="relayer-rollapp-key" RELAYER_KEY_FOR_HUB="relayer-hub-key" RELAYER_PATH="hub-rollapp" -if ! command -v $RELAYER_EXECUTABLE >/dev/null; then +if ! command -v "$RELAYER_EXECUTABLE" >/dev/null; then echo "$RELAYER_EXECUTABLE does not exist" echo "please run make install of github.com/dymensionxyz/dymension-relayer" exit 1 fi -# --------------------------------- change block time to easily create ibc channels --------------------------------- # -kill $(pgrep rollapp-wasm) -sed -i '' 's/empty_blocks_max_time = "3600s"/empty_blocks_max_time = "3s"/' ${ROLLAPP_HOME_DIR}/config/dymint.toml -rollapp-wasm start - # --------------------------------- rly init --------------------------------- # RLY_PATH="$HOME/.relayer" RLY_CONFIG_FILE="$RLY_PATH/config/config.yaml" @@ -50,21 +76,20 @@ if [ -f "$RLY_CONFIG_FILE" ]; then fi fi -echo '# -------------------------- initializing rly config ------------------------- #' +echo '--------------------------------- Initializing rly config... --------------------------------' rly config init -echo '# ------------------------- adding chains to rly config ------------------------- #' -tmp=$(mktemp) +echo '--------------------------------- Adding chains to rly config.. --------------------------------' -jq --arg key "$RELAYER_KEY_FOR_ROLLAPP" '.value.key = $key' $ROLLAPP_IBC_CONF_FILE >"$tmp" && mv "$tmp" $ROLLAPP_IBC_CONF_FILE -jq --arg chain "$ROLLAPP_CHAIN_ID" '.value."chain-id" = $chain' $ROLLAPP_IBC_CONF_FILE >"$tmp" && mv "$tmp" $ROLLAPP_IBC_CONF_FILE -jq --arg rpc "$ROLLAPP_RPC_FOR_RELAYER" '.value."rpc-addr" = $rpc' $ROLLAPP_IBC_CONF_FILE >"$tmp" && mv "$tmp" $ROLLAPP_IBC_CONF_FILE -jq --arg denom "0.0$BASE_DENOM" '.value."gas-prices" = $denom' $ROLLAPP_IBC_CONF_FILE >"$tmp" && mv "$tmp" $ROLLAPP_IBC_CONF_FILE -jq --arg bech "$BECH32_PREFIX" '.value["account-prefix"] = $bech' "$ROLLAPP_IBC_CONF_FILE" >"$tmp" && mv "$tmp" "$ROLLAPP_IBC_CONF_FILE" +dasel put -f "$ROLLAPP_IBC_CONF_FILE" '.value.key' -v "$RELAYER_KEY_FOR_ROLLAPP" +dasel put -f "$ROLLAPP_IBC_CONF_FILE" '.value.chain-id' -v "$ROLLAPP_CHAIN_ID" +dasel put -f "$ROLLAPP_IBC_CONF_FILE" '.value.account-prefix' -v "$BECH32_PREFIX" +dasel put -f "$ROLLAPP_IBC_CONF_FILE" '.value.rpc-addr' -v "$ROLLAPP_RPC_FOR_RELAYER" +dasel put -f "$ROLLAPP_IBC_CONF_FILE" '.value.gas-prices' -v "1000000000$BASE_DENOM" -jq --arg key "$RELAYER_KEY_FOR_HUB" '.value.key = $key' $HUB_IBC_CONF_FILE >"$tmp" && mv "$tmp" $HUB_IBC_CONF_FILE -jq --arg chain "$SETTLEMENT_CHAIN_ID" '.value."chain-id" = $chain' $HUB_IBC_CONF_FILE >"$tmp" && mv "$tmp" $HUB_IBC_CONF_FILE -jq --arg rpc "$SETTLEMENT_RPC_FOR_RELAYER" '.value."rpc-addr" = $rpc' $HUB_IBC_CONF_FILE >"$tmp" && mv "$tmp" $HUB_IBC_CONF_FILE +dasel put -f "$HUB_IBC_CONF_FILE" '.value.key' -v "$RELAYER_KEY_FOR_HUB" +dasel put -f "$HUB_IBC_CONF_FILE" '.value.chain-id' -v "$SETTLEMENT_CHAIN_ID" +dasel put -f "$HUB_IBC_CONF_FILE" '.value.rpc-addr' -v "$SETTLEMENT_RPC_FOR_RELAYER" rly chains add --file "$ROLLAPP_IBC_CONF_FILE" "$ROLLAPP_CHAIN_ID" rly chains add --file "$HUB_IBC_CONF_FILE" "$SETTLEMENT_CHAIN_ID" @@ -72,54 +97,36 @@ rly chains add --file "$HUB_IBC_CONF_FILE" "$SETTLEMENT_CHAIN_ID" echo -e '--------------------------------- Setting min-loop-duration to 100ms in rly config... --------------------------------' sed -i.bak '/min-loop-duration:/s/.*/ min-loop-duration: 100ms/' "$RLY_CONFIG_FILE" -echo '# -------------------------------- creating keys ------------------------------- #' +echo -e '--------------------------------- Creating keys for rly... --------------------------------' + rly keys add "$ROLLAPP_CHAIN_ID" "$RELAYER_KEY_FOR_ROLLAPP" rly keys add "$SETTLEMENT_CHAIN_ID" "$RELAYER_KEY_FOR_HUB" RLY_HUB_ADDR=$(rly keys show "$SETTLEMENT_CHAIN_ID") -RLY_ROLLAPP_ADDR=$(rly keys show "$ROLLAPP_CHAIN_ID") -echo '# -------------------------------- funding for rly account ------------------------------- #' -DYM_BALANCE=$(${SETTLEMENT_EXECUTABLE} q bank balances ${RLY_HUB_ADDR} -o json | jq -r '.balances[0].amount') +echo '--------------------------------- Funding rly account on hub ['"$RLY_HUB_ADDR"']... --------------------------------' +DYM_BALANCE=$("$SETTLEMENT_EXECUTABLE" q bank balances "$RLY_HUB_ADDR" -o json | jq -r '.balances[0].amount') if [ "$(echo "$DYM_BALANCE >= 100000000000000000000" | bc)" -eq 1 ]; then echo "${RLY_HUB_ADDR} already funded" else - "$SETTLEMENT_EXECUTABLE" tx bank send "$SETTLEMENT_KEY_NAME_GENESIS" "$RLY_HUB_ADDR" 100dym --keyring-backend test --broadcast-mode block --fees 1dym --node "$SETTLEMENT_RPC_FOR_RELAYER" -y + "$SETTLEMENT_EXECUTABLE" tx bank send "$SETTLEMENT_KEY_NAME_GENESIS" "$RLY_HUB_ADDR" 100dym --keyring-backend test --fees 1dym --node "$SETTLEMENT_RPC_FOR_RELAYER" -y || exit 1 fi -RA_BALANCE=$(${EXECUTABLE} q bank balances ${RLY_ROLLAPP_ADDR} -o json | jq -r '.balances[0].amount') +echo '--------------------------------- Creating IBC path... --------------------------------' -if [ "$(echo "$RA_BALANCE >= 100000000000000000000" | bc)" -eq 1 ]; then - echo "${RLY_ROLLAPP_ADDR} already funded" -else - "$EXECUTABLE" tx bank send "$KEY_NAME_ROLLAPP" "$RLY_ROLLAPP_ADDR" 100000000000000000000"$BASE_DENOM" --keyring-backend test --broadcast-mode block -y --fees 4000000000$BASE_DENOM -fi - -echo "# ------------------------------- balance of rly account on hub [$RLY_HUB_ADDR]------------------------------ #" -$SETTLEMENT_EXECUTABLE q bank balances "$(rly keys show "$SETTLEMENT_CHAIN_ID")" -echo "From within the hub node: \n\"$SETTLEMENT_EXECUTABLE tx bank send $SETTLEMENT_KEY_NAME_GENESIS $RLY_HUB_ADDR 100000000000000000000${SETTLEMENT_BASE_DENOM} --keyring-backend test --broadcast-mode block --node $SETTLEMENT_RPC_FOR_RELAYER --chain-id $SETTLEMENT_CHAIN_ID\"" - -echo "# ------------------------------- balance of rly account on rollapp [$RLY_ROLLAPP_ADDR] ------------------------------ #" -$EXECUTABLE q bank balances "$(rly keys show "$ROLLAPP_CHAIN_ID")" --node "$ROLLAPP_RPC_FOR_RELAYER" -echo "From within the rollapp node: \n\"$EXECUTABLE tx bank send $KEY_NAME_ROLLAPP $RLY_ROLLAPP_ADDR 100000000$BASE_DENOM --keyring-backend test --broadcast-mode block\"" - -echo '# -------------------------------- creating IBC link ------------------------------- #' - -rly paths new "$ROLLAPP_CHAIN_ID" "$SETTLEMENT_CHAIN_ID" "$RELAYER_PATH" --src-port "$IBC_PORT" --dst-port "$IBC_PORT" --version "$IBC_VERSION" +rly paths new "$SETTLEMENT_CHAIN_ID" "$ROLLAPP_CHAIN_ID" "$RELAYER_PATH" --src-port "$IBC_PORT" --dst-port "$IBC_PORT" --version "$IBC_VERSION" dasel put -r yaml -f "$RLY_CONFIG_FILE" "chains.$SETTLEMENT_CHAIN_ID.value.http-addr" -v "$HUB_REST_URL"; dasel put -r yaml -f "$RLY_CONFIG_FILE" "chains.$SETTLEMENT_CHAIN_ID.value.is-dym-hub" -v true -t bool; dasel put -r yaml -f "$RLY_CONFIG_FILE" "chains.$ROLLAPP_CHAIN_ID.value.is-dym-rollapp" -v true -t bool; +dasel put -r yaml -f "$RLY_CONFIG_FILE" "chains.$ROLLAPP_CHAIN_ID.value.trust-period" -v "240h"; rly tx link "$RELAYER_PATH" --src-port "$IBC_PORT" --dst-port "$IBC_PORT" --version "$IBC_VERSION" --max-clock-drift 70m -# Channel is currently not created in the tx link since we changed the relayer to support on demand blocks -# Which messed up with channel creation as part of tx link. - -sleep 5 echo '# -------------------------------- IBC channel established ------------------------------- #' echo "Channel Information:" + channel_info=$(rly q channels "$ROLLAPP_CHAIN_ID" | jq '{ "rollapp-channel": .channel_id, "hub-channel": .counterparty.channel_id }') rollapp_channel=$(echo "$channel_info" | jq -r '.["rollapp-channel"]') hub_channel=$(echo "$channel_info" | jq -r '.["hub-channel"]') @@ -128,7 +135,7 @@ echo "$channel_info" echo -e '--------------------------------- Set channel-filter --------------------------------' -if [ -z "$rollapp_channel" ] || [ -z "$hub_channel" ]; then +if [ "$rollapp_channel" = "" ] || [ "$hub_channel" = "" ]; then echo "Both channels must be provided. Something is wrong. Exiting." exit 1 fi @@ -136,8 +143,3 @@ fi sed -i.bak '/rule:/s/.*/ rule: "allowlist"/' "$RLY_CONFIG_FILE" sed -i.bak '/channel-list:/s/.*/ channel-list: ["'"$rollapp_channel"'","'"$hub_channel"'"]/' "$RLY_CONFIG_FILE" echo "Config file updated successfully." - -# --------------------------------- revert empty block time to 1h --------------------------------- # -kill $(pgrep rollapp-wasm) -sed -i '' 's/empty_blocks_max_time = "3s"/empty_blocks_max_time = "3600s"/' ${ROLLAPP_HOME_DIR}/config/dymint.toml -rollapp-wasm start \ No newline at end of file diff --git a/scripts/settlement/register_rollapp_to_hub.sh b/scripts/settlement/register_rollapp_to_hub.sh index 171790a..ca40d51 100644 --- a/scripts/settlement/register_rollapp_to_hub.sh +++ b/scripts/settlement/register_rollapp_to_hub.sh @@ -1,9 +1,30 @@ #!/bin/bash -MAX_SEQUENCERS=1 # this account must be whitelisted on the hub for permissioned deployment setup DEPLOYER=${HUB_PERMISSIONED_KEY-"$HUB_KEY_WITH_FUNDS"} -SEQUENCER_ADDR=$(dymd keys show sequencer --address --keyring-backend test --keyring-dir "$ROLLAPP_HOME_DIR"/sequencer_keys) + +if [ "$EXECUTABLE" = "" ]; then + DEFAULT_EXECUTABLE=$(which dymd) + + if [ "$DEFAULT_EXECUTABLE" = "" ]; then + echo "dymd not found in PATH. Exiting." + exit 1 + fi + echo "EXECUTABLE is not set, using '${DEFAULT_EXECUTABLE}'" + EXECUTABLE=$DEFAULT_SEQUENCER_KEY_PATH +fi + +if [ "$SEQUENCER_KEY_PATH" = "" ]; then + DEFAULT_SEQUENCER_KEY_PATH="${ROLLAPP_HOME_DIR}/sequencer_keys" + echo "SEQUENCER_KEY_PATH is not set, using '${DEFAULT_SEQUENCER_KEY_PATH}'" + SEQUENCER_KEY_PATH=$DEFAULT_SEQUENCER_KEY_PATH +fi + +if [ "$SEQUENCER_KEY_NAME" = "" ]; then + DEFAULT_SEQUENCER_KEY_NAME="sequencer" + echo "SEQUENCER_KEY_PATH is not set, using '${DEFAULT_SEQUENCER_KEY_PATH}'" + SEQUENCER_KEY_NAME=$DEFAULT_SEQUENCER_KEY_NAME +fi if [ "$HUB_RPC_URL" = "" ]; then echo "HUB_RPC_URL is not set, using 'http://localhost:36657'" @@ -15,11 +36,92 @@ if [ "$HUB_CHAIN_ID" = "" ]; then HUB_CHAIN_ID="dymension_100-1" fi +if [ "$ROLLAPP_ALIAS" = "" ]; then + DEFAULT_ALIAS="${ROLLAPP_CHAIN_ID%%_*}" + echo "ROLLAPP_ALIAS is not set, using '$DEFAULT_ALIAS'" + ROLLAPP_ALIAS=$DEFAULT_ALIAS +fi + +if [ "$ROLLAPP_HOME_DIR" = "" ]; then + DEFAULT_ROLLAPP_HOME_DIR=${HOME}/.rollapp_evm + echo "ROLLAPP_ALIAS is not set, using '$DEFAULT_ROLLAPP_HOME_DIR'" + ROLLAPP_HOME_DIR=$DEFAULT_ROLLAPP_HOME_DIR +fi + +if [ "$BECH32_PREFIX" = "" ]; then + echo "BECH32_PREFIX is not set, exiting " + exit 1 +fi + +if [ "$METADATA_PATH" = "" ]; then + DEFAULT_METADATA_PATH="${ROLLAPP_HOME_DIR}/init/rollapp-metadata.json" + echo "METADATA_PATH is not set, using '$DEFAULT_METADATA_PATH" + METADATA_PATH=$DEFAULT_METADATA_PATH + + if [ ! -f "$METADATA_PATH" ]; then + echo "${METADATA_PATH} does not exist, would you like to use a dummy metadata file? (y/n)" + read -r answer + + if [ "$answer" != "${answer#[Yy]}" ]; then + cat < "$METADATA_PATH" +{ + "website": "https://dymension.xyz/", + "description": "This is a description of the Rollapp.", + "logo_data_uri": "data:image/jpeg;base64,/000", + "token_logo_uri": "data:image/jpeg;base64,/000", + "telegram": "https://t.me/example", + "x": "https://x.com/dymension" +} +EOF + else + echo "You can't register a rollapp without rollapp metadata, please create the ${METADATA_PATH} and run the script again" + exit 1 + fi + fi + +fi + +if [ "$NATIVE_DENOM_PATH" = "" ]; then + DEFAULT_NATIVE_DENOM_PATH="${ROLLAPP_HOME_DIR}/init/rollapp-native-denom.json" + echo "NATIVE_DENOM_PATH is not set, using '$DEFAULT_NATIVE_DENOM_PATH" + NATIVE_DENOM_PATH=$DEFAULT_NATIVE_DENOM_PATH + + if [ ! -f "$NATIVE_DENOM_PATH" ]; then + echo "${NATIVE_DENOM_PATH} does not exist, would you like to use a dummy native-denom file? (y/n)" + read -r answer + + if [ "$answer" != "${answer#[Yy]}" ]; then + cat < "$NATIVE_DENOM_PATH" +{ + "display": "DEN", + "base": "aden", + "exponent": 18 +} +EOF + else + echo "You can't register a rollapp without a native denom, please create the ${NATIVE_DENOM_PATH} and run the script again" + exit 1 + fi + fi + +fi + +GENESIS_PATH="${ROLLAPP_HOME_DIR}/config/genesis.json" +GENESIS_HASH=$(sha256sum "$GENESIS_PATH" | awk '{print $1}' | sed 's/[[:space:]]*$//') +SEQUENCER_ADDR=$(dymd keys show "$SEQUENCER_KEY_NAME" --address --keyring-backend test --keyring-dir "$SEQUENCER_KEY_PATH") + +echo "deployer" $DEPLOYER; + set -x -dymd tx rollapp create-rollapp "$ROLLAPP_CHAIN_ID" "$MAX_SEQUENCERS" "{\"Addresses\":[\"${SEQUENCER_ADDR}\"]}" \ - "$ROLLAPP_HOME_DIR"/init/denommetadata.json \ - --genesis-accounts-path "$ROLLAPP_HOME_DIR"/init/genesis_accounts.json \ +"$SETTLEMENT_EXECUTABLE" tx rollapp create-rollapp "$ROLLAPP_CHAIN_ID" "$ROLLAPP_ALIAS" WASM \ + --bech32-prefix "$BECH32_PREFIX" \ + --init-sequencer "$SEQUENCER_ADDR" \ + --genesis-checksum "$GENESIS_HASH" \ + --metadata "$METADATA_PATH" \ + --native-denom "$NATIVE_DENOM_PATH" \ + --initial-supply 1 \ --from "$DEPLOYER" \ - --keyring-backend test --broadcast-mode block \ + --keyring-backend test \ + --gas auto --gas-adjustment 1.2 \ --fees 1dym set +x diff --git a/scripts/settlement/register_sequencer_to_hub.sh b/scripts/settlement/register_sequencer_to_hub.sh index 64e36ed..24046c5 100644 --- a/scripts/settlement/register_sequencer_to_hub.sh +++ b/scripts/settlement/register_sequencer_to_hub.sh @@ -1,17 +1,106 @@ #!/bin/bash -KEYRING_PATH="$HOME/.rollapp/sequencer_keys" -KEY_NAME_SEQUENCER="sequencer" + +if [ "$SETTLEMENT_EXECUTABLE" = "" ]; then + DEFAULT_SETTLEMENT_EXECUTABLE=$(which dymd) + echo "SETTLEMENT_EXECUTABLE is not set, using '${SETTLEMENT_EXECUTABLE}'" + SETTLEMENT_EXECUTABLE=$DEFAULT_SETTLEMENT_EXECUTABLE + + if [ "$SETTLEMENT_EXECUTABLE" = "" ]; then + echo "dymension binary not found in PATH. Exiting." + exit 1 + fi +fi + +if [ "$ROLLAPP_EXECUTABLE" = "" ]; then + DEFAULT_ROLLAPP_EXECUTABLE=$(which rollapp-wasm) + echo "ROLLAPP_EXECUTABLE is not set, using '${DEFAULT_ROLLAPP_EXECUTABLE}'" + ROLLAPP_EXECUTABLE=$DEFAULT_ROLLAPP_EXECUTABLE + + if [ "$ROLLAPP_EXECUTABLE" = "" ]; then + echo "rollapp binary not found in PATH. Exiting." + exit 1 + fi +fi + +if [ "$SEQUENCER_KEY_PATH" = "" ]; then + DEFAULT_SEQUENCER_KEY_PATH="${ROLLAPP_HOME_DIR}/sequencer_keys" + echo "SEQUENCER_KEY_PATH is not set, using '${DEFAULT_SEQUENCER_KEY_PATH}'" + SEQUENCER_KEY_PATH=$DEFAULT_SEQUENCER_KEY_PATH +fi + +if [ "$SEQUENCER_KEY_NAME" = "" ]; then + DEFAULT_SEQUENCER_KEY_NAME="sequencer" + echo "SEQUENCER_KEY_PATH is not set, using '${DEFAULT_SEQUENCER_KEY_PATH}'" + SEQUENCER_KEY_NAME=$DEFAULT_SEQUENCER_KEY_NAME +fi #Register Sequencer -DESCRIPTION="{\"Moniker\":\"${ROLLAPP_CHAIN_ID}-sequencer\",\"Identity\":\"\",\"Website\":\"\",\"SecurityContact\":\"\",\"Details\":\"\"}" -SEQ_PUB_KEY="$("$EXECUTABLE" dymint show-sequencer)" -BOND_AMOUNT="$(dymd q sequencer params -o json --node "$HUB_RPC_URL" | jq -r '.params.min_bond.amount')$(dymd q sequencer params -o json --node "$HUB_RPC_URL" | jq -r '.params.min_bond.denom')" +# DESCRIPTION="{\"Moniker\":\"${ROLLAPP_CHAIN_ID}-sequencer\",\"Identity\":\"\",\"Website\":\"\",\"SecurityContact\":\"\",\"Details\":\"\"}" +SEQ_PUB_KEY="$("$ROLLAPP_EXECUTABLE" dymint show-sequencer)" +BOND_AMOUNT="$("$SETTLEMENT_EXECUTABLE" q sequencer params -o json --node "$HUB_RPC_URL" | jq -r '.params.min_bond.amount')$("$SETTLEMENT_EXECUTABLE" q sequencer params -o json --node "$HUB_RPC_URL" | jq -r '.params.min_bond.denom')" + +echo "$BOND_AMOUNT" + +if [ "$METADATA_PATH" = "" ]; then + DEFAULT_METADATA_PATH="${ROLLAPP_HOME_DIR}/init/sequencer-metadata.json" + echo "METADATA_PATH is not set, using '$DEFAULT_METADATA_PATH" + METADATA_PATH=$DEFAULT_METADATA_PATH + + if [ ! -f "$METADATA_PATH" ]; then + echo "${METADATA_PATH} does not exist, would you like to use a dummy metadata file? (y/n)" + read -r answer + if [ "$answer" != "${answer#[Yy]}" ]; then + cat < "$METADATA_PATH" +{ + "moniker": "Sample Moniker", + "details": "Some details about the sequencer", + "p2p_seeds": [ + "seed1.example.com:26656", + "seed2.example.com:26656" + ], + "rpcs": [ + "http://rpc1.example.com:26657", + "http://rpc2.example.com:26657" + ], + "rest_api_urls": ["http://restapi.example.com"], + "explorer_url": "http://explorer.example.com", + "genesis_urls": [ + "http://genesis1.example.com", + "http://genesis2.example.com" + ], + "contact_details": { + "website": "http://website.example.com", + "telegram": "https://t.me/example", + "x": "https://twitter.com/example" + }, + "extra_data": "RXh0cmEgZGF0YSBzYW1wbGU=", + "snapshots": [ + { + "snapshot_url": "http://snapshot1.example.com", + "height": 123456, + "checksum": "d41d8cd98f00b204e9800998ecf8427e" + }, + { + "snapshot_url": "http://snapshot2.example.com", + "height": 789012, + "checksum": "e2fc714c4727ee9395f324cd2e7f331f" + } + ], + "gas_price": "1000000" +} +EOF + else + echo "You can't register a sequencer without sequencer metadata, please create the ${METADATA_PATH} and run the script again" + exit 1 + fi + fi +fi set -x -dymd tx sequencer create-sequencer "$SEQ_PUB_KEY" "$ROLLAPP_CHAIN_ID" "$BOND_AMOUNT" "$METADATA_PATH"\ +"$SETTLEMENT_EXECUTABLE" tx sequencer create-sequencer "$SEQ_PUB_KEY" "$ROLLAPP_CHAIN_ID" "$BOND_AMOUNT" "$METADATA_PATH"\ --from "$SEQUENCER_KEY_NAME" \ - --keyring-dir "$KEYRING_PATH" \ + --keyring-dir "$SEQUENCER_KEY_PATH" \ --keyring-backend test \ --fees 1dym \ --gas auto --gas-adjustment 1.2 From 5e61681b302215910ceed91718e483c8585feefc Mon Sep 17 00:00:00 2001 From: zale144 Date: Fri, 13 Sep 2024 17:23:45 +0200 Subject: [PATCH 2/5] Simplify is IBC relayer msg check --- app/bypass_ibc_fee_decorator.go | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/app/bypass_ibc_fee_decorator.go b/app/bypass_ibc_fee_decorator.go index 505d539..0f4e214 100644 --- a/app/bypass_ibc_fee_decorator.go +++ b/app/bypass_ibc_fee_decorator.go @@ -33,34 +33,28 @@ func (n BypassIBCFeeDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate b // isIBCRelayerMsg checks if all the messages in the transaction are IBC relayer messages func isIBCRelayerMsg(msgs []sdk.Msg) bool { - isIBCRelayer := false - for _, msg := range msgs { switch msg.(type) { // IBC Client Messages case *clienttypes.MsgCreateClient, *clienttypes.MsgUpdateClient, *clienttypes.MsgUpgradeClient, *clienttypes.MsgSubmitMisbehaviour: - isIBCRelayer = true // IBC Connection Messages case *conntypes.MsgConnectionOpenInit, *conntypes.MsgConnectionOpenTry, *conntypes.MsgConnectionOpenAck, *conntypes.MsgConnectionOpenConfirm: - isIBCRelayer = true // IBC Channel Messages case *channeltypes.MsgChannelOpenInit, *channeltypes.MsgChannelOpenTry, *channeltypes.MsgChannelOpenAck, *channeltypes.MsgChannelOpenConfirm, *channeltypes.MsgChannelCloseInit, *channeltypes.MsgChannelCloseConfirm: - isIBCRelayer = true // IBC Packet Messages case *channeltypes.MsgRecvPacket, *channeltypes.MsgAcknowledgement, *channeltypes.MsgTimeout, *channeltypes.MsgTimeoutOnClose: - isIBCRelayer = true default: return false } } - return isIBCRelayer + return true } From cc249273f31b839a92bb9556aa5dc69f9680845f Mon Sep 17 00:00:00 2001 From: zale144 Date: Fri, 13 Sep 2024 18:48:49 +0200 Subject: [PATCH 3/5] Fix scripts --- README.md | 3 ++- scripts/ibc/hub.json | 4 ++-- scripts/ibc/setup_ibc.sh | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index a4323f8..5a0e926 100644 --- a/README.md +++ b/README.md @@ -106,7 +106,7 @@ export HUB_RPC_ENDPOINT="http://localhost" export HUB_RPC_PORT="36657" # default: 36657 export HUB_RPC_URL="${HUB_RPC_ENDPOINT}:${HUB_RPC_PORT}" export HUB_CHAIN_ID="dymension_100-1" -export HUB_REST_URL="localhost:1318" # required for relayer +export HUB_REST_URL="http://localhost:1318" # required for relayer dymd config chain-id ${HUB_CHAIN_ID} dymd config node ${HUB_RPC_URL} @@ -178,6 +178,7 @@ dasel put -f "${ROLLAPP_HOME_DIR}"/config/dymint.toml "node_address" -v "$HUB_RP dasel put -f "${ROLLAPP_HOME_DIR}"/config/dymint.toml "rollapp_id" -v "$ROLLAPP_CHAIN_ID" dasel put -f "${ROLLAPP_HOME_DIR}"/config/dymint.toml "max_idle_time" -v "2s" dasel put -f "${ROLLAPP_HOME_DIR}"/config/dymint.toml "max_proof_time" -v "1s" +dasel put -f "${ROLLAPP_HOME_DIR}"/config/dymint.toml "batch_submit_time" -v "10s" dasel put -f "${ROLLAPP_HOME_DIR}"/config/app.toml "minimum-gas-prices" -v "1awsm" ``` diff --git a/scripts/ibc/hub.json b/scripts/ibc/hub.json index 8ac9769..aad2d1b 100644 --- a/scripts/ibc/hub.json +++ b/scripts/ibc/hub.json @@ -3,11 +3,11 @@ "value": { "key": "relayer-hub-key", "chain-id": "dymension_100-1", - "rpc-addr": "tcp://0.0.0.0:36657", + "rpc-addr": "http://localhost:36657", "account-prefix": "dym", "keyring-backend": "test", "gas-adjustment": 1.2, - "gas-prices": "0.25adym", + "gas-prices": "1000000000adym", "debug": true, "timeout": "10s", "output-format": "json", diff --git a/scripts/ibc/setup_ibc.sh b/scripts/ibc/setup_ibc.sh index 35aee6b..9d97e21 100644 --- a/scripts/ibc/setup_ibc.sh +++ b/scripts/ibc/setup_ibc.sh @@ -120,7 +120,7 @@ rly paths new "$SETTLEMENT_CHAIN_ID" "$ROLLAPP_CHAIN_ID" "$RELAYER_PATH" --src-p dasel put -r yaml -f "$RLY_CONFIG_FILE" "chains.$SETTLEMENT_CHAIN_ID.value.http-addr" -v "$HUB_REST_URL"; dasel put -r yaml -f "$RLY_CONFIG_FILE" "chains.$SETTLEMENT_CHAIN_ID.value.is-dym-hub" -v true -t bool; dasel put -r yaml -f "$RLY_CONFIG_FILE" "chains.$ROLLAPP_CHAIN_ID.value.is-dym-rollapp" -v true -t bool; -dasel put -r yaml -f "$RLY_CONFIG_FILE" "chains.$ROLLAPP_CHAIN_ID.value.trust-period" -v "240h"; +dasel put -r yaml -f "$RLY_CONFIG_FILE" "chains.$ROLLAPP_CHAIN_ID.value.trust-period" -v "240h"; # 10 days rly tx link "$RELAYER_PATH" --src-port "$IBC_PORT" --dst-port "$IBC_PORT" --version "$IBC_VERSION" --max-clock-drift 70m From 30882432710f0c755e61e1cacfb105f0d5e1bace Mon Sep 17 00:00:00 2001 From: zale144 Date: Fri, 13 Sep 2024 18:58:00 +0200 Subject: [PATCH 4/5] Fix linter --- app/create_account_decorator.go | 3 ++- app/sigcheck_decorator.go | 11 ++++++----- scripts/ibc/setup_ibc.sh | 1 - x/callback/keeper/callback.go | 1 + x/cwerrors/keeper/subscriptions.go | 1 + 5 files changed, 10 insertions(+), 7 deletions(-) diff --git a/app/create_account_decorator.go b/app/create_account_decorator.go index 681bdf3..82f3160 100644 --- a/app/create_account_decorator.go +++ b/app/create_account_decorator.go @@ -1,6 +1,7 @@ package app import ( + errorsmod "cosmossdk.io/errors" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" authante "github.com/cosmos/cosmos-sdk/x/auth/ante" @@ -30,7 +31,7 @@ func CtxKeyNewAccount(acc string) string { func (cad createAccountDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, next sdk.AnteHandler) (sdk.Context, error) { sigTx, ok := tx.(authsigning.SigVerifiableTx) if !ok { - return ctx, sdkerrors.Wrap(sdkerrors.ErrTxDecode, "invalid tx type") + return ctx, errorsmod.Wrap(sdkerrors.ErrTxDecode, "invalid tx type") } pubkeys, err := sigTx.GetPubKeys() diff --git a/app/sigcheck_decorator.go b/app/sigcheck_decorator.go index bfcc4ae..92f1321 100644 --- a/app/sigcheck_decorator.go +++ b/app/sigcheck_decorator.go @@ -3,6 +3,7 @@ package app import ( "fmt" + errorsmod "cosmossdk.io/errors" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" authante "github.com/cosmos/cosmos-sdk/x/auth/ante" @@ -23,7 +24,7 @@ func NewSigCheckDecorator(ak accountKeeper, signModeHandler authsigning.SignMode func (svd sigCheckDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, next sdk.AnteHandler) (newCtx sdk.Context, err error) { sigTx, ok := tx.(authsigning.SigVerifiableTx) if !ok { - return ctx, sdkerrors.Wrap(sdkerrors.ErrTxDecode, "invalid transaction type") + return ctx, errorsmod.Wrap(sdkerrors.ErrTxDecode, "invalid transaction type") } // stdSigs contains the sequence number, account number, and signatures. @@ -37,7 +38,7 @@ func (svd sigCheckDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate boo // check that signer length and signature length are the same if len(sigs) != len(signerAddrs) { - return ctx, sdkerrors.Wrapf(sdkerrors.ErrUnauthorized, "invalid number of signer; expected: %d, got %d", len(signerAddrs), len(sigs)) + return ctx, errorsmod.Wrapf(sdkerrors.ErrUnauthorized, "invalid number of signer; expected: %d, got %d", len(signerAddrs), len(sigs)) } ibcRelayerMsg := isIBCRelayerMsg(tx.GetMsgs()) @@ -51,12 +52,12 @@ func (svd sigCheckDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate boo // retrieve pubkey pubKey := acc.GetPubKey() if !simulate && pubKey == nil { - return ctx, sdkerrors.Wrap(sdkerrors.ErrInvalidPubKey, "pubkey on account is not set") + return ctx, errorsmod.Wrap(sdkerrors.ErrInvalidPubKey, "pubkey on account is not set") } // Check account sequence number. if sig.Sequence != acc.GetSequence() { - return ctx, sdkerrors.Wrapf( + return ctx, errorsmod.Wrapf( sdkerrors.ErrWrongSequence, "account sequence mismatch, expected %d, got %d", acc.GetSequence(), sig.Sequence, ) @@ -95,7 +96,7 @@ func (svd sigCheckDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate boo } else { errMsg = fmt.Sprintf("signature verification failed; please verify account number (%d) and chain-id (%s)", accNum, chainID) } - return ctx, sdkerrors.Wrap(sdkerrors.ErrUnauthorized, errMsg) + return ctx, errorsmod.Wrap(sdkerrors.ErrUnauthorized, errMsg) } } diff --git a/scripts/ibc/setup_ibc.sh b/scripts/ibc/setup_ibc.sh index 9d97e21..5f60b46 100644 --- a/scripts/ibc/setup_ibc.sh +++ b/scripts/ibc/setup_ibc.sh @@ -120,7 +120,6 @@ rly paths new "$SETTLEMENT_CHAIN_ID" "$ROLLAPP_CHAIN_ID" "$RELAYER_PATH" --src-p dasel put -r yaml -f "$RLY_CONFIG_FILE" "chains.$SETTLEMENT_CHAIN_ID.value.http-addr" -v "$HUB_REST_URL"; dasel put -r yaml -f "$RLY_CONFIG_FILE" "chains.$SETTLEMENT_CHAIN_ID.value.is-dym-hub" -v true -t bool; dasel put -r yaml -f "$RLY_CONFIG_FILE" "chains.$ROLLAPP_CHAIN_ID.value.is-dym-rollapp" -v true -t bool; -dasel put -r yaml -f "$RLY_CONFIG_FILE" "chains.$ROLLAPP_CHAIN_ID.value.trust-period" -v "240h"; # 10 days rly tx link "$RELAYER_PATH" --src-port "$IBC_PORT" --dst-port "$IBC_PORT" --version "$IBC_VERSION" --max-clock-drift 70m diff --git a/x/callback/keeper/callback.go b/x/callback/keeper/callback.go index e0c89a1..80198b3 100644 --- a/x/callback/keeper/callback.go +++ b/x/callback/keeper/callback.go @@ -127,6 +127,7 @@ func (k Keeper) SaveCallback(ctx sdk.Context, callback types.Callback) error { return k.Callbacks.Set(ctx, collections.Join3(callback.CallbackHeight, contractAddress.Bytes(), callback.JobId), callback) } +// nolint: gosimple func isAuthorizedToModify(ctx sdk.Context, k Keeper, contractAddress sdk.AccAddress, sender string) bool { if k.bankKeeper.BlockedAddr(sdk.MustAccAddressFromBech32(sender)) { // Blocked addresses cannot create/delete callbacks as we cant refund to these addresses. And they are module accounts anyway return false diff --git a/x/cwerrors/keeper/subscriptions.go b/x/cwerrors/keeper/subscriptions.go index 0a232cf..2e182c4 100644 --- a/x/cwerrors/keeper/subscriptions.go +++ b/x/cwerrors/keeper/subscriptions.go @@ -79,6 +79,7 @@ func (k Keeper) PruneSubscriptionsEndBlock(ctx sdk.Context) (err error) { return k.SubscriptionEndBlock.Clear(ctx, rng) } +// nolint: gosimple // isAuthorizedToSubscribe checks if the sender is authorized to subscribe to the contract func isAuthorizedToSubscribe(ctx sdk.Context, k Keeper, contractAddress sdk.AccAddress, sender string) bool { if strings.EqualFold(sender, contractAddress.String()) { // A contract can set subscriptions for itself From 3aa29a068de21257fd9f0d145cc796f4e010feeb Mon Sep 17 00:00:00 2001 From: omritoptix Date: Sat, 14 Sep 2024 13:39:31 +0200 Subject: [PATCH 5/5] Removed ineffectual assignment. --- app/create_account_decorator.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/create_account_decorator.go b/app/create_account_decorator.go index 82f3160..8e0f43f 100644 --- a/app/create_account_decorator.go +++ b/app/create_account_decorator.go @@ -46,13 +46,13 @@ func (cad createAccountDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulat continue } - acc, err := authante.GetSignerAcc(ctx, cad.ak, sigTx.GetSigners()[i]) + _, err := authante.GetSignerAcc(ctx, cad.ak, sigTx.GetSigners()[i]) if err != nil { // ======= HACK ========================= // for IBC relayer messages, create an account if it doesn't exist if ibcRelayerMsg { address := sdk.AccAddress(pk.Address()) - acc = cad.ak.NewAccountWithAddress(ctx, address) + acc := cad.ak.NewAccountWithAddress(ctx, address) // inject the new account flag into the context, in order to signal // the account creation to the subsequent decorators (sigchecker) ctx = ctx.WithValue(CtxKeyNewAccount(address.String()), struct{}{})