Chain-wide application summary for L1.
When to use it: Immediately after connecting; dashboards and chain/layer safety checks.
Raw JSON-RPC request
{
"jsonrpc": "2.0",
"id": 1,
"method": "abci_query",
"params": {
"path": "/state",
"data": "",
"prove": false
}
}Quick HTML you can copy and try
<!doctype html>
<html>
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>/state</title>
<style>body{font-family:system-ui;background:#07191a;color:#e8f4ed;max-width:900px;margin:40px auto;padding:0 18px}textarea,input,pre{width:100%;box-sizing:border-box;background:#031011;color:#c9eee6;border:1px solid #285a58;border-radius:8px;padding:12px}textarea{height:270px}button{padding:11px 16px;background:#c98d53;border:0;border-radius:7px;font-weight:700;cursor:pointer}pre{min-height:220px;white-space:pre-wrap;overflow-wrap:anywhere}</style></head>
<body><h1>/state</h1><p>Chain-wide application summary for L1.</p><label>RPC endpoint<input id="rpc" value="https://YOUR-VALIDATOR/chainware-rpc"></label><h3>Editable JSON-RPC</h3><textarea id="req">{
"jsonrpc": "2.0",
"id": 1,
"method": "abci_query",
"params": {
"path": "/state",
"data": "",
"prove": false
}
}</textarea><p><button id="run">Run</button></p><h3>Response</h3><pre id="out">Not run yet.</pre>
<script>const rpc=document.getElementById("rpc"),req=document.getElementById("req"),out=document.getElementById("out");document.getElementById("run").onclick=async()=>{try{const body=JSON.parse(req.value);const r=await fetch(rpc.value,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(body)});const t=await r.text();try{out.textContent=JSON.stringify(JSON.parse(t),null,2)}catch{out.textContent=t}}catch(e){out.textContent="ERROR: "+e.message}};<\/script></body></html>Return example
{
"Layer": "layer-1",
"ChainID": "l1-11",
"Height": 12345,
"Decimals": 12,
"Initialized": true,
"TxCount": 900
}L1 QUERY
/capabilities
ABCI QUERYRuntime source of truth for transaction types, envelope version and maximum transaction size.
When to use it: Before enabling write buttons or assuming a feature exists.
Raw JSON-RPC request
{
"jsonrpc": "2.0",
"id": 1,
"method": "abci_query",
"params": {
"path": "/capabilities",
"data": "",
"prove": false
}
}Quick HTML you can copy and try
<!doctype html>
<html>
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>/capabilities</title>
<style>body{font-family:system-ui;background:#07191a;color:#e8f4ed;max-width:900px;margin:40px auto;padding:0 18px}textarea,input,pre{width:100%;box-sizing:border-box;background:#031011;color:#c9eee6;border:1px solid #285a58;border-radius:8px;padding:12px}textarea{height:270px}button{padding:11px 16px;background:#c98d53;border:0;border-radius:7px;font-weight:700;cursor:pointer}pre{min-height:220px;white-space:pre-wrap;overflow-wrap:anywhere}</style></head>
<body><h1>/capabilities</h1><p>Runtime source of truth for transaction types, envelope version and maximum transaction size.</p><label>RPC endpoint<input id="rpc" value="https://YOUR-VALIDATOR/chainware-rpc"></label><h3>Editable JSON-RPC</h3><textarea id="req">{
"jsonrpc": "2.0",
"id": 1,
"method": "abci_query",
"params": {
"path": "/capabilities",
"data": "",
"prove": false
}
}</textarea><p><button id="run">Run</button></p><h3>Response</h3><pre id="out">Not run yet.</pre>
<script>const rpc=document.getElementById("rpc"),req=document.getElementById("req"),out=document.getElementById("out");document.getElementById("run").onclick=async()=>{try{const body=JSON.parse(req.value);const r=await fetch(rpc.value,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(body)});const t=await r.text();try{out.textContent=JSON.stringify(JSON.parse(t),null,2)}catch{out.textContent=t}}catch(e){out.textContent="ERROR: "+e.message}};<\/script></body></html>Return example
{
"Layer": "layer-1",
"ChainID": "l1-11",
"TransactionTypes": [
"CREATOR_INIT_L1",
"REGISTER_WALLET",
"TRANSFER",
"STORAGE_FUND",
"L2_POINTER",
"ESCROW",
"SIGNAL",
"SETTLE"
],
"MaxTxBytes": 524288
}L1 QUERY
/creator
ABCI QUERYCreator manifest/hash and one-time chain initialization provenance.
When to use it: Setup tools, provenance displays, or checking whether initialization is complete.
Raw JSON-RPC request
{
"jsonrpc": "2.0",
"id": 1,
"method": "abci_query",
"params": {
"path": "/creator",
"data": "",
"prove": false
}
}Quick HTML you can copy and try
<!doctype html>
<html>
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>/creator</title>
<style>body{font-family:system-ui;background:#07191a;color:#e8f4ed;max-width:900px;margin:40px auto;padding:0 18px}textarea,input,pre{width:100%;box-sizing:border-box;background:#031011;color:#c9eee6;border:1px solid #285a58;border-radius:8px;padding:12px}textarea{height:270px}button{padding:11px 16px;background:#c98d53;border:0;border-radius:7px;font-weight:700;cursor:pointer}pre{min-height:220px;white-space:pre-wrap;overflow-wrap:anywhere}</style></head>
<body><h1>/creator</h1><p>Creator manifest/hash and one-time chain initialization provenance.</p><label>RPC endpoint<input id="rpc" value="https://YOUR-VALIDATOR/chainware-rpc"></label><h3>Editable JSON-RPC</h3><textarea id="req">{
"jsonrpc": "2.0",
"id": 1,
"method": "abci_query",
"params": {
"path": "/creator",
"data": "",
"prove": false
}
}</textarea><p><button id="run">Run</button></p><h3>Response</h3><pre id="out">Not run yet.</pre>
<script>const rpc=document.getElementById("rpc"),req=document.getElementById("req"),out=document.getElementById("out");document.getElementById("run").onclick=async()=>{try{const body=JSON.parse(req.value);const r=await fetch(rpc.value,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(body)});const t=await r.text();try{out.textContent=JSON.stringify(JSON.parse(t),null,2)}catch{out.textContent=t}}catch(e){out.textContent="ERROR: "+e.message}};<\/script></body></html>Return example
{
"initialized": true,
"manifest_hash": "...",
"creator_tx_hash": "...",
"creator_tx_height": 1
}L1 QUERY
/wallet-registration/cwYOURADDRESS
ABCI QUERYCheck whether a wallet is registered and its bootstrap reward record.
When to use it: Wallet onboarding and before REGISTER_WALLET.
Raw JSON-RPC request
{
"jsonrpc": "2.0",
"id": 1,
"method": "abci_query",
"params": {
"path": "/wallet-registration/cwYOURADDRESS",
"data": "",
"prove": false
}
}Quick HTML you can copy and try
<!doctype html>
<html>
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>/wallet-registration/cwYOURADDRESS</title>
<style>body{font-family:system-ui;background:#07191a;color:#e8f4ed;max-width:900px;margin:40px auto;padding:0 18px}textarea,input,pre{width:100%;box-sizing:border-box;background:#031011;color:#c9eee6;border:1px solid #285a58;border-radius:8px;padding:12px}textarea{height:270px}button{padding:11px 16px;background:#c98d53;border:0;border-radius:7px;font-weight:700;cursor:pointer}pre{min-height:220px;white-space:pre-wrap;overflow-wrap:anywhere}</style></head>
<body><h1>/wallet-registration/cwYOURADDRESS</h1><p>Check whether a wallet is registered and its bootstrap reward record.</p><label>RPC endpoint<input id="rpc" value="https://YOUR-VALIDATOR/chainware-rpc"></label><h3>Editable JSON-RPC</h3><textarea id="req">{
"jsonrpc": "2.0",
"id": 1,
"method": "abci_query",
"params": {
"path": "/wallet-registration/cwYOURADDRESS",
"data": "",
"prove": false
}
}</textarea><p><button id="run">Run</button></p><h3>Response</h3><pre id="out">Not run yet.</pre>
<script>const rpc=document.getElementById("rpc"),req=document.getElementById("req"),out=document.getElementById("out");document.getElementById("run").onclick=async()=>{try{const body=JSON.parse(req.value);const r=await fetch(rpc.value,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(body)});const t=await r.text();try{out.textContent=JSON.stringify(JSON.parse(t),null,2)}catch{out.textContent=t}}catch(e){out.textContent="ERROR: "+e.message}};<\/script></body></html>Return example
{
"registered": false,
"wallet": "cwYOURADDRESS"
}L1 QUERY
/bootstrap-budget
ABCI QUERYRead initial bootstrap budget counters and remaining value.
When to use it: Bootstrap/treasury transparency and onboarding.
Raw JSON-RPC request
{
"jsonrpc": "2.0",
"id": 1,
"method": "abci_query",
"params": {
"path": "/bootstrap-budget",
"data": "",
"prove": false
}
}Quick HTML you can copy and try
<!doctype html>
<html>
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>/bootstrap-budget</title>
<style>body{font-family:system-ui;background:#07191a;color:#e8f4ed;max-width:900px;margin:40px auto;padding:0 18px}textarea,input,pre{width:100%;box-sizing:border-box;background:#031011;color:#c9eee6;border:1px solid #285a58;border-radius:8px;padding:12px}textarea{height:270px}button{padding:11px 16px;background:#c98d53;border:0;border-radius:7px;font-weight:700;cursor:pointer}pre{min-height:220px;white-space:pre-wrap;overflow-wrap:anywhere}</style></head>
<body><h1>/bootstrap-budget</h1><p>Read initial bootstrap budget counters and remaining value.</p><label>RPC endpoint<input id="rpc" value="https://YOUR-VALIDATOR/chainware-rpc"></label><h3>Editable JSON-RPC</h3><textarea id="req">{
"jsonrpc": "2.0",
"id": 1,
"method": "abci_query",
"params": {
"path": "/bootstrap-budget",
"data": "",
"prove": false
}
}</textarea><p><button id="run">Run</button></p><h3>Response</h3><pre id="out">Not run yet.</pre>
<script>const rpc=document.getElementById("rpc"),req=document.getElementById("req"),out=document.getElementById("out");document.getElementById("run").onclick=async()=>{try{const body=JSON.parse(req.value);const r=await fetch(rpc.value,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(body)});const t=await r.text();try{out.textContent=JSON.stringify(JSON.parse(t),null,2)}catch{out.textContent=t}}catch(e){out.textContent="ERROR: "+e.message}};<\/script></body></html>Return example
{
"id": "protocol:budget:initial-bootstrap",
"eligible_wallets": 100,
"rewarded_wallets": 17,
"remaining": "83000000000000000"
}L1 QUERY
/storage-funding/ABCDEF123456
ABCI QUERYRead one L1 storage funding record by tx hash.
When to use it: After STORAGE_FUND or on a funding detail page.
Raw JSON-RPC request
{
"jsonrpc": "2.0",
"id": 1,
"method": "abci_query",
"params": {
"path": "/storage-funding/ABCDEF123456",
"data": "",
"prove": false
}
}Quick HTML you can copy and try
<!doctype html>
<html>
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>/storage-funding/ABCDEF123456</title>
<style>body{font-family:system-ui;background:#07191a;color:#e8f4ed;max-width:900px;margin:40px auto;padding:0 18px}textarea,input,pre{width:100%;box-sizing:border-box;background:#031011;color:#c9eee6;border:1px solid #285a58;border-radius:8px;padding:12px}textarea{height:270px}button{padding:11px 16px;background:#c98d53;border:0;border-radius:7px;font-weight:700;cursor:pointer}pre{min-height:220px;white-space:pre-wrap;overflow-wrap:anywhere}</style></head>
<body><h1>/storage-funding/ABCDEF123456</h1><p>Read one L1 storage funding record by tx hash.</p><label>RPC endpoint<input id="rpc" value="https://YOUR-VALIDATOR/chainware-rpc"></label><h3>Editable JSON-RPC</h3><textarea id="req">{
"jsonrpc": "2.0",
"id": 1,
"method": "abci_query",
"params": {
"path": "/storage-funding/ABCDEF123456",
"data": "",
"prove": false
}
}</textarea><p><button id="run">Run</button></p><h3>Response</h3><pre id="out">Not run yet.</pre>
<script>const rpc=document.getElementById("rpc"),req=document.getElementById("req"),out=document.getElementById("out");document.getElementById("run").onclick=async()=>{try{const body=JSON.parse(req.value);const r=await fetch(rpc.value,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(body)});const t=await r.text();try{out.textContent=JSON.stringify(JSON.parse(t),null,2)}catch{out.textContent=t}}catch(e){out.textContent="ERROR: "+e.message}};<\/script></body></html>Return example
{
"Wallet": "cw...",
"L2ChainID": "l2-11",
"Amount": "1000000000000",
"Status": "LOCKED_PENDING_L2_PROOF"
}L1 QUERY
/storage-fundings
ABCI QUERYRead the complete storage-funding map.
When to use it: Storage dashboards and diagnostics.
Raw JSON-RPC request
{
"jsonrpc": "2.0",
"id": 1,
"method": "abci_query",
"params": {
"path": "/storage-fundings",
"data": "",
"prove": false
}
}Quick HTML you can copy and try
<!doctype html>
<html>
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>/storage-fundings</title>
<style>body{font-family:system-ui;background:#07191a;color:#e8f4ed;max-width:900px;margin:40px auto;padding:0 18px}textarea,input,pre{width:100%;box-sizing:border-box;background:#031011;color:#c9eee6;border:1px solid #285a58;border-radius:8px;padding:12px}textarea{height:270px}button{padding:11px 16px;background:#c98d53;border:0;border-radius:7px;font-weight:700;cursor:pointer}pre{min-height:220px;white-space:pre-wrap;overflow-wrap:anywhere}</style></head>
<body><h1>/storage-fundings</h1><p>Read the complete storage-funding map.</p><label>RPC endpoint<input id="rpc" value="https://YOUR-VALIDATOR/chainware-rpc"></label><h3>Editable JSON-RPC</h3><textarea id="req">{
"jsonrpc": "2.0",
"id": 1,
"method": "abci_query",
"params": {
"path": "/storage-fundings",
"data": "",
"prove": false
}
}</textarea><p><button id="run">Run</button></p><h3>Response</h3><pre id="out">Not run yet.</pre>
<script>const rpc=document.getElementById("rpc"),req=document.getElementById("req"),out=document.getElementById("out");document.getElementById("run").onclick=async()=>{try{const body=JSON.parse(req.value);const r=await fetch(rpc.value,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(body)});const t=await r.text();try{out.textContent=JSON.stringify(JSON.parse(t),null,2)}catch{out.textContent=t}}catch(e){out.textContent="ERROR: "+e.message}};<\/script></body></html>Return example
{
"ABCDEF": {
"Wallet": "cw...",
"L2ChainID": "l2-11",
"Amount": "1000000000000",
"Status": "LOCKED_PENDING_L2_PROOF"
}
}L1 QUERY
/l2-pointers
ABCI QUERYRead authoritative pointers from L1 to committed L2 transactions. This is the current social feed discovery spine.
When to use it: Feeds, comments, reactions, profiles, explorers and any L2-indexed application.
Raw JSON-RPC request
{
"jsonrpc": "2.0",
"id": 1,
"method": "abci_query",
"params": {
"path": "/l2-pointers",
"data": "",
"prove": false
}
}Quick HTML you can copy and try
<!doctype html>
<html>
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>/l2-pointers</title>
<style>body{font-family:system-ui;background:#07191a;color:#e8f4ed;max-width:900px;margin:40px auto;padding:0 18px}textarea,input,pre{width:100%;box-sizing:border-box;background:#031011;color:#c9eee6;border:1px solid #285a58;border-radius:8px;padding:12px}textarea{height:270px}button{padding:11px 16px;background:#c98d53;border:0;border-radius:7px;font-weight:700;cursor:pointer}pre{min-height:220px;white-space:pre-wrap;overflow-wrap:anywhere}</style></head>
<body><h1>/l2-pointers</h1><p>Read authoritative pointers from L1 to committed L2 transactions. This is the current social feed discovery spine.</p><label>RPC endpoint<input id="rpc" value="https://YOUR-VALIDATOR/chainware-rpc"></label><h3>Editable JSON-RPC</h3><textarea id="req">{
"jsonrpc": "2.0",
"id": 1,
"method": "abci_query",
"params": {
"path": "/l2-pointers",
"data": "",
"prove": false
}
}</textarea><p><button id="run">Run</button></p><h3>Response</h3><pre id="out">Not run yet.</pre>
<script>const rpc=document.getElementById("rpc"),req=document.getElementById("req"),out=document.getElementById("out");document.getElementById("run").onclick=async()=>{try{const body=JSON.parse(req.value);const r=await fetch(rpc.value,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(body)});const t=await r.text();try{out.textContent=JSON.stringify(JSON.parse(t),null,2)}catch{out.textContent=t}}catch(e){out.textContent="ERROR: "+e.message}};<\/script></body></html>Return example
[
{
"Signer": "cw...",
"L2ChainID": "l2-11",
"L2TxHash": "ABC...",
"L2Height": 5000,
"Action": "SUBMIT_POST",
"CreatedHeight": 6000
}
]L1 QUERY
/account/cwYOURADDRESS
ABCI QUERYRead spendable balance and current L1 nonce.
When to use it: Before every signed L1 transaction.
Raw JSON-RPC request
{
"jsonrpc": "2.0",
"id": 1,
"method": "abci_query",
"params": {
"path": "/account/cwYOURADDRESS",
"data": "",
"prove": false
}
}Quick HTML you can copy and try
<!doctype html>
<html>
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>/account/cwYOURADDRESS</title>
<style>body{font-family:system-ui;background:#07191a;color:#e8f4ed;max-width:900px;margin:40px auto;padding:0 18px}textarea,input,pre{width:100%;box-sizing:border-box;background:#031011;color:#c9eee6;border:1px solid #285a58;border-radius:8px;padding:12px}textarea{height:270px}button{padding:11px 16px;background:#c98d53;border:0;border-radius:7px;font-weight:700;cursor:pointer}pre{min-height:220px;white-space:pre-wrap;overflow-wrap:anywhere}</style></head>
<body><h1>/account/cwYOURADDRESS</h1><p>Read spendable balance and current L1 nonce.</p><label>RPC endpoint<input id="rpc" value="https://YOUR-VALIDATOR/chainware-rpc"></label><h3>Editable JSON-RPC</h3><textarea id="req">{
"jsonrpc": "2.0",
"id": 1,
"method": "abci_query",
"params": {
"path": "/account/cwYOURADDRESS",
"data": "",
"prove": false
}
}</textarea><p><button id="run">Run</button></p><h3>Response</h3><pre id="out">Not run yet.</pre>
<script>const rpc=document.getElementById("rpc"),req=document.getElementById("req"),out=document.getElementById("out");document.getElementById("run").onclick=async()=>{try{const body=JSON.parse(req.value);const r=await fetch(rpc.value,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(body)});const t=await r.text();try{out.textContent=JSON.stringify(JSON.parse(t),null,2)}catch{out.textContent=t}}catch(e){out.textContent="ERROR: "+e.message}};<\/script></body></html>Return example
{
"balance": "12500000000000",
"nonce": 7
}L1 QUERY
/escrow/my-escrow-id
ABCI QUERYRead one locked L1 escrow record.
When to use it: Escrow detail, treasury and application-economic screens.
Raw JSON-RPC request
{
"jsonrpc": "2.0",
"id": 1,
"method": "abci_query",
"params": {
"path": "/escrow/my-escrow-id",
"data": "",
"prove": false
}
}Quick HTML you can copy and try
<!doctype html>
<html>
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>/escrow/my-escrow-id</title>
<style>body{font-family:system-ui;background:#07191a;color:#e8f4ed;max-width:900px;margin:40px auto;padding:0 18px}textarea,input,pre{width:100%;box-sizing:border-box;background:#031011;color:#c9eee6;border:1px solid #285a58;border-radius:8px;padding:12px}textarea{height:270px}button{padding:11px 16px;background:#c98d53;border:0;border-radius:7px;font-weight:700;cursor:pointer}pre{min-height:220px;white-space:pre-wrap;overflow-wrap:anywhere}</style></head>
<body><h1>/escrow/my-escrow-id</h1><p>Read one locked L1 escrow record.</p><label>RPC endpoint<input id="rpc" value="https://YOUR-VALIDATOR/chainware-rpc"></label><h3>Editable JSON-RPC</h3><textarea id="req">{
"jsonrpc": "2.0",
"id": 1,
"method": "abci_query",
"params": {
"path": "/escrow/my-escrow-id",
"data": "",
"prove": false
}
}</textarea><p><button id="run">Run</button></p><h3>Response</h3><pre id="out">Not run yet.</pre>
<script>const rpc=document.getElementById("rpc"),req=document.getElementById("req"),out=document.getElementById("out");document.getElementById("run").onclick=async()=>{try{const body=JSON.parse(req.value);const r=await fetch(rpc.value,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(body)});const t=await r.text();try{out.textContent=JSON.stringify(JSON.parse(t),null,2)}catch{out.textContent=t}}catch(e){out.textContent="ERROR: "+e.message}};<\/script></body></html>Return example
{
"id": "my-escrow-id",
"creator": "cw...",
"amount": "1000000000000",
"l2_reference": "post:123",
"status": "LOCKED"
}L1 QUERY
/escrows
ABCI QUERYRead all current escrow records.
When to use it: Escrow dashboards and audits.
Raw JSON-RPC request
{
"jsonrpc": "2.0",
"id": 1,
"method": "abci_query",
"params": {
"path": "/escrows",
"data": "",
"prove": false
}
}Quick HTML you can copy and try
<!doctype html>
<html>
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>/escrows</title>
<style>body{font-family:system-ui;background:#07191a;color:#e8f4ed;max-width:900px;margin:40px auto;padding:0 18px}textarea,input,pre{width:100%;box-sizing:border-box;background:#031011;color:#c9eee6;border:1px solid #285a58;border-radius:8px;padding:12px}textarea{height:270px}button{padding:11px 16px;background:#c98d53;border:0;border-radius:7px;font-weight:700;cursor:pointer}pre{min-height:220px;white-space:pre-wrap;overflow-wrap:anywhere}</style></head>
<body><h1>/escrows</h1><p>Read all current escrow records.</p><label>RPC endpoint<input id="rpc" value="https://YOUR-VALIDATOR/chainware-rpc"></label><h3>Editable JSON-RPC</h3><textarea id="req">{
"jsonrpc": "2.0",
"id": 1,
"method": "abci_query",
"params": {
"path": "/escrows",
"data": "",
"prove": false
}
}</textarea><p><button id="run">Run</button></p><h3>Response</h3><pre id="out">Not run yet.</pre>
<script>const rpc=document.getElementById("rpc"),req=document.getElementById("req"),out=document.getElementById("out");document.getElementById("run").onclick=async()=>{try{const body=JSON.parse(req.value);const r=await fetch(rpc.value,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(body)});const t=await r.text();try{out.textContent=JSON.stringify(JSON.parse(t),null,2)}catch{out.textContent=t}}catch(e){out.textContent="ERROR: "+e.message}};<\/script></body></html>Return example
{
"my-escrow-id": {
"creator": "cw...",
"amount": "1000000000000",
"status": "LOCKED"
}
}L1 QUERY
/signals
ABCI QUERYRead generic signed application signals stored on L1.
When to use it: Experimental application events or generic metadata.
Raw JSON-RPC request
{
"jsonrpc": "2.0",
"id": 1,
"method": "abci_query",
"params": {
"path": "/signals",
"data": "",
"prove": false
}
}Quick HTML you can copy and try
<!doctype html>
<html>
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>/signals</title>
<style>body{font-family:system-ui;background:#07191a;color:#e8f4ed;max-width:900px;margin:40px auto;padding:0 18px}textarea,input,pre{width:100%;box-sizing:border-box;background:#031011;color:#c9eee6;border:1px solid #285a58;border-radius:8px;padding:12px}textarea{height:270px}button{padding:11px 16px;background:#c98d53;border:0;border-radius:7px;font-weight:700;cursor:pointer}pre{min-height:220px;white-space:pre-wrap;overflow-wrap:anywhere}</style></head>
<body><h1>/signals</h1><p>Read generic signed application signals stored on L1.</p><label>RPC endpoint<input id="rpc" value="https://YOUR-VALIDATOR/chainware-rpc"></label><h3>Editable JSON-RPC</h3><textarea id="req">{
"jsonrpc": "2.0",
"id": 1,
"method": "abci_query",
"params": {
"path": "/signals",
"data": "",
"prove": false
}
}</textarea><p><button id="run">Run</button></p><h3>Response</h3><pre id="out">Not run yet.</pre>
<script>const rpc=document.getElementById("rpc"),req=document.getElementById("req"),out=document.getElementById("out");document.getElementById("run").onclick=async()=>{try{const body=JSON.parse(req.value);const r=await fetch(rpc.value,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(body)});const t=await r.text();try{out.textContent=JSON.stringify(JSON.parse(t),null,2)}catch{out.textContent=t}}catch(e){out.textContent="ERROR: "+e.message}};<\/script></body></html>Return example
[
{
"Hash": "ABC...",
"Signer": "cw...",
"Height": 1234,
"Data": {
"type": "example"
}
}
]L1 TRANSACTION
CREATOR_INIT_L1
IMPLEMENTEDOne-time Creator initialization for a new L1 chain.
When to use it: Only on a brand-new uninitialized L1 chain.
Payload example
{
"manifest_hash": "...",
"manifest": {}
}Quick HTML transaction builder
<!doctype html>
<html>
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>CREATOR_INIT_L1</title>
<style>body{font-family:system-ui;background:#07191a;color:#e8f4ed;max-width:900px;margin:40px auto;padding:0 18px}textarea,input,pre{width:100%;box-sizing:border-box;background:#031011;color:#c9eee6;border:1px solid #285a58;border-radius:8px;padding:12px}textarea{height:270px}button{padding:11px 16px;background:#c98d53;border:0;border-radius:7px;font-weight:700;cursor:pointer}pre{min-height:220px;white-space:pre-wrap;overflow-wrap:anywhere}</style></head>
<body><h1>CREATOR_INIT_L1</h1><p>One-time Creator initialization for a new L1 chain.</p><label>RPC endpoint<input id="rpc" value="https://YOUR-VALIDATOR/chainware-rpc"></label><h3>Editable JSON-RPC</h3><textarea id="req">{
"jsonrpc": "2.0",
"id": 1,
"method": "broadcast_tx_commit",
"params": {
"tx": "BASE64_OF_FULLY_SIGNED_TRANSACTION_JSON"
}
}</textarea><p><button id="run">Run</button></p><h3>Response</h3><pre id="out">Not run yet.</pre>
<script>const rpc=document.getElementById("rpc"),req=document.getElementById("req"),out=document.getElementById("out");document.getElementById("run").onclick=async()=>{try{const body=JSON.parse(req.value);const r=await fetch(rpc.value,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(body)});const t=await r.text();try{out.textContent=JSON.stringify(JSON.parse(t),null,2)}catch{out.textContent=t}}catch(e){out.textContent="ERROR: "+e.message}};<\/script></body></html>Expected result / behavior
{
"check_tx": {
"code": 0
},
"tx_result": {
"code": 0
},
"height": "12345"
}
L1 TRANSACTION
REGISTER_WALLET
IMPLEMENTEDRegister the signer wallet on L1; bootstrap reward logic may apply.
When to use it: Wallet onboarding after checking registration.
Payload example
{}Quick HTML transaction builder
<!doctype html>
<html>
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>REGISTER_WALLET</title>
<style>body{font-family:system-ui;background:#07191a;color:#e8f4ed;max-width:900px;margin:40px auto;padding:0 18px}textarea,input,pre{width:100%;box-sizing:border-box;background:#031011;color:#c9eee6;border:1px solid #285a58;border-radius:8px;padding:12px}textarea{height:270px}button{padding:11px 16px;background:#c98d53;border:0;border-radius:7px;font-weight:700;cursor:pointer}pre{min-height:220px;white-space:pre-wrap;overflow-wrap:anywhere}</style></head>
<body><h1>REGISTER_WALLET</h1><p>Register the signer wallet on L1; bootstrap reward logic may apply.</p><label>RPC endpoint<input id="rpc" value="https://YOUR-VALIDATOR/chainware-rpc"></label><h3>Editable JSON-RPC</h3><textarea id="req">{
"jsonrpc": "2.0",
"id": 1,
"method": "broadcast_tx_commit",
"params": {
"tx": "BASE64_OF_FULLY_SIGNED_TRANSACTION_JSON"
}
}</textarea><p><button id="run">Run</button></p><h3>Response</h3><pre id="out">Not run yet.</pre>
<script>const rpc=document.getElementById("rpc"),req=document.getElementById("req"),out=document.getElementById("out");document.getElementById("run").onclick=async()=>{try{const body=JSON.parse(req.value);const r=await fetch(rpc.value,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(body)});const t=await r.text();try{out.textContent=JSON.stringify(JSON.parse(t),null,2)}catch{out.textContent=t}}catch(e){out.textContent="ERROR: "+e.message}};<\/script></body></html>Expected result / behavior
{
"check_tx": {
"code": 0
},
"tx_result": {
"code": 0
},
"height": "12345"
}
L1 TRANSACTION
TRANSFER
IMPLEMENTEDMove native base units between L1 accounts.
When to use it: Payments and wallet send flows.
Payload example
{
"to": "cwRECIPIENT",
"amount": "1000000000000"
}Quick HTML transaction builder
<!doctype html>
<html>
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>TRANSFER</title>
<style>body{font-family:system-ui;background:#07191a;color:#e8f4ed;max-width:900px;margin:40px auto;padding:0 18px}textarea,input,pre{width:100%;box-sizing:border-box;background:#031011;color:#c9eee6;border:1px solid #285a58;border-radius:8px;padding:12px}textarea{height:270px}button{padding:11px 16px;background:#c98d53;border:0;border-radius:7px;font-weight:700;cursor:pointer}pre{min-height:220px;white-space:pre-wrap;overflow-wrap:anywhere}</style></head>
<body><h1>TRANSFER</h1><p>Move native base units between L1 accounts.</p><label>RPC endpoint<input id="rpc" value="https://YOUR-VALIDATOR/chainware-rpc"></label><h3>Editable JSON-RPC</h3><textarea id="req">{
"jsonrpc": "2.0",
"id": 1,
"method": "broadcast_tx_commit",
"params": {
"tx": "BASE64_OF_FULLY_SIGNED_TRANSACTION_JSON"
}
}</textarea><p><button id="run">Run</button></p><h3>Response</h3><pre id="out">Not run yet.</pre>
<script>const rpc=document.getElementById("rpc"),req=document.getElementById("req"),out=document.getElementById("out");document.getElementById("run").onclick=async()=>{try{const body=JSON.parse(req.value);const r=await fetch(rpc.value,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(body)});const t=await r.text();try{out.textContent=JSON.stringify(JSON.parse(t),null,2)}catch{out.textContent=t}}catch(e){out.textContent="ERROR: "+e.message}};<\/script></body></html>Expected result / behavior
{
"check_tx": {
"code": 0
},
"tx_result": {
"code": 0
},
"height": "12345"
}
L1 TRANSACTION
STORAGE_FUND
IMPLEMENTEDMove L1 spendable value into storage funding for a specific L2 chain.
When to use it: Before social/media writes when the application requires funded storage.
Payload example
{
"l2_chain_id": "l2-11",
"amount": "1000000000000"
}Quick HTML transaction builder
<!doctype html>
<html>
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>STORAGE_FUND</title>
<style>body{font-family:system-ui;background:#07191a;color:#e8f4ed;max-width:900px;margin:40px auto;padding:0 18px}textarea,input,pre{width:100%;box-sizing:border-box;background:#031011;color:#c9eee6;border:1px solid #285a58;border-radius:8px;padding:12px}textarea{height:270px}button{padding:11px 16px;background:#c98d53;border:0;border-radius:7px;font-weight:700;cursor:pointer}pre{min-height:220px;white-space:pre-wrap;overflow-wrap:anywhere}</style></head>
<body><h1>STORAGE_FUND</h1><p>Move L1 spendable value into storage funding for a specific L2 chain.</p><label>RPC endpoint<input id="rpc" value="https://YOUR-VALIDATOR/chainware-rpc"></label><h3>Editable JSON-RPC</h3><textarea id="req">{
"jsonrpc": "2.0",
"id": 1,
"method": "broadcast_tx_commit",
"params": {
"tx": "BASE64_OF_FULLY_SIGNED_TRANSACTION_JSON"
}
}</textarea><p><button id="run">Run</button></p><h3>Response</h3><pre id="out">Not run yet.</pre>
<script>const rpc=document.getElementById("rpc"),req=document.getElementById("req"),out=document.getElementById("out");document.getElementById("run").onclick=async()=>{try{const body=JSON.parse(req.value);const r=await fetch(rpc.value,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(body)});const t=await r.text();try{out.textContent=JSON.stringify(JSON.parse(t),null,2)}catch{out.textContent=t}}catch(e){out.textContent="ERROR: "+e.message}};<\/script></body></html>Expected result / behavior
{
"check_tx": {
"code": 0
},
"tx_result": {
"code": 0
},
"height": "12345"
}
L1 TRANSACTION
L2_POINTER
IMPLEMENTEDIndex a committed L2 transaction on L1 with an action name.
When to use it: After the L2 write has committed.
Payload example
{
"l2_chain_id": "l2-11",
"l2_tx_hash": "ABCDEF...",
"l2_height": 1234,
"action": "SUBMIT_POST"
}Quick HTML transaction builder
<!doctype html>
<html>
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>L2_POINTER</title>
<style>body{font-family:system-ui;background:#07191a;color:#e8f4ed;max-width:900px;margin:40px auto;padding:0 18px}textarea,input,pre{width:100%;box-sizing:border-box;background:#031011;color:#c9eee6;border:1px solid #285a58;border-radius:8px;padding:12px}textarea{height:270px}button{padding:11px 16px;background:#c98d53;border:0;border-radius:7px;font-weight:700;cursor:pointer}pre{min-height:220px;white-space:pre-wrap;overflow-wrap:anywhere}</style></head>
<body><h1>L2_POINTER</h1><p>Index a committed L2 transaction on L1 with an action name.</p><label>RPC endpoint<input id="rpc" value="https://YOUR-VALIDATOR/chainware-rpc"></label><h3>Editable JSON-RPC</h3><textarea id="req">{
"jsonrpc": "2.0",
"id": 1,
"method": "broadcast_tx_commit",
"params": {
"tx": "BASE64_OF_FULLY_SIGNED_TRANSACTION_JSON"
}
}</textarea><p><button id="run">Run</button></p><h3>Response</h3><pre id="out">Not run yet.</pre>
<script>const rpc=document.getElementById("rpc"),req=document.getElementById("req"),out=document.getElementById("out");document.getElementById("run").onclick=async()=>{try{const body=JSON.parse(req.value);const r=await fetch(rpc.value,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(body)});const t=await r.text();try{out.textContent=JSON.stringify(JSON.parse(t),null,2)}catch{out.textContent=t}}catch(e){out.textContent="ERROR: "+e.message}};<\/script></body></html>Expected result / behavior
{
"check_tx": {
"code": 0
},
"tx_result": {
"code": 0
},
"height": "12345"
}
L1 TRANSACTION
ESCROW
IMPLEMENTEDCreate a locked L1 escrow record.
When to use it: Application economics and treasury-linked flows.
Payload example
{
"id": "optional-id",
"amount": "1000000000000",
"l2_reference": "post:123"
}Quick HTML transaction builder
<!doctype html>
<html>
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>ESCROW</title>
<style>body{font-family:system-ui;background:#07191a;color:#e8f4ed;max-width:900px;margin:40px auto;padding:0 18px}textarea,input,pre{width:100%;box-sizing:border-box;background:#031011;color:#c9eee6;border:1px solid #285a58;border-radius:8px;padding:12px}textarea{height:270px}button{padding:11px 16px;background:#c98d53;border:0;border-radius:7px;font-weight:700;cursor:pointer}pre{min-height:220px;white-space:pre-wrap;overflow-wrap:anywhere}</style></head>
<body><h1>ESCROW</h1><p>Create a locked L1 escrow record.</p><label>RPC endpoint<input id="rpc" value="https://YOUR-VALIDATOR/chainware-rpc"></label><h3>Editable JSON-RPC</h3><textarea id="req">{
"jsonrpc": "2.0",
"id": 1,
"method": "broadcast_tx_commit",
"params": {
"tx": "BASE64_OF_FULLY_SIGNED_TRANSACTION_JSON"
}
}</textarea><p><button id="run">Run</button></p><h3>Response</h3><pre id="out">Not run yet.</pre>
<script>const rpc=document.getElementById("rpc"),req=document.getElementById("req"),out=document.getElementById("out");document.getElementById("run").onclick=async()=>{try{const body=JSON.parse(req.value);const r=await fetch(rpc.value,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(body)});const t=await r.text();try{out.textContent=JSON.stringify(JSON.parse(t),null,2)}catch{out.textContent=t}}catch(e){out.textContent="ERROR: "+e.message}};<\/script></body></html>Expected result / behavior
{
"check_tx": {
"code": 0
},
"tx_result": {
"code": 0
},
"height": "12345"
}
L1 TRANSACTION
SIGNAL
IMPLEMENTEDStore generic signed JSON on L1.
When to use it: Application events that do not need a dedicated protocol type.
Payload example
{
"type": "example",
"message": "hello"
}Quick HTML transaction builder
<!doctype html>
<html>
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>SIGNAL</title>
<style>body{font-family:system-ui;background:#07191a;color:#e8f4ed;max-width:900px;margin:40px auto;padding:0 18px}textarea,input,pre{width:100%;box-sizing:border-box;background:#031011;color:#c9eee6;border:1px solid #285a58;border-radius:8px;padding:12px}textarea{height:270px}button{padding:11px 16px;background:#c98d53;border:0;border-radius:7px;font-weight:700;cursor:pointer}pre{min-height:220px;white-space:pre-wrap;overflow-wrap:anywhere}</style></head>
<body><h1>SIGNAL</h1><p>Store generic signed JSON on L1.</p><label>RPC endpoint<input id="rpc" value="https://YOUR-VALIDATOR/chainware-rpc"></label><h3>Editable JSON-RPC</h3><textarea id="req">{
"jsonrpc": "2.0",
"id": 1,
"method": "broadcast_tx_commit",
"params": {
"tx": "BASE64_OF_FULLY_SIGNED_TRANSACTION_JSON"
}
}</textarea><p><button id="run">Run</button></p><h3>Response</h3><pre id="out">Not run yet.</pre>
<script>const rpc=document.getElementById("rpc"),req=document.getElementById("req"),out=document.getElementById("out");document.getElementById("run").onclick=async()=>{try{const body=JSON.parse(req.value);const r=await fetch(rpc.value,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(body)});const t=await r.text();try{out.textContent=JSON.stringify(JSON.parse(t),null,2)}catch{out.textContent=t}}catch(e){out.textContent="ERROR: "+e.message}};<\/script></body></html>Expected result / behavior
{
"check_tx": {
"code": 0
},
"tx_result": {
"code": 0
},
"height": "12345"
}
L1 TRANSACTION
SETTLE
FAIL-CLOSEDReserved settlement transaction; current base v11 fails closed until L2 inclusion-proof verification exists.
When to use it: Do not expose as a working feature yet.
Payload example
{
"proof": "..."
}Quick HTML transaction builder
<!doctype html>
<html>
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>SETTLE</title>
<style>body{font-family:system-ui;background:#07191a;color:#e8f4ed;max-width:900px;margin:40px auto;padding:0 18px}textarea,input,pre{width:100%;box-sizing:border-box;background:#031011;color:#c9eee6;border:1px solid #285a58;border-radius:8px;padding:12px}textarea{height:270px}button{padding:11px 16px;background:#c98d53;border:0;border-radius:7px;font-weight:700;cursor:pointer}pre{min-height:220px;white-space:pre-wrap;overflow-wrap:anywhere}</style></head>
<body><h1>SETTLE</h1><p>Reserved settlement transaction; current base v11 fails closed until L2 inclusion-proof verification exists.</p><label>RPC endpoint<input id="rpc" value="https://YOUR-VALIDATOR/chainware-rpc"></label><h3>Editable JSON-RPC</h3><textarea id="req">{
"jsonrpc": "2.0",
"id": 1,
"method": "broadcast_tx_commit",
"params": {
"tx": "BASE64_OF_FULLY_SIGNED_TRANSACTION_JSON"
}
}</textarea><p><button id="run">Run</button></p><h3>Response</h3><pre id="out">Not run yet.</pre>
<script>const rpc=document.getElementById("rpc"),req=document.getElementById("req"),out=document.getElementById("out");document.getElementById("run").onclick=async()=>{try{const body=JSON.parse(req.value);const r=await fetch(rpc.value,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(body)});const t=await r.text();try{out.textContent=JSON.stringify(JSON.parse(t),null,2)}catch{out.textContent=t}}catch(e){out.textContent="ERROR: "+e.message}};<\/script></body></html>Expected result / behavior
Currently rejected until proof verification exists.
L1 SOCIAL WORKFLOW
SUBMIT_POST / POST
L2_POINTER.actionL1 pointer action identifying an L2 post.
When to use it: After storing the corresponding record on L2 and confirming its block height.
Raw JSON-RPC request
{
"jsonrpc": "2.0",
"id": 1,
"method": "broadcast_tx_commit",
"params": {
"tx": "BASE64_OF_FULLY_SIGNED_TRANSACTION_JSON"
}
}Quick HTML you can copy and try
<!doctype html>
<html>
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>SUBMIT_POST / POST</title>
<style>body{font-family:system-ui;background:#07191a;color:#e8f4ed;max-width:900px;margin:40px auto;padding:0 18px}textarea,input,pre{width:100%;box-sizing:border-box;background:#031011;color:#c9eee6;border:1px solid #285a58;border-radius:8px;padding:12px}textarea{height:270px}button{padding:11px 16px;background:#c98d53;border:0;border-radius:7px;font-weight:700;cursor:pointer}pre{min-height:220px;white-space:pre-wrap;overflow-wrap:anywhere}</style></head>
<body><h1>SUBMIT_POST / POST</h1><p>L1 pointer action identifying an L2 post.</p><label>RPC endpoint<input id="rpc" value="https://YOUR-VALIDATOR/chainware-rpc"></label><h3>Editable JSON-RPC</h3><textarea id="req">{
"jsonrpc": "2.0",
"id": 1,
"method": "broadcast_tx_commit",
"params": {
"tx": "BASE64_OF_FULLY_SIGNED_TRANSACTION_JSON"
}
}</textarea><p><button id="run">Run</button></p><h3>Response</h3><pre id="out">Not run yet.</pre>
<script>const rpc=document.getElementById("rpc"),req=document.getElementById("req"),out=document.getElementById("out");document.getElementById("run").onclick=async()=>{try{const body=JSON.parse(req.value);const r=await fetch(rpc.value,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(body)});const t=await r.text();try{out.textContent=JSON.stringify(JSON.parse(t),null,2)}catch{out.textContent=t}}catch(e){out.textContent="ERROR: "+e.message}};<\/script></body></html>Return example
{
"stored_on": "L2",
"indexed_on": "L1",
"action": "SUBMIT_POST"
}L1 SOCIAL WORKFLOW
COMMENT / SUBMIT_COMMENT
L2_POINTER.actionL1 pointer action identifying an L2 comment or nested reply.
When to use it: After storing the corresponding record on L2 and confirming its block height.
Raw JSON-RPC request
{
"jsonrpc": "2.0",
"id": 1,
"method": "broadcast_tx_commit",
"params": {
"tx": "BASE64_OF_FULLY_SIGNED_TRANSACTION_JSON"
}
}Quick HTML you can copy and try
<!doctype html>
<html>
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>COMMENT / SUBMIT_COMMENT</title>
<style>body{font-family:system-ui;background:#07191a;color:#e8f4ed;max-width:900px;margin:40px auto;padding:0 18px}textarea,input,pre{width:100%;box-sizing:border-box;background:#031011;color:#c9eee6;border:1px solid #285a58;border-radius:8px;padding:12px}textarea{height:270px}button{padding:11px 16px;background:#c98d53;border:0;border-radius:7px;font-weight:700;cursor:pointer}pre{min-height:220px;white-space:pre-wrap;overflow-wrap:anywhere}</style></head>
<body><h1>COMMENT / SUBMIT_COMMENT</h1><p>L1 pointer action identifying an L2 comment or nested reply.</p><label>RPC endpoint<input id="rpc" value="https://YOUR-VALIDATOR/chainware-rpc"></label><h3>Editable JSON-RPC</h3><textarea id="req">{
"jsonrpc": "2.0",
"id": 1,
"method": "broadcast_tx_commit",
"params": {
"tx": "BASE64_OF_FULLY_SIGNED_TRANSACTION_JSON"
}
}</textarea><p><button id="run">Run</button></p><h3>Response</h3><pre id="out">Not run yet.</pre>
<script>const rpc=document.getElementById("rpc"),req=document.getElementById("req"),out=document.getElementById("out");document.getElementById("run").onclick=async()=>{try{const body=JSON.parse(req.value);const r=await fetch(rpc.value,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(body)});const t=await r.text();try{out.textContent=JSON.stringify(JSON.parse(t),null,2)}catch{out.textContent=t}}catch(e){out.textContent="ERROR: "+e.message}};<\/script></body></html>Return example
{
"stored_on": "L2",
"indexed_on": "L1",
"action": "COMMENT"
}L1 SOCIAL WORKFLOW
REACTION / SUBMIT_REACTION
L2_POINTER.actionL1 pointer action identifying an L2 reaction.
When to use it: After storing the corresponding record on L2 and confirming its block height.
Raw JSON-RPC request
{
"jsonrpc": "2.0",
"id": 1,
"method": "broadcast_tx_commit",
"params": {
"tx": "BASE64_OF_FULLY_SIGNED_TRANSACTION_JSON"
}
}Quick HTML you can copy and try
<!doctype html>
<html>
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>REACTION / SUBMIT_REACTION</title>
<style>body{font-family:system-ui;background:#07191a;color:#e8f4ed;max-width:900px;margin:40px auto;padding:0 18px}textarea,input,pre{width:100%;box-sizing:border-box;background:#031011;color:#c9eee6;border:1px solid #285a58;border-radius:8px;padding:12px}textarea{height:270px}button{padding:11px 16px;background:#c98d53;border:0;border-radius:7px;font-weight:700;cursor:pointer}pre{min-height:220px;white-space:pre-wrap;overflow-wrap:anywhere}</style></head>
<body><h1>REACTION / SUBMIT_REACTION</h1><p>L1 pointer action identifying an L2 reaction.</p><label>RPC endpoint<input id="rpc" value="https://YOUR-VALIDATOR/chainware-rpc"></label><h3>Editable JSON-RPC</h3><textarea id="req">{
"jsonrpc": "2.0",
"id": 1,
"method": "broadcast_tx_commit",
"params": {
"tx": "BASE64_OF_FULLY_SIGNED_TRANSACTION_JSON"
}
}</textarea><p><button id="run">Run</button></p><h3>Response</h3><pre id="out">Not run yet.</pre>
<script>const rpc=document.getElementById("rpc"),req=document.getElementById("req"),out=document.getElementById("out");document.getElementById("run").onclick=async()=>{try{const body=JSON.parse(req.value);const r=await fetch(rpc.value,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(body)});const t=await r.text();try{out.textContent=JSON.stringify(JSON.parse(t),null,2)}catch{out.textContent=t}}catch(e){out.textContent="ERROR: "+e.message}};<\/script></body></html>Return example
{
"stored_on": "L2",
"indexed_on": "L1",
"action": "REACTION"
}L1 SOCIAL WORKFLOW
UPDATE_PROFILE / PROFILE
L2_POINTER.actionL1 pointer action identifying an L2 profile update.
When to use it: After storing the corresponding record on L2 and confirming its block height.
Raw JSON-RPC request
{
"jsonrpc": "2.0",
"id": 1,
"method": "broadcast_tx_commit",
"params": {
"tx": "BASE64_OF_FULLY_SIGNED_TRANSACTION_JSON"
}
}Quick HTML you can copy and try
<!doctype html>
<html>
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>UPDATE_PROFILE / PROFILE</title>
<style>body{font-family:system-ui;background:#07191a;color:#e8f4ed;max-width:900px;margin:40px auto;padding:0 18px}textarea,input,pre{width:100%;box-sizing:border-box;background:#031011;color:#c9eee6;border:1px solid #285a58;border-radius:8px;padding:12px}textarea{height:270px}button{padding:11px 16px;background:#c98d53;border:0;border-radius:7px;font-weight:700;cursor:pointer}pre{min-height:220px;white-space:pre-wrap;overflow-wrap:anywhere}</style></head>
<body><h1>UPDATE_PROFILE / PROFILE</h1><p>L1 pointer action identifying an L2 profile update.</p><label>RPC endpoint<input id="rpc" value="https://YOUR-VALIDATOR/chainware-rpc"></label><h3>Editable JSON-RPC</h3><textarea id="req">{
"jsonrpc": "2.0",
"id": 1,
"method": "broadcast_tx_commit",
"params": {
"tx": "BASE64_OF_FULLY_SIGNED_TRANSACTION_JSON"
}
}</textarea><p><button id="run">Run</button></p><h3>Response</h3><pre id="out">Not run yet.</pre>
<script>const rpc=document.getElementById("rpc"),req=document.getElementById("req"),out=document.getElementById("out");document.getElementById("run").onclick=async()=>{try{const body=JSON.parse(req.value);const r=await fetch(rpc.value,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(body)});const t=await r.text();try{out.textContent=JSON.stringify(JSON.parse(t),null,2)}catch{out.textContent=t}}catch(e){out.textContent="ERROR: "+e.message}};<\/script></body></html>Return example
{
"stored_on": "L2",
"indexed_on": "L1",
"action": "UPDATE_PROFILE"
}L1 SOCIAL READ
Feed discovery
WORKFLOWRead /l2-pointers, sort pointers by L1 height, filter by social actions, then resolve content from L2.
When to use it: Whenever rendering or refreshing the public feed.
Raw JSON-RPC request
{
"jsonrpc": "2.0",
"id": 1,
"method": "abci_query",
"params": {
"path": "/l2-pointers",
"data": "",
"prove": false
}
}Quick HTML you can copy and try
<!doctype html>
<html>
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Feed discovery</title>
<style>body{font-family:system-ui;background:#07191a;color:#e8f4ed;max-width:900px;margin:40px auto;padding:0 18px}textarea,input,pre{width:100%;box-sizing:border-box;background:#031011;color:#c9eee6;border:1px solid #285a58;border-radius:8px;padding:12px}textarea{height:270px}button{padding:11px 16px;background:#c98d53;border:0;border-radius:7px;font-weight:700;cursor:pointer}pre{min-height:220px;white-space:pre-wrap;overflow-wrap:anywhere}</style></head>
<body><h1>Feed discovery</h1><p>Read /l2-pointers, sort pointers by L1 height, filter by social actions, then resolve content from L2.</p><label>RPC endpoint<input id="rpc" value="https://YOUR-VALIDATOR/chainware-rpc"></label><h3>Editable JSON-RPC</h3><textarea id="req">{
"jsonrpc": "2.0",
"id": 1,
"method": "abci_query",
"params": {
"path": "/l2-pointers",
"data": "",
"prove": false
}
}</textarea><p><button id="run">Run</button></p><h3>Response</h3><pre id="out">Not run yet.</pre>
<script>const rpc=document.getElementById("rpc"),req=document.getElementById("req"),out=document.getElementById("out");document.getElementById("run").onclick=async()=>{try{const body=JSON.parse(req.value);const r=await fetch(rpc.value,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(body)});const t=await r.text();try{out.textContent=JSON.stringify(JSON.parse(t),null,2)}catch{out.textContent=t}}catch(e){out.textContent="ERROR: "+e.message}};<\/script></body></html>Return example
{
"feed": "ordered by L1 pointers; payloads resolved from L2"
}