Skip to content

Commit 3ba6385

Browse files
committed
fix
1 parent a21ffb7 commit 3ba6385

File tree

3 files changed

+54
-15
lines changed

3 files changed

+54
-15
lines changed

cmd.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ var pa = &cobra.Command{
5959
}
6060

6161
func init() {
62-
tx.Flags().StringVarP(&Endpoint, "endpoint", "edp", "https://ethereum.publicnode.com", "Network rpc endpoint")
62+
tx.Flags().StringVarP(&Endpoint, "endpoint", "e", "https://ethereum.publicnode.com", "Network rpc endpoint")
6363
ethwt.AddCommand(tx, gen, pa)
6464
}
6565

pkg/tx/transfer.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import (
1414
"math/big"
1515
)
1616

17-
func Transfer(pk string, to string, val string, data []byte, ec *ethclient.Client) (txHash string, err error) {
17+
func Transfer(pk string, to string, val string, data []byte, ec *ethclient.Client) (txHash common.Hash, err error) {
1818
privateKeyHex := pk
1919
privateKey, err := crypto.HexToECDSA(privateKeyHex)
2020
if err != nil {
@@ -39,7 +39,7 @@ func Transfer(pk string, to string, val string, data []byte, ec *ethclient.Clien
3939
wei, ok := util.ToWei(val)
4040
if !ok {
4141
fmt.Println("invalid eth value:", val)
42-
return "", err
42+
return common.Hash{}, err
4343
}
4444

4545
gasTipCap, err := ec.SuggestGasTipCap(context.Background())
@@ -69,12 +69,12 @@ func Transfer(pk string, to string, val string, data []byte, ec *ethclient.Clien
6969

7070
estimatedGas, err := ec.EstimateGas(context.Background(), msg)
7171
if err != nil {
72-
return "", err
72+
return common.Hash{}, err
7373
}
7474
fmt.Println("maxPriorityFeePerGas:", gasTipCap, "GasFeeCap:", maxFeePerGas, "Gas:", estimatedGas)
7575
cid, err := ec.ChainID(context.Background())
7676
if err != nil {
77-
return "", fmt.Errorf("get chainID error:%w", err)
77+
return common.Hash{}, fmt.Errorf("get chainID error:%w", err)
7878
}
7979
tx := &types.DynamicFeeTx{
8080
ChainID: cid,
@@ -92,8 +92,8 @@ func Transfer(pk string, to string, val string, data []byte, ec *ethclient.Clien
9292
// 创建交易
9393
signedTx, err := types.SignTx(txn, types.NewCancunSigner(tx.ChainID), privateKey)
9494
if err != nil {
95-
return "", err
95+
return common.Hash{}, err
9696
}
9797
err = ec.SendTransaction(context.Background(), signedTx)
98-
return txn.Hash().String(), err
98+
return txn.Hash(), err
9999
}

transfer.go

Lines changed: 47 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
11
package main
22

33
import (
4+
"context"
45
"encoding/json"
56
"fmt"
67
_tx "github.com/NullpointerW/ethereum-wallet-tool/pkg/tx"
8+
"github.com/ethereum/go-ethereum"
9+
"github.com/ethereum/go-ethereum/common"
10+
"github.com/ethereum/go-ethereum/core/types"
711
"github.com/ethereum/go-ethereum/ethclient"
812
"os"
913
"strings"
14+
"time"
1015
)
1116

1217
type TxRecord struct {
@@ -41,11 +46,11 @@ func Transfer(val string) {
4146
pk := strings.TrimPrefix(string(pkb), "0x")
4247
var txRecords []TxRecord
4348
for _, w := range wallets {
44-
record, err := transfer(pk, w, val, ec)
45-
if err != nil {
46-
fmt.Println("transfer err:", err)
47-
continue
48-
}
49+
record := transfer(pk, w, val, ec)
50+
//if err != nil {
51+
// fmt.Println("transfer err:", err)
52+
// continue
53+
//}
4954
fmt.Printf("%#+v\n", record)
5055
txRecords = append(txRecords, record)
5156
}
@@ -58,16 +63,50 @@ func Transfer(val string) {
5863

5964
}
6065

61-
func transfer(mpk string, w Wallet, val string, ec *ethclient.Client) (TxRecord, error) {
66+
func transfer(mpk string, w Wallet, val string, ec *ethclient.Client) TxRecord {
6267
txHash, err := _tx.Transfer(mpk, w.Address, val, nil, ec)
6368
txR := TxRecord{
64-
Hash: txHash,
69+
Hash: txHash.String(),
6570
Address: w.Address,
6671
PK: w.PrivateKey,
6772
Value: val,
6873
}
6974
if err != nil {
7075
txR.ErrMsg = err.Error()
76+
} else {
77+
_, err = waitForTransactionConfirmation(ec, txHash)
78+
if err != nil {
79+
txR.ErrMsg = err.Error()
80+
}
7181
}
72-
return txR, nil
82+
return txR
83+
}
84+
func waitForTransactionConfirmation(client *ethclient.Client, txHash common.Hash) (*types.Receipt, error) {
85+
var receipt *types.Receipt
86+
var err error
87+
88+
// 设置查询上下文,可以设置超时
89+
ctx := context.Background()
90+
91+
// 设置轮询间隔
92+
93+
fmt.Println("waiting for tx confirmed")
94+
for {
95+
receipt, err = client.TransactionReceipt(ctx, txHash)
96+
if err != nil {
97+
if err == ethereum.NotFound {
98+
// 如果收据未找到,继续轮询
99+
time.Sleep(time.Second)
100+
continue
101+
}
102+
// 如果发生其他错误,则返回错误
103+
return nil, err
104+
}
105+
// 如果收据不为空,表示交易已被确认
106+
if receipt != nil {
107+
break
108+
}
109+
}
110+
111+
return receipt, nil
73112
}

0 commit comments

Comments
 (0)