| Feature | Ethereum | Aptos |
|---|---|---|
| Account Addresses | 160-bit | 256-bit |
| Storage Mindset | Contract-based storage | Account centric mindset for code and data |
| Caller ID | msg.sender | &signer reference |
| Smart Contracts | Solidity, EVM | Move, MoveVM |
| Benefits | Mature, wide adoption | Scalability, low latency, predictable fees |
| Transaction Fees | Variable, can be high | Lower and more predictable |
| Sponsored Transactions | Requires third-party services or EIP-7702 wallet support (2025+) | Natively supported via fee payer field. Geomi Gas Stations provides production infrastructure |
| Account Structure | Balance in a single field, uses nonce | Modules and resources, uses sequence number |
| Data Storage | Patricia Merkle Trees | Global storage with resources and modules |
| Upgradeability | Proxy patterns | Direct module upgrades |
| Safety & Security | Vulnerable to attacks like reentrancy | Mitigates common vulnerabilities |
| Dispatch Type | Dynamic dispatch | Static dispatch |
| Frontend SDK | Ethers.js library | Aptos Typescript SDK |
| NFT Standards | ERC-721, ERC-1155 | Digital Asset |
| FT Standard | ERC-20, factory pattern | See Fungible Asset, copy paste in your module: use aptos_framework::fungible_asset... |
| Example Code | ERC-20 (new contract per deploy) | Fungible Asset (single reusable module) |
| Solidity | Move (Aptos) | |
|---|---|---|
| Token Structure | Each token is its own contract. | Every token is a typed FungibleAsset instantiation that reuses the same published module. |
| Token Standard | Must conform to standards like ERC-20; implementations can vary per deploy. | Uniform interface and implementation enforced by the shared module; new tokens simply register a new type rather than redeploying code. |
| Balance Storage | Balances stored in contract using a mapping structure. | Resource-Oriented Balance: balances live in an extensible object owned by the user’s account. |
| Transfer Mechanism | Tokens can be transferred without receiver’s explicit permission. | Transfers can skip receiver permission, but only when the FA explicitly enables primary-store auto creation (visible in the token’s creation code). |
| EVM (Ethereum Virtual Machine) | Move VM (Move Virtual Machine) | |
|---|---|---|
| Data Storage | Data is stored in the smart contract’s storage space. | Data is stored across smart contracts, user accounts, and objects. |
| Parallelization | Parallel execution is limited due to shared storage space. | More parallel execution enabled due to flexible split storage design. |
| VM and Language Integration | Separate layers for EVM and smart contract languages (e.g., Solidity). | Seamless integration between VM layer and Move language, with native functions written in Rust executable in Move. |
| Critical Network Operations | Implementation of network operations can be complex and less direct. | Critical operations like validator set management natively implemented in Move, allowing for direct execution. |
| Function Calling | Dynamic dispatch allows for arbitrary smart contract calls. | Static dispatch aligns with a focus on security and predictable behavior. |
| Type Safety | Contract types provide a level of type safety. | Module structs and generics in Move offer robust type safety. |
| Transaction Safety | Uses nonces for transaction ordering and safety. | Uses sequence numbers for transaction ordering and safety. |
| Authenticated Storage | Yes, with smart contract storage. | Yes, leveraging Move’s resource model. |
| Object Accessibility | Objects are not globally accessible; bound to smart contract scope. | Guaranteed global accessibility of objects. |
| Metric | What it measures | Typical mainnet value | Where to verify |
|---|---|---|---|
| Block time | Interval between consecutive blocks | Tens of milliseconds. Aptos does not use a fixed slot clock; live timestamps are often under 50 ms | Blocks, Explorer |
| Finality | When a committed result cannot be reversed | Immediate on commit. No confirmation depth, no reorg window. A failed transaction is still final; it did not move funds | Transactions and States |
| End-to-end (E2E) latency | Client submit → committed and returned by waitForTransaction | Typically sub-second under normal load. Includes client RTT to a fullnode, mempool, consensus, execution, and polling. Build, sign, and proof generation happen before submit and are not in this number | Always call waitForTransaction after submit |
| Transaction fee | APT charged to the fee payer | Net charge is gas_used × gas_unit_price − storage_refund in octas. Storage is already folded into gas_used. Independent of the amount transferred | Gas and Storage Fees, simulate |
| Usage | Typical on-chain E2E | Extra client work | Fee profile | Implement |
|---|---|---|---|---|
| APT transfer | Sub-second after submit | Sign, submit, wait | Lowest. Amount-independent | 0x1::aptos_account::transfer |
| Fungible asset / stablecoin transfer | Same as APT | Sign, submit, wait | Similar to APT. Storage if the recipient has no primary store yet | 0x1::primary_fungible_store::transfer |
| Confidential transfer | Same commit path; more execution and a larger payload | Generate ZK proofs before submit | Higher than a plaintext transfer | Confidential Asset (do not implement from this page) |
| Encrypted pending payload | Same once committed | Encrypt at build time | Minimum gas_unit_price of 200 octas (twice the usual floor) | Encrypted Pending Transactions |
| Treasury / policy | Extra round-trips for approvals | Collect N-of-M signatures | One execution fee after approval | Your First Multisig |
| Passwordless onboarding | Same as the inner transfer | OIDC / Keyless flow | Same as the inner transfer | Aptos Keyless |
| Two-party agreement | Same as the inner transfer after all signatures | Collect a signature from each agent | Same on-chain cost as the inner call | Multi-agent transactions |
| Peer-to-peer swap | Same after both signatures | Both parties sign the same payload | Gas of both legs in one transaction | P2P swap |
| Payment | Sponsored | Orderless | Multi-agent (both parties agree) |
|---|---|---|---|
| APT | Fee payer covers gas so transferred APT is not reduced | Parallel sends from one hot wallet | Custom two-signer swap, not aptos_account::transfer |
| FA / stablecoin | User holds the FA; the app pays APT gas | Same parallel submit | P2P swap: both sign one entry that moves both assets |
| Confidential | CA client withFeePayer: true (global or per call) | Nonce if you build the CA payload yourself | Standard CA transfer is one-sided; two-party needs a custom contract |
| Encrypted pending | Combinable (withFeePayer: true) | Combinable (replayProtectionNonce) | Combinable (build.multiAgent) |
| NFT / object | Same fee-payer pattern as APT or FA | Same parallel submit | Both parties sign an object-for-token transfer |
| Treasury / multisig | Sponsor can pay gas after N-of-M approval | Parallel treasury operations | Different tool: two accounts, not several keys on one account |
| Keyless | Sponsor gas so a new user never holds APT | Same nonce option as any other sender | Keyless account can be sender or secondary signer |
| Key type | Prefix byte |
|---|---|
| Ed25519 generalized scheme | 0x00 |
| Secp256k1Ecdsa generalized scheme | 0x01 |
| Secp256r1Ecdsa WebAuthn scheme | 0x02 |
| Keyless | 0x03 |
| Limit Type | Current Per Transaction Limit |
|---|---|
| transaction | 64KB |
| governance transaction | 1MB |
| a single write op | 1MB |
| all write ops combined | 10MB |
| number of write ops | 8192 |
| a single event | 1MB |
| all events combined | 10MB |
| You need | Use |
|---|---|
| Latest on-chain state, transaction submission, or simulation | Fullnode REST API |
| NFTs, objects, historical activity, or aggregated tables | Indexer GraphQL API |
| A real-time or historical transaction feed for a custom indexer | Transaction Stream (gRPC) |
| Test APT on Devnet or Testnet | Faucet API |
| SQL, dashboards, or third-party RPC | Data providers |
| Network | REST API (/v1) | Indexer GraphQL | Transaction Stream gRPC | Faucet |
|---|---|---|---|---|
| Mainnet | https://api.mainnet.aptoslabs.com/v1 | https://api.mainnet.aptoslabs.com/v1/graphql | grpc.mainnet.aptoslabs.com:443 | — |
| Testnet | https://api.testnet.aptoslabs.com/v1 | https://api.testnet.aptoslabs.com/v1/graphql | grpc.testnet.aptoslabs.com:443 | Mint page and https://faucet-e2.testnet.aptoslabs.com (Google sign-in) |
| Devnet | https://api.devnet.aptoslabs.com/v1 | https://api.devnet.aptoslabs.com/v1/graphql | grpc.devnet.aptoslabs.com:443 | https://faucet.devnet.aptoslabs.com (programmatic) |
| Token Name | Token Symbol | Token Address | Source of Address |
|---|---|---|---|
| Tether USD | USDt | 0x357b0b74bc833e95a115ad22604854d6b0fca151cecd94111770e5d6ffc9dc2b | Aptos Foundation |
| USDC | USDC | 0xbae207659db88bea0cbead6da0ed00aac12edcdda169e591cd41c94180b46f3b | Circle |
| Ondo US Dollar Yield | USDY | 0xcfea864b32833f157f042618bd845145256b1bf4c0da34a7013b76e42daa53cc::usdy::USDY | Ondo Finance |
| Feed | URL | Best for |
|---|---|---|
| llms.txt | /llms.txt | Structured index with page titles, descriptions, and per-page .md links |
| llms-small.txt | /llms-small.txt | Condensed docs for smaller context windows |
| llms-full.txt | /llms-full.txt | Full documentation — all pages concatenated |
| Endpoint | Purpose |
|---|---|
/.well-known/api-catalog | RFC 9727 linkset pointing at the REST API spec, documentation, Indexer GraphQL, and the LLMs.txt feeds. |
/.well-known/mcp/server-card.json | MCP Server Card (SEP-2127) describing the @aptos-labs/aptos-mcp server. |
/.well-known/agent-skills/index.json | Agent Skills Discovery index for aptos-agent-skills with per-skill SHA-256 digests. |
/.well-known/oauth-protected-resource | OAuth 2.0 Protected Resource Metadata (RFC 9728) for https://aptos.dev. Lists the resource identifier, the Firebase + Google authorization servers used by the Aptos Testnet Faucet, and supported scopes. |
/.well-known/openid-configuration | OpenID Connect Discovery 1.0 document advertising the issuer, authorization/token endpoints, JWKS URI, and supported grant types used by the Aptos Testnet Faucet sign-in flow. |
/.well-known/oauth-authorization-server | OAuth 2.0 Authorization Server Metadata (RFC 8414) mirror of the OIDC discovery document for clients that prefer the pure OAuth 2.0 endpoint name. |
/.well-known/ai-catalog.json | ARD / AI Catalog capability manifest listing the MCP Server Card, Agent Skills index, REST OpenAPI spec, and RFC 9727 API catalog. |
/auth.md | auth.md agent authentication instructions. Documents that aptos.dev is public (no agent registration) and that the Testnet Faucet uses human Google OIDC. |
/robots.txt | Includes Content Signals (ai-train=yes, search=yes, ai-input=yes), an Agentmap: pointer to the AI Catalog, and Sitemap: https://aptos.dev/sitemap.xml. |
| Skill | Description |
|---|---|
| write-contracts | Generate secure Aptos Move V2 smart contracts |
| generate-tests | Generate Move unit tests targeting 100% code coverage |
| security-audit | Security audit for Move smart contracts before deployment |
| deploy-contracts | Deploy Move modules to Aptos devnet, testnet, or mainnet |
| search-aptos-examples | Search aptos-core for reference implementations and patterns |
| analyze-gas-optimization | Analyze and reduce gas costs in Move smart contracts |
| modernize-move | Migrate Move V1 resource accounts to the V2 object model |
| Skill | Description |
|---|---|
| use-ts-sdk | Aptos TypeScript SDK orchestrator for frontend integration |
| ts-sdk-client | Set up the Aptos client with AptosConfig and network selection |
| ts-sdk-account | Create Aptos accounts and signers from private keys or derivation paths |
| ts-sdk-address | Parse and derive Aptos account addresses (AIP-40) |
| ts-sdk-transactions | Build, sign, and submit transactions, including sponsored and multi-agent |
| ts-sdk-view-and-query | Call Move view functions and query on-chain Aptos data |
| ts-sdk-types | Map Move types to TypeScript (u64, u128, address, vector) |
| ts-sdk-wallet-adapter | Integrate Aptos wallets into React apps with useWallet |
| Skill | Description |
|---|---|
| create-aptos-project | Scaffold a new Aptos dApp with create-aptos-dapp |
| Skill | Author | Description |
|---|---|---|
| smoothsend-gasless | ivedmohan | Sponsor gas fees for Aptos transactions with SmoothSend |
| Error | Meaning | Possible Resolution |
|---|---|---|
| LOOKUP_FAILED | A function that is being called isn’t present on the network being used | Check that your dependencies on-chain have the same version |
| UNKNOWN_VALIDATION_STATUS | We don’t want the default value to be valid. | N/A |
| INVALID_SIGNATURE | The transaction has a bad signature. | Submit a new transaction with a new signature |
| INVALID_AUTH_KEY | Bad account authentication key. | Submit a new transaction with a new signature, check that the account matches the authentication key and hasn’t been rotated |
| SEQUENCE_NUMBER_TOO_OLD | Sequence number is too old. | Submit a new transaction with a newer sequence number from the account |
| SEQUENCE_NUMBER_TOO_NEW | Sequence number is too new. | Decrease the sequence number to the account’s next sequence number |
| INSUFFICIENT_BALANCE_FOR_TRANSACTION_FEE | Insufficient balance to pay for max_gas specified in the transaction. Balance needs to be above max_gas_amount * gas_unit_price to proceed. | Fund the account with more APT to pay for the gas fee |
| TRANSACTION_EXPIRED | The transaction has expired. | Submit a new transaction with an expiration time further in the future |
| SENDING_ACCOUNT_DOES_NOT_EXIST | The sending account does not exist. | With AIP-115, missing Account resources no longer fail this way; GET /accounts/{address} returns defaults instead of 404. This status is retained for compatibility. |
| REJECTED_WRITE_SET | This write set transaction was rejected because it did not meet the requirements for one. | N/A |
| INVALID_WRITE_SET | This write set transaction cannot be applied to the current state. | N/A |
| EXCEEDED_MAX_TRANSACTION_SIZE | Length of program field in raw transaction exceeded max length. | The transaction is too large for a single transaction; if this is a package publish, try to break it into multiple packages |
| UNKNOWN_SCRIPT | This script is not in our allowlist of scripts. | N/A |
| UNKNOWN_MODULE | Transaction is trying to publish a new module. | N/A |
| MAX_GAS_UNITS_EXCEEDS_MAX_GAS_UNITS_BOUND | Max gas units submitted with transaction exceeds max gas units bound in VM. | Decrease the max gas amount in the transaction below the maximum value in the gas schedule |
| MAX_GAS_UNITS_BELOW_MIN_TRANSACTION_GAS_UNITS | Max gas units submitted with transaction not enough to cover the intrinsic cost of the transaction. | Increase the max gas amount above the minimum value in the gas schedule |
| GAS_UNIT_PRICE_BELOW_MIN_BOUND | Gas unit price submitted with transaction is below minimum gas price set in the VM. | Increase the gas unit price to at least the minimum gas unit price in the gas schedule |
| GAS_UNIT_PRICE_ABOVE_MAX_BOUND | Gas unit price submitted with the transaction is above the maximum gas price set in the VM. | Decrease the gas unit price below the maximum gas unit price in the gas schedule |
| INVALID_GAS_SPECIFIER | Gas specifier submitted is either malformed (not a valid identifier), or does not refer to an accepted gas specifier. | N/A |
| SENDING_ACCOUNT_FROZEN | The sending account is frozen. | N/A |
| UNABLE_TO_DESERIALIZE_ACCOUNT | Unable to deserialize the account blob. | N/A |
| CURRENCY_INFO_DOES_NOT_EXIST | The currency info was unable to be found. | N/A |
| INVALID_MODULE_PUBLISHER | The account sender doesn’t have permissions to publish modules. | N/A |
| NO_ACCOUNT_ROLE | The sending account has no role. | N/A |
| BAD_CHAIN_ID | The transaction’s chain_id does not match the one published on-chain. | Verify that your chain ID matches the chain ID for your network |
| SEQUENCE_NUMBER_TOO_BIG | The sequence number is too large and would overflow if the transaction were executed. | N/A |
| BAD_TRANSACTION_FEE_CURRENCY | The gas currency is not registered as a TransactionFee currency. | N/A |
| FEATURE_UNDER_GATING | The feature requested is intended for a future Aptos version instead of the current one. | N/A |
| SECONDARY_KEYS_ADDRESSES_COUNT_MISMATCH | The number of secondary signer addresses is different from the number of secondary public keys provided. | Verify the multi-agent or multi-ed25519 secondary signer addresses match the secondary public keys |
| SIGNERS_CONTAIN_DUPLICATES | There are duplicates among signers, including the sender and all the secondary signers. | Remove any duplicate signers |
| SEQUENCE_NONCE_INVALID | The sequence nonce in the transaction is invalid (too new, too old, or already used). | N/A |
| CHAIN_ACCOUNT_INFO_DOES_NOT_EXIST | There was an error when accessing chain-specific account information. | N/A |
| MODULE_ADDRESS_DOES_NOT_MATCH_SENDER | the module publisher is not the account that will eventually hold the module. | Confirm the module address in the move contract matches the sender of the transaction |
| ZERO_SIZED_STRUCT | Reported when a struct has zero fields. | N/A |
| DUPLICATE_MODULE_NAME | The sender is trying to publish two modules with the same name in one transaction. | Confirm every module has a unique name |
| BACKWARD_INCOMPATIBLE_MODULE_UPDATE | The sender is trying to publish a module that breaks the compatibility checks. | Confirm your new modules being published don’t break backwards compatibility |
| CYCLIC_MODULE_DEPENDENCY | The updated module introduces a cyclic dependency (i.e., A uses B and B also uses A). | Check for loops in your module dependencies in the modules being published |
| INVALID_FRIEND_DECL_WITH_SELF | Cannot mark the module itself as a friend. | Confirm no module has itself marked as a friend in the modules being published |
| INVALID_FRIEND_DECL_WITH_MODULES_OUTSIDE_ACCOUNT_ADDRESS | Cannot declare modules outside of account address as friends. | Confirm all friends are in the same account address in the modules being published |
| INVALID_FRIEND_DECL_WITH_MODULES_IN_DEPENDENCIES | Cannot declare modules that this module depends on as friends. | Check friend declarations of the modules being published |
| CYCLIC_MODULE_FRIENDSHIP | The updated module introduces a cyclic friendship (i.e., A friends B and B also friends A). | Check friend declarations of the modules being published |
| INVALID_PHANTOM_TYPE_PARAM_POSITION | A phantom type parameter was used in a non-phantom position. | Confirm phantom types are used only with generics |
| LOOP_MAX_DEPTH_REACHED | Loops are too deeply nested. | Check for many nested loops |
| TYPE_RESOLUTION_FAILURE | Failed to resolve type due to linking being broken after verification. | N/A |
| RESOURCE_DOES_NOT_EXIST | We tried to access a resource that does not exist under the account. | Check the contract and possibly change it to handle resources that don’t exist |
| RESOURCE_ALREADY_EXISTS | We tried to create a resource under an account where that resource already exists. | Check the contract and possibly change it to handle resources that already exist |
| UNKNOWN_STATUS | A reserved status to represent an unknown vm status. This is std::u64::MAX, but we can’t pattern match on that, so put the hardcoded value in. | N/A |
| LINKER_ERROR | This may be due to the function has not been published on chain or by trying to call an invalid function as the result of either an incorrect account address, module name, or function name. This might not happen locally if the sources are available locally but have yet to be published on-chain. | There are many reasons, but you should check your account addresses, module names, and function names to determine that they’re correct and published |
| FAILED_TO_DESERIALIZE_ARGUMENT | This error in deserializing argument is triggered by one of the following validation checks. 1) It exceeds the limit on the number of nested or unpacked structs (including in a vector). The maximum overall args equals to depth * number of args. The max depth is currently 10. 2) The nested struct exceeds the aforementioned max depth. 3) The serialized arguments to constructor contained extra data. 4) It was derializing utf8 but struct_constructors are disabled. 5) The string argument is too long. 6) BCS deserialization fails for utf8. | N/A |
| GAS_PAYER_ACCOUNT_MISSING | The fee-payer account is missing for a sponsored transaction. | Confirm the fee payer exists and is included as a signer |
| NONCE_ALREADY_USED | The orderless transaction reused a (sender, nonce) pair that is still in the on-chain nonce history. | Submit with a new random u64 nonce. See AIP-123. |
| EMPTY_PAYLOAD_PROVIDED | The transaction executable was empty on a non-multisig transaction. | Include a valid entry function or script. An empty executable is only valid for some multisig flows. |
| TRANSACTION_EXPIRATION_TOO_FAR_IN_FUTURE | The expiration time is too far in the future. Orderless transactions may expire at most 60 seconds from now. | Lower the expiration time; for orderless transactions keep it within 60 seconds |
| Error | Meaning |
|---|---|
| INVALID_ARGUMENT | Caller specified an invalid argument (HTTP: 400). |
| OUT_OF_RANGE | An input or result of a computation is out of range (HTTP: 400). |
| INVALID_STATE | The system is not in a state where the operation can be performed (HTTP: 400). |
| UNAUTHENTICATED | Request not authenticated due to missing, invalid, or expired authentication token (HTTP: 401). |
| PERMISSION_DENIED | The client does not have sufficient permission (HTTP: 403). |
| NOT_FOUND | A specified resource is not found (HTTP: 404). |
| ABORTED | Concurrency conflict, such as read-modify-write conflict (HTTP: 409). |
| ALREADY_EXISTS | The resource that a client tried to create already exists (HTTP: 409). |
| RESOURCE_EXHAUSTED | Out of gas or other forms of quota (HTTP: 429). |
| CANCELLED | Request cancelled by the client (HTTP: 499). |
| INTERNAL | Internal error (HTTP: 500). |
| NOT_IMPLEMENTED | Feature not implemented (HTTP: 501). |
| UNAVAILABLE | The service is currently unavailable. Indicates that a retry could solve the issue (HTTP: 503). |
| Error | Meaning | Possible Resolution |
|---|---|---|
| EACCOUNT_ALREADY_EXISTS | Account already exists. | N/A |
| EACCOUNT_DOES_NOT_EXIST | Account does not exist. | Create the account first |
| ESEQUENCE_NUMBER_TOO_BIG | Sequence number exceeds the maximum value for a u64. | Provide a smaller sequence number |
| EMALFORMED_AUTHENTICATION_KEY | The provided authentication key has an invalid length. | Check your authentication key; it should be a 32-byte vector |
| ECANNOT_RESERVED_ADDRESS | Cannot create account because address is reserved. | N/A |
| EOUT_OF_GAS | Transaction exceeded its allocated max gas. | Increase the max gas amount |
| EWRONG_CURRENT_PUBLIC_KEY | Specified current public key is not correct. | Confirm the public key matches the account |
| EINVALID_PROOF_OF_KNOWLEDGE | Specified proof of knowledge required to prove ownership of a public key is invalid. | Check your proof of knowledge in key rotation to ensure it has proper signatures |
| ENO_CAPABILITY | The caller does not have a digital-signature-based capability to call this function. | Confirm you have the capability for the called functions |
| EINVALID_ACCEPT_ROTATION_CAPABILITY | The caller does not have a valid rotation capability offer from the other account. | Confirm the account being rotated is correct |
| ENO_VALID_FRAMEWORK_RESERVED_ADDRESS | Address to create is not a valid reserved address for Aptos framework. | N/A |
| EINVALID_SCHEME | Specified scheme required to proceed with the smart contract operation - can only be ED25519_SCHEME(0) OR MULTI_ED25519_SCHEME(1). | Confirm the transaction was signed correctly when creating the account |
| EINVALID_ORIGINATING_ADDRESS | Abort the transaction if the expected originating address is different from the originating address on-chain. | Confirm you are rotating the correct account’s key |
| ENO_SUCH_SIGNER_CAPABILITY | The signer capability doesn’t exist at the given address. | Confirm the address is correct |
| Error | Meaning | Possible Resolution |
|---|---|---|
| ECOIN_INFO_ADDRESS_MISMATCH | Address of account which is used to initialize a coin CoinType doesn’t match the deployer of module. | Create the coin using a CoinType in the same account creating the coin. |
| ECOIN_INFO_ALREADY_PUBLISHED | CoinType is already initialized as a coin. | N/A |
| ECOIN_INFO_NOT_PUBLISHED | CoinType hasn’t been initialized as a coin. | Create the coin with CoinType first before using it |
| ECOIN_STORE_ALREADY_PUBLISHED | Account already has CoinStore registered for CoinType. | N/A |
| ECOIN_STORE_NOT_PUBLISHED | Account hasn’t registered CoinStore for CoinType. | Register the account for the CoinType |
| EINSUFFICIENT_BALANCE | Not enough coins to complete transaction. | Transfer less coins, or acquire more coins prior to the transfer |
| EDESTRUCTION_OF_NONZERO_TOKEN | Cannot destroy non-zero coins. | N/A |
| EZERO_COIN_AMOUNT | Coin amount cannot be zero. | Don’t burn coins or conduct other actions with zero coins |
| EFROZEN | CoinStore is frozen. Coins cannot be deposited or withdrawn. | Account is frozen for this token; talk to the coin owner |
| ECOIN_SUPPLY_UPGRADE_NOT_SUPPORTED | Cannot upgrade the total supply of coins to different implementation. | N/A |
| ECOIN_NAME_TOO_LONG | Name of the coin is too long. | Coin name must be less than or equal to 32 characters |
| ECOIN_SYMBOL_TOO_LONG | Symbol of the coin is too long. | Coin symbol must be less than or equal to 10 characters |
| Error | Meaning |
|---|---|
| EALREADY_HAS_BALANCE | The token has balance and cannot be initialized. |
| ECOLLECTIONS_NOT_PUBLISHED | There isn’t any collection under this account. |
| ECOLLECTION_NOT_PUBLISHED | Cannot find collection in creator’s account. |
| ECOLLECTION_ALREADY_EXISTS | The collection already exists. |
| ECREATE_WOULD_EXCEED_COLLECTION_MAXIMUM | Exceeds the collection’s maximal number of token_data. |
| EINSUFFICIENT_BALANCE | Insufficient token balance. |
| EINVALID_TOKEN_MERGE | Cannot merge the two tokens with different token IDs. |
| EMINT_WOULD_EXCEED_TOKEN_MAXIMUM | Exceed the token data maximal allowed. |
| ENO_BURN_CAPABILITY | No burn capability. |
| ETOKEN_DATA_ALREADY_EXISTS | TokenData already exists. |
| ETOKEN_DATA_NOT_PUBLISHED | TokenData not published. |
| ETOKEN_STORE_NOT_PUBLISHED | TokenStore doesn’t exist. |
| ETOKEN_SPLIT_AMOUNT_LARGER_THAN_TOKEN_AMOUNT | Cannot split token to an amount larger than its amount. |
| EFIELD_NOT_MUTABLE | The field is not mutable. |
| ENO_MUTATE_CAPABILITY | Not authorized to mutate. |
| ENO_TOKEN_IN_TOKEN_STORE | Token not in the token store. |
| EUSER_NOT_OPT_IN_DIRECT_TRANSFER | User didn’t opt-in direct transfer. |
| EWITHDRAW_ZERO | Cannot withdraw 0 token. |
| ENFT_NOT_SPLITABLE | Cannot split a token that only has 1 amount. |
| ENO_MINT_CAPABILITY | No mint capability |
| ECOLLECTION_NAME_TOO_LONG | The collection name is too long. |
| ENFT_NAME_TOO_LONG | The NFT name is too long. |
| EURI_TOO_LONG | The URI is too long. |
| ENO_DEPOSIT_TOKEN_WITH_ZERO_AMOUNT | Cannot deposit a token with 0 amount. |
| ENO_BURN_TOKEN_WITH_ZERO_AMOUNT | Cannot burn 0 token. |
| EWITHDRAW_PROOF_EXPIRES | Withdraw proof expires. |
| EOWNER_CANNOT_BURN_TOKEN | Token is not burnable by owner. |
| ECREATOR_CANNOT_BURN_TOKEN | Token is not burnable by creator. |
| ECANNOT_UPDATE_RESERVED_PROPERTY | Reserved fields for token contract. Cannot be updated by user. |
| EURI_TOO_SHORT | URI too short. |
| ETOKEN_OFFER_NOT_EXIST | Token offer doesn’t exist. |
| BCS index | Payload | REST JSON type | Description |
|---|---|---|---|
0 | Script payload | script_payload | Executes a Move script included in the transaction. |
1 | Module bundle payload | module_bundle_payload | Deprecated. |
2 | Entry function payload | entry_function_payload | Calls an entry function in a published module. |
3 | Multisig payload | multisig_payload | Executes an operation as an on-chain multisig account. |
4 | Versioned payload | Not exposed directly | Versioned payload used by orderless transactions. |
5 | Encrypted payload | encrypted_transaction_payload | Contains an encrypted transaction payload. |
| Type | Encoding |
|---|---|
| Enum | ULEB128 enum index followed by the fields of the selected variant. |
vector<T> | ULEB128 element count followed by each element. |
vector<u8> | ULEB128 byte length followed by the bytes. |
Option<T> | 0x00 for None; 0x01 followed by T for Some(T). |
u64, u128, u256 | Fixed-width, little-endian. |
| Address | 32 bytes. |
| AIP | Topic | In these docs |
|---|---|---|
| AIP-21 | Fungible assets | Fungible Asset standard |
| AIP-39 | Sponsored transactions | Sponsored transactions |
| AIP-62 | Wallet standard | Wallet adapter |
| AIP-88 | Block epilogue transactions | AIP-88 FAQ |
| AIP-113 | Derivable account abstraction | Derivable account abstraction |
| AIP-115 | Stateless accounts | AIP-115 FAQ |
| AIP-123 | Orderless transactions | AIP-123 FAQ |
| AIP-129 | Transaction payload variants | Transaction payloads and BCS |
| AIP-144 | Encrypted mempool | Encrypted pending transactions |
| Page URL | Markdown URL |
|---|---|
https://aptos.dev/build/guides/first-transaction | https://aptos.dev/build/guides/first-transaction.md |
https://aptos.dev/build/sdks/ts-sdk | https://aptos.dev/build/sdks/ts-sdk.md |
https://aptos.dev/zh/build/guides/first-transaction | https://aptos.dev/zh/build/guides/first-transaction.md |
| Service | Docs |
|---|---|
| Node API, Indexer GraphQL, Transaction Stream | Geomi API reference |
| Rate limits and compute-unit billing | Billing |
| Gas Station | Gas Stations |
| No-code indexing | No-code indexing |
| Network | Endpoint | How to mint |
|---|---|---|
| Devnet | https://faucet.devnet.aptoslabs.com | SDKs, CLI, or POST /fund with no auth |
| Testnet | https://faucet-e2.testnet.aptoslabs.com | Mint page, or POST /fund with a Google ID token |
| Mainnet | — | Not available |
| Operation | Method and path | Reference |
|---|---|---|
| Ledger info | GET /v1 | get_ledger_info |
| Health | GET /v1/-/healthy | healthy |
| Account | GET /v1/accounts/{address} | get_account |
| Coin or FA balance | GET /v1/accounts/{address}/balance/{asset_type} | get_account_balance |
| View function | POST /v1/view | view |
| Submit transaction | POST /v1/transactions | submit_transaction |
| Simulate transaction | POST /v1/transactions/simulate | simulate_transaction |
| Transaction by version | GET /v1/transactions/by_version/{txn_version} | get_transaction_by_version |
| Account transactions | GET /v1/accounts/{address}/transactions | get_account_transactions |
| Events by handle | GET /v1/accounts/{address}/events/{event_handle}/{field_name} | get_events_by_event_handle |
| Solana | Aptos | |
|---|---|---|
| Smart Contracts | Rust, SVM | Move, MoveVM |
| Transaction Fees | Low | Low |
| Parallelization | Pessimistic parallelism, need to declare all write accounts | Optimistic parallelism, chain infers write accounts for you |
| Contract Account Support | PDA Account | Object or resource account(encourage to use object instead) |
| Data Storage | Data stored in account owned by programs | Data stored as resource under user account or object |
| Storage Level | Program level | Global when stored under object |
| Storage Mindset | User data stored distributedly under account | User data stored distributedly under object |
| Example Code | Todo list contract on Solana | Todo list contract on Aptos |
| Caller ID | signer | signer |
| Upgradability | Program is upgradable | Module is upgradable |
| Dispatch Type | Static dispatch | Static dispatch |
| FT Standards | Token program | Coin (legacy) and Fungible Asset Standard |
| NFT Standards | Token program | Digital Asset Standard |
| Blockchain Interaction | Solana web3.js library | Aptos Typescript SDK |
| Scheme | Use case |
|---|---|
| Ed25519 (default) | Standard single-key accounts |
| Secp256k1 ECDSA | Compatibility with Ethereum-style keys |
| Passkeys / WebAuthn | Browser-native authentication |
| K-of-N multisig | Native multi-signature accounts |
| Identity Provider | Federated Only | Devnet | Testnet | Mainnet |
|---|---|---|---|---|
| No | Live | Live | Live | |
| Apple | No | Live | Live | Live |
| Auth0 | Yes | Live | Live | Live |
| Cognito | Yes | Live | Live | Live |
| Microsoft | No | In review | - | - |
| Github | No | In review | - | - |
| No | In review | - | - |
{task.content}