ASA error in python - General - Algorand
ASA error in python
post by harish on Jul 16, 2021
I deployed these below code:
code:
import json
from algosdk.v2client import algod
from algosdk import account, mnemonic
from algosdk.future.transaction import AssetConfigTxn, AssetTransferTxn, AssetFreezeTxn
# Shown for demonstration purposes. NEVER reveal secret mnemonics in practice.
# Change these values with your mnemonics
# mnemonic1 = "PASTE your phrase for account 1"
# mnemonic2 = "PASTE your phrase for account 2"
# mnemonic3 = "PASTE your phrase for account 3"
mnemonic1 = "sunny desk host car share soul ill soon swamp gravity chase juice drop mushroom already naive fence quiz picture special resource mutual plate abstract rose"
mnemonic2 = "rescue increase uncover lion race phrase script stool film monster item attract spring total bottom immense path wife describe half wash copper atom abstract novel"
mnemonic3 = "believe fire table wing hurt gather allow quality auto seven negative replace wrap fish silent wonder maze wild air brush boost kitchen exist above heavy"
# For ease of reference, add account public and private keys to
# an accounts dict.
accounts = {}
counter = 1
for m in [mnemonic1, mnemonic2, mnemonic3]:
accounts[counter] = {}
accounts[counter]['pk'] = mnemonic.to_public_key(m)
accounts[counter]['sk'] = mnemonic.to_private_key(m)
counter += 1
# Specify your node address and token. This must be updated.
# algod_address = "" # ADD ADDRESS
# algod_token = "" # ADD TOKEN
algod_token = 'my token value'
algod_address = 'https://testnet-algorand.api.purestake.io/ps2'
purestake_token = {'X-Api-key': algod_token}
# Initialize an algod client
algod_client = algod.AlgodClient(algod_token, algod_address, headers=purestake_token)
def wait_for_confirmation(client, txid):
"""
Utility function to wait until the transaction is
confirmed before proceeding.
"""
last_round = client.status().get('last-round')
txinfo = client.pending_transaction_info(txid)
while not (txinfo.get('confirmed-round') and txinfo.get('confirmed-round') > 0):
print("Waiting for confirmation")
last_round += 1
client.status_after_block(last_round)
txinfo = client.pending_transaction_info(txid)
print("Transaction {} confirmed in round {}.".format(txid, txinfo.get('confirmed-round')))
return txinfo
# Utility function used to print created asset for account and assetid
def print_created_asset(algodclient, account, assetid):
account_info = algodclient.account_info(account)
idx = 0;
for my_account_info in account_info['created-assets']:
scrutinized_asset = account_info['created-assets'][idx]
idx = idx + 1
if (scrutinized_asset['index'] == assetid):
print("Asset ID: {}".format(scrutinized_asset['index']))
print(json.dumps(my_account_info['params'], indent=4))
break
# Utility function used to print asset holding for account and assetid
def print_asset_holding(algodclient, account, assetid):
account_info = algodclient.account_info(account)
idx = 0
for my_account_info in account_info['assets']:
scrutinized_asset = account_info['assets'][idx]
idx = idx + 1
if (scrutinized_asset['asset-id'] == assetid):
print("Asset ID: {}".format(scrutinized_asset['asset-id']))
print(json.dumps(scrutinized_asset, indent=4))
break
print("Account 1 address: {}".format(accounts[1]['pk']))
print("Account 2 address: {}".format(accounts[2]['pk']))
print("Account 3 address: {}".format(accounts[3]['pk']))
# CREATE ASSET
params = algod_client.suggested_params()
params.fee = 1000
params.flat_fee = True
txn = AssetConfigTxn(
sender=accounts[1]['pk'],
sp=params,
total=1000,
default_frozen=False,
unit_name="Harish007",
asset_name="HarishCoin1",
manager=accounts[2]['pk'],
reserve=accounts[2]['pk'],
freeze=accounts[2]['pk'],
clawback=accounts[2]['pk'],
url="https://path/to/my/asset/details",
decimals=0)
# Sign with secret key of creator
stxn = txn.sign(accounts[1]['sk'])
# Send the transaction to the network and retrieve the txid.
txid = algod_client.send_transaction(stxn)
print(txid)
# Retrieve the asset ID of the newly created asset by first
# ensuring that the creation transaction was confirmed,
# then grabbing the asset id from the transaction.
# Wait for the transaction to be confirmed
wait_for_confirmation(algod_client,txid)
try:
ptx = algod_client.pending_transaction_info(txid)
asset_id = ptx["asset-index"]
print_created_asset(algod_client, accounts[1]['pk'], asset_id)
print_asset_holding(algod_client, accounts[1]['pk'], asset_id)
except Exception as e:
print(e)
# CHANGE MANAGER
params = algod_client.suggested_params()
params.fee = 1000
params.flat_fee = True
txn = AssetConfigTxn(
sender=accounts[2]['pk'],
sp=params,
index=asset_id,
manager=accounts[1]['pk'],
reserve=accounts[2]['pk'],
freeze=accounts[2]['pk'],
clawback=accounts[2]['pk'])
# sign by the current manager - Account 2
stxn = txn.sign(accounts[2]['sk'])
txid = algod_client.send_transaction(stxn)
print(txid)
wait_for_confirmation(algod_client, txid)
print_created_asset(algod_client, accounts[1]['pk'], asset_id)
# OPT-IN
params = algod_client.suggested_params()
params.fee = 1000
params.flat_fee = True
account_info = algod_client.account_info(accounts[3]['pk'])
holding = None
idx = 0
for my_account_info in account_info['assets']:
scrutinized_asset = account_info['assets'][idx]
idx = idx + 1
if (scrutinized_asset['asset-id'] == asset_id):
holding = True
break
if not holding:
txn = AssetTransferTxn(
sender=accounts[3]['pk'],
sp=params,
receiver=accounts[3]["pk"],
amt=0,
index=asset_id)
stxn = txn.sign(accounts[3]['sk'])
txid = algod_client.send_transaction(stxn)
print(txid)
wait_for_confirmation(algod_client, txid)
print_asset_holding(algod_client, accounts[3]['pk'], asset_id)
# TRANSFER ASSET
params = algod_client.suggested_params()
params.fee = 1000
params.flat_fee = True
txn = AssetTransferTxn(
sender=accounts[1]['pk'],
sp=params,
receiver=accounts[3]["pk"],
amt=10,
index=asset_id)
stxn = txn.sign(accounts[1]['sk'])
txid = algod_client.send_transaction(stxn)
print(txid)
wait_for_confirmation(algod_client, txid)
print_asset_holding(algod_client, accounts[3]['pk'], asset_id)
# FREEZE ASSET
params = algod_client.suggested_params()
params.fee = 1000
params.flat_fee = True
txn = AssetFreezeTxn(
sender=accounts[2]['pk'],
sp=params,
index=asset_id,
target=accounts[3]["pk"],
new_freeze_state=True
)
stxn = txn.sign(accounts[2]['sk'])
txid = algod_client.send_transaction(stxn)
print(txid)
wait_for_confirmation(algod_client, txid)
print_asset_holding(algod_client, accounts[3]['pk'], asset_id)
# REVOKE ASSET
params = algod_client.suggested_params()
params.fee = 1000
params.flat_fee = True
txn = AssetTransferTxn(
sender=accounts[2]['pk'],
sp=params,
receiver=accounts[1]["pk"],
amt=10,
index=asset_id,
revocation_target=accounts[3]['pk']
)
stxn = txn.sign(accounts[2]['sk'])
txid = algod_client.send_transaction(stxn)
print(txid)
wait_for_confirmation(algod_client, txid)
print_asset_holding(algod_client, accounts[3]['pk'], asset_id)
print_asset_holding(algod_client, accounts[1]['pk'], asset_id)
# DESTROY ASSET
params = algod_client.suggested_params()
params.fee = 1000
params.flat_fee = True
txn = AssetConfigTxn(
sender=accounts[1]['pk'],
sp=params,
index=asset_id,
strict_empty_address_check=False
)
stxn = txn.sign(accounts[1]['sk'])
txid = algod_client.send_transaction(stxn)
print(txid)
wait_for_confirmation(algod_client, txid)
try:
print("Account 3 must do a transaction for an amount of 0, ")
print("with a close_assets_to to the creator account, to clear it from its accountholdings")
print("For Account 1, nothing should print after this as the asset is destroyed on the creator account")
print_asset_holding(algod_client, accounts[1]['pk'], asset_id)
print_created_asset(algod_client, accounts[1]['pk'], asset_id)
except Exception as e:
print(e)
Error:
invalid : transaction asset unit name too big: 9 \u003e 8
Your unit name is too long.