Movement — Dual VM L2 (EVM + Move)
Movement RPC
With Dwellir, you get access to our global Movement network which always routes your API requests to the nearest available location, ensuring low latency and the fastest speeds.
Why Build on Movement
- Dual VM flexibility: deploy Solidity (EVM) and Move (MoveVM)
- BlockSTM parallel execution for high throughput (theoretical 160k+ TPS)
- 1–3 second fast finality UX
- Strong safety guarantees from Move’s resource semantics
- Ethereum-native bridging and tooling compatibility
Quick Start
Endpoints
🔗 RPC Endpoints
Movement Mainnet (Chain ID: 3073)Live
https://api-movement-mainnet.n.dwellir.com/YOUR_API_KEY/v1
✓ Archive Node✓ Full Node✓ Trace API✓ Debug API
Quick Connect:
curl -X POST https://api-movement-mainnet.n.dwellir.com/YOUR_API_KEY/v1 \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
SDK Installation
- Ethers v6 (EVM)
- web3.js (EVM)
- Aptos TS SDK (Move)
- Movement CLI
npm i ethers
import { JsonRpcProvider } from 'ethers';
const provider = new JsonRpcProvider('https://api-movement-mainnet.n.dwellir.com/YOUR_API_KEY/v1');
const chainId = await provider.send('eth_chainId', []);
console.log('EVM chainId:', chainId); // 0xc01
npm i web3
import Web3 from 'web3';
const web3 = new Web3('https://api-movement-mainnet.n.dwellir.com/YOUR_API_KEY/v1');
const chainId = await web3.eth.getChainId();
console.log('EVM chainId:', chainId); // 3073
npm i @aptos-labs/ts-sdk
import { Aptos, AptosConfig, Network } from '@aptos-labs/ts-sdk';
const config = new AptosConfig({
network: Network.CUSTOM,
fullnode: 'https://api-movement-mainnet.n.dwellir.com/YOUR_API_KEY/v1'
});
const aptos = new Aptos(config);
const ledger = await aptos.getLedgerInfo();
console.log('Move chain:', ledger.chain_id);
# Example usage placeholder — configure your CLI with the endpoints above
# API Base: https://api-movement-mainnet.n.dwellir.com/YOUR_API_KEY/v1
# Move REST: https://api-movement-mainnet.n.dwellir.com/YOUR_API_KEY/v1
Network Information
EVM Chain ID
3073 (0xc01)
MainnetNative Token
MOVE
Finality
~1–3s
Fast Finality Settlement- Movement API Base:
https://api-movement-mainnet.n.dwellir.com/YOUR_API_KEY/v1
Explorers and faucets depend on the latest ecosystem tooling. Use the endpoints above with your preferred explorer and faucet.
Dual VM Architecture
- Co-execution: Ethereum-compatible EVM and Aptos-compatible MoveVM
- Parallel execution via BlockSTM; transactions that don’t conflict can run in parallel
- Interoperability: assets and apps can bridge and coordinate between VMs
- Safety: Move resource types prevent common asset bugs; EVM brings broad tooling and libraries
EVM JSON-RPC API Reference
Movement supports standard Ethereum JSON-RPC methods through the EVM interface.
Available JSON-RPC Methods
📊 Reading Blockchain Data
Query blocks, transactions, and account states
📤 Sending Transactions
Submit and manage transactions
📝 Smart Contract Interaction
Call and interact with smart contracts
🔧 Node & Network Info
Query node status and network information
Movement is dual VM (EVM + Move). See Move REST too.
Get your API key →Move REST API Reference
Movement exposes Aptos-compatible REST APIs at /v1
for MoveVM operations.
- Accounts: resources, modules
- Transactions: submit, simulate, query
- Modules: view functions, ABI
- Events: per-handle queries
- Tables: by handle and key
Browse the Move endpoints:
Movement-Specific Features
- BlockSTM Parallel Execution
- Fast Finality Settlement
- Shared Sequencer (M1)
- Cross-VM Interactions
- MEV Protection
Token Standards
- EVM: ERC-20, ERC-721, ERC-1155 standard support
- Move: resource-based tokens (coin standards in Move)
- Bridges: use Ethereum-native bridges to move assets between L1 and Movement
Code Examples
- EVM read (ethers)
- Move view (TS SDK)
import { JsonRpcProvider } from 'ethers';
const provider = new JsonRpcProvider('https://api-movement-mainnet.n.dwellir.com/YOUR_API_KEY/v1');
const balance = await provider.send('eth_getBalance', [
'0x0000000000000000000000000000000000000000',
'latest'
]);
console.log(balance);
import { Aptos, AptosConfig, Network, MoveStructId, HexInput } from '@aptos-labs/ts-sdk';
const cfg = new AptosConfig({ network: Network.CUSTOM, fullnode: 'https://api-movement-mainnet.n.dwellir.com/YOUR_API_KEY/v1' });
const client = new Aptos(cfg);
// Example: call a read-only function
const res = await client.view<{value: string}[]>({
function: '0x1::chain_id::get',
typeArguments: [],
functionArguments: []
});
console.log(res);
Common Integration Patterns
- DEX: contracts on EVM, settlement or accounting in Move (or vice versa)
- Bridge: lock/mint on EVM, mint/burn Move resources via bridge relayers
- Cross-VM: use canonical bridges and message-passing to coordinate operations
Performance Best Practices
- Design for BlockSTM: avoid write conflicts to maximize parallelism
- Gas optimization: EVM — batch calls and minimize storage writes; Move — minimize resource mutations where possible
- Finality-aware UX: consider 1–3s finality in confirmations and polling intervals
Migration Guides
- From Ethereum: deploy Solidity as-is; adjust gas settings and bridges
- From Aptos: reuse Move modules with minimal changes; update REST endpoint base to
/v1
- From Sui: port object/resource models to Move on Movement; adjust package layout
Troubleshooting
- EVM: check chain ID (3073/30732), RPC method parameters, and gas
- Move: ensure correct address format (hex w/ 0x), module/function IDs, and BCS serialization
- Cross-VM: verify bridge finality and message proofs before settlement
Resources & Tools
- EVM SDKs: Ethers, web3.js, viem
- Move SDKs: Aptos TypeScript/Python SDKs
- Get your API key: https://dashboard.dwellir.com/register