Algorand Standard Asset (ASA)

Algorand Standard Asset (ASA)
The Algorand Standard Asset (ASA) is a standardized, Layer-1 mechanism to represent any type of asset on the Algorand blockchain. ASAs can include fungible assets (such as currencies, stablecoins, utility tokens, etc), non-fungible assets (unique assets such as tickets, etc.), restricted fungible assets (such as securities), and restricted non-fungible assets (such as licenses, certifications). Asset issuers, or specified delegates, can optionally have the ability to freeze an account’s ability to transact with their asset and clawback their asset when required.

Reply to this thread with questions and feedback related to this new functionality!

1 Like

I had a few questions regarding asset creation and its transfer.

goal asset create command is used to create the assets. For fungible tokens, I can specify the number of assets needed as they should work fine with all the steps mentioned.

However, I have a query regarding the Non-fungible tokens. The assetmetadatab64 field is used to attach more details like deeds, certificate or similar. Also, unitname flag can be used to give the name of the asset.

  • As each token is unique in case of NFTs, do I need to create one token every time mentioning total flag as 1, unlike the Fungible Token can, where we suggest total token needed?

  • Or I can create the total flag to mention the total number of token needed and at the time of minting, I can use assetmetadatab64 and notes filed to attach more information for each token?

  • Lastly, on the transfer of the non-fungible token from one address to another, how can I assign more information about the transfer, maybe the change of ownership details.

These are general queries; I might be wrong in a lot of concepts, please consider this as a thread for creating NFTs and transferring them from one to another, like in case of tickets, maintaining the transparency of the supply chain.

These are great questions.

For NFTs, your first bullet point is correct. You want to create one single token representing that asset.

For the third bullet point, the change of ownership will be officially represented already in the ‘from’ and ‘to’ fields of the transaction and the balance on the ledger. But if you want to add more information about it, you could use the note field on the asset transfer transaction.

In the case where you are creating a lot of NFTs, like for ticket sales or supply chain use cases, you just need to adhere to the Algorand account maximum of 1,000 assets per account. This is just to ensure that account state for any single account does not become too large. How you decide to divvy up new assets across Algorand accounts is up to you.

1 Like

Are ASA’s always integer amounts? Is there never a decimal place?

What is the maximum total amount that can be issued?

Are ASA’s always integer amounts? Is there never a decimal place?

Correct - transfers are always specified as a uint64. (Issuance too)

What is the maximum total amount that can be issued?

You specify issuance as a uint64, so I believe you could create an asset with up to uint64_max (18446744073709551615) tokens issued.

What are the best practices for working with ASA asset precision? I do not find a field to define precision when issuing an ASA. BTC defines a precision of 8 and ETH 18.

Using goal, how can I obtain the balance of an ASA held by an account?

./goal account balance -a MYACCT -d betanetdata

This will reurn only the microAlgos in MYACCT. I do not find a flag to specify the assetid to query specifically.

There is an open issue to add this information to goal account balance here:

Hi,

This is query in continuation with my previous question about NFTs and FTs.

As one account is limited to 1,000 assets, also there is a need for opt-in for each of them as well.

If we use FTs along with note field to use group of FT assets as NFTs (adding the unique note field). This is possible. However, if I need to transfer each asset from one account to another, is it possible to transfer and how?

lets’s say Alice has 100 Assets (Fungible Token FT) with asset-id 123. She adds a note field to two different single assets (Note 1, Note 2) and transfer to Bob. Can later Bob transfer the asset with Note field Note 1 to Catherine? Is this kind of asset transfer possible and how?

The note field will not be stored as part of the asset, so you would have to establish some off-chain semantics for your use case. Something like “the details of the individual asset are encoded in the note field of the first transfer of that asset”. I’m not sure this is really what you’re looking for though. Also because if those are pooled into another account at any point, you will immediately lose track of that asset.

Would you be willing to share more specifically what you are looking to do? I would be happy to share with more of the team here and see if we can help figure out a more optimal solution. Feel free to DM me if you prefer.

How can I list the assed ids and asset names defined in Testnet or Mainnet?

Hi, I am using this purestake API to get that.

curl -X GET “https://testnet-algorand.api.purestake.io/ps1/v1/assets?max=10&assetIdx=0” -H “accept: application/json” -H "x-api-key:

max = Fetch no more than this many assets
assetidx = Fetch assets with asset index <= assetIdx. If zero, fetch most recent assets.

This will list all assets in test or mainnet.

Thanks. Tried out your solution, got back “VoteCoin” 10 times, but not “DevCoin” or “ATB”.

Someone is testing assets out in TestNet and has created dozens of a coin. This isn’t wrong, but if you use the query @visybl posted, it will only get the ten most recently created coins - all of which would be this test coin.

There isn’t a query to get all assets back from the ledger, the best you can do is grab 100 at a time, and use the Index ID of the last asset as input as an argument to a second query.

For example, if you request right now from PureStake API "https://testnet-algorand.api.purestake.io/ps1/v1/assets?max=100&assetIdx=0” the index value of the last Asset is 5793.

Putting that back into the query "https://testnet-algorand.api.purestake.io/ps1/v1/assets?max=100&assetIdx=5793” pulls back the last handful of assets outside the first query.

do i need Algos in my account before I can create ASAs?
trying to create on the testnet but the dispenser isn’t sending Algos.
getting
“Couldn’t broadcast tx with algod: HTTP 400 Bad Request: TransactionPool.Remember: transaction xxx : overspend: (account xxx, data…”

thanks!

Yes. All transactions operations require some amount of Algos.

yea, this fixed this.
is there standard documentation for adding more units to an ASA ID?
say I started with 1000 and wanted to add 1000 more.
thanks!

The number of units of a given ASA unit cannot be changed.

However, you can decide to assign more units than required (when creating the asset) and keep the extra ones in the reserve account.

Following @akshaykant 's line of thought, if I’m creating say a collectible card game using NFA, do I need to create an individual ASA for each card? Wouldn’t it make more sense to create one single ASA which holds all of the cards? Maybe using some sort of sub-asset to create individual cards with distinct attributes?

You need to create one ASA for each type of cards. Suppose you want to have 10 52-card decks, and it does not matter from which deck a given card is.
Then, you would create 52 ASA:

  • 1 ASA for King of Spades, with 10 units
  • 1 ASA for King of Diamonds, with 10 units
  • …