From e93afab79953e7896178bace755e226505ec2268 Mon Sep 17 00:00:00 2001 From: Luke Ma <867273263@qq.com> Date: Wed, 21 Feb 2024 16:36:29 +0800 Subject: [PATCH] feat: Add Whitelist ERC20 Cli. (#1425) * feat: add whitelist erc20 cli * chore: modify comment * docs: add cli docs * fix lint * update cli docs * remove ValidateBasic in cli * update cli docs * remove irrelevant changes * remove irrelevant changes * Update changelog.md * rename cli * update cli docs * update cli docs * rename cli func * Update x/crosschain/client/cli/cli_whitelist_erc20.go Co-authored-by: Tanmay * generate cli docs * fix the integer overflow warning from cosmos-sec * update changelog * make generate * make generate * update changelog * fix generated file error * fix generated file error --------- Co-authored-by: Lucas Bertrand Co-authored-by: Tanmay --- changelog.md | 4 ++ docs/cli/zetacored/zetacored_tx_crosschain.md | 1 + ...zetacored_tx_crosschain_whitelist-erc20.md | 52 +++++++++++++++ .../client/cli/cli_whitelist_erc20.go | 64 +++++++++++++++++++ x/crosschain/client/cli/tx.go | 1 + x/crosschain/types/tx.pb.go | 4 +- 6 files changed, 124 insertions(+), 2 deletions(-) create mode 100644 docs/cli/zetacored/zetacored_tx_crosschain_whitelist-erc20.md create mode 100644 x/crosschain/client/cli/cli_whitelist_erc20.go diff --git a/changelog.md b/changelog.md index eb21024494..4e522f369d 100644 --- a/changelog.md +++ b/changelog.md @@ -51,6 +51,10 @@ * Made adjustments to the docker-compose for launching mainnet full nodes to include examples of using the docker images build from the docker image build pipeline. * [1736](https://github.com/zeta-chain/node/pull/1736) - chore: add Ethermint endpoints to OpenAPI +### Features + +* [1425](https://github.com/zeta-chain/node/pull/1425) add `whitelist-erc20` command + ### Chores * [1729](https://github.com/zeta-chain/node/pull/1729) - add issue templates diff --git a/docs/cli/zetacored/zetacored_tx_crosschain.md b/docs/cli/zetacored/zetacored_tx_crosschain.md index 8b66894327..5e61146b17 100644 --- a/docs/cli/zetacored/zetacored_tx_crosschain.md +++ b/docs/cli/zetacored/zetacored_tx_crosschain.md @@ -37,4 +37,5 @@ zetacored tx crosschain [flags] * [zetacored tx crosschain refund-aborted](zetacored_tx_crosschain_refund-aborted.md) - Refund an aborted tx , the refund address is optional, if not provided, the refund will be sent to the sender/tx origin of the cctx. * [zetacored tx crosschain remove-from-out-tx-tracker](zetacored_tx_crosschain_remove-from-out-tx-tracker.md) - Remove a out-tx-tracker * [zetacored tx crosschain update-tss-address](zetacored_tx_crosschain_update-tss-address.md) - Create a new TSSVoter +* [zetacored tx crosschain whitelist-erc20](zetacored_tx_crosschain_whitelist-erc20.md) - Add a new erc20 token to whitelist diff --git a/docs/cli/zetacored/zetacored_tx_crosschain_whitelist-erc20.md b/docs/cli/zetacored/zetacored_tx_crosschain_whitelist-erc20.md new file mode 100644 index 0000000000..0c4da0b9e7 --- /dev/null +++ b/docs/cli/zetacored/zetacored_tx_crosschain_whitelist-erc20.md @@ -0,0 +1,52 @@ +# tx crosschain whitelist-erc20 + +Add a new erc20 token to whitelist + +``` +zetacored tx crosschain whitelist-erc20 [erc20Address] [chainID] [name] [symbol] [decimals] [gasLimit] [flags] +``` + +### Options + +``` + -a, --account-number uint The account number of the signing account (offline mode only) + --aux Generate aux signer data instead of sending a tx + -b, --broadcast-mode string Transaction broadcasting mode (sync|async|block) + --dry-run ignore the --gas flag and perform a simulation of a transaction, but don't broadcast it (when enabled, the local Keybase is not accessible) + --fee-granter string Fee granter grants fees for the transaction + --fee-payer string Fee payer pays fees for the transaction instead of deducting from the signer + --fees string Fees to pay along with transaction; eg: 10uatom + --from string Name or address of private key with which to sign + --gas string gas limit to set per-transaction; set to "auto" to calculate sufficient gas automatically. Note: "auto" option doesn't always report accurate results. Set a valid coin value to adjust the result. Can be used instead of "fees". (default 200000) + --gas-adjustment float adjustment factor to be multiplied against the estimate returned by the tx simulation; if the gas limit is set manually this flag is ignored (default 1) + --gas-prices string Gas prices in decimal format to determine the transaction fee (e.g. 0.1uatom) + --generate-only Build an unsigned transaction and write it to STDOUT (when enabled, the local Keybase only accessed when providing a key name) + -h, --help help for whitelist-erc20 + --keyring-backend string Select keyring's backend (os|file|kwallet|pass|test|memory) + --keyring-dir string The client Keyring directory; if omitted, the default 'home' directory will be used + --ledger Use a connected Ledger device + --node string [host]:[port] to tendermint rpc interface for this chain + --note string Note to add a description to the transaction (previously --memo) + --offline Offline mode (does not allow any online functionality) + -o, --output string Output format (text|json) + -s, --sequence uint The sequence number of the signing account (offline mode only) + --sign-mode string Choose sign mode (direct|amino-json|direct-aux), this is an advanced feature + --timeout-height uint Set a block timeout height to prevent the tx from being committed past a certain height + --tip string Tip is the amount that is going to be transferred to the fee payer on the target chain. This flag is only valid when used with --aux, and is ignored if the target chain didn't enable the TipDecorator + -y, --yes Skip tx broadcasting prompt confirmation +``` + +### Options inherited from parent commands + +``` + --chain-id string The network chain ID + --home string directory for config and data + --log_format string The logging format (json|plain) + --log_level string The logging level (trace|debug|info|warn|error|fatal|panic) + --trace print out full stack trace on errors +``` + +### SEE ALSO + +* [zetacored tx crosschain](zetacored_tx_crosschain.md) - crosschain transactions subcommands + diff --git a/x/crosschain/client/cli/cli_whitelist_erc20.go b/x/crosschain/client/cli/cli_whitelist_erc20.go new file mode 100644 index 0000000000..2f3af566d5 --- /dev/null +++ b/x/crosschain/client/cli/cli_whitelist_erc20.go @@ -0,0 +1,64 @@ +package cli + +import ( + "fmt" + "strconv" + + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/client/flags" + "github.com/cosmos/cosmos-sdk/client/tx" + "github.com/spf13/cobra" + "github.com/zeta-chain/zetacore/x/crosschain/types" +) + +func CmdWhitelistERC20() *cobra.Command { + cmd := &cobra.Command{ + Use: "whitelist-erc20 [erc20Address] [chainID] [name] [symbol] [decimals] [gasLimit]", + Short: "Add a new erc20 token to whitelist", + Args: cobra.ExactArgs(6), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + + erc20Address := args[0] + chainID, err := strconv.ParseInt(args[1], 10, 64) + if err != nil { + return err + } + + name := args[2] + symbol := args[3] + decimals, err := strconv.ParseUint(args[4], 10, 32) + if err != nil { + return err + } + if decimals > 128 { + return fmt.Errorf("decimals must be less than 128") + } + + gasLimit, err := strconv.ParseInt(args[5], 10, 64) + if err != nil { + return err + } + + msg := types.NewMsgWhitelistERC20( + clientCtx.GetFromAddress().String(), + erc20Address, + chainID, + name, + symbol, + // #nosec G701 always in range + uint32(decimals), + gasLimit, + ) + + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + }, + } + + flags.AddTxFlagsToCmd(cmd) + + return cmd +} diff --git a/x/crosschain/client/cli/tx.go b/x/crosschain/client/cli/tx.go index f5668fae44..bb9831fb31 100644 --- a/x/crosschain/client/cli/tx.go +++ b/x/crosschain/client/cli/tx.go @@ -30,6 +30,7 @@ func GetTxCmd() *cobra.Command { CmdUpdateTss(), CmdMigrateTssFunds(), CmdAddToInTxTracker(), + CmdWhitelistERC20(), CmdAbortStuckCCTX(), CmdRefundAborted(), ) diff --git a/x/crosschain/types/tx.pb.go b/x/crosschain/types/tx.pb.go index 650ef991dd..054713350d 100644 --- a/x/crosschain/types/tx.pb.go +++ b/x/crosschain/types/tx.pb.go @@ -1088,9 +1088,9 @@ type MsgVoteOnObservedInboundTx struct { SenderChainId int64 `protobuf:"varint,3,opt,name=sender_chain_id,json=senderChainId,proto3" json:"sender_chain_id,omitempty"` Receiver string `protobuf:"bytes,4,opt,name=receiver,proto3" json:"receiver,omitempty"` ReceiverChain int64 `protobuf:"varint,5,opt,name=receiver_chain,json=receiverChain,proto3" json:"receiver_chain,omitempty"` - // string zeta_burnt = 6; + // string zeta_burnt = 6; Amount github_com_cosmos_cosmos_sdk_types.Uint `protobuf:"bytes,6,opt,name=amount,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Uint" json:"amount"` - // string mMint = 7; + // string mMint = 7; Message string `protobuf:"bytes,8,opt,name=message,proto3" json:"message,omitempty"` InTxHash string `protobuf:"bytes,9,opt,name=in_tx_hash,json=inTxHash,proto3" json:"in_tx_hash,omitempty"` InBlockHeight uint64 `protobuf:"varint,10,opt,name=in_block_height,json=inBlockHeight,proto3" json:"in_block_height,omitempty"`