> For the complete documentation index, see [llms.txt](https://erc1000-docs.polarise.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://erc1000-docs.polarise.org/erc-1000-eip/4.-compatibility.md).

# 4. Compatibility

Currently, the functionalities implemented and the interfaces defined by ERC-1000 are compatible with ERC-20 and ERC-721 standards, specifically as follows:

### 4.1 ERC-20 Compatibility <a href="#h.dt3kjot7k1gn" id="h.dt3kjot7k1gn"></a>

<table data-header-hidden><thead><tr><th width="184"></th><th></th><th></th><th></th></tr></thead><tbody><tr><td>No.</td><td>Item</td><td>Description</td><td>Status</td></tr><tr><td>1.</td><td>name()</td><td>Is declared as a public view function</td><td>✓</td></tr><tr><td><br></td><td></td><td>Returns a string, for example “Tether USD”</td><td>✓</td></tr><tr><td>2.</td><td>symbol()</td><td>Is declared as a public view function</td><td>✓</td></tr><tr><td><br></td><td></td><td>Returns the symbol by which the token contract should be known, for example “USDT”.<br>It is usually 3 or 4 characters in length</td><td>✓</td></tr><tr><td>3. </td><td>Decimals()</td><td>Is declared as a public view function</td><td>✓</td></tr><tr><td><br></td><td></td><td>Returns decimals, which refers to how divisible a token can be, from 0 (not at all divisible) to 18 (divisible) and even higher if required</td><td>✓</td></tr><tr><td>4.</td><td>totalSupply()</td><td>Is declared as a public view function</td><td>✓</td></tr><tr><td><br></td><td></td><td>Returns the number of total supplied tokens, including the total minted tokens (minus the total burned tokens) ever since the deployment</td><td>✓</td></tr><tr><td>5.</td><td>balanceOf()</td><td>Is declared as a public view function</td><td>✓</td></tr><tr><td><br></td><td></td><td>Anyone can query any addresses’ balance as all data on the blockchain is public</td><td>✓</td></tr><tr><td>6.</td><td>allowance()</td><td>Is declared as a public view function</td><td>✓</td></tr><tr><td><br></td><td></td><td>Returns the amount which the spender is still allowed to withdraw from the owner</td><td>✓</td></tr><tr><td>7.</td><td>transfer()</td><td>Is declared as a public function</td><td>✓</td></tr><tr><td><br></td><td></td><td>Returns a boolean value which accurately reflects the token transfer status</td><td>✓</td></tr><tr><td><br></td><td></td><td>Reverts if the caller does not have enough tokens to spend</td><td>✓</td></tr><tr><td><br></td><td></td><td>Allows zero amount transfers</td><td>✓</td></tr><tr><td><br></td><td></td><td>Emits Transfer() event when tokens are transferred successfully (include 0 amount transfers)</td><td>✓</td></tr><tr><td><br></td><td></td><td>Reverts while transferring to zero address</td><td>✓</td></tr><tr><td><p>8.</p><p><br></p></td><td>transferFrom()</td><td>Is declared as a public function</td><td>✓</td></tr><tr><td><br></td><td></td><td>Returns a boolean value which accurately reflects the token transfer status</td><td>✓</td></tr><tr><td><br></td><td></td><td>Reverts if the spender does not have enough token allowances to spend</td><td>✓</td></tr><tr><td><br></td><td></td><td>Updates the spender’s token allowances when tokens are transferred successfully</td><td>✓</td></tr><tr><td><br></td><td></td><td>Reverts if the from address does not have enough tokens to spend</td><td>✓</td></tr><tr><td><br></td><td></td><td>Allows zero amount transfers</td><td>✓</td></tr><tr><td><br></td><td></td><td>Emits Transfer() event when tokens are transferred successfully (including zero amount transfers)</td><td>✓</td></tr><tr><td><br></td><td></td><td>Is declared as a public function</td><td>✓</td></tr><tr><td><br></td><td></td><td>Reverts while transferring from zero address</td><td>✓</td></tr><tr><td>9..</td><td>approve()</td><td>Is declared as a public function</td><td>✓</td></tr><tr><td><br></td><td></td><td>Returns a boolean value which accurately reflects the token approval status</td><td>✓</td></tr><tr><td><br></td><td></td><td>Emits Approval() event when tokens are approved successfully</td><td>✓</td></tr><tr><td><br></td><td></td><td>Reverts while approving to zero address</td><td>✓</td></tr><tr><td>10.</td><td>Transfer()event</td><td>Is emitted when tokens are transferred, including zero value transfers</td><td>✓</td></tr><tr><td><br></td><td></td><td>Is emitted with the from address set to 𝑎𝑑𝑑𝑟𝑒𝑠𝑠(0𝑥0) when new tokens are generated</td><td>✓</td></tr><tr><td>11.</td><td>Approval()event</td><td>Is emitted on any successful call to approve()</td><td>✓</td></tr></tbody></table>

### 5.2 ERC-721 Compatibility <a href="#h.du7694htznuu" id="h.du7694htznuu"></a>

| No.         | Item                  | Description                                                                                                    | Status |
| ----------- | --------------------- | -------------------------------------------------------------------------------------------------------------- | ------ |
| 1.          | balanceOf()           | Is declared as a public view function                                                                          | ✓      |
| <p><br></p> | <p><br></p>           | Anyone can query any addresses’ balance as all data on the blockchain is public                                | ✓      |
| 2.          | ownerOf()             | Is declared as a public view function                                                                          | ✓      |
| <p><br></p> | <p><br></p>           | Returns the address of the owner of the NFT                                                                    | ✓      |
| 3.          | getApproved()         | Is declared as a public view function                                                                          | ✓      |
| <p><br></p> | <p><br></p>           | Reverts while ‘\_tokenId’ does not exist                                                                       | ✓      |
| <p><br></p> | <p><br></p>           | Returns the approved address for this NFT                                                                      | ✓      |
| 4.          | isApprovedForAll()    | Is declared as a public view function                                                                          | ✓      |
| <p><br></p> | <p><br></p>           | Returns a boolean value which check ‘\_operator’ is an approved operator                                       | ✓      |
| 5.          | safeTransferFrom()    | Is declared as a public function                                                                               | ✓      |
| <p><br></p> | <p><br></p>           | Reverts while ‘to’ refers to a smart contract and not implement IERC721Receiver-onERC721Received               | ✓      |
| <p><br></p> | <p><br></p>           | Reverts unless ‘msg.sender’ is the current owner, an authorized operator, or the approved address for this NFT | ✓      |
| <p><br></p> | <p><br></p>           | <p>Reverts while ‘\_tokenId’ is not a valid NFT</p><p><br></p>                                                 | ✓      |
| <p><br></p> | <p><br></p>           | Reverts while ‘\_from’ is not the current owner                                                                | ✓      |
| <p><br></p> | <p><br></p>           | Reverts while transferring to zero address                                                                     | ✓      |
| <p><br></p> | <p><br></p>           | Emits Transfer() event when tokens are transferred successfully                                                | ✓      |
| 6.          | transferFrom()        | Is declared as a public function                                                                               | ✓      |
| <p><br></p> | <p><br></p>           | Reverts unless ‘msg.sender’ is the current owner, an authorized operator, or the approved address for this NFT | ✓      |
| <p><br></p> | <p><br></p>           | Reverts while ‘\_tokenId’ is not a valid NFT                                                                   | ✓      |
| <p><br></p> | <p><br></p>           | Reverts while ‘\_from’ is not the current owner                                                                | ✓      |
| <p><br></p> | <p><br></p>           | Reverts while transferring to zero address                                                                     | ✓      |
| <p><br></p> | <p><br></p>           | Emits Transfer() event when tokens are transferred successfully                                                | ✓      |
| 7.          | approve()             | Is declared as a public function                                                                               | ✓      |
| <p><br></p> | <p><br></p>           | Reverts unless ‘msg.sender’ is the current owner, an authorized operator, or the approved address for this NFT | ✓      |
| <p><br></p> | <p><br></p>           | Emits Approval() event when tokens are approved successfully                                                   | ✓      |
| <p><br></p> | <p><br></p>           | Reverts while approving to zero address                                                                        | ✓      |
| 8.          | setApprovalForAll()   | Is declared as a public function                                                                               | ✓      |
| <p><br></p> | <p><br></p>           | Reverts while not approving to caller                                                                          | ✓      |
| <p><br></p> | <p><br></p>           | Emits ApprovalForAll() event when tokens are approved successfully                                             | ✓      |
| 9.          | Transfer()event       | Is emitted when tokens are transferred\`                                                                       | ✓      |
| 10.         | Approval()event       | Is emitted on any successful call to approve()                                                                 | ✓      |
| 11.         | ApprovalForAll()event | Is emitted on any successful call to setApprovalForAll()                                                       | ✓      |
