arbitrum-machine-rwa-sdk
v0.2.0
Published
TypeScript/JavaScript SDK for the Arbitrum Machine RWA framework: ONCHAINID, ERC-3643 vaults, Machine/Contract NFTs
Maintainers
Readme
Arbitrum Machine RWA SDK
The Arbitrum Machine Real World Asset (RWA) SDK enables the tokenization of physical assets on Arbitrum. It provides a TypeScript/JavaScript interface for creating compliant security tokens that represent fractionalized ownership of machines and equipment.
What This SDK Does
- Tokenize machines as NFTs with embedded DID documents
- Fractionalize ownership into T-REX (ERC-3643) compliant security tokens
- Manage compliance through on-chain KYC via ONCHAINID
- Distribute yield automatically to token holders
Documentation
| Section | Description | Audience |
|---------|-------------|----------|
| Introduction | Framework overview, standards, Sepolia addresses | Everyone |
| Core modules | onchainid, mnft, cnft, vault, rwanft | Everyone |
| Roles & responsibilities | Framework Owner through Investor | Everyone |
| Manual testing: SDK | Hands-on workflow via TypeScript + SDK | Integrators |
| Manual testing: Scaffold-ETH | Hands-on workflow via /rwa UI + MetaMask | QA / demos |
| Learn the Framework | Understand the RWA ecosystem, roles, and concepts | Everyone |
| SDK Reference | API documentation with code examples | Developers |
| Maintainer Guide | Deploy, update, and test the framework / SDK | SDK Maintainers |
Educational Documentation
| Guide | What You'll Learn | |-------|-------------------| | Introduction | Framework overview and SDK architecture | | Roles & Responsibilities | Framework Owner, Claim Issuers, Machine Issuers, Users | | Core Concepts | Identity, Claims, MachineNFTs, Vaults, Security Tokens |
SDK Reference
| Module | Purpose | |--------|---------| | Initialization | SDK setup and configuration | | Identity | Create identities, issue and manage claims | | RWA NFT | Machine regulators, issuers, block state | | Contract NFT | Create, sign, cancel contracts | | Machine NFT | Register machines, read DID documents | | Vault | Create vaults, mint tokens, manage yield | | Common Workflows | End-to-end integrator flows |
Quick Start
import { RWA, Chain } from "arbitrum-machine-rwa-sdk";
import { JsonRpcProvider } from "ethers";
const provider = new JsonRpcProvider("https://sepolia-rollup.arbitrum.io/rpc");
const sdk = new RWA({ chainId: Chain.ARBITRUM_SEPOLIA, provider });
const { verified } = await sdk.onchainid.isVerified({ wallet: sdk.getManifest().alice });
console.log("Alice verified:", verified);Install
npm install arbitrum-machine-rwa-sdk ethers
# optional: viem read helpers and calldata encoding
npm install viemMonorepo (before publish):
cd sdk
npm install
npm run build
npm testModule Architecture
┌─────────────────────────────────────────────────────────────┐
│ Arbitrum RWA SDK │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ onchainid │ │ mnft │ │ cnft │ │
│ │ (Identity) │ │ (Machines) │ │ (Contracts) │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ vault │ │ rwanft │ │
│ │ (Tokens) │ │ (Factory) │ │
│ └─────────────┘ └─────────────┘ │
└─────────────────────────────────────────────────────────────┘Read operations: use the provider passed at initialization
Write operations: pass a Signer to each module method
Supported Networks
| Network | Chain ID | Enum |
|---------|----------|------|
| Arbitrum One | 42161 | Chain.ARBITRUM_ONE |
| Arbitrum Sepolia | 421614 | Chain.ARBITRUM_SEPOLIA |
Sync Addresses After Deploy
SDK-only (npm: no Yarn):
cd sdk
npm run sync-addresses
npm run build
npm run verify:workflowSee SDK standalone testing for every command to test the full workflow from sdk/ alone.
After a fresh monorepo deploy (optional: only if you redeployed contracts):
cd frontend && yarn bootstrap:arbitrum-sepolia
cd ../sdk && npm run sync-addresses && npm run buildLegacy Helpers
The package also exports low-level viem helpers (readIsVerified, encodeDepositAndMint), manifest parsers, demo constants, and extended ABIs for apps that prefer direct contract access.
License
Apache-2.0
