有沒有辦法找出發送到帳戶的第一筆交易?
有沒有辦法找出發送到帳戶的第一筆交易?
大家好,我知道給定一個地址,我可以通過檢查它的 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 來根據需要查詢數據。
我試過了
web3js
,ethersjs
但他們沒有讓您獲取發送到地址和從地址發送的所有交易的功能。另一種選擇是執行您自己的區塊鏈節點並使用
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 參數中的“使用者名”: