TypeScript SDK Quick Start
Get started with RP1 in 5 minutes.
Installation
npm install @rp1/sdk
Connect to Network
import { RP1Client } from '@rp1/sdk';
// Mainnet
const client = new RP1Client('https://rpc.rp.one');
// Testnet
const testnetClient = new RP1Client('https://rpc.testnet.rp.one');
Create a Wallet
import { Wallet } from '@rp1/sdk';
// Generate new wallet
const wallet = Wallet.generate();
console.log('Address:', wallet.address);
console.log('Mnemonic:', wallet.mnemonic);
// ⚠️ SAVE THE MNEMONIC SECURELY!
// Or restore from mnemonic
const restored = Wallet.fromMnemonic('your 24 word mnemonic phrase here...');
Check Balance
const balance = await client.getBalance(wallet.address, 'urp1');
console.log(`Balance: ${balance.amount} urp1`);
// Get all balances
const allBalances = await client.getAllBalances(wallet.address);
allBalances.forEach(b => {
console.log(`${b.denom}: ${b.amount}`);
});
Send Tokens
const tx = await client.send({
from: wallet,
to: 'rp1recipient...',
amount: '1000000', // 1 RP1 (in micro units)
denom: 'urp1',
});
console.log(`Transaction sent!`);
console.log(`Hash: ${tx.hash}`);
console.log(`Height: ${tx.height}`);
Complete Example
import { RP1Client, Wallet } from '@rp1/sdk';
async function main() {
// 1. Connect to testnet
const client = new RP1Client('https://rpc.testnet.rp.one');
// 2. Create wallet
const wallet = Wallet.generate();
console.log(`New wallet: ${wallet.address}`);
// 3. Request testnet tokens (via faucet)
const faucetResponse = await fetch('https://faucet.testnet.rp.one/request', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ address: wallet.address }),
});
console.log('Faucet response:', await faucetResponse.json());
// 4. Wait for tokens
await new Promise(resolve => setTimeout(resolve, 5000));
// 5. Check balance
const balance = await client.getBalance(wallet.address, 'urp1');
console.log(`Balance: ${balance.amount} urp1`);
// 6. Send tokens
if (parseInt(balance.amount) > 1000000) {
const tx = await client.send({
from: wallet,
to: 'rp1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq5zcfsg', // Burn address
amount: '100000',
denom: 'urp1',
});
console.log(`Sent! TX: ${tx.hash}`);
}
}
main().catch(console.error);
React Example
import { useState, useEffect } from 'react';
import { RP1Client, Wallet } from '@rp1/sdk';
function App() {
const [client] = useState(() => new RP1Client('https://rpc.rp.one'));
const [wallet, setWallet] = useState<Wallet | null>(null);
const [balance, setBalance] = useState('0');
useEffect(() => {
// Load wallet from localStorage
const mnemonic = localStorage.getItem('mnemonic');
if (mnemonic) {
setWallet(Wallet.fromMnemonic(mnemonic));
}
}, []);
useEffect(() => {
if (wallet) {
client.getBalance(wallet.address, 'urp1').then(b => {
setBalance(b.amount);
});
}
}, [wallet, client]);
const createWallet = () => {
const newWallet = Wallet.generate();
localStorage.setItem('mnemonic', newWallet.mnemonic);
setWallet(newWallet);
};
return (
<div>
{wallet ? (
<div>
<p>Address: {wallet.address}</p>
<p>Balance: {parseInt(balance) / 1_000_000} RP1</p>
</div>
) : (
<button onClick={createWallet}>Create Wallet</button>
)}
</div>
);
}
Node.js Example
// transfer.ts
import { RP1Client, Wallet } from '@rp1/sdk';
import * as readline from 'readline';
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
async function main() {
const client = new RP1Client('https://rpc.rp.one');
// Get mnemonic from environment
const mnemonic = process.env.RP1_MNEMONIC;
if (!mnemonic) {
console.error('Set RP1_MNEMONIC environment variable');
process.exit(1);
}
const wallet = Wallet.fromMnemonic(mnemonic);
console.log(`Using wallet: ${wallet.address}`);
// Get balance
const balance = await client.getBalance(wallet.address, 'urp1');
console.log(`Balance: ${parseInt(balance.amount) / 1_000_000} RP1`);
// Get recipient from user
const recipient = await new Promise<string>(resolve => {
rl.question('Enter recipient address: ', resolve);
});
// Get amount from user
const amount = await new Promise<string>(resolve => {
rl.question('Enter amount (in RP1): ', resolve);
});
// Send transaction
const tx = await client.send({
from: wallet,
to: recipient,
amount: (parseFloat(amount) * 1_000_000).toString(),
denom: 'urp1',
});
console.log(`✅ Transaction sent!`);
console.log(` Hash: ${tx.hash}`);
console.log(` Explorer: https://explorer.rp.one/tx/${tx.hash}`);
rl.close();
}
main().catch(console.error);
Run with:
RP1_MNEMONIC="your mnemonic here" npx ts-node transfer.ts