Does Algorand have a clear-cut distinction between ALGO and ASA tokens?

In Ethereum, the only native asset is Ether (ETH). It’s the only asset that gets first-class treatment in terms of cost and ability to be pushed and pulled through contract calls.

Is there a similarly clear-cut distinction between ALGO and all other tokens on Algorand?

For instance, are the ALGO balances stored in a different place in go-algorand compared to ASA tokens?

Welcome to the forum @prberg,

Algorand’s native asset is the Algo, which can be transferred using a Payment transaction. In order to transfer an Algorand Standard Asset (ASA) between accounts you make an Asset Transfer transaction.

Whilst all ASAs are native primitives of the Algorand blockchain and don’t require special smart contracts, they are distinctly different from the Algo. However with that said, the fee associated to sending either one of these transactions is identical.

If you were creating a smart contract which wanted to validate either a payment or an asset transfer was made within the same group transaction, you must explicitly check which it was and the associated fields they would have.

Hope that helps.


Thanks @Null, all clear now! I can see the PaymentTransaction and the AssetTransferTransaction in the docs.

I’m curious - was there any particular reason for separating $AGLO from the rest of ASAs? My (naive) gut feeling tells me that having just one system for managing all assets would have been easier to implement.

I would love to have single system for managing all assets as well… It gets even more complicated in smart contract where you have to do a lot of if token is 0, then do pay else do axfer… Or to get the balance of the account and so on…