Factory Contracts
Look up factory addresses, check deployment status, and interact with ChainPortal factories across every ecosystem.
Factory Contracts
ChainPortal deploys factory contracts per chain. Tokens and NFT collections are created by calling a factory rather than deploying bytecode yourself — this keeps gas low (EVM uses the EIP-1167 minimal proxy pattern) and the deployed contract audited-by-construction.
Factory addresses live in @chainportal/config. Always check that a factory is deployed on the
target chain before calling it — coverage differs per ecosystem and network.
Not every chain has a factory yet. EVM Arc testnet is fully wired; Aptos / SUI / NEAR are
live on testnet; Cosmos and most EVM mainnets are pending. The helpers below return
undefined/false where a factory isn't deployed, and the UI surfaces a "factory not deployed"
state in those cases.
EVM
Address getters take a numeric chainId and return the address or undefined:
| Getter | Returns | Contract |
|---|---|---|
getERC20FactoryAddress(chainId) | string | undefined | Standard ERC-20 factory |
getTaxableERC20FactoryAddress(chainId) | string | undefined | Tax/reflection ERC-20 factory |
getERC721FactoryAddress(chainId) | string | undefined | ERC-721 collection factory |
getERC1155FactoryAddress(chainId) | string | undefined | ERC-1155 collection factory |
getAirdropAddress(chainId) | string | undefined | Airdrop / batch-transfer contract |
getReferralRegistryAddress(chainId) | string | undefined | Referral registry |
getContractAddresses(chainId) | ContractAddresses | undefined | All addresses for the chain |
Interact via the EVM services (which wrap the ABIs and the factory address
lookup), or directly with viem/wagmi using the exported ABIs:
Non-EVM
Non-EVM ecosystems key off a string network id and expose both an address getter and a deployment-status check.
Aptos / SUI
| Helper | Signature | Description |
|---|---|---|
getSuiFactoryAddresses(networkName) | (string) => SuiFactoryAddresses | Package/module IDs for SUI |
isSuiFactoryDeployed(networkName) | (string) => boolean | Whether SUI factories are wired |
Aptos uses the equivalent module-address getters exported from @chainportal/config; SUI coin
creation additionally follows the guided publish→register flow (see the in-app SuiCoinGuide).
NEAR
| Helper | Signature | Description |
|---|---|---|
getNearFactoryAddresses(networkId) | (string) => NearFactoryAddresses | FT/NFT factory account IDs |
isNearFTFactoryDeployed(networkId) | (string) => boolean | FT factory wired |
isNearNFTFactoryDeployed(networkId) | (string) => boolean | NFT factory wired |
Solana
Solana & Cosmos
Cosmos
- Solana creates SPL tokens and Metaplex NFTs without a custom factory — there's no address to look up. (A dedicated anti-bot program is not yet deployed, so anti-bot limits aren't enforced on-chain for SPL tokens.)
- Cosmos factories (CW20/CW721) are pending deployment to CosmWasm-capable chains (Osmosis / Juno / Neutron). The create flow only lists chains that can run CosmWasm.
Recommended pattern
Gate every create flow on the deployment check, then hand off to the service or hook:
See also
- Services — wrap factory addresses + ABIs for you
- Hooks —
use*TokenCreation/use*NFTCreationper ecosystem - Supported chains — per-chain coverage