Skip to content

Commit

Permalink
add block height arg to NewMsgFinalizeTokenDeposit (#88)
Browse files Browse the repository at this point in the history
* add block height arg to NewMsgFinalizeTokenDeposit

* fix error message
  • Loading branch information
sh-cha authored Jul 1, 2024
1 parent a4b8921 commit 6c6b398
Show file tree
Hide file tree
Showing 5 changed files with 46 additions and 25 deletions.
22 changes: 14 additions & 8 deletions x/opchild/client/cli/tx.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,8 @@ func GetTxCmd(ac address.Codec) *cobra.Command {
// NewDepositCmd returns a CLI command handler for the transaction sending a deposit to an user account.
func NewDepositCmd(ac address.Codec) *cobra.Command {
cmd := &cobra.Command{
Use: "deposit [sequence] [from_l1] [to_l2] [amount] [base_denom]",
Args: cobra.ExactArgs(5),
Use: "deposit [sequence] [height] [from_l1] [to_l2] [amount] [base_denom]",
Args: cobra.ExactArgs(6),
Short: "send a deposit to an user account",
RunE: func(cmd *cobra.Command, args []string) error {
clientCtx, err := client.GetClientTxContext(cmd)
Expand All @@ -66,29 +66,34 @@ func NewDepositCmd(ac address.Codec) *cobra.Command {
return err
}

from, err := ac.StringToBytes(args[1])
height, err := strconv.ParseUint(args[1], 10, 64)
if err != nil {
return err
}
to, err := ac.StringToBytes(args[2])

from, err := ac.StringToBytes(args[2])
if err != nil {
return err
}
to, err := ac.StringToBytes(args[3])
if err != nil {
return err
}

amount, err := sdk.ParseCoinNormalized(args[3])
amount, err := sdk.ParseCoinNormalized(args[4])
if err != nil {
return err
}

baseDenom := args[4]
baseDenom := args[5]

hookMsg, err := cmd.Flags().GetString(FlagHookMsg)
if err != nil {
return err
}

txf, msg, err := newBuildDepositMsg(
clientCtx, ac, txf, sequence,
clientCtx, ac, txf, sequence, height,
from, to, amount, baseDenom,
[]byte(hookMsg),
)
Expand Down Expand Up @@ -381,6 +386,7 @@ func newBuildDepositMsg(
ac address.Codec,
txf tx.Factory,
sequence uint64,
height uint64,
from, to sdk.AccAddress,
amount sdk.Coin,
baseDenom string,
Expand All @@ -402,7 +408,7 @@ func newBuildDepositMsg(
return txf, nil, err
}

msg := types.NewMsgFinalizeTokenDeposit(senderAddr, fromAddr, toAddr, amount, sequence, baseDenom, hookMsg)
msg := types.NewMsgFinalizeTokenDeposit(senderAddr, fromAddr, toAddr, amount, sequence, height, baseDenom, hookMsg)
if err := msg.Validate(ac); err != nil {
return txf, nil, err
}
Expand Down
8 changes: 8 additions & 0 deletions x/opchild/client/cli/tx_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,7 @@ func (s *CLITestSuite) TestNewDepositCmd() {
{
"invalid transaction (invalid from_l1)",
[]string{
"1",
"1",
"_invalid_acc_",
s.addrs[0].String(),
Expand All @@ -185,6 +186,7 @@ func (s *CLITestSuite) TestNewDepositCmd() {
"invalid transaction (invalid to_l2)",
[]string{
s.addrs[0].String(),
"1",
"_invalid_acc_",
"1",
"100umin",
Expand All @@ -200,6 +202,7 @@ func (s *CLITestSuite) TestNewDepositCmd() {
"invalid transaction (invalid sequence)",
[]string{
"-1",
"1",
s.addrs[0].String(),
s.addrs[1].String(),
"100umin",
Expand All @@ -214,6 +217,7 @@ func (s *CLITestSuite) TestNewDepositCmd() {
{
"invalid transaction (invalid amount)",
[]string{
"1",
"1",
s.addrs[0].String(),
s.addrs[1].String(),
Expand All @@ -229,6 +233,7 @@ func (s *CLITestSuite) TestNewDepositCmd() {
{
"invalid transaction (invalid base_denom)",
[]string{
"1",
"1",
s.addrs[0].String(),
s.addrs[1].String(),
Expand All @@ -244,6 +249,7 @@ func (s *CLITestSuite) TestNewDepositCmd() {
{
"valid transaction without hook msg",
[]string{
"1",
"1",
s.addrs[0].String(),
s.addrs[1].String(),
Expand All @@ -259,6 +265,7 @@ func (s *CLITestSuite) TestNewDepositCmd() {
{
"valid transaction with valid hook msg",
[]string{
"1",
"1",
s.addrs[0].String(),
s.addrs[1].String(),
Expand All @@ -275,6 +282,7 @@ func (s *CLITestSuite) TestNewDepositCmd() {
{
"valid transaction with invalid hook msg",
[]string{
"1",
"1",
s.addrs[0].String(),
s.addrs[1].String(),
Expand Down
12 changes: 6 additions & 6 deletions x/opchild/keeper/msg_server_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -299,7 +299,7 @@ func Test_MsgServer_Withdraw(t *testing.T) {
baseDenom := "test_token"
denom := ophosttypes.L2Denom(1, baseDenom)

_, err = ms.FinalizeTokenDeposit(ctx, types.NewMsgFinalizeTokenDeposit(addrsStr[0], addrsStr[1], addrsStr[1], sdk.NewCoin(denom, math.NewInt(100)), 1, "test_token", nil))
_, err = ms.FinalizeTokenDeposit(ctx, types.NewMsgFinalizeTokenDeposit(addrsStr[0], addrsStr[1], addrsStr[1], sdk.NewCoin(denom, math.NewInt(100)), 1, 1, "test_token", nil))
require.NoError(t, err)

coins := sdk.NewCoins(sdk.NewCoin("foo", math.NewInt(1_000_000_000)), sdk.NewCoin(denom, math.NewInt(1_000_000_000)))
Expand Down Expand Up @@ -402,7 +402,7 @@ func Test_MsgServer_Deposit_ToModuleAccount(t *testing.T) {
require.Equal(t, math.ZeroInt(), beforeModuleBalance.Amount)

// valid deposit
msg := types.NewMsgFinalizeTokenDeposit(addrsStr[0], addrsStr[1], opchildModuleAddress.String(), sdk.NewCoin(denom, math.NewInt(100)), 1, "test_token", nil)
msg := types.NewMsgFinalizeTokenDeposit(addrsStr[0], addrsStr[1], opchildModuleAddress.String(), sdk.NewCoin(denom, math.NewInt(100)), 1, 1, "test_token", nil)
_, err := ms.FinalizeTokenDeposit(ctx, msg)
require.NoError(t, err)

Expand All @@ -421,15 +421,15 @@ func Test_MsgServer_Deposit_NoHook(t *testing.T) {
denom := "l2/" + hex.EncodeToString(bz[:])

// unauthorized deposit
msg := types.NewMsgFinalizeTokenDeposit(addrsStr[1], addrsStr[1], addrsStr[1], sdk.NewCoin(denom, math.NewInt(100)), 1, "test_token", nil)
msg := types.NewMsgFinalizeTokenDeposit(addrsStr[1], addrsStr[1], addrsStr[1], sdk.NewCoin(denom, math.NewInt(100)), 1, 1, "test_token", nil)
_, err := ms.FinalizeTokenDeposit(ctx, msg)
require.Error(t, err)

beforeBalance := input.BankKeeper.GetBalance(ctx, addrs[1], denom)
require.Equal(t, math.ZeroInt(), beforeBalance.Amount)

// valid deposit
msg = types.NewMsgFinalizeTokenDeposit(addrsStr[0], addrsStr[1], addrsStr[1], sdk.NewCoin(denom, math.NewInt(100)), 1, "test_token", nil)
msg = types.NewMsgFinalizeTokenDeposit(addrsStr[0], addrsStr[1], addrsStr[1], sdk.NewCoin(denom, math.NewInt(100)), 1, 1, "test_token", nil)
_, err = ms.FinalizeTokenDeposit(ctx, msg)
require.NoError(t, err)

Expand All @@ -453,7 +453,7 @@ func Test_MsgServer_Deposit_HookSuccess(t *testing.T) {
input.BridgeHook.err = nil

// valid deposit
msg := types.NewMsgFinalizeTokenDeposit(addrsStr[0], addrsStr[1], addrsStr[1], sdk.NewCoin(denom, math.NewInt(100)), 1, "test_token", hookMsgBytes)
msg := types.NewMsgFinalizeTokenDeposit(addrsStr[0], addrsStr[1], addrsStr[1], sdk.NewCoin(denom, math.NewInt(100)), 1, 1, "test_token", hookMsgBytes)
_, err = ms.FinalizeTokenDeposit(ctx, msg)
require.NoError(t, err)
require.Equal(t, hookMsgBytes, input.BridgeHook.msgBytes)
Expand All @@ -479,7 +479,7 @@ func Test_MsgServer_Deposit_HookFail(t *testing.T) {
input.BridgeHook.err = errors.New("should be failed")

// valid deposit
msg := types.NewMsgFinalizeTokenDeposit(addrsStr[0], addrsStr[1], addrsStr[1], sdk.NewCoin(denom, math.NewInt(100)), 1, "test_token", []byte("invalid_message"))
msg := types.NewMsgFinalizeTokenDeposit(addrsStr[0], addrsStr[1], addrsStr[1], sdk.NewCoin(denom, math.NewInt(100)), 1, 1, "test_token", []byte("invalid_message"))
_, err := ms.FinalizeTokenDeposit(ctx, msg)
require.NoError(t, err)
require.Empty(t, input.BridgeHook.msgBytes)
Expand Down
23 changes: 12 additions & 11 deletions x/opchild/types/errors.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,16 @@ var (
ErrDepositAlreadyFinalized = errorsmod.Register(ModuleName, 9, "deposit already finalized")
ErrInvalidAmount = errorsmod.Register(ModuleName, 10, "invalid amount")
ErrInvalidSequence = errorsmod.Register(ModuleName, 11, "invalid sequence")
ErrZeroMaxValidators = errorsmod.Register(ModuleName, 12, "max validators must be non-zero")
ErrInvalidExecuteMsg = errorsmod.Register(ModuleName, 13, "invalid execute message")
ErrUnroutableExecuteMsg = errorsmod.Register(ModuleName, 14, "unroutable execute message")
ErrInvalidExecutorChangePlan = errorsmod.Register(ModuleName, 15, "invalid executor chane plan")
ErrAlreadyRegisteredHeight = errorsmod.Register(ModuleName, 16, "executor change plan already exists at the height")
ErrInvalidBridgeInfo = errorsmod.Register(ModuleName, 17, "invalid bridge info")
ErrInvalidHeight = errorsmod.Register(ModuleName, 18, "invalid oracle height")
ErrInvalidPrices = errorsmod.Register(ModuleName, 19, "invalid oracle prices")
ErrMaxValidatorsExceeded = errorsmod.Register(ModuleName, 20, "max validators exceeded")
ErrMaxValidatorsLowerThanCurrent = errorsmod.Register(ModuleName, 21, "max validators cannot be lower than current number of validators")
ErrNonL1Token = errorsmod.Register(ModuleName, 22, "token is not from L1")
ErrInvalidBlockHeight = errorsmod.Register(ModuleName, 12, "invalid block height")
ErrZeroMaxValidators = errorsmod.Register(ModuleName, 13, "max validators must be non-zero")
ErrInvalidExecuteMsg = errorsmod.Register(ModuleName, 14, "invalid execute message")
ErrUnroutableExecuteMsg = errorsmod.Register(ModuleName, 15, "unroutable execute message")
ErrInvalidExecutorChangePlan = errorsmod.Register(ModuleName, 16, "invalid executor chane plan")
ErrAlreadyRegisteredHeight = errorsmod.Register(ModuleName, 17, "executor change plan already exists at the height")
ErrInvalidBridgeInfo = errorsmod.Register(ModuleName, 18, "invalid bridge info")
ErrInvalidHeight = errorsmod.Register(ModuleName, 19, "invalid oracle height")
ErrInvalidPrices = errorsmod.Register(ModuleName, 20, "invalid oracle prices")
ErrMaxValidatorsExceeded = errorsmod.Register(ModuleName, 21, "max validators exceeded")
ErrMaxValidatorsLowerThanCurrent = errorsmod.Register(ModuleName, 22, "max validators cannot be lower than current number of validators")
ErrNonL1Token = errorsmod.Register(ModuleName, 23, "token is not from L1")
)
6 changes: 6 additions & 0 deletions x/opchild/types/tx.go
Original file line number Diff line number Diff line change
Expand Up @@ -224,6 +224,7 @@ func NewMsgFinalizeTokenDeposit(
sender, from, to string,
amount sdk.Coin,
sequence uint64,
height uint64,
baseDenom string,
data []byte,
) *MsgFinalizeTokenDeposit {
Expand All @@ -233,6 +234,7 @@ func NewMsgFinalizeTokenDeposit(
To: to,
Amount: amount,
Sequence: sequence,
Height: height,
BaseDenom: baseDenom,
Data: data,
}
Expand Down Expand Up @@ -264,6 +266,10 @@ func (msg MsgFinalizeTokenDeposit) Validate(ac address.Codec) error {
return ErrInvalidSequence
}

if msg.Height == 0 {
return ErrInvalidBlockHeight
}

return nil
}

Expand Down

0 comments on commit 6c6b398

Please sign in to comment.