#python #algorand
Вопрос:
TLDR; Я запускаю алгоритм приватной сети в песочнице. Я хотел бы знать, как я могу использовать Python SDK для Algorand для возврата адреса и баланса учетных записей в этой сети.
Более длинная версия; До сих пор я использовал "./sandbox goal account list"
для поиска адресов учетных записей и остатков на счетах в Bash, это возвращает:
[в автономном режиме] | I3CMDHG236HVBDMCKEM22DLY5L2OJ3CBRUDHG4PVVFGEZ4QQR3X3KNHRMU | I3CMDHG236HVBDMCKEM22DLY5L2OJ3CBRUDHG4PVVFGEZ4QQR3X3KNHRMU | 8012889074131520 microAlgos |
[в автономном режиме] | 3NSWKJTYMW3PSZZDIE6NCHMRTOZ24VY5G3OJNDSTYRVRXMZBZVPCGQHJJI | 3NSWKJTYMW3PSZZDIE6NCHMRTOZ24VY5G3OJNDSTYRVRXMZBZVPCGQHJJI | 1001611000000000 microAlgos |
[онлайн] | 5KLSI3AHMBBDALXBEO2HEA3PBBCBAYT4PIHCD3B25557WGWUZGRTQETPHQ | 5KLSI3AHMBBDALXBEO2HEA3PBBCBAYT4PIHCD3B25557WGWUZGRTQETPHQ | 100000 microAlgos |
Я попытался использовать модули algod и v2client.indexer, как описано ниже, но вместо 3 учетных записей, перечисленных выше, в моем коде перечислены 4 (исходные 3 1). Код:
#imports
from algosdk import algod, v2client
# instatiate AlgodClient
def connect_to_network():
algod_address = "http://localhost:4001"
algod_token = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
algod_client = algod.AlgodClient(algod_token, algod_address)
return algod_client
# instantiate IndexClient
def indexer():
indexer_token = ""
indexer_address = "http://localhost:8980"
indexer_client = v2client.indexer.IndexerClient(indexer_token, indexer_address)
return indexer_client
# returns all account details from indexer
def account_details():
raw_details = indexer().accounts() # <-- I think the error is here because this returns 4 addresses.
account_details = []
for details in raw_details["accounts"]:
account_details.append({"address":details["address"], "amount": details["amount"]})
return account_details
# returns the amount in each account
def account_amounts(account_address):
return connect_to_network().account_info(account_address)
# returns account address and amount for each account
for detail in account_details():
print(account_amounts(detail["address"])["address"])
print(account_amounts(detail["address"])["amount"])
Это возвращает:
I3CMDHG236HVBDMCKEM22DLY5L2OJ3CBRUDHG4PVVFGEZ4QQR3X3KNHRMU | 8013089091731545 |
NTMTJYBQHWUXEGVG3XRRX5CH6FCYJ3HKCSIOYW4DLAOF6V2WHSIIFMWMPY | 1001636000000000 |
3NSWKJTYMW3PSZZDIE6NCHMRTOZ24VY5G3OJNDSTYRVRXMZBZVPCGQHJJI | 1001636000000000 |
5KLSI3AHMBBDALXBEO2HEA3PBBCBAYT4PIHCD3B25557WGWUZGRTQETPHQ | 100000 |
- Как я могу выполнить репликацию
"./sandbox goal account list"
с помощью py-algorand-sdk? - (Бонусный вопрос) что это за дополнительная таинственная «учетная запись», которая появляется, когда я использую SDK по сравнению с Bash?
Ответ №1:
Проблема выше возникла из-за того, что, как и в случае с ./sandbox goal accounts list
я пытался вернуть учетные записи, для которых у меня были ключи локально в KMD, но мой звонок индексатору raw_details = indexer().accounts()
возвращал все учетные записи в сети.
Чтобы исправить это, вместо импорта и использования v2client.indexer
модуля импортируйте wallet
модуль из algosdk
библиотеки. Это необходимый импорт:
from algosdk import algod, kmd, wallet
Затем настройте соединения с algod, kmd и вашим кошельком:
# instatiate AlgodClient
def connect_to_network():
algod_address = "http://localhost:4001"
algod_token = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
algod_client = algod.AlgodClient(algod_token, algod_address)
return algod_client
# instantiate KMDClient <--- this is used as a parameter when instantiating the Wallet Class.
def key_management():
kmd_address = "http://localhost:4002"
kmd_token = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
kmd_client = kmd.KMDClient(kmd_token, kmd_address)
return kmd_client
#get wallet details
def wallet_details():
wallet_name = 'unencrypted-default-wallet'
password = ""
kmd_client = key_management()
return wallet.Wallet(wallet_name, password, kmd_client)
Теперь вы можете вернуть адреса учетных записей, хранящиеся локально в KMD:
keys = wallet_details().list_keys()
Теперь, когда у вас есть адреса, которые вы можете запросить, используйте клиент algod для возврата суммы (микро) Algo проводится по каждому из этих адресов.