1

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.

1 Answers1

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