Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,16 @@ registration is done via a GitHub pull request to the registry repository. The
file and directory that need to be updated in the PR vary depending on the type
of information being added.

<Tip>
Full token support across Initia apps depends on two separate requirements:

1. Registry metadata (`assetlist.json`): Controls how the token appears in
product UIs (name, symbol, decimals, logo, and display info in Initia Scan).
2. Token contract behavior: Controls whether token actions actually work (for
example, sending and bridging). For MiniEVM ERC20 tokens, this includes the
`sudoTransfer` hook.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's not just sudoTransfer that's required? The register functions and others are also needed https://initia-labs.slack.com/archives/C08HUBCRV6Y/p1772709025874659?thread_ts=1772616413.010649&cid=C08HUBCRV6Y

</Tip>

## Adding Profiles

For an application's information including logo, name, description, and more to
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,36 @@ title: Creating Standard ERC20s via ERC20Factory
For developers looking to create standard ERC20 tokens on EVM rollups, we
recommend using the
[ERC20Factory](/resources/developer/contract-references/evm/erc20-factory)
contract.
contract. For most teams, this is the lowest-risk path because it deploys a
token implementation that already includes the required Initia chain integration
hooks (including `sudoTransfer`).
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For most teams, this is the lowest-risk path because it deploys a
token implementation that already includes the required Initia chain integration
hooks (including sudoTransfer).

I don't think we need this sentence


## Production Readiness Checklist

Before treating a factory-deployed token as ready for support across Initia
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"Factory-deployed tokens" is unclear/not specific. It should be "Tokens deployed via ERC20Factory satisfy this requirement by default" etc.

products (for example, Initia Scan, InterwovenKit, Wallet, and Bridge):

1. Deploy via
[`ERC20Factory`](/resources/developer/contract-references/evm/erc20-factory).
2. Add token metadata to the relevant `assetlist.json` in
[Initia Registry](/developers/developer-guides/integrating-initia-apps/registry/introduction).
3. Confirm your token is compatible with the required `sudoTransfer` hook used
in sending and bridging flows (included by default for `ERC20Factory`
deployments) by following the compatibility guidance in
[Creating ERC20s Introduction](/developers/developer-guides/vm-specific-tutorials/evm/creating-erc20s/introduction)
and
[`InitiaCustomERC20` reference](/resources/developer/contract-references/evm/initia-custom-erc20).
Comment on lines +14 to +28
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is irrelevant if they're deploying the token via ERC20Factory, which is the context of this page?


If you need custom token logic, deploy a custom ERC20 that inherits
[`InitiaCustomERC20`](/resources/developer/contract-references/evm/initia-custom-erc20)
as the base contract (see
[Creating Custom ERC20s](/developers/developer-guides/vm-specific-tutorials/evm/creating-erc20s/creating-custom-erc20s)).

<Note>
Registry listing is required for tokens to appear correctly in Initia product
UIs with metadata (name, symbol, decimals, logo), and to be selectable in
flows such as balances, transfers, and bridging.
</Note>
Comment on lines +36 to +39
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unclear what registry this refers to


## Project Setup

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,18 @@
title: Introduction
---

To ensure compatibility with Initia's EVM module and the Cosmos SDK in general,
ERC20 tokens on rollups includes certain extensions beyond the standard ERC20
template.
For an ERC20 token to work across Initia products (for example, Initia Scan,
InterwovenKit, Wallet, and Bridge), it must include Initia chain integration
hooks in addition to standard ERC20 behavior.

Developers looking to create and deploy ERC20s on EVM rollups have two options:

1. Deploy Initia ERC20s using the
1. Deploy using the
[ERC20Factory](/resources/developer/contract-references/evm/erc20-factory)
contract.
2. Extend and modify Initia's
contract (recommended when you only need standard token behavior).
2. For custom ERC20 logic, inherit from
[InitiaCustomERC20](/resources/developer/contract-references/evm/initia-custom-erc20)
contract.
and extend it.

<Note>
While Initia's `CustomERC20.sol` contains additional logic, it is still fully
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,10 @@ Fee Token as an ERC20 token.
Use validator (admin) account to update the chain parameter.

<Warning>
The deployed ERC20 token must inherit the `InitiaERC20` contract.
The fee token ERC20 must implement Initia-compatible chain hooks, especially
`sudoTransfer`, which is used by chain-level transfer handling. Tokens
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

grammar

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

not only sudoTransfer

deployed via `ERC20Factory` satisfy this requirement by default. For custom
ERC20 deployments, the token contract must inherit `InitiaCustomERC20`.
</Warning>

```ts
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -229,6 +229,13 @@ function burn(address from, uint256 amount) external burnable(from) onlyOwner
Transfers tokens from one address to another, bypassing the usual access control
checks. This function can only be called by the chain signer.

<Info>
For MiniEVM ERC20 tokens, `sudoTransfer` is a required hook in the token
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

not just sudoTransfer for proper compatibility

contract. If you deploy through `ERC20Factory` or inherit `InitiaCustomERC20`,
it is included automatically. Without it, sending and bridging may fail even
if the token appears in UIs.
</Info>

```solidity
function sudoTransfer(address sender, address recipient, uint256 amount) external onlyChain
```
Expand Down