Skip to content

Commit

Permalink
Merge pull request #8 from datachainlab/fix-flags-from-erc20
Browse files Browse the repository at this point in the history
Remove unused flags
siburu authored Jun 18, 2023
2 parents 149cb54 + 563115d commit 9546c16
Showing 4 changed files with 38 additions and 49 deletions.
3 changes: 1 addition & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -4,15 +4,14 @@
```bash
$ git clone https://github.com/datachainlab/ethereum-ics20-cli.git
$ cd ethereum-ics20-cli
$ git checkout v0.0.3
$ go install
CLI="ethereum-ics20-cli"
```

## erc20
```bash
${CLI} erc20 balance --rpc-address=${rpc_address} --wallet-address=${wallet_address} --denom=${denom}
${CLI} erc20 transfer --rpc-address=${RPC_ADDRESS} --mnemonic="${MNEMONIC}" --ics20-bank-address=${ICS20_BANK_ADDRESS} --ics20-transfer-bank-address=${ICS20_TRANSFER_BANK_ADDRESS} --from-index=${from_index} --to-address=${to_address} --amount=${amount} --denom=${DENOM}
${CLI} erc20 transfer --rpc-address=${RPC_ADDRESS} --mnemonic="${MNEMONIC}" --from-index=${from_index} --to-address=${to_address} --amount=${amount} --denom=${DENOM}
```

## ics20
41 changes: 7 additions & 34 deletions chains/geth/chain.go
Original file line number Diff line number Diff line change
@@ -5,18 +5,13 @@ import (
"crypto/ecdsa"
"errors"
"fmt"
"log"
"math/big"

"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types"
gethtypes "github.com/ethereum/go-ethereum/core/types"
gethcrypto "github.com/ethereum/go-ethereum/crypto"
"github.com/hyperledger-labs/yui-ibc-solidity/pkg/client"
"github.com/hyperledger-labs/yui-ibc-solidity/pkg/contract/erc20"
"github.com/hyperledger-labs/yui-ibc-solidity/pkg/contract/ics20bank"
"github.com/hyperledger-labs/yui-ibc-solidity/pkg/contract/ics20transferbank"
"github.com/hyperledger-labs/yui-ibc-solidity/pkg/wallet"
)

@@ -25,38 +20,16 @@ type Chain struct {
mnemonicPhrase string
keys map[uint32]*ecdsa.PrivateKey

Client *client.ETHClient
Erc20Token erc20.Erc20
ICS20Transfer ics20transferbank.Ics20transferbank
ICS20Bank ics20bank.Ics20bank
Client *client.ETHClient
}

func NewChain(client *client.ETHClient, ethChainId int64, mnemonic, simpleTokenAddress, ics20TransferBankAddress, ics20BankAddress string) *Chain {
erc20Token, err := erc20.NewErc20(common.HexToAddress(simpleTokenAddress), client)
if err != nil {
log.Print(err)
return nil
}
ics20transfer, err := ics20transferbank.NewIcs20transferbank(common.HexToAddress(ics20TransferBankAddress), client)
if err != nil {
log.Print(err)
return nil
}
ics20bank, err := ics20bank.NewIcs20bank(common.HexToAddress(ics20BankAddress), client)
if err != nil {
log.Print(err)
return nil
}

func NewChain(client *client.ETHClient, ethChainId int64, mnemonic string) *Chain {
return &Chain{
chainID: ethChainId,
mnemonicPhrase: mnemonic,
keys: make(map[uint32]*ecdsa.PrivateKey),

Client: client,
Erc20Token: *erc20Token,
ICS20Transfer: *ics20transfer,
ICS20Bank: *ics20bank,
Client: client,
}
}

@@ -97,13 +70,13 @@ func (chain *Chain) WaitAndCheckStatus(ctx context.Context, tx *types.Transactio
}

func makeGenTxOpts(chainID *big.Int, prv *ecdsa.PrivateKey) func(ctx context.Context) *bind.TransactOpts {
signer := gethtypes.LatestSignerForChainID(chainID)
signer := types.LatestSignerForChainID(chainID)
addr := gethcrypto.PubkeyToAddress(prv.PublicKey)
return func(ctx context.Context) *bind.TransactOpts {
return &bind.TransactOpts{
From: addr,
GasLimit: 6382056,
Signer: func(address common.Address, tx *gethtypes.Transaction) (*gethtypes.Transaction, error) {
Signer: func(address common.Address, tx *types.Transaction) (*types.Transaction, error) {
if address != addr {
return nil, errors.New("not authorized to sign this account")
}
@@ -117,7 +90,7 @@ func makeGenTxOpts(chainID *big.Int, prv *ecdsa.PrivateKey) func(ctx context.Con
}
}

func InitializeChain(ctx context.Context, rpcAddress string, mnemonic string, simpleTokenAddress, ics20TransferBankAddress, ics20BankAddress string) (*Chain, error) {
func InitializeChain(ctx context.Context, rpcAddress string, mnemonic string) (*Chain, error) {
ethClient, err := client.NewETHClient(rpcAddress)
if err != nil {
return nil, err
@@ -127,7 +100,7 @@ func InitializeChain(ctx context.Context, rpcAddress string, mnemonic string, si
return nil, err
}

chain := NewChain(ethClient, ethChainID.Int64(), mnemonic, simpleTokenAddress, ics20TransferBankAddress, ics20BankAddress)
chain := NewChain(ethClient, ethChainID.Int64(), mnemonic)

return chain, nil
}
20 changes: 11 additions & 9 deletions cmd/erc20/transfer.go
Original file line number Diff line number Diff line change
@@ -7,11 +7,12 @@ import (

"github.com/datachainlab/ethereum-ics20-cli/chains/geth"
"github.com/ethereum/go-ethereum/common"
"github.com/hyperledger-labs/yui-ibc-solidity/pkg/contract/erc20"
"github.com/spf13/cobra"
)

func transferCmd() *cobra.Command {
var rpcAddress, mnemonic, ics20BankAddress, ics20TransferBankAddress string
var rpcAddress, mnemonic string
var fromIndex uint32
var toAddress string
var amount int64
@@ -22,25 +23,21 @@ func transferCmd() *cobra.Command {
Short: "transfer erc20 token from fromIndex account to toAddress account",
RunE: func(cmd *cobra.Command, args []string) (err error) {
ctx := cmd.Context()
if err := transfer(ctx, rpcAddress, mnemonic, ics20BankAddress, ics20TransferBankAddress, uint32(fromIndex), toAddress, amount, denom); err != nil {
if err := transfer(ctx, rpcAddress, mnemonic, uint32(fromIndex), toAddress, amount, denom); err != nil {
return err
}
return nil
},
}
cmd.Flags().StringVar(&rpcAddress, "rpc-address", "", "Ethereum RPC Address")
cmd.Flags().StringVar(&mnemonic, "mnemonic", "", "mnemonic phrase")
cmd.Flags().StringVar(&ics20BankAddress, "ics20-bank-address", "", "address of ics20 bank contract")
cmd.Flags().StringVar(&ics20TransferBankAddress, "ics20-transfer-bank-address", "", "address of ics20 transfer bank contract")
cmd.Flags().Uint32Var(&fromIndex, "from-index", 0, "index of the from wallet")
cmd.Flags().StringVar(&toAddress, "to-address", "", "address of the recipient")
cmd.Flags().Int64Var(&amount, "amount", 0, "amount of the token")
cmd.Flags().StringVar(&denom, "denom", "", "denom of the token")

cmd.MarkFlagRequired("rpc-address")
cmd.MarkFlagRequired("mnemonic")
cmd.MarkFlagRequired("ics20-bank-address")
cmd.MarkFlagRequired("ics20-transfer-bank-address")
cmd.MarkFlagRequired("from-index")
cmd.MarkFlagRequired("to-address")
cmd.MarkFlagRequired("amount")
@@ -49,12 +46,17 @@ func transferCmd() *cobra.Command {
return cmd
}

func transfer(ctx context.Context, rpcAddress string, mnemonic, ics20BankAddress, ics20TransferBankAddress string, fromIndex uint32, toAddress string, amount int64, denom string) error {
chain, err := geth.InitializeChain(ctx, rpcAddress, mnemonic, denom, ics20TransferBankAddress, ics20BankAddress)
func transfer(ctx context.Context, rpcAddress string, mnemonic string, fromIndex uint32, toAddress string, amount int64, denom string) error {
chain, err := geth.InitializeChain(ctx, rpcAddress, mnemonic)
if err != nil {
return err
}
tx, err := chain.Erc20Token.Transfer(chain.TxOpts(ctx, fromIndex), common.HexToAddress(toAddress), big.NewInt(amount))
erc20Token, err := erc20.NewErc20(common.HexToAddress(denom), chain.Client)
if err != nil {
return err
}

tx, err := erc20Token.Transfer(chain.TxOpts(ctx, fromIndex), common.HexToAddress(toAddress), big.NewInt(amount))
if err != nil {
return err
}
23 changes: 19 additions & 4 deletions cmd/ics20/transfer.go
Original file line number Diff line number Diff line change
@@ -7,6 +7,9 @@ import (

"github.com/datachainlab/ethereum-ics20-cli/chains/geth"
"github.com/ethereum/go-ethereum/common"
"github.com/hyperledger-labs/yui-ibc-solidity/pkg/contract/erc20"
"github.com/hyperledger-labs/yui-ibc-solidity/pkg/contract/ics20bank"
"github.com/hyperledger-labs/yui-ibc-solidity/pkg/contract/ics20transferbank"
"github.com/spf13/cobra"
)

@@ -59,13 +62,25 @@ func transferCmd() *cobra.Command {
}

func transfer(ctx context.Context, rpcAddress string, mnemonic, ics20BankAddress, ics20TransferBankAddress string, fromIndex uint32, toAddress string, amount int64, denom, portID, channelID string, timeoutHeight uint64) error {
chain, err := geth.InitializeChain(ctx, rpcAddress, mnemonic, denom, ics20TransferBankAddress, ics20BankAddress)
chain, err := geth.InitializeChain(ctx, rpcAddress, mnemonic)
if err != nil {
return err
}
erc20Token, err := erc20.NewErc20(common.HexToAddress(denom), chain.Client)
if err != nil {
return err
}
ics20Transfer, err := ics20transferbank.NewIcs20transferbank(common.HexToAddress(ics20TransferBankAddress), chain.Client)
if err != nil {
return err
}
ics20Bank, err := ics20bank.NewIcs20bank(common.HexToAddress(ics20BankAddress), chain.Client)
if err != nil {
return err
}

if common.IsHexAddress(denom) {
tx, err := chain.Erc20Token.Approve(chain.TxOpts(ctx, fromIndex), common.HexToAddress(ics20BankAddress), big.NewInt(amount))
tx, err := erc20Token.Approve(chain.TxOpts(ctx, fromIndex), common.HexToAddress(ics20BankAddress), big.NewInt(amount))
if err != nil {
return err
}
@@ -74,7 +89,7 @@ func transfer(ctx context.Context, rpcAddress string, mnemonic, ics20BankAddress
}
log.Printf("Token approve success (TxHash: %s)\n", tx.Hash().Hex())

tx, err = chain.ICS20Bank.Deposit(
tx, err = ics20Bank.Deposit(
chain.TxOpts(ctx, fromIndex),
common.HexToAddress(denom),
big.NewInt(amount),
@@ -89,7 +104,7 @@ func transfer(ctx context.Context, rpcAddress string, mnemonic, ics20BankAddress
log.Printf("Deposit success (TxHash: %s)\n", tx.Hash().Hex())
}

tx, err := chain.ICS20Transfer.SendTransfer(
tx, err := ics20Transfer.SendTransfer(
chain.TxOpts(ctx, fromIndex),
denom,
uint64(amount),

0 comments on commit 9546c16

Please sign in to comment.