# **Optional Items**
# **Required Items**
**totalSupply()** This function returns the total supply of the token.
**balanceOf()** This function returns the token balance of the specific account.
**transfer()** This function is used to transfer an amount of tokens from the smart contract to a specific address.
**approve()** This function is used to authorize the third party (like a DAPP smart contract) to transfer token from the token owner’s account.
**transferFrom()** This function is used to allow the third party to transfer token from an owner account to a receiver account. The owner account must be approved to be called by the third party.
**allowance()** This function is used to query the remaining amount of tokens the third party can transfer.
# **Event Functions**
When token is successfully transferred, it has to trigger Transfer Event.
When approval() is successfully called, it has to trigger Approval Event.