ethclient.Client.TransactionByHash and ethclient.Client.TransactionReceipt return types.Transaction
and types.Receipt
, but both of the types don't have From
method. How can I get the From address by golang? I want to get From addresslike etherscan shows by transaction hash.
Asked
Active
Viewed 725 times
1

Tanaka Tomoko
- 11
- 1
1 Answers
0
TL;DR
package example_test
import (
"context"
"testing"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/ethclient"
)
func TestGetTransactionFrom(t *testing.T) {
var (
ctx = context.Background()
rpcURL = "https://rpc.ankr.com/eth"
// https://etherscan.io/tx/0x88f3b921f1565f7a9f0f36fed4f196d978069ccdbdcd7bdb73bf6dec98b77d38
transactionHash = common.HexToHash("0x88f3b921f1565f7a9f0f36fed4f196d978069ccdbdcd7bdb73bf6dec98b77d38")
)
ethereumClient, err := ethclient.Dial(rpcURL)
if err != nil {
t.Fatal(err)
}
receipt, err := ethereumClient.TransactionReceipt(ctx, transactionHash)
if err != nil {
t.Fatal(err)
}
// Get ChainID, or you can use `chainID, err := ethereumClient.ChainID(ctx)`
transaction, _, err := ethereumClient.TransactionByHash(ctx, transactionHash)
if err != nil {
t.Fatal(err)
}
// Get BaseFee of EIP1559, may be nil
block, err := ethereumClient.BlockByNumber(ctx, receipt.BlockNumber)
if err != nil {
t.Fatal(err)
}
// Supports EIP-2930 and EIP-2718 and EIP-1559 and EIP-155 and legacy transactions
message, err := transaction.AsMessage(types.LatestSignerForChainID(transaction.ChainId()), block.BaseFee())
if err != nil {
t.Fatal(err)
}
// Transaction from
t.Log(message.From()) // 0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045
}
In fact, Ethereum's RPC response value contains a from
field, but it is not trusted. go-ethereum prefers that developers recover the from public key themselves and get the from address through it.
{
"jsonrpc": "2.0",
"id": 0,
"result": {
"blockHash": "0xc169915e1cda8216c88ecdd7e4b5538d50b9e9582d2d2326599ac2059f9e252e",
"blockNumber": "0xf12891",
"from": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045",
"gas": "0x18a90",
"gasPrice": "0x7f59f5f23",
"maxFeePerGas": "0x746a528800",
"maxPriorityFeePerGas": "0x77359400",
"hash": "0x88f3b921f1565f7a9f0f36fed4f196d978069ccdbdcd7bdb73bf6dec98b77d38",
"input": "0x6a761202000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000044a9059cbb0000000000000000000000008e7a77ede43844a2e506556e689729a4c7cab85c00000000000000000000000000000000000000000000000000000da475135980000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082498476e3ee00ced57d0675cb392b489f57a500357641ca4d1779c4861f05cc8f473a24256acabce7ba01d661d6d917129c288661733bbc1ec8fec4fe647702e11c000000000000000000000000d8da6bf26964af9d7eed9e03e53415d37aa96045000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000",
"nonce": "0x395",
"to": "0xa06c2b67e7435ce25a5969e49983ec3304d8e787",
"transactionIndex": "0x3d",
"value": "0x0",
"type": "0x2",
"accessList": [],
"chainId": "0x1",
"v": "0x0",
"r": "0x3c50726b2fa8af8fa84600adcad06a4439d016994fef3210a0023d1fe8e31523",
"s": "0x63bed90836ad3dc39d0707bf470569967a5b608158685e6cf4a570a4e8ddf5dc"
}
}

KallyDev
- 49
- 2
- 9