給定 Solana 錢包地址,我想驗證已確認的每筆交易以檢查其他資訊,例如接收者(或發送者)和發送(或接收)的金額。所以,像往常一樣,我搜索了一些 API。我發現了以下內容:
- 茄子
- 索拉納
之后,我去看看他們提供了哪些方法。似乎接近我希望的是 solana_client.get_confirmed_signature_for_address2(在 1 中可用),但是我的結果與其檔案顯示的結果不符。這里是:
from solana.rpc.api import Client
solana_client = Client("https://api.devnet.solana.com")
solana_client.get_signatures_for_address("2AQdpHJ2JpcEgPiATUXjQxA8QmafFegfQwSLWSprPicm", limit=1)
我明白了:
{'jsonrpc': '2.0', 'result': [], 'id': 1}
但是,我應該得到它的最后一個簽名,這似乎是這樣的:
4SNQ4h1vL9GkmSnojQsf8SZyFvQsaq62RCgops2UXFYag1Jc4MoWrjTg2ELwMqM1tQbn9qUcNc4tqX19EGHBqC5u
無論如何,我們可以使用 SolanaBeach 并檢查. 此外,如果我們按照檔案說明進行編碼:
from solana.rpc.api import Client
solana_client = Client("https://api.devnet.solana.com")
solana_client.get_signatures_for_address("Vote111111111111111111111111111111111111111", limit=1)
我明白了:
{'jsonrpc': '2.0', 'result': [{'blockTime': 1637328065, 'confirmationStatus': 'finalized', 'err': {'InstructionError': [0, {'Custom': 0}]}, 'memo': None, 'signature': '5yaeqDRCHWCGQMqNWhq3g6zqw63MBkri9i86hjK954YFFvnG2VCQJfszXsozDVUJbePagJieAzwsSY5H7Xd1jJhC', 'slot': 95301596}], 'id': 1}
奇怪的是“Vote111...11”似乎不是地址。盡管如此,我得到了預期的結果,這是一個簽名,即使 Solana Explorer 找不到這樣的簽名......
請告訴我要解決什么問題。我不知道該怎么做。我什至試圖檢查是否所有 Solana Explorer 都有自己的 API,但他們沒有。可能是因為 Solana 已經分享了它,對吧?
編輯
好吧,看來我需要輸入“帳戶地址作為 base-58 編碼字串”,因此地址變為:HLiBGYYxaQqQx8UTPHEahqcd7aZjkDgN3bihc3hYM3SDUBGU9LFrQSnx9eje。
我也這樣做了,我得到:
{'jsonrpc': '2.0', 'error': {'code': -32602, 'message': 'Invalid param: WrongSize'}, 'id': 1}
uj5u.com熱心網友回復:
我已經實作了在 javaScript 上獲取給定地址的所有交易的功能,這可能會對您有所幫助。
async getTransactionsOfUser(address, options, connection) {
console.log({ address, options });
try {
const publicKey = new PublicKey(address);
const transSignatures =
await connection.getConfirmedSignaturesForAddress2(publicKey, options);
console.log({ transSignatures });
const transactions = [];
for (let i = 0; i < transSignatures.length; i ) {
const signature = transSignatures[i].signature;
const confirmedTransaction = await connection.getConfirmedTransaction(
signature,
);
if (confirmedTransaction) {
const { meta } = confirmedTransaction;
if (meta) {
const oldBalance = meta.preBalances;
const newBalance = meta.postBalances;
const amount = oldBalance[0] - newBalance[0];
const transWithSignature = {
signature,
...confirmedTransaction,
fees: meta?.fee,
amount,
};
transactions.push(transWithSignature);
}
}
}
return transactions;
} catch (err) {
throw err;
}
}
uj5u.com熱心網友回復:
問題不是module,也不function但endpoint。
在Solana Doc 中,我找到endpoint了mainnet:
https://api.mainnet-beta.solana.com
https://solana-api.projectserum.com
它給出了所有的價值。
在其他頁面你可以看到
devnet僅playground用于測驗和tokens are not realtestnet只為stress test和tokens are not real
#Devnet#
- Devnet serves as a playground for anyone who wants to take Solana for a test drive, as a user, token holder, app developer, or validator.
- Application developers should target Devnet.
- Potential validators should first target Devnet.
- Key differences between Devnet and Mainnet Beta:
- Devnet tokens are not real
- Devnet includes a token faucet for airdrops for application testing
- Devnet may be subject to ledger resets
- Devnet typically runs a newer software version than Mainnet Beta
#Testnet#
-Testnet is where we stress test recent release features on a live cluster, particularly focused on network performance, stability and validator behavior.
- Testnet tokens are not real
- Testnet may be subject to ledger resets.
- Testnet includes a token faucet for airdrops for application testing
- Testnet typically runs a newer software release than both Devnet and Mainnet Beta
測驗的最小作業示例:
from solana.rpc.api import Client
all_addresses = [
'2AQdpHJ2JpcEgPiATUXjQxA8QmafFegfQwSLWSprPicm',
'Vote111111111111111111111111111111111111111',
'fake address',
]
#endpoint = 'https://api.devnet.solana.com' # probably for `developing`
#endpoint = 'https://api.testnet.solana.com' # probably for `testing`
endpoint = 'https://api.mainnet-beta.solana.com'
#endpoint = 'https://solana-api.projectserum.com'
solana_client = Client(endpoint)
for address in all_addresses:
print('address:', address)
#result = solana_client.get_confirmed_signature_for_address2(address, limit=1)
result = solana_client.get_signatures_for_address(address)#, before='89Tv9s2uMGaoxB8ZF1LV9nGa72GQ9RbkeyCDvfPviWesZ6ajZBFeHsTPfgwjGEnH7mpZa7jQBXAqjAfMrPirHt2')
if 'result' in result:
print('len:', len(result['result']))
# I use `[:5]` to display only first 5 values
for number, item in enumerate(result['result'][:5], 1):
print(number, 'signature:', item['signature'])
# check if there is `4SNQ4h1vL9GkmSnojQsf8SZyFvQsaq62RCgops2UXFYag1Jc4MoWrjTg2ELwMqM1tQbn9qUcNc4tqX19EGHBqC5u`
for number, item in enumerate(result['result'], 1):
if item['signature'].startswith('4SN'):
print('found at', number, '>>>', item['signature'])
else:
# error message
print(result)
print('---')
#solana_client.get_account_info(address)
結果:
address: 2AQdpHJ2JpcEgPiATUXjQxA8QmafFegfQwSLWSprPicm
len: 1000
1 signature: 89Tv9s2uMGaoxB8ZF1LV9nGa72GQ9RbkeyCDvfPviWesZ6ajZBFeHsTPfgwjGEnH7mpZa7jQBXAqjAfMrPirHt2
2 signature: 3Ku2rDnAVo5Mj3r9CVSGHJjvn4H9rxzDvc5Cg5uyeCC9oa6p7enAG88pSfRfxcqhBh2JiWSo7ZFEAD3mP8teS1Yg
3 signature: 3wiYCmfXb9n6pT3mgBag7jx6jBjeKZowkYmeakMibw4GtERFyyitrmmoPU6t28HpJJgWkArymWEGWQj8eiojswoD
4 signature: 5vjV1wKU3ZEgyzqXCKrJcJx5jGC8LPqRiJBwhPcu62HQU64mkrvkK8LKYaTzX4x4p26UXSufWM57zKSxRrMgjWn3
5 signature: 3aLk4xZPcWRogtvsFe8geYC177PK8s47mgqUErteRc9NJ4EF2iHi3GPsaj5guTwyiabhwivFhrrEk4YQgiE2hZs8
found at 970 >>> 4SNQ4h1vL9GkmSnojQsf8SZyFvQsaq62RCgops2UXFYag1Jc4MoWrjTg2ELwMqM1tQbn9qUcNc4tqX19EGHBqC5u
---
address: Vote111111111111111111111111111111111111111
len: 1000
1 signature: 67RRbUWGCrwmJ3hhLL7aB2K8gc6MewxwgAdfG7FeXQBaSstacqvuo9QUPZ6nhqXjJwYpKHihNJwFfcaAZHuyFmMc
2 signature: 67PsyRRw8bXgtsB49htxcW2FE9cyyBrocUKacnrxJpqaBpFT6QDLrCkyovWnM8XyGKxTv3kqzmW72SH7gj3N8YJr
3 signature: 675FWqrAjE5Bt6rf3KD2H2PCKUmEtrcD8BRRypdS7m2V22zXhrGn3SktP6JYW4ws6xEqDj52MZMH8RwNjoqgW4mt
4 signature: 671K7N9FwaMAyBC4MEYbYb1ACYAendBbRMqKPvr3h63dt5ybAPHyppjHwxq1yPDjqaRUwCBVU9o5dVqgsdVabint
5 signature: 666jBXXLwmB5tuvufhNn8Q7A3eCzGo6CBFD5BYJkuGfBf1bRoAGz4DeEpUAKsUrRk4NdRBhYkwfrhyZjgFmo3Dp2
---
address: fake address
{'jsonrpc': '2.0', 'error': {'code': -32602, 'message': 'Invalid param: Invalid'}, 'id': 3}
---
順便提一句:
因為它只獲得 1000 個值,所以此時您可能看不到4SNQ...~1200 位置處的值,但是如果您使用before=
get_signatures_for_address(address, before='89Tv9s2uMGaoxB8ZF1LV9nGa72GQ9RbkeyCDvfPviWesZ6ajZBFeHsTPfgwjGEnH7mpZa7jQBXAqjAfMrPirHt2')
那么它應該在~970的位置
順便提一句:
在索拉納瀏覽器你有大的按鈕來更改Mainnet到Devnet,當你使用Devnet然后
2AQdpHJ2JpcEgPiATUXjQxA8QmafFegfQwSLWSprPicm也給出了0項。
在同索拉納海灘。還有一個很大的按鈕來更改Mainnet到Devnet,當你使用Devnet然后
2AQdpHJ2JpcEgPiATUXjQxA8QmafFegfQwSLWSprPicm給出了0項。
uj5u.com熱心網友回復:
有趣的是,今天早上我正在研究這個完全相同的問題..就像 furas 指出的那樣,它是端點,需要使用主網端點:
https://api.mainnet-beta.solana.com
我發現即使檔案說你需要輸入 base-58 地址也有點令人困惑,我和你一樣試過它給了我同樣的錯誤,結果我只需要直接復制粘貼我的地址
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/361683.html
