【问题标题】:How to get From address by transaction hash by golanggolang如何通过交易哈希获取From地址
【发布时间】:2022-10-25 12:29:27
【问题描述】:

ethclient.Client.TransactionByHashethclient.Client.TransactionReceipt 返回 types.Transactiontypes.Receipt,但是这两种类型都没有 From 方法。 golang如何获取From地址?我想通过事务哈希从地址中获取 etherscan 显示。

【问题讨论】:

    标签: ethereum go-ethereum


    【解决方案1】:

    TL;博士

    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
    }
    
    

    事实上,以太坊的 RPC 响应值包含一个from 字段,但它是不可信的。 go-ethereum 更喜欢开发者从公钥自己并从地址通过这。

    {
      "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"
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2023-01-14
      • 1970-01-01
      • 2013-01-07
      • 2021-10-07
      • 2021-10-08
      • 2018-08-02
      • 1970-01-01
      • 2012-12-31
      • 2018-01-05
      相关资源
      最近更新 更多