-
Notifications
You must be signed in to change notification settings - Fork 102
Add Movement namespace #179
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,32 @@ | ||
| --- | ||
| namespace-identifier: movement | ||
| title: Movement Network | ||
| author: Andy Golay (@andygolay) | ||
| status: Draft | ||
| type: Informational | ||
| created: 2026-03-23 | ||
| requires: ["CAIP-2", "CAIP-10"] | ||
| --- | ||
|
|
||
| # Namespace for Movement Network | ||
|
|
||
| ## Introduction | ||
|
|
||
| Blockchains in the "movement" namespace are identified by their numeric `chain_id`; | ||
| each network is maintained by a set of validators with its own REST API and | ||
| indexer endpoints. Movement is a Layer 2 network built on Move, featuring | ||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I would probably explain better here the exact parameters of:
|
||
| parallel execution for high throughput. | ||
|
|
||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I'd recommend adding a ## Governance section to explain who approves/decides chainIds, who governs the registry of chainIds, and who governs the protocol upgrades/forks/changes. |
||
| ## Syntax | ||
|
|
||
| The namespace "movement" refers to the Movement Network blockchain platform. | ||
|
|
||
| ## References | ||
|
|
||
| [Movement Docs]: https://docs.movementnetwork.xyz/ | ||
| [Movement GitHub]: https://github.com/moveindustries | ||
| [Movement Network Website]: https://movementnetwork.xyz/ | ||
|
|
||
| ## Copyright | ||
|
|
||
| Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,148 @@ | ||
| --- | ||
| namespace-identifier: movement-caip10 | ||
| title: Movement Namespace - CAIP-10 Account Identifiers | ||
| author: Andy Golay (@andygolay) | ||
| discussions-to: https://github.com/ChainAgnostic/namespaces/pull/179 | ||
| status: Draft | ||
| type: Standard | ||
| created: 2026-03-23 | ||
| updated: 2026-03-23 | ||
| requires: ["CAIP-2", "CAIP-10"] | ||
| --- | ||
|
|
||
| # CAIP-10 | ||
|
|
||
| *For context, see the [CAIP-10][] specification.* | ||
|
|
||
| ## Rationale | ||
|
|
||
| Movement uses account-based identity with 32-byte hexadecimal addresses. | ||
|
|
||
| Each Movement account address: | ||
|
|
||
| - Is globally unique within a Movement network | ||
| - Is used directly in transaction operations | ||
| - Is derived from the account's authentication key at creation | ||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Is the same address derived on any chain, i.e. cross-chain replay risk? the security considerations imply this is the case, maybe worth mentioning here |
||
| - Is represented as a hex string with a `0x` prefix | ||
|
|
||
| Because Movement addresses are stable identifiers and tied to a specific chain via `chain_id`, they are suitable for CAIP-10 account identifiers. | ||
|
|
||
| ## Specification | ||
|
|
||
| A Movement [CAIP-10][] account identifier MUST follow: | ||
|
|
||
| `movement:<reference>:<address>` | ||
|
|
||
| Where: | ||
|
|
||
| - `movement` is the namespace | ||
| - `<reference>` is defined by the Movement [CAIP-2 Profile][] | ||
| - `<address>` is a valid Movement account address | ||
|
|
||
| ### Address Format | ||
|
|
||
| Movement account addresses MUST: | ||
|
|
||
| - Begin with `0x` | ||
| - Be followed by 1 to 64 hexadecimal characters (`0-9`, `a-f`, `A-F`) | ||
| - Represent a 32-byte (256-bit) value | ||
| - Be case-insensitive | ||
|
|
||
| The canonical form is the full zero-padded 66-character representation (`0x` + 64 hex characters). Shortened forms that omit leading zeros (e.g., `0x1`) are valid but SHOULD be expanded to the full form for CAIP-10 identifiers. | ||
|
|
||
| Regex: | ||
|
|
||
| ``` | ||
| ^0x[0-9a-fA-F]{1,64}$ | ||
| ``` | ||
|
|
||
| ### Resolution | ||
|
|
||
| To validate a Movement CAIP-10 identifier: | ||
|
|
||
| 1. Parse the namespace (`movement`). | ||
| 2. Validate the CAIP-2 reference according to the Movement [CAIP-2 Profile][]. | ||
| 3. Validate the address against the address format rules above. | ||
| 4. Query a Movement REST API endpoint to confirm account existence. | ||
|
|
||
| Account existence may be verified via the [REST API][]: | ||
|
|
||
| #### Example Request | ||
|
|
||
| ```bash | ||
| curl https://mainnet.movementnetwork.xyz/v1/accounts/0x1 | ||
| ``` | ||
|
|
||
| #### Example Response | ||
|
|
||
| ```jsonc | ||
| { | ||
| "sequence_number": "0", | ||
| "authentication_key": "0x0000000000000000000000000000000000000000000000000000000000000001" | ||
| } | ||
| ``` | ||
|
|
||
| The API returns account data for any valid address format. An account with | ||
| `sequence_number` of `"0"` and no on-chain resources may not have been | ||
| explicitly created yet. | ||
|
|
||
| ## Examples | ||
|
|
||
| ### Movement Mainnet | ||
|
|
||
| ``` | ||
| movement:126:0x0000000000000000000000000000000000000000000000000000000000000001 | ||
| movement:126:0x1 | ||
| movement:126:0xd5fb7899ac1e3b4a51bfbf0dcafaa78453bb8e9a64a93a8e47fedad6b8c48171 | ||
| ``` | ||
|
|
||
| ### Movement Testnet | ||
|
|
||
| ``` | ||
| movement:250:0x0000000000000000000000000000000000000000000000000000000000000001 | ||
| movement:250:0x1 | ||
| ``` | ||
|
|
||
| ## Security Considerations | ||
|
|
||
| Movement addresses are hexadecimal strings and may be subject to phishing using visually similar addresses. | ||
|
|
||
| Applications SHOULD: | ||
|
|
||
| - Validate account existence before processing transactions | ||
| - Display full CAIP-10 identifiers when clarity is required | ||
| - Expand shortened addresses to their full zero-padded form for comparison | ||
|
|
||
| ## Test Cases | ||
|
|
||
| Valid: | ||
|
|
||
| ``` | ||
| movement:126:0x0000000000000000000000000000000000000000000000000000000000000001 | ||
| movement:126:0x1 | ||
| movement:126:0xd5fb7899ac1e3b4a51bfbf0dcafaa78453bb8e9a64a93a8e47fedad6b8c48171 | ||
| movement:250:0x1 | ||
| ``` | ||
|
|
||
| Invalid: | ||
|
|
||
| ``` | ||
| movement:126:0x | ||
| movement:126:0xGHIJKL | ||
| movement:126:1 | ||
| movement:126:0x0000000000000000000000000000000000000000000000000000000000000000000001 | ||
| ``` | ||
|
|
||
| ## References | ||
|
|
||
| - [REST API][] - Movement REST API for account lookups | ||
| - [CAIP-2 Profile][] - Movement chain identification | ||
|
|
||
| [CAIP-2 Profile]: ./caip2.md | ||
| [CAIP-2]: https://github.com/ChainAgnostic/CAIPs/blob/master/CAIPs/caip-2.md | ||
| [CAIP-10]: https://github.com/ChainAgnostic/CAIPs/blob/master/CAIPs/caip-10.md | ||
| [REST API]: https://mainnet.movementnetwork.xyz/v1 | ||
|
|
||
| ## Copyright | ||
|
|
||
| Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,118 @@ | ||
| --- | ||
| namespace-identifier: movement-caip2 | ||
| title: Movement Namespace - Chains | ||
| author: Andy Golay (@andygolay) | ||
| discussions-to: https://github.com/ChainAgnostic/namespaces/pull/179 | ||
| status: Draft | ||
| type: Standard | ||
| created: 2026-03-23 | ||
| updated: 2026-03-23 | ||
| requires: CAIP-2 | ||
| --- | ||
|
|
||
| # CAIP-2 | ||
|
|
||
| *For context, see the [CAIP-2][] specification.* | ||
|
|
||
| ## Rationale | ||
|
|
||
| In [CAIP-2][] a general blockchain identification scheme is defined. This is the | ||
| implementation of CAIP-2 for Movement. Blockchains in the "movement" namespace are | ||
| identified by their numeric `chain_id`, assigned at genesis. Each network is | ||
| maintained by a set of validators with its own REST API endpoints. These chain | ||
| IDs require no transformations to be used as conformant CAIP-2 references. | ||
|
|
||
| ## Syntax | ||
|
|
||
| The namespace "movement" refers to the Movement Network blockchain platform. | ||
|
|
||
| ### Reference Definition | ||
|
|
||
| The definition for this namespace will use the `chain_id` as an identifier | ||
| for different Movement chains. The chain ID is a positive integer (greater than | ||
| 0 with no maximum value) assigned in the genesis configuration. Each network's | ||
| chain ID is set by the validators at genesis and is immutable thereafter: | ||
|
|
||
| | Network | Chain ID | | ||
| |---------|----------| | ||
| | Mainnet | 126 | | ||
| | Testnet | 250 | | ||
|
|
||
| ### Resolution Method | ||
|
|
||
| To resolve a blockchain reference for the Movement namespace, make an HTTP GET | ||
| request to the [REST API][] of a fullnode. The REST API endpoints are stable, | ||
| long-lived URLs. For example: | ||
|
|
||
| ```bash | ||
| # Mainnet | ||
| curl https://mainnet.movementnetwork.xyz/v1 | ||
|
|
||
| # Testnet | ||
| curl https://testnet.movementnetwork.xyz/v1 | ||
| ``` | ||
|
|
||
| ```jsonc | ||
| // Mainnet Response | ||
| { | ||
| "chain_id": 126, | ||
| "epoch": "10777734", | ||
| "ledger_version": "101649253", | ||
| "oldest_ledger_version": "0", | ||
| "ledger_timestamp": "1774318053802368", | ||
| "node_role": "full_node", | ||
| "oldest_block_height": "0", | ||
| "block_height": "40497312", | ||
| "git_hash": "f24a5bc" | ||
| } | ||
| ``` | ||
|
|
||
| ```jsonc | ||
| // Testnet Response | ||
| { | ||
| "chain_id": 250, | ||
| "epoch": "...", | ||
| "ledger_version": "...", | ||
| "oldest_ledger_version": "0", | ||
| "ledger_timestamp": "...", | ||
| "node_role": "full_node", | ||
| "oldest_block_height": "0", | ||
| "block_height": "...", | ||
| "git_hash": "..." | ||
| } | ||
| ``` | ||
|
|
||
| The response will return `chain_id` as an integer that can be used directly | ||
| as the CAIP-2 reference. | ||
|
|
||
| ### Backwards Compatibility | ||
|
|
||
| Not applicable | ||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. You might want to mention either in this section or in ## Security Considerations how collisions with EVM chainIds are handled, since, e.g., movement:250:0x1234deadbeef and evm:250:0x1234deadbeef addresses can both be valid addresses... and maybe even generated from the same private key (i.e. replay attacks?) |
||
|
|
||
| ## Test Cases | ||
|
|
||
| This is a list of manually composed examples | ||
|
|
||
| ```bash | ||
| # Movement Mainnet | ||
| movement:126 | ||
|
|
||
| # Movement Testnet | ||
| movement:250 | ||
|
|
||
| ``` | ||
|
|
||
| ## References | ||
|
|
||
| - [REST API][] - REST API reference for Movement Network | ||
| - [Networks][] - Movement network information and endpoints | ||
| - [Explorer][] - Movement block explorer | ||
|
|
||
| [CAIP-2]: https://github.com/ChainAgnostic/CAIPs/blob/master/CAIPs/caip-2.md | ||
| [REST API]: https://mainnet.movementnetwork.xyz/v1 | ||
| [Networks]: https://docs.movementnetwork.xyz/ | ||
| [Explorer]: https://explorer.movementnetwork.xyz/ | ||
|
|
||
| ## Copyright | ||
|
|
||
| Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
how do you find out those endpoints from just the chainId? is there a canonical registry, like the ethereum-lists/chains registry on github?