Transactions

有沒有辦法找出發送到帳戶的第一筆交易?

  • September 9, 2022

有沒有辦法找出發送到帳戶的第一筆交易?

大家好,我知道給定一個地址,我可以通過檢查它的 nonce 來檢查給定的交易是否是第一個tx.from。Nonce == 0 表示它是該帳戶發送的第一個tx.from 。

但是給一個賬戶的交易,有沒有辦法讓我看看這是否是該賬戶的第一個tx.to?檢查 nonce 在這裡無效,因為您將檢查發件人的 nonce。

謝謝大家 :D

據我所知,除非您正在跟踪帳戶的狀態,否則我認為這是不可能的。

也許您可能知道乙太坊是一個大型狀態機,由稱為帳戶的小狀態組成。

每次賬戶執行寫入操作時,賬戶的狀態都會更新。

在您的情況下,假設創建了一個帳戶並且此 EOA(外部擁有的帳戶)的狀態為零,因為您沒有任何餘額。但是當交易發生時,賬戶的狀態會發生變化。

乙太坊中有兩種類型的“IN”交易。第一個是賬戶收到直接映射到賬戶儲存地址的“ETH”,第二個是賬戶收到任何類型的 ERC 代幣。

您可以在第一種情況下檢查接收是否是第一筆交易;但是,在第二種情況下是不可能的,除非您要維護一個像 etherscan 這樣的龐大數據庫。

在第一種情況下,賬戶的狀態從 0 -> xyz

$$ depending on the ETH an account is received $$ 而對於第二種情況,雖然你的賬戶收到了erc代幣,但實際上它們存在於ERC智能合約中並映射到你的地址

ERC20:

看看這個交易。

https://goerli.etherscan.io/tx/0xe45479be8e4c6da11beeb7f54a103c23a1f11b962b89bb3f54456483092259ff

10,000 個 ERC20 代幣從賬戶 1 轉移到賬戶 2。

傳輸

狀態

在第二張圖片中,“已收到”賬戶的狀態為零,當收到代幣時,狀態發生了變化。

我進行了另一筆交易,但使用了不同的 erc20 代幣。這次讓我們檢查一個帳戶的狀態。

不同代幣的新交易

在此處輸入圖像描述

但是,由於令牌不同,帳戶的狀態再次從零開始。

簡而言之,如果它是 ETH 交易,或者您正在讀取區塊鏈上所有智能合約發出的每個事件(如乙太掃描)並查詢它,您可以首先檢查帳戶“IN”。

也許您可以使用etherscan API讀取從創建帳戶到現在的所有塊,以找出第一筆交易。

有用的話告訴我!

最簡單的方法是使用像Covalent這樣的服務,它為您提供了一個 API 來根據需要查詢數據。

我試過了web3jsethersjs但他們沒有讓您獲取發送到地址和從地址發送的所有交易的功能。

另一種選擇是執行您自己的區塊鏈節點並使用geth客戶端查詢它。但這不是一件簡單的事情。

對於這個例子,讓我們堅持使用像 Covalent 這樣的第三方。

以下共價端點將返回從指定地址發送到指定地址的所有事務。

https://api.covalenthq.com/v1/1/address/0x6827b8f6cc60497d9bf5210d602C0EcaFDF7C405/transactions_v2/

數組中的最後一條記錄data.items是第一筆交易。我們可以假設它是第一筆將乙太幣發送到該地址的交易,否則,它將無法自己發送交易,因為它還沒有任何餘額。

在我的 Postman 設置中,它看起來像這樣:

{{url}}/v1/{{chain_id}}/address/{{address}}/transactions_v2/

其中 {{url}} 是https://api.covalenthq.com

{{chain_id}} 為 1(即乙太坊主網。幣安智能鍊主網鏈 id 為 56 等)。

{{address}} 為 0x6827b8f6cc60497d9bf5210d602C0EcaFDF7C405

它返回一個長的 json 響應,所以我將把最後一項放在data.items

{
               "block_signed_at": "2021-10-11T00:25:12Z",
               "block_height": 13394104,
               "tx_hash": "0xf60f0767c87e3f8eb751e1337e7e342e964aa15401db510ba93a62d73e58feb1",
               "tx_offset": 78,
               "successful": true,
               "from_address": "0xddfabcdc4d8ffc6d5beaf154f18b778f892a0740",
               "from_address_label": "Coinbase 3",
               "to_address": "0x6827b8f6cc60497d9bf5210d602c0ecafdf7c405",
               "to_address_label": null,
               "value": "5228110000000000",
               "value_quote": 17.574775518342285,
               "gas_offered": 21000,
               "gas_spent": 21000,
               "gas_price": 108792787426,
               "fees_paid": "2284648535946000",
               "gas_quote": 7.6800574505051165,
               "gas_quote_rate": 3361.592529296875,
               "log_events": []
           }

如果您0x6827b8f6cc60497d9bf5210d602C0EcaFDF7C405在 etherscan 中檢查地址,您實際上可以看到該塊是IN該地址的第一筆交易:

https://etherscan.io/address/0x6827b8f6cc60497d9bf5210d602c0ecafdf7c405

https://etherscan.io/tx/0xf60f0767c87e3f8eb751e1337e7e342e964aa15401db510ba93a62d73e58feb1

要呼叫 Covalent API,您需要從它們那裡獲取一個 api 密鑰。只需向他們註冊並獲得一個。

然後,您只需將 api 密鑰用作 http 請求標頭中 Authentication 參數中的“使用者名”:

在此處輸入圖像描述

閱讀他們的文件:https ://www.covalenthq.com/docs/api/#/0/0/USD/1

引用自:https://ethereum.stackexchange.com/questions/135280