簡體   English   中英

如何在 Solana 區塊鏈上分析已確認交易中的 tokenBalances?

[英]How to analyse tokenBalances in a confirmed transaction on the Solana blockchain?

我正在從事一個專注於 Solana NFT 的個人項目,我正在努力思考我應該如何從呼叫他們的 rpc 的結果中獲取有關特定交易中買方/賣方帳戶的數據獲取交易數據。

我正在使用 nodeJS 和 @solana/web3js 模塊來獲取特定集合的所有事務的簽名,然后使用 getConfirmedParsedTransaction(signature) 方法從這些簽名中獲取事務,然后嘗試從他們那里獲取我需要的數據。

以 explorer.solana.com 上的這個簽名為例 - 它正在使用與此類似的 API 調用返回的數據 -

curl 'https://explorer-api.mainnet-beta.solana.com/' \\ -H 'Connection: keep-alive' \\ -H 'content-type: application/json' \\ -H 'Accept: */*' \\ -H 'Origin: https://explorer.solana.com' \\ -H 'Sec-Fetch-Site: same-site' \\ -H 'Sec-Fetch-Mode: cors' \\ -H 'Sec-Fetch-Dest: empty' \\ -H 'Referer: https://explorer.solana.com/' \\ -H 'Accept-Language: en-GB,en-US;q=0.9,en;q=0.8' \\ --data-raw '{"method":"getConfirmedTransaction","jsonrpc":"2.0","params":["3sRxEfGD2VmrJmw3YsULDER42HW3W2eiAv74Tn41MoL1YQmtELDcEiRf29cBPfsxRVcqXCEkCmwPJNihxAtfRZ4S",{"encoding":"jsonParsed","commitment":"confirmed"}],"id":"b70247d9-75ef-429a-bf27-ab2519dd75b8"}' \\ --compressed

我可以從返回的 JSON 中看到有多個具有 21 個索引的數組 - 在這些數組中,買方的數據位於索引 0,賣方的數據位於索引 3。我知道情況並非總是如此事實上,有不同的市場可能使用不同的指令,或者不同的代幣有不同的版稅分配——因此我尋找了一種更合乎邏輯的方法。

我目前正在做的第一件事是查看前/后令牌余額以獲取已轉移的實際令牌(薄荷屬性)。 這些對象看起來像這樣:

{"postTokenBalances":[{"accountIndex":1,"mint":"7t2PCc8WAE14dE58yYogBXBspoL8o8PXesAag3zMse3h","uiTokenAmount":{"amount":"1","decimals":0,"uiAmount":1.0,"uiAmountString":"1"}}],"preBalances":[413842981566,0,2039280,22184812910,1398960,13264655885039,5616720,0,212257097061,135958021650,135956740765,599225381740,1000,1461600,1,1089991680,1,11352771574,1141440,898174080,1141440],"preTokenBalances":[{"accountIndex":2,"mint":"7t2PCc8WAE14dE58yYogBXBspoL8o8PXesAag3zMse3h","uiTokenAmount":{"amount":"1","decimals":0,"uiAmount":1.0,"uiAmountString":"1"}}]}

我以為我已經找到了一種基於此解決問題的簡單方法 - accountIndex 必須是上述數組中的索引,但不幸的是,這似乎並不正確。

我在這里查看了有關 accountIndex 實際代表什么的文檔,它說它代表數組中的索引,就像我想的那樣(“提供令牌余額的帳戶的索引”),但這似乎沒有正確:

正如我所說,此交易的買方在索引 0 處,postTokenBalances 中的 accountIndex 為 1,而賣方在索引 3 處,preTokenBalances 中的 accountIndex 為 2 - 所以我的問題是這些 accountIndex 屬性實際上是什么代表?

很抱歉這個相對較長的問題,但我想嘗試提供一些細節!

您已經正確理解了幾乎所有內容。 最后一點要理解的是,買方/賣方與接收方/發送令牌帳戶不是一回事。 代幣(包括 NFT)存儲在 SPL 代幣賬戶中,該賬戶是獨立於買賣雙方的賬戶,是 SOL 的系統賬戶。

如果你看一下在瀏覽器中的交易: https://explorer.solana.com/tx/3sRxEfGD2VmrJmw3YsULDER42HW3W2eiAv74Tn41MoL1YQmtELDcEiRf29cBPfsxRVcqXCEkCmwPJNihxAtfRZ4S ,你會看到,買方花費50 SOL的確GWcJPnrAuMqN83D8wDvmtoAdGATJGLsCRvgZ85qxXP3j ,但收件人令牌帳戶是7wuC7oveWkSoYoBR1WT5ZwMn62uQddSebWghQrQdFE72 GWcJPnrAuMqN83D8wDvmtoAdGATJGLsCRvgZ85qxXP3j不能持有代幣,但7wuC7oveWkSoYoBR1WT5ZwMn62uQddSebWghQrQdFE72可以持有代幣,並且由GWcJPnrAuMqN83D8wDvmtoAdGATJGLsCRvgZ85qxXP3j擁有

你可以閱讀更多關於索拉納帳戶模型https://docs.solana.com/developing/programming-model/accounts和關於SPL令牌程序的更多信息https://spl.solana.com/token

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM