From 50e3ff4cef57ef4a5357af76b94f13ea174e71f4 Mon Sep 17 00:00:00 2001 From: fish <920886811@163.com> Date: Wed, 23 Nov 2022 23:04:20 +0800 Subject: [PATCH] test: muti token vault deposit --- chain/chain.go | 13 +++++++- core/commands/vault/vault.go | 1 + core/commands/vault/vault_balance_all.go | 41 ++++++++++++++++++++++++ settlement/swap/bttc/bttc.go | 12 ++++--- settlement/swap/vault/cashout.go | 2 +- settlement/swap/vault/contract_muti.go | 3 ++ settlement/swap/vault/init.go | 9 ++++++ settlement/swap/vault/vault.go | 19 +++++------ 8 files changed, 84 insertions(+), 16 deletions(-) create mode 100644 core/commands/vault/vault_balance_all.go diff --git a/chain/chain.go b/chain/chain.go index e54bc14c5..84801153e 100644 --- a/chain/chain.go +++ b/chain/chain.go @@ -141,8 +141,16 @@ func InitSettlement( } erc20Service := erc20.New(chaininfo.Backend, chaininfo.TransactionService, erc20Address) + fmt.Println("...InitSettlement erc20Address ", erc20Address) + + // muti tokens + mpErc20Service := make(map[string]erc20.Service) + for k, tokenAddr := range tokencfg.MpTokenAddr { + mpErc20Service[k] = erc20.New(chaininfo.Backend, chaininfo.TransactionService, tokenAddr) + } + // init bttc service - bttcService := bttc.New(chaininfo.TransactionService, erc20Service) + bttcService := bttc.New(chaininfo.TransactionService, erc20Service, mpErc20Service) //initChequeStoreCashout chequeStore, cashoutService := initChequeStoreCashout( @@ -176,6 +184,7 @@ func InitSettlement( deployGasPrice, chequeStore, erc20Service, + mpErc20Service, ) if err != nil { @@ -257,6 +266,7 @@ func initVaultService( deployGasPrice string, chequeStore vault.ChequeStore, erc20Service erc20.Service, + mpErc20Service map[string]erc20.Service, ) (vault.Service, error) { chequeSigner := vault.NewChequeSigner(signer, chainID) @@ -281,6 +291,7 @@ func initVaultService( chequeSigner, chequeStore, erc20Service, + mpErc20Service, ) if err != nil { return nil, fmt.Errorf("vault init: %w", err) diff --git a/core/commands/vault/vault.go b/core/commands/vault/vault.go index 970f6240a..3719772d6 100644 --- a/core/commands/vault/vault.go +++ b/core/commands/vault/vault.go @@ -12,6 +12,7 @@ Vault services include balance, address, withdraw, deposit operations.`, }, Subcommands: map[string]*cmds.Command{ "balance": VaultBalanceCmd, + "balance_all": VaultBalanceAllCmd, "address": VaultAddrCmd, "withdraw": VaultWithdrawCmd, "deposit": VaultDepositCmd, diff --git a/core/commands/vault/vault_balance_all.go b/core/commands/vault/vault_balance_all.go new file mode 100644 index 000000000..b66455084 --- /dev/null +++ b/core/commands/vault/vault_balance_all.go @@ -0,0 +1,41 @@ +package vault + +import ( + "fmt" + "github.com/bittorrent/go-btfs/chain/tokencfg" + "io" + "math/big" + "time" + + cmds "github.com/bittorrent/go-btfs-cmds" + "github.com/bittorrent/go-btfs/chain" + "golang.org/x/net/context" +) + +var VaultBalanceAllCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Get vault balance.", + }, + RunTimeout: 5 * time.Minute, + Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error { + + mp := make(map[string]*big.Int, 0) + for k, tokenAddr := range tokencfg.MpTokenAddr { + balance, err := chain.SettleObject.VaultService.AvailableBalance(context.Background(), tokenAddr) + if err != nil { + return err + } + + mp[k] = balance + } + + return cmds.EmitOnce(res, &mp) + }, + Type: &VaultBalanceCmdRet{}, + Encoders: cmds.EncoderMap{ + cmds.Text: cmds.MakeTypedEncoder(func(req *cmds.Request, w io.Writer, out *VaultBalanceCmdRet) error { + _, err := fmt.Fprintf(w, "the vault available balance: %v\n", out.Balance) + return err + }), + }, +} diff --git a/settlement/swap/bttc/bttc.go b/settlement/swap/bttc/bttc.go index 71a611d45..c991739aa 100644 --- a/settlement/swap/bttc/bttc.go +++ b/settlement/swap/bttc/bttc.go @@ -31,14 +31,16 @@ type Service interface { } type service struct { - trxService transaction.Service - erc20Service erc20.Service + trxService transaction.Service + erc20Service erc20.Service + mpErc20Service map[string]erc20.Service } -func New(trxSvc transaction.Service, erc20Svc erc20.Service) Service { +func New(trxSvc transaction.Service, erc20Svc erc20.Service, mpErc20Service map[string]erc20.Service) Service { return &service{ - trxService: trxSvc, - erc20Service: erc20Svc, + trxService: trxSvc, + erc20Service: erc20Svc, + mpErc20Service: mpErc20Service, } } diff --git a/settlement/swap/vault/cashout.go b/settlement/swap/vault/cashout.go index e173e2cd1..7d0f54dd8 100644 --- a/settlement/swap/vault/cashout.go +++ b/settlement/swap/vault/cashout.go @@ -183,7 +183,7 @@ func (s *cashoutService) CashCheque(ctx context.Context, vault, recipient common return common.Hash{}, err } - fmt.Println("_CashCheque ", vault, recipient, cheque.CumulativePayout, hexutils.BytesToHex(cheque.Signature)) + fmt.Println("_CashCheque ", vault, recipient, cheque.CumulativePayout, hexutils.BytesToHex(cheque.Signature), cheque.Token) //callData, err := vaultABI.Pack("cashChequeBeneficiary", recipient, cheque.CumulativePayout, cheque.Signature) //if err != nil { diff --git a/settlement/swap/vault/contract_muti.go b/settlement/swap/vault/contract_muti.go index b437c94d7..2c3145cd3 100644 --- a/settlement/swap/vault/contract_muti.go +++ b/settlement/swap/vault/contract_muti.go @@ -177,7 +177,9 @@ func (c *vaultContractMuti) Deposit(ctx context.Context, amount *big.Int, token return c.contractWBTT.Deposit(ctx, amount) } + fmt.Println("1 Deposit ", token, amount) callData, err := vaultABINew.Pack("multiTokenDeposit", token, amount) + fmt.Println("2 Deposit err", err) if err != nil { return common.Hash{}, err } @@ -186,6 +188,7 @@ func (c *vaultContractMuti) Deposit(ctx context.Context, amount *big.Int, token To: &c.address, Data: callData, }) + fmt.Println("3 Deposit err", err) if err != nil { return hash, err } diff --git a/settlement/swap/vault/init.go b/settlement/swap/vault/init.go index 112a29fd2..677f0cd11 100644 --- a/settlement/swap/vault/init.go +++ b/settlement/swap/vault/init.go @@ -65,6 +65,7 @@ func Init( chequeSigner ChequeSigner, chequeStore ChequeStore, erc20Service erc20.Service, + mpErc20Service map[string]erc20.Service, ) (vaultService Service, err error) { // verify that the supplied factory is valid @@ -94,6 +95,14 @@ func Init( return nil, err } + // muti tokens + for _, erc20Svr := range mpErc20Service { + err = erc20tokenApprove(ctx, erc20Svr, overlayEthAddress, vaultAddress) + if err != nil { + return nil, err + } + } + vaultService, err = New(transactionService, vaultAddress, overlayEthAddress, stateStore, chequeSigner, erc20Service, chequeStore) return vaultService, err } diff --git a/settlement/swap/vault/vault.go b/settlement/swap/vault/vault.go index c47ea8122..983c743fd 100644 --- a/settlement/swap/vault/vault.go +++ b/settlement/swap/vault/vault.go @@ -124,15 +124,16 @@ func (s *service) Address() common.Address { // Deposit starts depositing erc20 token into the vault. This returns once the transactions has been broadcast. func (s *service) Deposit(ctx context.Context, amount *big.Int, token common.Address) (hash common.Hash, err error) { - balance, err := s.erc20Service.BalanceOf(ctx, s.ownerAddress) - if err != nil { - return common.Hash{}, err - } - - // check we can afford this so we don't waste gas - if balance.Cmp(amount) < 0 { - return common.Hash{}, ErrInsufficientFunds - } + //balance, err := s.erc20Service.BalanceOf(ctx, s.ownerAddress) + //if err != nil { + // return common.Hash{}, err + //} + // + //fmt.Println("Deposit ", balance.String(), amount.String()) + //// check we can afford this so we don't waste gas + //if balance.Cmp(amount) < 0 { + // return common.Hash{}, ErrInsufficientFunds + //} return s.contract.Deposit(ctx, amount, token) }