From 9a7ff2e45e8e9c12d444927993dd3cf66732cde9 Mon Sep 17 00:00:00 2001 From: j75689 Date: Mon, 28 Aug 2023 11:12:42 +0800 Subject: [PATCH 01/17] feat: disable msgs --- app/app.go | 1 + go.mod | 2 +- plugins/bridge/handler.go | 3 ++ plugins/dex/order/handler.go | 4 +++ plugins/tokens/freeze/handler.go | 3 ++ plugins/tokens/issue/handler.go | 8 +++++- plugins/tokens/issue/handler_mini.go | 6 ++++ plugins/tokens/plugin.go | 43 ++++++++++++++++++++++++++++ plugins/tokens/swap/handler.go | 6 ++++ plugins/tokens/swap/keeper.go | 32 +++++++++++++++++++++ plugins/tokens/timelock/handler.go | 6 ++++ plugins/tokens/timelock/keeper.go | 6 ++++ plugins/tokens/timelock/keys.go | 13 +++++++++ 13 files changed, 131 insertions(+), 2 deletions(-) diff --git a/app/app.go b/app/app.go index 7670c42c8..c0a245858 100644 --- a/app/app.go +++ b/app/app.go @@ -918,6 +918,7 @@ func (app *BNBBeaconChain) EndBlocker(ctx sdk.Context, req abci.RequestEndBlock) tokens.EndBreatheBlock(ctx, app.swapKeeper) } else { app.Logger.Debug("normal block", "height", height) + tokens.EndBlocker(ctx, app.timeLockKeeper, app.swapKeeper) } app.DexKeeper.StoreTradePrices(ctx) diff --git a/go.mod b/go.mod index ebf902b3f..828410cd5 100644 --- a/go.mod +++ b/go.mod @@ -165,7 +165,7 @@ require ( replace ( github.com/Shopify/sarama v1.26.1 => github.com/Shopify/sarama v1.21.0 - github.com/cosmos/cosmos-sdk => github.com/bnb-chain/bnc-cosmos-sdk v0.26.6 + github.com/cosmos/cosmos-sdk => /Users/dylan.huang/git/bnc-cosmos-sdk //github.com/bnb-chain/bnc-cosmos-sdk v0.26.6 github.com/grpc-ecosystem/grpc-gateway/v2 => github.com/prysmaticlabs/grpc-gateway/v2 v2.3.1-0.20210702154020-550e1cd83ec1 github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d => github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 github.com/tendermint/go-amino => github.com/bnb-chain/bnc-go-amino v0.14.1-binance.2 diff --git a/plugins/bridge/handler.go b/plugins/bridge/handler.go index 006142809..aad7e2f10 100644 --- a/plugins/bridge/handler.go +++ b/plugins/bridge/handler.go @@ -33,6 +33,9 @@ func NewHandler(keeper Keeper) sdk.Handler { } func handleUnbindMsg(ctx sdk.Context, keeper Keeper, msg UnbindMsg) sdk.Result { + if sdk.IsUpgrade(sdk.BEPXXX) { + return sdk.ErrMsgNotSupported("").Result() + } // check is native symbol if msg.Symbol == cmmtypes.NativeTokenSymbol { return types.ErrInvalidSymbol("can not unbind native symbol").Result() diff --git a/plugins/dex/order/handler.go b/plugins/dex/order/handler.go index ac3ea9e22..3e5d0b74f 100644 --- a/plugins/dex/order/handler.go +++ b/plugins/dex/order/handler.go @@ -32,6 +32,9 @@ func NewHandler(dexKeeper *DexKeeper) sdk.Handler { } return handleNewOrder(ctx, dexKeeper, msg) case CancelOrderMsg: + if sdk.IsUpgrade(sdk.BEPXXX) { + return sdk.ErrMsgNotSupported("").Result() + } return handleCancelOrder(ctx, dexKeeper, msg) default: errMsg := fmt.Sprintf("Unrecognized dex msg type: %v", reflect.TypeOf(msg).Name()) @@ -104,6 +107,7 @@ func validateQtyAndLockBalance(ctx sdk.Context, keeper *DexKeeper, acc common.Na func handleNewOrder( ctx sdk.Context, dexKeeper *DexKeeper, msg NewOrderMsg, ) sdk.Result { + if _, ok := dexKeeper.OrderExists(msg.Symbol, msg.Id); ok { errString := fmt.Sprintf("Duplicated order [%v] on symbol [%v]", msg.Id, msg.Symbol) return sdk.NewError(types.DefaultCodespace, types.CodeDuplicatedOrder, errString).Result() diff --git a/plugins/tokens/freeze/handler.go b/plugins/tokens/freeze/handler.go index 70a3fb952..6f6a76a16 100644 --- a/plugins/tokens/freeze/handler.go +++ b/plugins/tokens/freeze/handler.go @@ -30,6 +30,9 @@ func NewHandler(tokenMapper store.Mapper, accKeeper auth.AccountKeeper, keeper b } func handleFreezeToken(ctx sdk.Context, tokenMapper store.Mapper, accKeeper auth.AccountKeeper, keeper bank.Keeper, msg FreezeMsg) sdk.Result { + if sdk.IsUpgrade(sdk.BEPXXX) { + return sdk.ErrMsgNotSupported("").Result() + } freezeAmount := msg.Amount symbol := strings.ToUpper(msg.Symbol) logger := log.With("module", "token", "symbol", symbol, "amount", freezeAmount, "addr", msg.From) diff --git a/plugins/tokens/issue/handler.go b/plugins/tokens/issue/handler.go index db8fa3d04..b3506911b 100644 --- a/plugins/tokens/issue/handler.go +++ b/plugins/tokens/issue/handler.go @@ -38,6 +38,9 @@ func NewHandler(tokenMapper store.Mapper, keeper bank.Keeper) sdk.Handler { } func handleIssueToken(ctx sdk.Context, tokenMapper store.Mapper, bankKeeper bank.Keeper, msg IssueMsg) sdk.Result { + if sdk.IsUpgrade(sdk.BEPXXX) { + return sdk.ErrMsgNotSupported("").Result() + } errLogMsg := "issue token failed" symbol := strings.ToUpper(msg.Symbol) logger := log.With("module", "token", "symbol", symbol, "name", msg.Name, "total_supply", msg.TotalSupply, "issuer", msg.From) @@ -62,8 +65,11 @@ func handleIssueToken(ctx sdk.Context, tokenMapper store.Mapper, bankKeeper bank return issue(ctx, logger, tokenMapper, bankKeeper, token) } -//Mint MiniToken is also handled by this function +// Mint MiniToken is also handled by this function func handleMintToken(ctx sdk.Context, tokenMapper store.Mapper, bankKeeper bank.Keeper, msg MintMsg) sdk.Result { + if sdk.IsUpgrade(sdk.BEPXXX) { + return sdk.ErrMsgNotSupported("").Result() + } symbol := strings.ToUpper(msg.Symbol) logger := log.With("module", "token", "symbol", symbol, "amount", msg.Amount, "minter", msg.From) diff --git a/plugins/tokens/issue/handler_mini.go b/plugins/tokens/issue/handler_mini.go index f41379444..e44e03a8e 100644 --- a/plugins/tokens/issue/handler_mini.go +++ b/plugins/tokens/issue/handler_mini.go @@ -13,6 +13,9 @@ import ( ) func handleIssueMiniToken(ctx sdk.Context, tokenMapper store.Mapper, bankKeeper bank.Keeper, msg IssueMiniMsg) sdk.Result { + if sdk.IsUpgrade(sdk.BEPXXX) { + return sdk.ErrMsgNotSupported("").Result() + } errLogMsg := "issue miniToken failed" origSymbol := strings.ToUpper(msg.Symbol) logger := log.With("module", "mini-token", "symbol", origSymbol, "name", msg.Name, "total_supply", msg.TotalSupply, "issuer", msg.From) @@ -34,6 +37,9 @@ func handleIssueMiniToken(ctx sdk.Context, tokenMapper store.Mapper, bankKeeper } func handleIssueTinyToken(ctx sdk.Context, tokenMapper store.Mapper, bankKeeper bank.Keeper, msg IssueTinyMsg) sdk.Result { + if sdk.IsUpgrade(sdk.BEPXXX) { + return sdk.ErrMsgNotSupported("").Result() + } errLogMsg := "issue tinyToken failed" origSymbol := strings.ToUpper(msg.Symbol) logger := log.With("module", "mini-token", "symbol", origSymbol, "name", msg.Name, "total_supply", msg.TotalSupply, "issuer", msg.From) diff --git a/plugins/tokens/plugin.go b/plugins/tokens/plugin.go index a19acd0aa..d767760a3 100644 --- a/plugins/tokens/plugin.go +++ b/plugins/tokens/plugin.go @@ -51,6 +51,49 @@ func createQueryHandler(mapper Mapper, queryPrefix string) app.AbciQueryHandler return createAbciQueryHandler(mapper, queryPrefix) } +const ( + MaxUnlockItems = 100 +) + +func EndBlocker(ctx sdk.Context, timelockKeeper timelock.Keeper, swapKeeper swap.Keeper) { + logger := bnclog.With("module", "tokens") + logger.Info("unlock the time locks", "blockHeight", ctx.BlockHeight()) + + iterator := timelockKeeper.GetTimeLockRecordIterator(ctx) + defer iterator.Close() + i := 0 + for ; iterator.Valid(); iterator.Next() { + if i >= MaxUnlockItems { + break + } + addr, id, err := timelock.ParseKeyRecord(iterator.Key()) + if err != nil { + logger.Error("ParseKeyRecord error", "error", err) + continue + } + timelockKeeper.TimeUnlock(ctx, addr, id) + i++ + } + + iterator = swapKeeper.GetSwapIterator(ctx) + defer iterator.Close() + i = 0 + for ; iterator.Valid(); iterator.Next() { + if i >= MaxUnlockItems { + break + } + var automaticSwap swap.AtomicSwap + swapKeeper.CDC().MustUnmarshalBinaryBare(iterator.Value(), &automaticSwap) + swapID := iterator.Key()[len(swap.HashKey):] + err := swapKeeper.Refound(ctx, swapID, &automaticSwap) + if err != nil { + logger.Error("Refound error", "error", err) + continue + } + i++ + } +} + // EndBreatheBlock processes the breathe block lifecycle event. func EndBreatheBlock(ctx sdk.Context, swapKeeper swap.Keeper) { logger := bnclog.With("module", "tokens") diff --git a/plugins/tokens/swap/handler.go b/plugins/tokens/swap/handler.go index 4c740500f..75da5db06 100644 --- a/plugins/tokens/swap/handler.go +++ b/plugins/tokens/swap/handler.go @@ -27,6 +27,9 @@ func NewHandler(kp Keeper) sdk.Handler { } func handleHashTimerLockedTransfer(ctx sdk.Context, kp Keeper, msg HTLTMsg) sdk.Result { + if sdk.IsUpgrade(sdk.BEPXXX) { + return sdk.ErrMsgNotSupported("").Result() + } header := ctx.BlockHeader() blockTime := header.Time.Unix() if msg.Timestamp < blockTime-ThirtyMinutes || msg.Timestamp > blockTime+FifteenMinutes { @@ -66,6 +69,9 @@ func handleHashTimerLockedTransfer(ctx sdk.Context, kp Keeper, msg HTLTMsg) sdk. } func handleDepositHashTimerLockedTransfer(ctx sdk.Context, kp Keeper, msg DepositHTLTMsg) sdk.Result { + if sdk.IsUpgrade(sdk.BEPXXX) { + return sdk.ErrMsgNotSupported("").Result() + } swap := kp.GetSwap(ctx, msg.SwapID) if swap == nil { return ErrNonExistSwapID(fmt.Sprintf("No matched swap with swapID %v", msg.SwapID)).Result() diff --git a/plugins/tokens/swap/keeper.go b/plugins/tokens/swap/keeper.go index e781af106..b267dce76 100644 --- a/plugins/tokens/swap/keeper.go +++ b/plugins/tokens/swap/keeper.go @@ -41,6 +41,10 @@ func NewKeeper(cdc *codec.Codec, key sdk.StoreKey, ck bank.Keeper, addrPool *sdk } } +func (keeper Keeper) CDC() *codec.Codec { + return keeper.cdc +} + func (kp *Keeper) CreateSwap(ctx sdk.Context, swapID SwapBytes, swap *AtomicSwap) sdk.Error { if swap == nil { return sdk.ErrInternal("empty atomic swap pointer") @@ -137,6 +141,11 @@ func (kp *Keeper) GetSwap(ctx sdk.Context, swapID SwapBytes) *AtomicSwap { return &swap } +func (kp *Keeper) GetSwapIterator(ctx sdk.Context) (iterator store.Iterator) { + kvStore := ctx.KVStore(kp.storeKey) + return sdk.KVStorePrefixIterator(kvStore, HashKey) +} + func (kp *Keeper) GetSwapCreatorIterator(ctx sdk.Context, addr sdk.AccAddress) (iterator store.Iterator) { kvStore := ctx.KVStore(kp.storeKey) return sdk.KVStorePrefixIterator(kvStore, BuildSwapCreatorQueueKey(addr)) @@ -160,3 +169,26 @@ func (kp *Keeper) getIndex(ctx sdk.Context) int64 { } return int64(binary.BigEndian.Uint64(bz)) } + +func (kp *Keeper) Refound(ctx sdk.Context, swapID SwapBytes, swap *AtomicSwap) error { + if !swap.OutAmount.IsZero() { + _, err := kp.ck.SendCoins(ctx, AtomicSwapCoinsAccAddr, swap.From, swap.OutAmount) + if err != nil { + return fmt.Errorf(fmt.Sprint("Failed to send coins", "sender", AtomicSwapCoinsAccAddr.String(), "recipient", swap.From.String(), "amount", swap.OutAmount.String(), "err", err.Error())) + } + } + if !swap.InAmount.IsZero() { + _, err := kp.ck.SendCoins(ctx, AtomicSwapCoinsAccAddr, swap.To, swap.InAmount) + if err != nil { + return fmt.Errorf(fmt.Sprint("Failed to send coins", "sender", AtomicSwapCoinsAccAddr.String(), "recipient", swap.To.String(), "amount", swap.InAmount.String(), "err", err.Error())) + } + } + + swap.Status = Expired + swap.ClosedTime = ctx.BlockHeader().Time.Unix() + err := kp.CloseSwap(ctx, swapID, swap) + if err != nil { + return fmt.Errorf(fmt.Sprint("Failed to close swap", "err", err.Error())) + } + return nil +} diff --git a/plugins/tokens/timelock/handler.go b/plugins/tokens/timelock/handler.go index 5be0fca45..d47d67052 100644 --- a/plugins/tokens/timelock/handler.go +++ b/plugins/tokens/timelock/handler.go @@ -24,6 +24,9 @@ func NewHandler(keeper Keeper) sdk.Handler { } func handleTimeLock(ctx sdk.Context, keeper Keeper, msg TimeLockMsg) sdk.Result { + if sdk.IsUpgrade(sdk.BEPXXX) { + return sdk.ErrMsgNotSupported("").Result() + } record, err := keeper.TimeLock(ctx, msg.From, msg.Description, msg.Amount, time.Unix(msg.LockTime, 0)) if err != nil { return err.Result() @@ -36,6 +39,9 @@ func handleTimeLock(ctx sdk.Context, keeper Keeper, msg TimeLockMsg) sdk.Result } func handleTimeRelock(ctx sdk.Context, keeper Keeper, msg TimeRelockMsg) sdk.Result { + if sdk.IsUpgrade(sdk.BEPXXX) { + return sdk.ErrMsgNotSupported("").Result() + } newRecord := TimeLockRecord{ Description: msg.Description, Amount: msg.Amount, diff --git a/plugins/tokens/timelock/keeper.go b/plugins/tokens/timelock/keeper.go index 17b33b2e3..686f2025e 100644 --- a/plugins/tokens/timelock/keeper.go +++ b/plugins/tokens/timelock/keeper.go @@ -6,6 +6,7 @@ import ( "time" "github.com/cosmos/cosmos-sdk/codec" + "github.com/cosmos/cosmos-sdk/store" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/auth" "github.com/cosmos/cosmos-sdk/x/bank" @@ -88,6 +89,11 @@ func (keeper Keeper) GetTimeLockRecords(ctx sdk.Context, addr sdk.AccAddress) [] return records } +func (kp *Keeper) GetTimeLockRecordIterator(ctx sdk.Context) (iterator store.Iterator) { + kvStore := ctx.KVStore(kp.storeKey) + return sdk.KVStorePrefixIterator(kvStore, []byte{}) +} + func (keeper Keeper) getTimeLockId(ctx sdk.Context, from sdk.AccAddress) int64 { acc := keeper.ak.GetAccount(ctx, from) return acc.GetSequence() diff --git a/plugins/tokens/timelock/keys.go b/plugins/tokens/timelock/keys.go index 0b55b4968..eb181cc6b 100644 --- a/plugins/tokens/timelock/keys.go +++ b/plugins/tokens/timelock/keys.go @@ -1,7 +1,9 @@ package timelock import ( + "bytes" "fmt" + "strconv" sdk "github.com/cosmos/cosmos-sdk/types" ) @@ -13,3 +15,14 @@ func KeyRecord(addr sdk.AccAddress, id int64) []byte { func KeyRecordSubSpace(addr sdk.AccAddress) []byte { return []byte(fmt.Sprintf("record:%d", addr)) } + +func ParseKeyRecord(key []byte) (sdk.AccAddress, int64, error) { + key = bytes.TrimPrefix(key, []byte("record:")) + addr := sdk.AccAddress(key[:sdk.AddrLen]) + + id, err := strconv.ParseInt(string(key[sdk.AddrLen+1:]), 10, 64) + if err != nil { + return []byte{}, 0, err + } + return addr, id, nil +} From a679481d62c8d42d4296e13c45f24c3d1eb55dcb Mon Sep 17 00:00:00 2001 From: j75689 Date: Mon, 28 Aug 2023 13:57:29 +0800 Subject: [PATCH 02/17] fix: update dep --- go.mod | 2 +- go.sum | 4 ++-- plugins/tokens/swap/keeper.go | 5 ++++- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/go.mod b/go.mod index 828410cd5..50441e2cc 100644 --- a/go.mod +++ b/go.mod @@ -165,7 +165,7 @@ require ( replace ( github.com/Shopify/sarama v1.26.1 => github.com/Shopify/sarama v1.21.0 - github.com/cosmos/cosmos-sdk => /Users/dylan.huang/git/bnc-cosmos-sdk //github.com/bnb-chain/bnc-cosmos-sdk v0.26.6 + github.com/cosmos/cosmos-sdk => github.com/j75689/bnc-cosmos-sdk v0.0.0-20230828031047-de8de0dae3cf //github.com/bnb-chain/bnc-cosmos-sdk v0.26.6 github.com/grpc-ecosystem/grpc-gateway/v2 => github.com/prysmaticlabs/grpc-gateway/v2 v2.3.1-0.20210702154020-550e1cd83ec1 github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d => github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 github.com/tendermint/go-amino => github.com/bnb-chain/bnc-go-amino v0.14.1-binance.2 diff --git a/go.sum b/go.sum index df36bf095..15f5ab4cf 100644 --- a/go.sum +++ b/go.sum @@ -178,8 +178,6 @@ github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJm github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= github.com/bmizerany/pat v0.0.0-20170815010413-6226ea591a40/go.mod h1:8rLXio+WjiTceGBHIoTvn60HIbs7Hm7bcHjyrSqYB9c= -github.com/bnb-chain/bnc-cosmos-sdk v0.26.6 h1:5NrdUXplI2cqWZlLOovSqm+xO5ja03ZPCPT4bQqCD1Y= -github.com/bnb-chain/bnc-cosmos-sdk v0.26.6/go.mod h1:OjdXpDHofs6gcPLM9oGD+mm8DPc6Lsevz0Kia53zt3Q= github.com/bnb-chain/bnc-go-amino v0.14.1-binance.2 h1:iAlp9gqG0f2LGAauf3ZiijWlT6NI+W2r9y70HH9LI3k= github.com/bnb-chain/bnc-go-amino v0.14.1-binance.2/go.mod h1:LiCO7jev+3HwLGAiN9gpD0z+jTz95RqgSavbse55XOY= github.com/bnb-chain/bnc-tendermint v0.32.3-bc.10 h1:E4iSwEbJCLYchHiHE1gnOM3jjmJXLBxARhy/RCl8CpI= @@ -789,6 +787,8 @@ github.com/iris-contrib/jade v1.1.4/go.mod h1:EDqR+ur9piDl6DUgs6qRrlfzmlx/D5Uybo github.com/iris-contrib/pongo2 v0.0.1/go.mod h1:Ssh+00+3GAZqSQb30AvBRNxBx7rf0GqwkjqxNd0u65g= github.com/iris-contrib/schema v0.0.1/go.mod h1:urYA3uvUNG1TIIjOSCzHr9/LmbQo8LrOcOqfqxa4hXw= github.com/iris-contrib/schema v0.0.6/go.mod h1:iYszG0IOsuIsfzjymw1kMzTL8YQcCWlm65f3wX8J5iA= +github.com/j75689/bnc-cosmos-sdk v0.0.0-20230828031047-de8de0dae3cf h1:V7pDFgJSxT0EBqD0ZNB6tJjey1YatkVwkxhmYboCN3Q= +github.com/j75689/bnc-cosmos-sdk v0.0.0-20230828031047-de8de0dae3cf/go.mod h1:OjdXpDHofs6gcPLM9oGD+mm8DPc6Lsevz0Kia53zt3Q= github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= github.com/jbenet/go-cienv v0.1.0/go.mod h1:TqNnHUmJgXau0nCzC7kXWeotg3J9W34CUv5Djy1+FlA= diff --git a/plugins/tokens/swap/keeper.go b/plugins/tokens/swap/keeper.go index b267dce76..44616848c 100644 --- a/plugins/tokens/swap/keeper.go +++ b/plugins/tokens/swap/keeper.go @@ -171,6 +171,9 @@ func (kp *Keeper) getIndex(ctx sdk.Context) int64 { } func (kp *Keeper) Refound(ctx sdk.Context, swapID SwapBytes, swap *AtomicSwap) error { + if swap.Status != Open { + return fmt.Errorf(fmt.Sprint("Invalid swap status", "status", swap.Status)) + } if !swap.OutAmount.IsZero() { _, err := kp.ck.SendCoins(ctx, AtomicSwapCoinsAccAddr, swap.From, swap.OutAmount) if err != nil { @@ -184,7 +187,7 @@ func (kp *Keeper) Refound(ctx sdk.Context, swapID SwapBytes, swap *AtomicSwap) e } } - swap.Status = Expired + swap.Status = Completed swap.ClosedTime = ctx.BlockHeader().Time.Unix() err := kp.CloseSwap(ctx, swapID, swap) if err != nil { From 82ef36d8c83e17ccf5ec8c4e350bdb73029e73f3 Mon Sep 17 00:00:00 2001 From: j75689 Date: Mon, 28 Aug 2023 15:16:41 +0800 Subject: [PATCH 03/17] fix: check unlock timelock error --- plugins/dex/order/handler.go | 3 --- plugins/tokens/plugin.go | 6 +++++- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/plugins/dex/order/handler.go b/plugins/dex/order/handler.go index 3e5d0b74f..a0d198696 100644 --- a/plugins/dex/order/handler.go +++ b/plugins/dex/order/handler.go @@ -32,9 +32,6 @@ func NewHandler(dexKeeper *DexKeeper) sdk.Handler { } return handleNewOrder(ctx, dexKeeper, msg) case CancelOrderMsg: - if sdk.IsUpgrade(sdk.BEPXXX) { - return sdk.ErrMsgNotSupported("").Result() - } return handleCancelOrder(ctx, dexKeeper, msg) default: errMsg := fmt.Sprintf("Unrecognized dex msg type: %v", reflect.TypeOf(msg).Name()) diff --git a/plugins/tokens/plugin.go b/plugins/tokens/plugin.go index d767760a3..f5f0dbdd6 100644 --- a/plugins/tokens/plugin.go +++ b/plugins/tokens/plugin.go @@ -71,7 +71,11 @@ func EndBlocker(ctx sdk.Context, timelockKeeper timelock.Keeper, swapKeeper swap logger.Error("ParseKeyRecord error", "error", err) continue } - timelockKeeper.TimeUnlock(ctx, addr, id) + err = timelockKeeper.TimeUnlock(ctx, addr, id) + if err != nil { + logger.Error("TimeUnlock error", "error", err) + continue + } i++ } From 2b22c59498b37770be3dae90107157c797826eba Mon Sep 17 00:00:00 2001 From: j75689 Date: Wed, 27 Sep 2023 17:19:32 +0800 Subject: [PATCH 04/17] feat: implement airdrop approval msg --- app/app.go | 2 + cmd/bnbcli/main.go | 3 + plugins/airdrop/client/cli/commands.go | 22 +++++ plugins/airdrop/client/cli/tx.go | 109 +++++++++++++++++++++++++ plugins/airdrop/msg.go | 79 ++++++++++++++++++ plugins/airdrop/wire.go | 10 +++ 6 files changed, 225 insertions(+) create mode 100644 plugins/airdrop/client/cli/commands.go create mode 100644 plugins/airdrop/client/cli/tx.go create mode 100644 plugins/airdrop/msg.go create mode 100644 plugins/airdrop/wire.go diff --git a/app/app.go b/app/app.go index c0a245858..36328ab8b 100644 --- a/app/app.go +++ b/app/app.go @@ -49,6 +49,7 @@ import ( "github.com/bnb-chain/node/common/upgrade" "github.com/bnb-chain/node/common/utils" "github.com/bnb-chain/node/plugins/account" + "github.com/bnb-chain/node/plugins/airdrop" "github.com/bnb-chain/node/plugins/bridge" bTypes "github.com/bnb-chain/node/plugins/bridge/types" "github.com/bnb-chain/node/plugins/dex" @@ -1157,6 +1158,7 @@ func MakeCodec() *wire.Codec { bridge.RegisterWire(cdc) oracle.RegisterWire(cdc) ibc.RegisterWire(cdc) + airdrop.RegisterWire(cdc) return cdc } diff --git a/cmd/bnbcli/main.go b/cmd/bnbcli/main.go index f53d16aa1..35bdd1dc9 100644 --- a/cmd/bnbcli/main.go +++ b/cmd/bnbcli/main.go @@ -13,6 +13,7 @@ import ( sidecmd "github.com/cosmos/cosmos-sdk/x/sidechain/client/cli" slashingcmd "github.com/cosmos/cosmos-sdk/x/slashing/client/cli" stakecmd "github.com/cosmos/cosmos-sdk/x/stake/client/cli" + "github.com/spf13/cobra" "github.com/tendermint/tendermint/libs/cli" @@ -22,6 +23,7 @@ import ( "github.com/bnb-chain/node/common" "github.com/bnb-chain/node/common/types" accountcmd "github.com/bnb-chain/node/plugins/account/client/cli" + airdropcmd "github.com/bnb-chain/node/plugins/airdrop/client/cli" apiserv "github.com/bnb-chain/node/plugins/api" bridgecmd "github.com/bnb-chain/node/plugins/bridge/client/cli" dexcmd "github.com/bnb-chain/node/plugins/dex/client/cli" @@ -98,6 +100,7 @@ func main() { admin.AddCommands(rootCmd, cdc) bridgecmd.AddCommands(rootCmd, cdc) sidecmd.AddCommands(rootCmd, cdc) + airdropcmd.AddCommands(rootCmd, cdc) // prepare and add flags executor := cli.PrepareMainCmd(rootCmd, "BC", app.DefaultCLIHome) diff --git a/plugins/airdrop/client/cli/commands.go b/plugins/airdrop/client/cli/commands.go new file mode 100644 index 000000000..afcdeaa65 --- /dev/null +++ b/plugins/airdrop/client/cli/commands.go @@ -0,0 +1,22 @@ +package cli + +import ( + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/codec" + "github.com/spf13/cobra" +) + +func AddCommands(cmd *cobra.Command, cdc *codec.Codec) { + airdropCmd := &cobra.Command{ + Use: "airdrop", + Short: "airdrop commands", + } + + airdropCmd.AddCommand( + client.PostCommands( + GetApprovalCmd(cdc), + )..., + ) + + cmd.AddCommand(airdropCmd) +} diff --git a/plugins/airdrop/client/cli/tx.go b/plugins/airdrop/client/cli/tx.go new file mode 100644 index 000000000..466d34632 --- /dev/null +++ b/plugins/airdrop/client/cli/tx.go @@ -0,0 +1,109 @@ +package cli + +import ( + "encoding/hex" + "fmt" + + "github.com/spf13/cobra" + "github.com/spf13/viper" + + "github.com/cosmos/cosmos-sdk/client/context" + "github.com/cosmos/cosmos-sdk/client/keys" + "github.com/cosmos/cosmos-sdk/codec" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/x/auth" + authcmd "github.com/cosmos/cosmos-sdk/x/auth/client/cli" + authtxb "github.com/cosmos/cosmos-sdk/x/auth/client/txbuilder" + + "github.com/tendermint/tendermint/crypto" + "github.com/tendermint/tendermint/crypto/secp256k1" + "github.com/tendermint/tendermint/crypto/tmhash" + cmn "github.com/tendermint/tendermint/libs/common" + + "github.com/bnb-chain/node/plugins/airdrop" +) + +const ( + flagAmount = "amount" + flagTokenIndex = "token-index" + flagTokenSymbol = "token-symbol" + flagRecipient = "recipient" +) + +func GetApprovalCmd(cdc *codec.Codec) *cobra.Command { + cmd := &cobra.Command{ + Use: "approval", + Short: "get airdrop approval sign data", + RunE: func(cmd *cobra.Command, args []string) error { + txBldr := authtxb.NewTxBuilderFromCLI().WithCodec(cdc) + cliCtx := context.NewCLIContext(). + WithCodec(cdc). + WithAccountDecoder(authcmd.GetAccountDecoder(cdc)) + + amount := viper.GetInt64(flagAmount) + tokenIndex := viper.GetInt64(flagTokenIndex) + tokenSymbol := viper.GetString(flagTokenSymbol) + recipient := viper.GetString(flagRecipient) + msg := airdrop.NewAirdropApprovalMsg(uint64(tokenIndex), tokenSymbol, uint64(amount), recipient) + + sdkErr := msg.ValidateBasic() + if sdkErr != nil { + return fmt.Errorf("%v", sdkErr.Data()) + } + return SignAndPrint(cliCtx, txBldr, msg) + }, + } + + cmd.Flags().Int64(flagTokenIndex, 0, "owner token index") + cmd.Flags().String(flagTokenSymbol, "", "owner token symbol") + cmd.Flags().Int64(flagAmount, 0, "amount of token") + cmd.Flags().String(flagRecipient, "", "bsc recipient address") + + return cmd +} + +func SignAndPrint(ctx context.CLIContext, builder authtxb.TxBuilder, msg sdk.Msg) error { + name, err := ctx.GetFromName() + if err != nil { + return err + } + + passphrase, err := keys.GetPassphrase(name) + if err != nil { + return err + } + + // build and sign the transaction + stdMsg, err := builder.Build([]sdk.Msg{msg}) + if err != nil { + return err + } + txBytes, err := builder.Sign(name, passphrase, stdMsg) + if err != nil { + return err + } + + var tx auth.StdTx + if err = builder.Codec.UnmarshalBinaryLengthPrefixed(txBytes, &tx); err == nil { + json, err := builder.Codec.MarshalJSON(tx) + if err == nil { + fmt.Printf("TX JSON: %s\n", json) + } + } + hexBytes := make([]byte, len(txBytes)*2) + hex.Encode(hexBytes, txBytes) + txHash := cmn.HexBytes(tmhash.Sum(txBytes)).String() + fmt.Printf("Transaction hash: %s, Transaction hex: %s\n", txHash, hexBytes) + + fmt.Println("Sign Message: ", string(stdMsg.Bytes())) + fmt.Println("Sign Message Hash: ", hex.EncodeToString(crypto.Sha256(stdMsg.Bytes()))) + sig := tx.GetSignatures()[0] + fmt.Printf("Signature: %s\n", hex.EncodeToString(sig.Signature)) + var originPubKey secp256k1.PubKeySecp256k1 + err = builder.Codec.UnmarshalBinaryBare(sig.PubKey.Bytes(), &originPubKey) + if err != nil { + return err + } + fmt.Printf("PubKey: %s\n", hex.EncodeToString(originPubKey)) + return nil +} diff --git a/plugins/airdrop/msg.go b/plugins/airdrop/msg.go new file mode 100644 index 000000000..db7ce60fd --- /dev/null +++ b/plugins/airdrop/msg.go @@ -0,0 +1,79 @@ +package airdrop + +import ( + "encoding/json" + + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/ethereum/go-ethereum/common" +) + +const ( + Route = "airdrop" + MsgType = "airdrop_approval" +) + +var _ sdk.Msg = AirdropApproval{} + +func NewAirdropApprovalMsg(tokenIndex uint64, tokenSymbol string, amount uint64, recipient string) AirdropApproval { + return AirdropApproval{ + TokenIndex: tokenIndex, + TokenSymbol: tokenSymbol, + Amount: amount, + Recipient: recipient, + } +} + +type AirdropApproval struct { + TokenIndex uint64 `json:"token_index"` + TokenSymbol string `json:"token_symbol"` + Amount uint64 `json:"amount"` + Recipient string `json:"recipient"` // eth address +} + +// GetInvolvedAddresses implements types.Msg. +func (msg AirdropApproval) GetInvolvedAddresses() []sdk.AccAddress { + return msg.GetSigners() +} + +// GetSignBytes implements types.Msg. +func (msg AirdropApproval) GetSignBytes() []byte { + b, err := json.Marshal(msg) + if err != nil { + panic(err) + } + return b +} + +// GetSigners implements types.Msg. +func (m AirdropApproval) GetSigners() []sdk.AccAddress { + // This is not a real on-chain transaction + // We can get signer from the public key. + return []sdk.AccAddress{} +} + +// Route implements types.Msg. +func (AirdropApproval) Route() string { + return Route +} + +// Type implements types.Msg. +func (AirdropApproval) Type() string { + return MsgType +} + +// ValidateBasic implements types.Msg. +func (msg AirdropApproval) ValidateBasic() sdk.Error { + if msg.TokenSymbol == "" { + return sdk.ErrUnknownRequest("Invalid token symbol") + } + + if msg.Amount == 0 { + return sdk.ErrUnknownRequest("Invalid amount, should be greater than 0") + } + + if !common.IsHexAddress(msg.Recipient) { + return sdk.ErrInvalidAddress("Invalid recipient address") + } + + return nil +} diff --git a/plugins/airdrop/wire.go b/plugins/airdrop/wire.go new file mode 100644 index 000000000..466c4b866 --- /dev/null +++ b/plugins/airdrop/wire.go @@ -0,0 +1,10 @@ +package airdrop + +import ( + "github.com/bnb-chain/node/wire" +) + +// Register concrete types on wire codec +func RegisterWire(cdc *wire.Codec) { + cdc.RegisterConcrete(AirdropApproval{}, "airdrop/AirdropApproval", nil) +} From 732f6df2f9d4ff813a07eb8d3831390f0875cc7f Mon Sep 17 00:00:00 2001 From: j75689 Date: Fri, 29 Sep 2023 23:53:58 +0800 Subject: [PATCH 05/17] fix: sign data of AirDropApproval --- plugins/airdrop/msg.go | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/plugins/airdrop/msg.go b/plugins/airdrop/msg.go index db7ce60fd..b57a78886 100644 --- a/plugins/airdrop/msg.go +++ b/plugins/airdrop/msg.go @@ -1,7 +1,9 @@ package airdrop import ( + "encoding/hex" "encoding/json" + "math/big" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/ethereum/go-ethereum/common" @@ -23,6 +25,25 @@ func NewAirdropApprovalMsg(tokenIndex uint64, tokenSymbol string, amount uint64, } } +func newAirDropApprovalSignData(tokenIndex uint64, tokenSymbol string, amount uint64, recipient string) airDropApprovalSignData { + var tokenSymbolBytes [32]byte + copy(tokenSymbolBytes[:], []byte(tokenSymbol)) + + return airDropApprovalSignData{ + TokenIndex: hex.EncodeToString(big.NewInt(int64(tokenIndex)).FillBytes(make([]byte, 32))), + TokenSymbol: hex.EncodeToString(tokenSymbolBytes[:]), + Amount: hex.EncodeToString(big.NewInt(int64(amount)).FillBytes(make([]byte, 32))), + Recipient: recipient, + } +} + +type airDropApprovalSignData struct { + TokenIndex string `json:"token_index"` // hex string(32 bytes) + TokenSymbol string `json:"token_symbol"` // hex string(32 bytes) + Amount string `json:"amount"` // hex string(32 bytes) + Recipient string `json:"recipient"` // eth address(20 bytes) +} + type AirdropApproval struct { TokenIndex uint64 `json:"token_index"` TokenSymbol string `json:"token_symbol"` @@ -37,7 +58,7 @@ func (msg AirdropApproval) GetInvolvedAddresses() []sdk.AccAddress { // GetSignBytes implements types.Msg. func (msg AirdropApproval) GetSignBytes() []byte { - b, err := json.Marshal(msg) + b, err := json.Marshal(newAirDropApprovalSignData(msg.TokenIndex, msg.TokenSymbol, msg.Amount, msg.Recipient)) if err != nil { panic(err) } From a735cbc47030fd4e22bb6b115e9f3f29b0db81bd Mon Sep 17 00:00:00 2001 From: j75689 Date: Tue, 14 Nov 2023 17:52:01 +0800 Subject: [PATCH 06/17] fix: enforce the eth address to hex format --- plugins/airdrop/client/cli/tx.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plugins/airdrop/client/cli/tx.go b/plugins/airdrop/client/cli/tx.go index 466d34632..23796f1c0 100644 --- a/plugins/airdrop/client/cli/tx.go +++ b/plugins/airdrop/client/cli/tx.go @@ -4,6 +4,7 @@ import ( "encoding/hex" "fmt" + "github.com/ethereum/go-ethereum/common" "github.com/spf13/cobra" "github.com/spf13/viper" @@ -44,7 +45,7 @@ func GetApprovalCmd(cdc *codec.Codec) *cobra.Command { tokenIndex := viper.GetInt64(flagTokenIndex) tokenSymbol := viper.GetString(flagTokenSymbol) recipient := viper.GetString(flagRecipient) - msg := airdrop.NewAirdropApprovalMsg(uint64(tokenIndex), tokenSymbol, uint64(amount), recipient) + msg := airdrop.NewAirdropApprovalMsg(uint64(tokenIndex), tokenSymbol, uint64(amount), common.HexToAddress(recipient).Hex()) sdkErr := msg.ValidateBasic() if sdkErr != nil { From 82ea9a8a90dda23ffa699a4409838dd3f84065b0 Mon Sep 17 00:00:00 2001 From: j75689 Date: Thu, 16 Nov 2023 10:07:35 +0800 Subject: [PATCH 07/17] refactor --- go.mod | 2 +- go.sum | 4 ++-- plugins/bridge/handler.go | 3 --- plugins/tokens/freeze/handler.go | 5 ++++- plugins/tokens/issue/handler.go | 9 +++------ plugins/tokens/issue/handler_mini.go | 6 ------ plugins/tokens/plugin.go | 3 +++ plugins/tokens/swap/handler.go | 12 ++++++------ plugins/tokens/timelock/handler.go | 12 ++++++------ 9 files changed, 25 insertions(+), 31 deletions(-) diff --git a/go.mod b/go.mod index 50441e2cc..af03846af 100644 --- a/go.mod +++ b/go.mod @@ -165,7 +165,7 @@ require ( replace ( github.com/Shopify/sarama v1.26.1 => github.com/Shopify/sarama v1.21.0 - github.com/cosmos/cosmos-sdk => github.com/j75689/bnc-cosmos-sdk v0.0.0-20230828031047-de8de0dae3cf //github.com/bnb-chain/bnc-cosmos-sdk v0.26.6 + github.com/cosmos/cosmos-sdk => github.com/j75689/bnc-cosmos-sdk v0.0.0-20231116015058-f4c4b6cf4304 //github.com/bnb-chain/bnc-cosmos-sdk v0.26.6 github.com/grpc-ecosystem/grpc-gateway/v2 => github.com/prysmaticlabs/grpc-gateway/v2 v2.3.1-0.20210702154020-550e1cd83ec1 github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d => github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 github.com/tendermint/go-amino => github.com/bnb-chain/bnc-go-amino v0.14.1-binance.2 diff --git a/go.sum b/go.sum index 15f5ab4cf..6328317e3 100644 --- a/go.sum +++ b/go.sum @@ -787,8 +787,8 @@ github.com/iris-contrib/jade v1.1.4/go.mod h1:EDqR+ur9piDl6DUgs6qRrlfzmlx/D5Uybo github.com/iris-contrib/pongo2 v0.0.1/go.mod h1:Ssh+00+3GAZqSQb30AvBRNxBx7rf0GqwkjqxNd0u65g= github.com/iris-contrib/schema v0.0.1/go.mod h1:urYA3uvUNG1TIIjOSCzHr9/LmbQo8LrOcOqfqxa4hXw= github.com/iris-contrib/schema v0.0.6/go.mod h1:iYszG0IOsuIsfzjymw1kMzTL8YQcCWlm65f3wX8J5iA= -github.com/j75689/bnc-cosmos-sdk v0.0.0-20230828031047-de8de0dae3cf h1:V7pDFgJSxT0EBqD0ZNB6tJjey1YatkVwkxhmYboCN3Q= -github.com/j75689/bnc-cosmos-sdk v0.0.0-20230828031047-de8de0dae3cf/go.mod h1:OjdXpDHofs6gcPLM9oGD+mm8DPc6Lsevz0Kia53zt3Q= +github.com/j75689/bnc-cosmos-sdk v0.0.0-20231116015058-f4c4b6cf4304 h1:pRwSJU1SnmKNmpK8yIdTEoeny2MbKoQPvmvoY/BUaA8= +github.com/j75689/bnc-cosmos-sdk v0.0.0-20231116015058-f4c4b6cf4304/go.mod h1:OjdXpDHofs6gcPLM9oGD+mm8DPc6Lsevz0Kia53zt3Q= github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= github.com/jbenet/go-cienv v0.1.0/go.mod h1:TqNnHUmJgXau0nCzC7kXWeotg3J9W34CUv5Djy1+FlA= diff --git a/plugins/bridge/handler.go b/plugins/bridge/handler.go index aad7e2f10..006142809 100644 --- a/plugins/bridge/handler.go +++ b/plugins/bridge/handler.go @@ -33,9 +33,6 @@ func NewHandler(keeper Keeper) sdk.Handler { } func handleUnbindMsg(ctx sdk.Context, keeper Keeper, msg UnbindMsg) sdk.Result { - if sdk.IsUpgrade(sdk.BEPXXX) { - return sdk.ErrMsgNotSupported("").Result() - } // check is native symbol if msg.Symbol == cmmtypes.NativeTokenSymbol { return types.ErrInvalidSymbol("can not unbind native symbol").Result() diff --git a/plugins/tokens/freeze/handler.go b/plugins/tokens/freeze/handler.go index 6f6a76a16..896a4e9da 100644 --- a/plugins/tokens/freeze/handler.go +++ b/plugins/tokens/freeze/handler.go @@ -19,6 +19,9 @@ func NewHandler(tokenMapper store.Mapper, accKeeper auth.AccountKeeper, keeper b return func(ctx sdk.Context, msg sdk.Msg) sdk.Result { switch msg := msg.(type) { case FreezeMsg: + if sdk.IsUpgrade(sdk.BCFusionFirstHardFork) { + return sdk.ErrMsgNotSupported("").Result() + } return handleFreezeToken(ctx, tokenMapper, accKeeper, keeper, msg) case UnfreezeMsg: return handleUnfreezeToken(ctx, tokenMapper, accKeeper, keeper, msg) @@ -30,7 +33,7 @@ func NewHandler(tokenMapper store.Mapper, accKeeper auth.AccountKeeper, keeper b } func handleFreezeToken(ctx sdk.Context, tokenMapper store.Mapper, accKeeper auth.AccountKeeper, keeper bank.Keeper, msg FreezeMsg) sdk.Result { - if sdk.IsUpgrade(sdk.BEPXXX) { + if sdk.IsUpgrade(sdk.BCFusionFirstHardFork) { return sdk.ErrMsgNotSupported("").Result() } freezeAmount := msg.Amount diff --git a/plugins/tokens/issue/handler.go b/plugins/tokens/issue/handler.go index b3506911b..9ec8de05c 100644 --- a/plugins/tokens/issue/handler.go +++ b/plugins/tokens/issue/handler.go @@ -21,6 +21,9 @@ import ( // NewHandler creates a new token issue message handler func NewHandler(tokenMapper store.Mapper, keeper bank.Keeper) sdk.Handler { return func(ctx sdk.Context, msg sdk.Msg) sdk.Result { + if sdk.IsUpgrade(sdk.BCFusionFirstHardFork) { + return sdk.ErrMsgNotSupported("").Result() + } switch msg := msg.(type) { case IssueMsg: return handleIssueToken(ctx, tokenMapper, keeper, msg) @@ -38,9 +41,6 @@ func NewHandler(tokenMapper store.Mapper, keeper bank.Keeper) sdk.Handler { } func handleIssueToken(ctx sdk.Context, tokenMapper store.Mapper, bankKeeper bank.Keeper, msg IssueMsg) sdk.Result { - if sdk.IsUpgrade(sdk.BEPXXX) { - return sdk.ErrMsgNotSupported("").Result() - } errLogMsg := "issue token failed" symbol := strings.ToUpper(msg.Symbol) logger := log.With("module", "token", "symbol", symbol, "name", msg.Name, "total_supply", msg.TotalSupply, "issuer", msg.From) @@ -67,9 +67,6 @@ func handleIssueToken(ctx sdk.Context, tokenMapper store.Mapper, bankKeeper bank // Mint MiniToken is also handled by this function func handleMintToken(ctx sdk.Context, tokenMapper store.Mapper, bankKeeper bank.Keeper, msg MintMsg) sdk.Result { - if sdk.IsUpgrade(sdk.BEPXXX) { - return sdk.ErrMsgNotSupported("").Result() - } symbol := strings.ToUpper(msg.Symbol) logger := log.With("module", "token", "symbol", symbol, "amount", msg.Amount, "minter", msg.From) diff --git a/plugins/tokens/issue/handler_mini.go b/plugins/tokens/issue/handler_mini.go index e44e03a8e..f41379444 100644 --- a/plugins/tokens/issue/handler_mini.go +++ b/plugins/tokens/issue/handler_mini.go @@ -13,9 +13,6 @@ import ( ) func handleIssueMiniToken(ctx sdk.Context, tokenMapper store.Mapper, bankKeeper bank.Keeper, msg IssueMiniMsg) sdk.Result { - if sdk.IsUpgrade(sdk.BEPXXX) { - return sdk.ErrMsgNotSupported("").Result() - } errLogMsg := "issue miniToken failed" origSymbol := strings.ToUpper(msg.Symbol) logger := log.With("module", "mini-token", "symbol", origSymbol, "name", msg.Name, "total_supply", msg.TotalSupply, "issuer", msg.From) @@ -37,9 +34,6 @@ func handleIssueMiniToken(ctx sdk.Context, tokenMapper store.Mapper, bankKeeper } func handleIssueTinyToken(ctx sdk.Context, tokenMapper store.Mapper, bankKeeper bank.Keeper, msg IssueTinyMsg) sdk.Result { - if sdk.IsUpgrade(sdk.BEPXXX) { - return sdk.ErrMsgNotSupported("").Result() - } errLogMsg := "issue tinyToken failed" origSymbol := strings.ToUpper(msg.Symbol) logger := log.With("module", "mini-token", "symbol", origSymbol, "name", msg.Name, "total_supply", msg.TotalSupply, "issuer", msg.From) diff --git a/plugins/tokens/plugin.go b/plugins/tokens/plugin.go index f5f0dbdd6..09f791794 100644 --- a/plugins/tokens/plugin.go +++ b/plugins/tokens/plugin.go @@ -56,6 +56,9 @@ const ( ) func EndBlocker(ctx sdk.Context, timelockKeeper timelock.Keeper, swapKeeper swap.Keeper) { + if !sdk.IsUpgrade(sdk.BCFusionSecondHardFork) { + return + } logger := bnclog.With("module", "tokens") logger.Info("unlock the time locks", "blockHeight", ctx.BlockHeight()) diff --git a/plugins/tokens/swap/handler.go b/plugins/tokens/swap/handler.go index 75da5db06..384fa824b 100644 --- a/plugins/tokens/swap/handler.go +++ b/plugins/tokens/swap/handler.go @@ -12,8 +12,14 @@ func NewHandler(kp Keeper) sdk.Handler { return func(ctx sdk.Context, msg sdk.Msg) sdk.Result { switch msg := msg.(type) { case HTLTMsg: + if sdk.IsUpgrade(sdk.BCFusionFirstHardFork) { + return sdk.ErrMsgNotSupported("").Result() + } return handleHashTimerLockedTransfer(ctx, kp, msg) case DepositHTLTMsg: + if sdk.IsUpgrade(sdk.BCFusionFirstHardFork) { + return sdk.ErrMsgNotSupported("").Result() + } return handleDepositHashTimerLockedTransfer(ctx, kp, msg) case ClaimHTLTMsg: return handleClaimHashTimerLockedTransfer(ctx, kp, msg) @@ -27,9 +33,6 @@ func NewHandler(kp Keeper) sdk.Handler { } func handleHashTimerLockedTransfer(ctx sdk.Context, kp Keeper, msg HTLTMsg) sdk.Result { - if sdk.IsUpgrade(sdk.BEPXXX) { - return sdk.ErrMsgNotSupported("").Result() - } header := ctx.BlockHeader() blockTime := header.Time.Unix() if msg.Timestamp < blockTime-ThirtyMinutes || msg.Timestamp > blockTime+FifteenMinutes { @@ -69,9 +72,6 @@ func handleHashTimerLockedTransfer(ctx sdk.Context, kp Keeper, msg HTLTMsg) sdk. } func handleDepositHashTimerLockedTransfer(ctx sdk.Context, kp Keeper, msg DepositHTLTMsg) sdk.Result { - if sdk.IsUpgrade(sdk.BEPXXX) { - return sdk.ErrMsgNotSupported("").Result() - } swap := kp.GetSwap(ctx, msg.SwapID) if swap == nil { return ErrNonExistSwapID(fmt.Sprintf("No matched swap with swapID %v", msg.SwapID)).Result() diff --git a/plugins/tokens/timelock/handler.go b/plugins/tokens/timelock/handler.go index d47d67052..f8204b5e0 100644 --- a/plugins/tokens/timelock/handler.go +++ b/plugins/tokens/timelock/handler.go @@ -11,10 +11,16 @@ func NewHandler(keeper Keeper) sdk.Handler { return func(ctx sdk.Context, msg sdk.Msg) sdk.Result { switch msg := msg.(type) { case TimeLockMsg: + if sdk.IsUpgrade(sdk.BCFusionFirstHardFork) { + return sdk.ErrMsgNotSupported("").Result() + } return handleTimeLock(ctx, keeper, msg) case TimeUnlockMsg: return handleTimeUnlock(ctx, keeper, msg) case TimeRelockMsg: + if sdk.IsUpgrade(sdk.BCFusionFirstHardFork) { + return sdk.ErrMsgNotSupported("").Result() + } return handleTimeRelock(ctx, keeper, msg) default: errMsg := fmt.Sprintf("unrecognized time lock message type: %T", msg) @@ -24,9 +30,6 @@ func NewHandler(keeper Keeper) sdk.Handler { } func handleTimeLock(ctx sdk.Context, keeper Keeper, msg TimeLockMsg) sdk.Result { - if sdk.IsUpgrade(sdk.BEPXXX) { - return sdk.ErrMsgNotSupported("").Result() - } record, err := keeper.TimeLock(ctx, msg.From, msg.Description, msg.Amount, time.Unix(msg.LockTime, 0)) if err != nil { return err.Result() @@ -39,9 +42,6 @@ func handleTimeLock(ctx sdk.Context, keeper Keeper, msg TimeLockMsg) sdk.Result } func handleTimeRelock(ctx sdk.Context, keeper Keeper, msg TimeRelockMsg) sdk.Result { - if sdk.IsUpgrade(sdk.BEPXXX) { - return sdk.ErrMsgNotSupported("").Result() - } newRecord := TimeLockRecord{ Description: msg.Description, Amount: msg.Amount, From a3e37ebce015c83e853b06f15d70038d7dd8c129 Mon Sep 17 00:00:00 2001 From: j75689 Date: Thu, 16 Nov 2023 15:37:38 +0800 Subject: [PATCH 08/17] fix: remove tokenIndex for airdrop approval --- plugins/airdrop/client/cli/tx.go | 5 +---- plugins/airdrop/msg.go | 10 +++------- 2 files changed, 4 insertions(+), 11 deletions(-) diff --git a/plugins/airdrop/client/cli/tx.go b/plugins/airdrop/client/cli/tx.go index 23796f1c0..866bab107 100644 --- a/plugins/airdrop/client/cli/tx.go +++ b/plugins/airdrop/client/cli/tx.go @@ -26,7 +26,6 @@ import ( const ( flagAmount = "amount" - flagTokenIndex = "token-index" flagTokenSymbol = "token-symbol" flagRecipient = "recipient" ) @@ -42,10 +41,9 @@ func GetApprovalCmd(cdc *codec.Codec) *cobra.Command { WithAccountDecoder(authcmd.GetAccountDecoder(cdc)) amount := viper.GetInt64(flagAmount) - tokenIndex := viper.GetInt64(flagTokenIndex) tokenSymbol := viper.GetString(flagTokenSymbol) recipient := viper.GetString(flagRecipient) - msg := airdrop.NewAirdropApprovalMsg(uint64(tokenIndex), tokenSymbol, uint64(amount), common.HexToAddress(recipient).Hex()) + msg := airdrop.NewAirdropApprovalMsg(tokenSymbol, uint64(amount), common.HexToAddress(recipient).Hex()) sdkErr := msg.ValidateBasic() if sdkErr != nil { @@ -55,7 +53,6 @@ func GetApprovalCmd(cdc *codec.Codec) *cobra.Command { }, } - cmd.Flags().Int64(flagTokenIndex, 0, "owner token index") cmd.Flags().String(flagTokenSymbol, "", "owner token symbol") cmd.Flags().Int64(flagAmount, 0, "amount of token") cmd.Flags().String(flagRecipient, "", "bsc recipient address") diff --git a/plugins/airdrop/msg.go b/plugins/airdrop/msg.go index b57a78886..4d932da67 100644 --- a/plugins/airdrop/msg.go +++ b/plugins/airdrop/msg.go @@ -16,21 +16,19 @@ const ( var _ sdk.Msg = AirdropApproval{} -func NewAirdropApprovalMsg(tokenIndex uint64, tokenSymbol string, amount uint64, recipient string) AirdropApproval { +func NewAirdropApprovalMsg(tokenSymbol string, amount uint64, recipient string) AirdropApproval { return AirdropApproval{ - TokenIndex: tokenIndex, TokenSymbol: tokenSymbol, Amount: amount, Recipient: recipient, } } -func newAirDropApprovalSignData(tokenIndex uint64, tokenSymbol string, amount uint64, recipient string) airDropApprovalSignData { +func newAirDropApprovalSignData(tokenSymbol string, amount uint64, recipient string) airDropApprovalSignData { var tokenSymbolBytes [32]byte copy(tokenSymbolBytes[:], []byte(tokenSymbol)) return airDropApprovalSignData{ - TokenIndex: hex.EncodeToString(big.NewInt(int64(tokenIndex)).FillBytes(make([]byte, 32))), TokenSymbol: hex.EncodeToString(tokenSymbolBytes[:]), Amount: hex.EncodeToString(big.NewInt(int64(amount)).FillBytes(make([]byte, 32))), Recipient: recipient, @@ -38,14 +36,12 @@ func newAirDropApprovalSignData(tokenIndex uint64, tokenSymbol string, amount ui } type airDropApprovalSignData struct { - TokenIndex string `json:"token_index"` // hex string(32 bytes) TokenSymbol string `json:"token_symbol"` // hex string(32 bytes) Amount string `json:"amount"` // hex string(32 bytes) Recipient string `json:"recipient"` // eth address(20 bytes) } type AirdropApproval struct { - TokenIndex uint64 `json:"token_index"` TokenSymbol string `json:"token_symbol"` Amount uint64 `json:"amount"` Recipient string `json:"recipient"` // eth address @@ -58,7 +54,7 @@ func (msg AirdropApproval) GetInvolvedAddresses() []sdk.AccAddress { // GetSignBytes implements types.Msg. func (msg AirdropApproval) GetSignBytes() []byte { - b, err := json.Marshal(newAirDropApprovalSignData(msg.TokenIndex, msg.TokenSymbol, msg.Amount, msg.Recipient)) + b, err := json.Marshal(newAirDropApprovalSignData(msg.TokenSymbol, msg.Amount, msg.Recipient)) if err != nil { panic(err) } From 6fcbb7b26ca48cbdedcd075acc493fe720b31d6a Mon Sep 17 00:00:00 2001 From: j75689 Date: Thu, 23 Nov 2023 15:49:27 +0800 Subject: [PATCH 09/17] fix comments --- plugins/tokens/freeze/handler.go | 3 --- plugins/tokens/plugin.go | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/plugins/tokens/freeze/handler.go b/plugins/tokens/freeze/handler.go index 896a4e9da..1a1b21015 100644 --- a/plugins/tokens/freeze/handler.go +++ b/plugins/tokens/freeze/handler.go @@ -33,9 +33,6 @@ func NewHandler(tokenMapper store.Mapper, accKeeper auth.AccountKeeper, keeper b } func handleFreezeToken(ctx sdk.Context, tokenMapper store.Mapper, accKeeper auth.AccountKeeper, keeper bank.Keeper, msg FreezeMsg) sdk.Result { - if sdk.IsUpgrade(sdk.BCFusionFirstHardFork) { - return sdk.ErrMsgNotSupported("").Result() - } freezeAmount := msg.Amount symbol := strings.ToUpper(msg.Symbol) logger := log.With("module", "token", "symbol", symbol, "amount", freezeAmount, "addr", msg.From) diff --git a/plugins/tokens/plugin.go b/plugins/tokens/plugin.go index 09f791794..6f70502bc 100644 --- a/plugins/tokens/plugin.go +++ b/plugins/tokens/plugin.go @@ -52,7 +52,7 @@ func createQueryHandler(mapper Mapper, queryPrefix string) app.AbciQueryHandler } const ( - MaxUnlockItems = 100 + MaxUnlockItems = 10 ) func EndBlocker(ctx sdk.Context, timelockKeeper timelock.Keeper, swapKeeper swap.Keeper) { From c2ffd69ae1fb7530f4d533cf24e38539388aaf35 Mon Sep 17 00:00:00 2001 From: j75689 Date: Thu, 23 Nov 2023 16:06:39 +0800 Subject: [PATCH 10/17] fix: reuse codes --- plugins/tokens/plugin.go | 10 +++++++--- plugins/tokens/swap/handler.go | 12 ++++++++---- plugins/tokens/swap/keeper.go | 26 -------------------------- 3 files changed, 15 insertions(+), 33 deletions(-) diff --git a/plugins/tokens/plugin.go b/plugins/tokens/plugin.go index 6f70502bc..a34dd41ee 100644 --- a/plugins/tokens/plugin.go +++ b/plugins/tokens/plugin.go @@ -92,9 +92,13 @@ func EndBlocker(ctx sdk.Context, timelockKeeper timelock.Keeper, swapKeeper swap var automaticSwap swap.AtomicSwap swapKeeper.CDC().MustUnmarshalBinaryBare(iterator.Value(), &automaticSwap) swapID := iterator.Key()[len(swap.HashKey):] - err := swapKeeper.Refound(ctx, swapID, &automaticSwap) - if err != nil { - logger.Error("Refound error", "error", err) + result := swap.HandleClaimHashTimerLockedTransferAfterBCFusion(ctx, swapKeeper, swap.ClaimHTLTMsg{ + From: automaticSwap.From, + SwapID: swapID, + RandomNumber: automaticSwap.RandomNumber, + }) + if !result.IsOK() { + logger.Error("Refound error", "swapId", swapID) continue } i++ diff --git a/plugins/tokens/swap/handler.go b/plugins/tokens/swap/handler.go index 384fa824b..0cc912f70 100644 --- a/plugins/tokens/swap/handler.go +++ b/plugins/tokens/swap/handler.go @@ -22,7 +22,7 @@ func NewHandler(kp Keeper) sdk.Handler { } return handleDepositHashTimerLockedTransfer(ctx, kp, msg) case ClaimHTLTMsg: - return handleClaimHashTimerLockedTransfer(ctx, kp, msg) + return handleClaimHashTimerLockedTransfer(ctx, kp, msg, false) case RefundHTLTMsg: return handleRefundHashTimerLockedTransfer(ctx, kp, msg) default: @@ -107,7 +107,11 @@ func handleDepositHashTimerLockedTransfer(ctx sdk.Context, kp Keeper, msg Deposi } -func handleClaimHashTimerLockedTransfer(ctx sdk.Context, kp Keeper, msg ClaimHTLTMsg) sdk.Result { +func HandleClaimHashTimerLockedTransferAfterBCFusion(ctx sdk.Context, kp Keeper, msg ClaimHTLTMsg) sdk.Result { + return handleClaimHashTimerLockedTransfer(ctx, kp, msg, true) +} + +func handleClaimHashTimerLockedTransfer(ctx sdk.Context, kp Keeper, msg ClaimHTLTMsg, isBCFusionRefund bool) sdk.Result { swap := kp.GetSwap(ctx, msg.SwapID) if swap == nil { return ErrNonExistSwapID(fmt.Sprintf("No matched swap with swapID %v", msg.SwapID)).Result() @@ -115,11 +119,11 @@ func handleClaimHashTimerLockedTransfer(ctx sdk.Context, kp Keeper, msg ClaimHTL if swap.Status != Open { return ErrUnexpectedSwapStatus(fmt.Sprintf("Expected swap status is Open, actually it is %s", swap.Status.String())).Result() } - if swap.ExpireHeight <= ctx.BlockHeight() { + if !isBCFusionRefund && swap.ExpireHeight <= ctx.BlockHeight() { return ErrClaimExpiredSwap(fmt.Sprintf("Current block height is %d, the swap expire height(%d) is passed", ctx.BlockHeight(), swap.ExpireHeight)).Result() } - if !bytes.Equal(CalculateRandomHash(msg.RandomNumber, swap.Timestamp), swap.RandomNumberHash) { + if !isBCFusionRefund && !bytes.Equal(CalculateRandomHash(msg.RandomNumber, swap.Timestamp), swap.RandomNumberHash) { return ErrMismatchedRandomNumber("Mismatched random number").Result() } diff --git a/plugins/tokens/swap/keeper.go b/plugins/tokens/swap/keeper.go index 44616848c..060f77473 100644 --- a/plugins/tokens/swap/keeper.go +++ b/plugins/tokens/swap/keeper.go @@ -169,29 +169,3 @@ func (kp *Keeper) getIndex(ctx sdk.Context) int64 { } return int64(binary.BigEndian.Uint64(bz)) } - -func (kp *Keeper) Refound(ctx sdk.Context, swapID SwapBytes, swap *AtomicSwap) error { - if swap.Status != Open { - return fmt.Errorf(fmt.Sprint("Invalid swap status", "status", swap.Status)) - } - if !swap.OutAmount.IsZero() { - _, err := kp.ck.SendCoins(ctx, AtomicSwapCoinsAccAddr, swap.From, swap.OutAmount) - if err != nil { - return fmt.Errorf(fmt.Sprint("Failed to send coins", "sender", AtomicSwapCoinsAccAddr.String(), "recipient", swap.From.String(), "amount", swap.OutAmount.String(), "err", err.Error())) - } - } - if !swap.InAmount.IsZero() { - _, err := kp.ck.SendCoins(ctx, AtomicSwapCoinsAccAddr, swap.To, swap.InAmount) - if err != nil { - return fmt.Errorf(fmt.Sprint("Failed to send coins", "sender", AtomicSwapCoinsAccAddr.String(), "recipient", swap.To.String(), "amount", swap.InAmount.String(), "err", err.Error())) - } - } - - swap.Status = Completed - swap.ClosedTime = ctx.BlockHeader().Time.Unix() - err := kp.CloseSwap(ctx, swapID, swap) - if err != nil { - return fmt.Errorf(fmt.Sprint("Failed to close swap", "err", err.Error())) - } - return nil -} From 4fe054d2f39cf7720a0e01feaa1e8f440f547734 Mon Sep 17 00:00:00 2001 From: j75689 Date: Mon, 27 Nov 2023 19:51:11 +0800 Subject: [PATCH 11/17] fix: enforce recipient address to lower case when signing data to be compatible with the contract --- plugins/airdrop/client/cli/tx.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/plugins/airdrop/client/cli/tx.go b/plugins/airdrop/client/cli/tx.go index 866bab107..bdd3f57c9 100644 --- a/plugins/airdrop/client/cli/tx.go +++ b/plugins/airdrop/client/cli/tx.go @@ -3,6 +3,7 @@ package cli import ( "encoding/hex" "fmt" + "strings" "github.com/ethereum/go-ethereum/common" "github.com/spf13/cobra" @@ -43,7 +44,8 @@ func GetApprovalCmd(cdc *codec.Codec) *cobra.Command { amount := viper.GetInt64(flagAmount) tokenSymbol := viper.GetString(flagTokenSymbol) recipient := viper.GetString(flagRecipient) - msg := airdrop.NewAirdropApprovalMsg(tokenSymbol, uint64(amount), common.HexToAddress(recipient).Hex()) + + msg := airdrop.NewAirdropApprovalMsg(tokenSymbol, uint64(amount), strings.ToLower(common.HexToAddress(recipient).Hex())) sdkErr := msg.ValidateBasic() if sdkErr != nil { From feee0f227d47face0196a257455e707243d55192 Mon Sep 17 00:00:00 2001 From: j75689 Date: Tue, 28 Nov 2023 17:51:18 +0800 Subject: [PATCH 12/17] fix: rename airdrop to token-recover --- app/app.go | 4 +-- cmd/bnbcli/main.go | 4 +-- .../client/cli/commands.go | 6 ++-- plugins/{airdrop => recover}/client/cli/tx.go | 11 +++--- plugins/{airdrop => recover}/msg.go | 34 +++++++++---------- plugins/{airdrop => recover}/wire.go | 4 +-- 6 files changed, 31 insertions(+), 32 deletions(-) rename plugins/{airdrop => recover}/client/cli/commands.go (78%) rename plugins/{airdrop => recover}/client/cli/tx.go (89%) rename plugins/{airdrop => recover}/msg.go (63%) rename plugins/{airdrop => recover}/wire.go (56%) diff --git a/app/app.go b/app/app.go index 36328ab8b..e05039ac4 100644 --- a/app/app.go +++ b/app/app.go @@ -49,13 +49,13 @@ import ( "github.com/bnb-chain/node/common/upgrade" "github.com/bnb-chain/node/common/utils" "github.com/bnb-chain/node/plugins/account" - "github.com/bnb-chain/node/plugins/airdrop" "github.com/bnb-chain/node/plugins/bridge" bTypes "github.com/bnb-chain/node/plugins/bridge/types" "github.com/bnb-chain/node/plugins/dex" "github.com/bnb-chain/node/plugins/dex/list" "github.com/bnb-chain/node/plugins/dex/order" dextypes "github.com/bnb-chain/node/plugins/dex/types" + tokenRecover "github.com/bnb-chain/node/plugins/recover" "github.com/bnb-chain/node/plugins/tokens" "github.com/bnb-chain/node/plugins/tokens/issue" "github.com/bnb-chain/node/plugins/tokens/ownership" @@ -1158,7 +1158,7 @@ func MakeCodec() *wire.Codec { bridge.RegisterWire(cdc) oracle.RegisterWire(cdc) ibc.RegisterWire(cdc) - airdrop.RegisterWire(cdc) + tokenRecover.RegisterWire(cdc) return cdc } diff --git a/cmd/bnbcli/main.go b/cmd/bnbcli/main.go index 35bdd1dc9..7a5c95e33 100644 --- a/cmd/bnbcli/main.go +++ b/cmd/bnbcli/main.go @@ -23,10 +23,10 @@ import ( "github.com/bnb-chain/node/common" "github.com/bnb-chain/node/common/types" accountcmd "github.com/bnb-chain/node/plugins/account/client/cli" - airdropcmd "github.com/bnb-chain/node/plugins/airdrop/client/cli" apiserv "github.com/bnb-chain/node/plugins/api" bridgecmd "github.com/bnb-chain/node/plugins/bridge/client/cli" dexcmd "github.com/bnb-chain/node/plugins/dex/client/cli" + recovercmd "github.com/bnb-chain/node/plugins/recover/client/cli" tokencmd "github.com/bnb-chain/node/plugins/tokens/client/cli" "github.com/bnb-chain/node/version" ) @@ -100,7 +100,7 @@ func main() { admin.AddCommands(rootCmd, cdc) bridgecmd.AddCommands(rootCmd, cdc) sidecmd.AddCommands(rootCmd, cdc) - airdropcmd.AddCommands(rootCmd, cdc) + recovercmd.AddCommands(rootCmd, cdc) // prepare and add flags executor := cli.PrepareMainCmd(rootCmd, "BC", app.DefaultCLIHome) diff --git a/plugins/airdrop/client/cli/commands.go b/plugins/recover/client/cli/commands.go similarity index 78% rename from plugins/airdrop/client/cli/commands.go rename to plugins/recover/client/cli/commands.go index afcdeaa65..73be057dd 100644 --- a/plugins/airdrop/client/cli/commands.go +++ b/plugins/recover/client/cli/commands.go @@ -8,13 +8,13 @@ import ( func AddCommands(cmd *cobra.Command, cdc *codec.Codec) { airdropCmd := &cobra.Command{ - Use: "airdrop", - Short: "airdrop commands", + Use: "recover", + Short: "recover commands", } airdropCmd.AddCommand( client.PostCommands( - GetApprovalCmd(cdc), + SignTokenRecoverRequestCmd(cdc), )..., ) diff --git a/plugins/airdrop/client/cli/tx.go b/plugins/recover/client/cli/tx.go similarity index 89% rename from plugins/airdrop/client/cli/tx.go rename to plugins/recover/client/cli/tx.go index bdd3f57c9..736805dd7 100644 --- a/plugins/airdrop/client/cli/tx.go +++ b/plugins/recover/client/cli/tx.go @@ -22,7 +22,7 @@ import ( "github.com/tendermint/tendermint/crypto/tmhash" cmn "github.com/tendermint/tendermint/libs/common" - "github.com/bnb-chain/node/plugins/airdrop" + airdrop "github.com/bnb-chain/node/plugins/recover" ) const ( @@ -31,10 +31,10 @@ const ( flagRecipient = "recipient" ) -func GetApprovalCmd(cdc *codec.Codec) *cobra.Command { +func SignTokenRecoverRequestCmd(cdc *codec.Codec) *cobra.Command { cmd := &cobra.Command{ - Use: "approval", - Short: "get airdrop approval sign data", + Use: "sign-token-recover-request", + Short: "get token recover request sign data", RunE: func(cmd *cobra.Command, args []string) error { txBldr := authtxb.NewTxBuilderFromCLI().WithCodec(cdc) cliCtx := context.NewCLIContext(). @@ -44,8 +44,7 @@ func GetApprovalCmd(cdc *codec.Codec) *cobra.Command { amount := viper.GetInt64(flagAmount) tokenSymbol := viper.GetString(flagTokenSymbol) recipient := viper.GetString(flagRecipient) - - msg := airdrop.NewAirdropApprovalMsg(tokenSymbol, uint64(amount), strings.ToLower(common.HexToAddress(recipient).Hex())) + msg := airdrop.NewTokenRecoverRequestMsg(tokenSymbol, uint64(amount), strings.ToLower(common.HexToAddress(recipient).Hex())) sdkErr := msg.ValidateBasic() if sdkErr != nil { diff --git a/plugins/airdrop/msg.go b/plugins/recover/msg.go similarity index 63% rename from plugins/airdrop/msg.go rename to plugins/recover/msg.go index 4d932da67..7c87b3b2f 100644 --- a/plugins/airdrop/msg.go +++ b/plugins/recover/msg.go @@ -1,4 +1,4 @@ -package airdrop +package recover import ( "encoding/hex" @@ -10,51 +10,51 @@ import ( ) const ( - Route = "airdrop" - MsgType = "airdrop_approval" + Route = "recover" + MsgType = "request_token" ) -var _ sdk.Msg = AirdropApproval{} +var _ sdk.Msg = TokenRecoverRequest{} -func NewAirdropApprovalMsg(tokenSymbol string, amount uint64, recipient string) AirdropApproval { - return AirdropApproval{ +func NewTokenRecoverRequestMsg(tokenSymbol string, amount uint64, recipient string) TokenRecoverRequest { + return TokenRecoverRequest{ TokenSymbol: tokenSymbol, Amount: amount, Recipient: recipient, } } -func newAirDropApprovalSignData(tokenSymbol string, amount uint64, recipient string) airDropApprovalSignData { +func newTokenRecoverRequestSignData(tokenSymbol string, amount uint64, recipient string) tokenRecoverRequestSignData { var tokenSymbolBytes [32]byte copy(tokenSymbolBytes[:], []byte(tokenSymbol)) - return airDropApprovalSignData{ + return tokenRecoverRequestSignData{ TokenSymbol: hex.EncodeToString(tokenSymbolBytes[:]), Amount: hex.EncodeToString(big.NewInt(int64(amount)).FillBytes(make([]byte, 32))), Recipient: recipient, } } -type airDropApprovalSignData struct { +type tokenRecoverRequestSignData struct { TokenSymbol string `json:"token_symbol"` // hex string(32 bytes) Amount string `json:"amount"` // hex string(32 bytes) Recipient string `json:"recipient"` // eth address(20 bytes) } -type AirdropApproval struct { +type TokenRecoverRequest struct { TokenSymbol string `json:"token_symbol"` Amount uint64 `json:"amount"` Recipient string `json:"recipient"` // eth address } // GetInvolvedAddresses implements types.Msg. -func (msg AirdropApproval) GetInvolvedAddresses() []sdk.AccAddress { +func (msg TokenRecoverRequest) GetInvolvedAddresses() []sdk.AccAddress { return msg.GetSigners() } // GetSignBytes implements types.Msg. -func (msg AirdropApproval) GetSignBytes() []byte { - b, err := json.Marshal(newAirDropApprovalSignData(msg.TokenSymbol, msg.Amount, msg.Recipient)) +func (msg TokenRecoverRequest) GetSignBytes() []byte { + b, err := json.Marshal(newTokenRecoverRequestSignData(msg.TokenSymbol, msg.Amount, msg.Recipient)) if err != nil { panic(err) } @@ -62,24 +62,24 @@ func (msg AirdropApproval) GetSignBytes() []byte { } // GetSigners implements types.Msg. -func (m AirdropApproval) GetSigners() []sdk.AccAddress { +func (m TokenRecoverRequest) GetSigners() []sdk.AccAddress { // This is not a real on-chain transaction // We can get signer from the public key. return []sdk.AccAddress{} } // Route implements types.Msg. -func (AirdropApproval) Route() string { +func (TokenRecoverRequest) Route() string { return Route } // Type implements types.Msg. -func (AirdropApproval) Type() string { +func (TokenRecoverRequest) Type() string { return MsgType } // ValidateBasic implements types.Msg. -func (msg AirdropApproval) ValidateBasic() sdk.Error { +func (msg TokenRecoverRequest) ValidateBasic() sdk.Error { if msg.TokenSymbol == "" { return sdk.ErrUnknownRequest("Invalid token symbol") } diff --git a/plugins/airdrop/wire.go b/plugins/recover/wire.go similarity index 56% rename from plugins/airdrop/wire.go rename to plugins/recover/wire.go index 466c4b866..0624360a5 100644 --- a/plugins/airdrop/wire.go +++ b/plugins/recover/wire.go @@ -1,4 +1,4 @@ -package airdrop +package recover import ( "github.com/bnb-chain/node/wire" @@ -6,5 +6,5 @@ import ( // Register concrete types on wire codec func RegisterWire(cdc *wire.Codec) { - cdc.RegisterConcrete(AirdropApproval{}, "airdrop/AirdropApproval", nil) + cdc.RegisterConcrete(TokenRecoverRequest{}, "recover/TokenRecoverRequest", nil) } From 610de96988c4fdd5a32adb46b5ef052a49a6e2f3 Mon Sep 17 00:00:00 2001 From: j75689 Date: Wed, 29 Nov 2023 11:35:28 +0800 Subject: [PATCH 13/17] fix: update cosmos-sdk --- go.mod | 5 +++-- go.sum | 4 ++-- plugins/tokens/freeze/handler.go | 2 +- plugins/tokens/issue/handler.go | 2 +- plugins/tokens/plugin.go | 2 +- plugins/tokens/swap/handler.go | 4 ++-- plugins/tokens/timelock/handler.go | 4 ++-- 7 files changed, 12 insertions(+), 11 deletions(-) diff --git a/go.mod b/go.mod index af03846af..780457fa9 100644 --- a/go.mod +++ b/go.mod @@ -7,6 +7,7 @@ require ( github.com/cosmos/cosmos-sdk v0.25.0 github.com/deathowl/go-metrics-prometheus v0.0.0-20200518174047-74482eab5bfb github.com/eapache/go-resiliency v1.1.0 + github.com/ethereum/go-ethereum v1.11.3 github.com/go-kit/kit v0.10.0 github.com/google/btree v1.0.0 github.com/gorilla/mux v1.8.0 @@ -48,7 +49,6 @@ require ( github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21 // indirect github.com/eapache/queue v1.1.0 // indirect github.com/etcd-io/bbolt v1.3.3 // indirect - github.com/ethereum/go-ethereum v1.11.3 // indirect github.com/ferranbt/fastssz v0.0.0-20210526181520-7df50c8568f8 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect github.com/go-logfmt/logfmt v0.5.1 // indirect @@ -165,7 +165,8 @@ require ( replace ( github.com/Shopify/sarama v1.26.1 => github.com/Shopify/sarama v1.21.0 - github.com/cosmos/cosmos-sdk => github.com/j75689/bnc-cosmos-sdk v0.0.0-20231116015058-f4c4b6cf4304 //github.com/bnb-chain/bnc-cosmos-sdk v0.26.6 + // TODO: bump to official release + github.com/cosmos/cosmos-sdk => github.com/j75689/bnc-cosmos-sdk v0.0.0-20231129030639-0bac8422dcb4 github.com/grpc-ecosystem/grpc-gateway/v2 => github.com/prysmaticlabs/grpc-gateway/v2 v2.3.1-0.20210702154020-550e1cd83ec1 github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d => github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 github.com/tendermint/go-amino => github.com/bnb-chain/bnc-go-amino v0.14.1-binance.2 diff --git a/go.sum b/go.sum index 6328317e3..c76c3abd1 100644 --- a/go.sum +++ b/go.sum @@ -787,8 +787,8 @@ github.com/iris-contrib/jade v1.1.4/go.mod h1:EDqR+ur9piDl6DUgs6qRrlfzmlx/D5Uybo github.com/iris-contrib/pongo2 v0.0.1/go.mod h1:Ssh+00+3GAZqSQb30AvBRNxBx7rf0GqwkjqxNd0u65g= github.com/iris-contrib/schema v0.0.1/go.mod h1:urYA3uvUNG1TIIjOSCzHr9/LmbQo8LrOcOqfqxa4hXw= github.com/iris-contrib/schema v0.0.6/go.mod h1:iYszG0IOsuIsfzjymw1kMzTL8YQcCWlm65f3wX8J5iA= -github.com/j75689/bnc-cosmos-sdk v0.0.0-20231116015058-f4c4b6cf4304 h1:pRwSJU1SnmKNmpK8yIdTEoeny2MbKoQPvmvoY/BUaA8= -github.com/j75689/bnc-cosmos-sdk v0.0.0-20231116015058-f4c4b6cf4304/go.mod h1:OjdXpDHofs6gcPLM9oGD+mm8DPc6Lsevz0Kia53zt3Q= +github.com/j75689/bnc-cosmos-sdk v0.0.0-20231129030639-0bac8422dcb4 h1:uGe9w4AzTkpmuTORXrKf35I0zpn2OfFByvxb5uOq1jk= +github.com/j75689/bnc-cosmos-sdk v0.0.0-20231129030639-0bac8422dcb4/go.mod h1:OjdXpDHofs6gcPLM9oGD+mm8DPc6Lsevz0Kia53zt3Q= github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= github.com/jbenet/go-cienv v0.1.0/go.mod h1:TqNnHUmJgXau0nCzC7kXWeotg3J9W34CUv5Djy1+FlA= diff --git a/plugins/tokens/freeze/handler.go b/plugins/tokens/freeze/handler.go index 1a1b21015..b6cabb117 100644 --- a/plugins/tokens/freeze/handler.go +++ b/plugins/tokens/freeze/handler.go @@ -19,7 +19,7 @@ func NewHandler(tokenMapper store.Mapper, accKeeper auth.AccountKeeper, keeper b return func(ctx sdk.Context, msg sdk.Msg) sdk.Result { switch msg := msg.(type) { case FreezeMsg: - if sdk.IsUpgrade(sdk.BCFusionFirstHardFork) { + if sdk.IsUpgrade(sdk.FirstSunsetFork) { return sdk.ErrMsgNotSupported("").Result() } return handleFreezeToken(ctx, tokenMapper, accKeeper, keeper, msg) diff --git a/plugins/tokens/issue/handler.go b/plugins/tokens/issue/handler.go index 9ec8de05c..82ef70444 100644 --- a/plugins/tokens/issue/handler.go +++ b/plugins/tokens/issue/handler.go @@ -21,7 +21,7 @@ import ( // NewHandler creates a new token issue message handler func NewHandler(tokenMapper store.Mapper, keeper bank.Keeper) sdk.Handler { return func(ctx sdk.Context, msg sdk.Msg) sdk.Result { - if sdk.IsUpgrade(sdk.BCFusionFirstHardFork) { + if sdk.IsUpgrade(sdk.FirstSunsetFork) { return sdk.ErrMsgNotSupported("").Result() } switch msg := msg.(type) { diff --git a/plugins/tokens/plugin.go b/plugins/tokens/plugin.go index a34dd41ee..53ddd44a7 100644 --- a/plugins/tokens/plugin.go +++ b/plugins/tokens/plugin.go @@ -56,7 +56,7 @@ const ( ) func EndBlocker(ctx sdk.Context, timelockKeeper timelock.Keeper, swapKeeper swap.Keeper) { - if !sdk.IsUpgrade(sdk.BCFusionSecondHardFork) { + if !sdk.IsUpgrade(sdk.SecondSunsetFork) { return } logger := bnclog.With("module", "tokens") diff --git a/plugins/tokens/swap/handler.go b/plugins/tokens/swap/handler.go index 0cc912f70..a07347e5b 100644 --- a/plugins/tokens/swap/handler.go +++ b/plugins/tokens/swap/handler.go @@ -12,12 +12,12 @@ func NewHandler(kp Keeper) sdk.Handler { return func(ctx sdk.Context, msg sdk.Msg) sdk.Result { switch msg := msg.(type) { case HTLTMsg: - if sdk.IsUpgrade(sdk.BCFusionFirstHardFork) { + if sdk.IsUpgrade(sdk.FirstSunsetFork) { return sdk.ErrMsgNotSupported("").Result() } return handleHashTimerLockedTransfer(ctx, kp, msg) case DepositHTLTMsg: - if sdk.IsUpgrade(sdk.BCFusionFirstHardFork) { + if sdk.IsUpgrade(sdk.FirstSunsetFork) { return sdk.ErrMsgNotSupported("").Result() } return handleDepositHashTimerLockedTransfer(ctx, kp, msg) diff --git a/plugins/tokens/timelock/handler.go b/plugins/tokens/timelock/handler.go index f8204b5e0..f69741954 100644 --- a/plugins/tokens/timelock/handler.go +++ b/plugins/tokens/timelock/handler.go @@ -11,14 +11,14 @@ func NewHandler(keeper Keeper) sdk.Handler { return func(ctx sdk.Context, msg sdk.Msg) sdk.Result { switch msg := msg.(type) { case TimeLockMsg: - if sdk.IsUpgrade(sdk.BCFusionFirstHardFork) { + if sdk.IsUpgrade(sdk.FirstSunsetFork) { return sdk.ErrMsgNotSupported("").Result() } return handleTimeLock(ctx, keeper, msg) case TimeUnlockMsg: return handleTimeUnlock(ctx, keeper, msg) case TimeRelockMsg: - if sdk.IsUpgrade(sdk.BCFusionFirstHardFork) { + if sdk.IsUpgrade(sdk.FirstSunsetFork) { return sdk.ErrMsgNotSupported("").Result() } return handleTimeRelock(ctx, keeper, msg) From 247b706f941ce68ef407d9865952dc5ac113660b Mon Sep 17 00:00:00 2001 From: j75689 Date: Wed, 29 Nov 2023 15:55:25 +0800 Subject: [PATCH 14/17] fix: incorrect behavior for refund swap --- plugins/tokens/plugin.go | 13 ++++++------- plugins/tokens/swap/handler.go | 26 ++++++++++++++------------ 2 files changed, 20 insertions(+), 19 deletions(-) diff --git a/plugins/tokens/plugin.go b/plugins/tokens/plugin.go index 53ddd44a7..543931da1 100644 --- a/plugins/tokens/plugin.go +++ b/plugins/tokens/plugin.go @@ -82,20 +82,19 @@ func EndBlocker(ctx sdk.Context, timelockKeeper timelock.Keeper, swapKeeper swap i++ } - iterator = swapKeeper.GetSwapIterator(ctx) - defer iterator.Close() + swapIterator := swapKeeper.GetSwapIterator(ctx) + defer swapIterator.Close() i = 0 - for ; iterator.Valid(); iterator.Next() { + for ; swapIterator.Valid(); swapIterator.Next() { if i >= MaxUnlockItems { break } var automaticSwap swap.AtomicSwap swapKeeper.CDC().MustUnmarshalBinaryBare(iterator.Value(), &automaticSwap) swapID := iterator.Key()[len(swap.HashKey):] - result := swap.HandleClaimHashTimerLockedTransferAfterBCFusion(ctx, swapKeeper, swap.ClaimHTLTMsg{ - From: automaticSwap.From, - SwapID: swapID, - RandomNumber: automaticSwap.RandomNumber, + result := swap.HandleRefundHashTimerLockedTransferAfterBCFusion(ctx, swapKeeper, swap.RefundHTLTMsg{ + From: automaticSwap.From, + SwapID: swapID, }) if !result.IsOK() { logger.Error("Refound error", "swapId", swapID) diff --git a/plugins/tokens/swap/handler.go b/plugins/tokens/swap/handler.go index a07347e5b..4ac933448 100644 --- a/plugins/tokens/swap/handler.go +++ b/plugins/tokens/swap/handler.go @@ -22,9 +22,9 @@ func NewHandler(kp Keeper) sdk.Handler { } return handleDepositHashTimerLockedTransfer(ctx, kp, msg) case ClaimHTLTMsg: - return handleClaimHashTimerLockedTransfer(ctx, kp, msg, false) + return handleClaimHashTimerLockedTransfer(ctx, kp, msg) case RefundHTLTMsg: - return handleRefundHashTimerLockedTransfer(ctx, kp, msg) + return handleRefundHashTimerLockedTransfer(ctx, kp, msg, false) default: errMsg := fmt.Sprintf("unrecognized message type: %T", msg) return sdk.ErrUnknownRequest(errMsg).Result() @@ -107,11 +107,7 @@ func handleDepositHashTimerLockedTransfer(ctx sdk.Context, kp Keeper, msg Deposi } -func HandleClaimHashTimerLockedTransferAfterBCFusion(ctx sdk.Context, kp Keeper, msg ClaimHTLTMsg) sdk.Result { - return handleClaimHashTimerLockedTransfer(ctx, kp, msg, true) -} - -func handleClaimHashTimerLockedTransfer(ctx sdk.Context, kp Keeper, msg ClaimHTLTMsg, isBCFusionRefund bool) sdk.Result { +func handleClaimHashTimerLockedTransfer(ctx sdk.Context, kp Keeper, msg ClaimHTLTMsg) sdk.Result { swap := kp.GetSwap(ctx, msg.SwapID) if swap == nil { return ErrNonExistSwapID(fmt.Sprintf("No matched swap with swapID %v", msg.SwapID)).Result() @@ -119,11 +115,11 @@ func handleClaimHashTimerLockedTransfer(ctx sdk.Context, kp Keeper, msg ClaimHTL if swap.Status != Open { return ErrUnexpectedSwapStatus(fmt.Sprintf("Expected swap status is Open, actually it is %s", swap.Status.String())).Result() } - if !isBCFusionRefund && swap.ExpireHeight <= ctx.BlockHeight() { + if swap.ExpireHeight <= ctx.BlockHeight() { return ErrClaimExpiredSwap(fmt.Sprintf("Current block height is %d, the swap expire height(%d) is passed", ctx.BlockHeight(), swap.ExpireHeight)).Result() } - if !isBCFusionRefund && !bytes.Equal(CalculateRandomHash(msg.RandomNumber, swap.Timestamp), swap.RandomNumberHash) { + if !bytes.Equal(CalculateRandomHash(msg.RandomNumber, swap.Timestamp), swap.RandomNumberHash) { return ErrMismatchedRandomNumber("Mismatched random number").Result() } @@ -168,7 +164,11 @@ func handleClaimHashTimerLockedTransfer(ctx sdk.Context, kp Keeper, msg ClaimHTL return sdk.Result{Tags: tags} } -func handleRefundHashTimerLockedTransfer(ctx sdk.Context, kp Keeper, msg RefundHTLTMsg) sdk.Result { +func HandleRefundHashTimerLockedTransferAfterBCFusion(ctx sdk.Context, kp Keeper, msg RefundHTLTMsg) sdk.Result { + return handleRefundHashTimerLockedTransfer(ctx, kp, msg, true) +} + +func handleRefundHashTimerLockedTransfer(ctx sdk.Context, kp Keeper, msg RefundHTLTMsg, isBCFusionRefund bool) sdk.Result { swap := kp.GetSwap(ctx, msg.SwapID) if swap == nil { return ErrNonExistSwapID(fmt.Sprintf("No matched swap with swapID %v", msg.SwapID)).Result() @@ -176,8 +176,10 @@ func handleRefundHashTimerLockedTransfer(ctx sdk.Context, kp Keeper, msg RefundH if swap.Status != Open { return ErrUnexpectedSwapStatus(fmt.Sprintf("Expected swap status is Open, actually it is %s", swap.Status.String())).Result() } - if ctx.BlockHeight() < swap.ExpireHeight { - return ErrRefundUnexpiredSwap(fmt.Sprintf("Current block height is %d, the expire height (%d) is still not reached", ctx.BlockHeight(), swap.ExpireHeight)).Result() + if !isBCFusionRefund { + if ctx.BlockHeight() < swap.ExpireHeight { + return ErrRefundUnexpiredSwap(fmt.Sprintf("Current block height is %d, the expire height (%d) is still not reached", ctx.BlockHeight(), swap.ExpireHeight)).Result() + } } tags := sdk.EmptyTags() From 5329e39ee6ed409e477d11a85370ee53c9aa1ca9 Mon Sep 17 00:00:00 2001 From: j75689 Date: Wed, 29 Nov 2023 17:20:58 +0800 Subject: [PATCH 15/17] fix: comments --- plugins/recover/client/cli/tx.go | 19 +++++++---------- plugins/tokens/plugin.go | 2 +- plugins/tokens/timelock/keys.go | 10 +++++++-- plugins/tokens/timelock/keys_test.go | 32 ++++++++++++++++++++++++++++ 4 files changed, 49 insertions(+), 14 deletions(-) create mode 100644 plugins/tokens/timelock/keys_test.go diff --git a/plugins/recover/client/cli/tx.go b/plugins/recover/client/cli/tx.go index 736805dd7..c7bb0f804 100644 --- a/plugins/recover/client/cli/tx.go +++ b/plugins/recover/client/cli/tx.go @@ -19,8 +19,6 @@ import ( "github.com/tendermint/tendermint/crypto" "github.com/tendermint/tendermint/crypto/secp256k1" - "github.com/tendermint/tendermint/crypto/tmhash" - cmn "github.com/tendermint/tendermint/libs/common" airdrop "github.com/bnb-chain/node/plugins/recover" ) @@ -83,17 +81,16 @@ func SignAndPrint(ctx context.CLIContext, builder authtxb.TxBuilder, msg sdk.Msg } var tx auth.StdTx - if err = builder.Codec.UnmarshalBinaryLengthPrefixed(txBytes, &tx); err == nil { - json, err := builder.Codec.MarshalJSON(tx) - if err == nil { - fmt.Printf("TX JSON: %s\n", json) - } + err = builder.Codec.UnmarshalBinaryLengthPrefixed(txBytes, &tx) + if err != nil { + + } + json, err := builder.Codec.MarshalJSON(tx) + if err != nil { + return err } - hexBytes := make([]byte, len(txBytes)*2) - hex.Encode(hexBytes, txBytes) - txHash := cmn.HexBytes(tmhash.Sum(txBytes)).String() - fmt.Printf("Transaction hash: %s, Transaction hex: %s\n", txHash, hexBytes) + fmt.Printf("TX JSON: %s\n", json) fmt.Println("Sign Message: ", string(stdMsg.Bytes())) fmt.Println("Sign Message Hash: ", hex.EncodeToString(crypto.Sha256(stdMsg.Bytes()))) sig := tx.GetSignatures()[0] diff --git a/plugins/tokens/plugin.go b/plugins/tokens/plugin.go index 543931da1..8d28010bb 100644 --- a/plugins/tokens/plugin.go +++ b/plugins/tokens/plugin.go @@ -97,7 +97,7 @@ func EndBlocker(ctx sdk.Context, timelockKeeper timelock.Keeper, swapKeeper swap SwapID: swapID, }) if !result.IsOK() { - logger.Error("Refound error", "swapId", swapID) + logger.Error("Refund error", "swapId", swapID) continue } i++ diff --git a/plugins/tokens/timelock/keys.go b/plugins/tokens/timelock/keys.go index eb181cc6b..dd306a60b 100644 --- a/plugins/tokens/timelock/keys.go +++ b/plugins/tokens/timelock/keys.go @@ -2,6 +2,7 @@ package timelock import ( "bytes" + "encoding/hex" "fmt" "strconv" @@ -18,9 +19,14 @@ func KeyRecordSubSpace(addr sdk.AccAddress) []byte { func ParseKeyRecord(key []byte) (sdk.AccAddress, int64, error) { key = bytes.TrimPrefix(key, []byte("record:")) - addr := sdk.AccAddress(key[:sdk.AddrLen]) + accKeyStr := key[:sdk.AddrLen*2] + accKeyBytes, err := hex.DecodeString(string(accKeyStr)) + if err != nil { + return []byte{}, 0, err + } + addr := sdk.AccAddress(accKeyBytes) - id, err := strconv.ParseInt(string(key[sdk.AddrLen+1:]), 10, 64) + id, err := strconv.ParseInt(string(key[sdk.AddrLen*2+1:]), 10, 64) if err != nil { return []byte{}, 0, err } diff --git a/plugins/tokens/timelock/keys_test.go b/plugins/tokens/timelock/keys_test.go new file mode 100644 index 000000000..146ac5bf3 --- /dev/null +++ b/plugins/tokens/timelock/keys_test.go @@ -0,0 +1,32 @@ +package timelock + +import ( + "testing" + + sdk "github.com/cosmos/cosmos-sdk/types" +) + +func TestParseKeyRecord(t *testing.T) { + account, err := sdk.AccAddressFromHex("5B38Da6a701c568545dCfcB03FcB875f56beddC4") + if err != nil { + t.Fatal(err) + return + } + accId := int64(1513) + key := KeyRecord(account, accId) + + acc, id, err := ParseKeyRecord([]byte(key)) + if err != nil { + t.Fatal(err) + return + } + + if !acc.Equals(account) { + t.Fatal("parse account error") + return + } + if id != accId { + t.Fatal("parse id error") + return + } +} From 4a4651d24f47aa7a639f475de213b8b484cfec40 Mon Sep 17 00:00:00 2001 From: j75689 Date: Wed, 29 Nov 2023 17:40:42 +0800 Subject: [PATCH 16/17] fix: lint error --- plugins/recover/client/cli/tx.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/recover/client/cli/tx.go b/plugins/recover/client/cli/tx.go index c7bb0f804..36576781f 100644 --- a/plugins/recover/client/cli/tx.go +++ b/plugins/recover/client/cli/tx.go @@ -83,7 +83,7 @@ func SignAndPrint(ctx context.CLIContext, builder authtxb.TxBuilder, msg sdk.Msg var tx auth.StdTx err = builder.Codec.UnmarshalBinaryLengthPrefixed(txBytes, &tx) if err != nil { - + return err } json, err := builder.Codec.MarshalJSON(tx) if err != nil { From 04a2f9299920fcb50e5010ab6ccd033095017b7e Mon Sep 17 00:00:00 2001 From: j75689 Date: Wed, 29 Nov 2023 19:48:32 +0800 Subject: [PATCH 17/17] fix: swapIterator --- plugins/tokens/plugin.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/tokens/plugin.go b/plugins/tokens/plugin.go index 8d28010bb..d22bc4d1c 100644 --- a/plugins/tokens/plugin.go +++ b/plugins/tokens/plugin.go @@ -90,8 +90,8 @@ func EndBlocker(ctx sdk.Context, timelockKeeper timelock.Keeper, swapKeeper swap break } var automaticSwap swap.AtomicSwap - swapKeeper.CDC().MustUnmarshalBinaryBare(iterator.Value(), &automaticSwap) - swapID := iterator.Key()[len(swap.HashKey):] + swapKeeper.CDC().MustUnmarshalBinaryBare(swapIterator.Value(), &automaticSwap) + swapID := swapIterator.Key()[len(swap.HashKey):] result := swap.HandleRefundHashTimerLockedTransferAfterBCFusion(ctx, swapKeeper, swap.RefundHTLTMsg{ From: automaticSwap.From, SwapID: swapID,