cWcDeveloper Forge v6Complete L1 + L2 docs
cWc forge
COMPLETE V6 · NATIVE + SOCIAL + MEDIA + DESO COMPATIBILITY

Two layers.
Everything documented.

Click any box. Each popup contains the same developer workbench: editable request, live Run button, formatted response, curl, standalone HTML, examples and design notes.

Important: Current v11 social features use native L2 STORE plus native L1 L2_POINTER. Older direct DeSo-compatible calls are included in a clearly labeled compatibility section so programmers can migrate old frontends without confusing them with native v11 transaction types.
SECTION ONE

Layer 1

Settlement, wallet balances, registration, storage funding, escrow, protocol signals, and the authoritative pointer/index layer for social and application content stored on L2.

L1
PROTOCOL NATIVE

Reads + transactions

L1 QUERY

/state

ABCI QUERY

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 QUERY

Runtime 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 QUERY

Creator 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 QUERY

Check 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 QUERY

Read 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 QUERY

Read 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 QUERY

Read 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 QUERY

Read 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 QUERY

Read 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 QUERY

Read 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 QUERY

Read 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 QUERY

Read 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

IMPLEMENTED

One-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

IMPLEMENTED

Register 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

IMPLEMENTED

Move 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

IMPLEMENTED

Move 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

IMPLEMENTED

Index 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

IMPLEMENTED

Create 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

IMPLEMENTED

Store 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-CLOSED

Reserved 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.

SOCIAL INDEX

Posts, comments, reactions and profiles

These action names live inside native L2_POINTER records after L2 content commits.

L1 SOCIAL WORKFLOW

SUBMIT_POST / POST

L2_POINTER.action

L1 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.action

L1 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.action

L1 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.action

L1 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

WORKFLOW

Read /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"
}
FORGED ACROSS TWO CHAINS

L2 stores the payload. L1 tells the network what it means and where to find it.

SECTION TWO

Layer 2

Owner-controlled JSON content, posts, comments, nested replies, reactions, profiles, media chunks/maps/manifests and arbitrary application files.

L2
PROTOCOL NATIVE

Reads + transactions

L2 QUERY

/state

ABCI QUERY

Chain-wide application summary for L2.

When to use it: Connection checks and diagnostics.
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 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": "/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-2",
  "ChainID": "l2-11",
  "Height": 12345,
  "Initialized": true
}
L2 QUERY

/capabilities

ABCI QUERY

Runtime L2 transaction support and size limits.

When to use it: Before enabling L2 writes.
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 L2 transaction support and size limits.</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-2",
  "ChainID": "l2-11",
  "TransactionTypes": [
    "CREATOR_INIT_L2",
    "STORE",
    "DELETE",
    "SIGNAL",
    "STORAGE_CREDIT"
  ],
  "MaxTxBytes": 524288
}
L2 QUERY

/creator

ABCI QUERY

Read L2 Creator state and L1 linkage.

When to use it: Provenance and setup tools.
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>Read L2 Creator state and L1 linkage.</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,
  "l1_creator_tx_hash": "...",
  "l1_creator_height": 1
}
L2 QUERY

/account/cwYOURADDRESS

ABCI QUERY

Read the L2 nonce for the same wallet identity.

When to use it: Before every signed L2 write.
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 the L2 nonce for the same wallet identity.</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": "0",
  "nonce": 22
}
L2 QUERY

/content/post:EXAMPLE

ABCI QUERY

Read any owner-controlled L2 content record by key.

When to use it: Posts, comments, profiles, media manifests/maps/chunks, documents and app state.
Raw JSON-RPC request
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "abci_query",
  "params": {
    "path": "/content/post:EXAMPLE",
    "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>/content/post:EXAMPLE</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>/content/post:EXAMPLE</h1><p>Read any owner-controlled L2 content record by key.</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": "/content/post:EXAMPLE",
    "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
{
  "Key": "post:EXAMPLE",
  "Owner": "cw...",
  "CreatedHeight": 100,
  "UpdatedHeight": 100,
  "Content": {
    "kind": "post",
    "text": "Hello"
  }
}
L2 QUERY

/signals

ABCI QUERY

Read generic L2 signal records.

When to use it: Experimental L2 application events.
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 L2 signal 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": "/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"
    }
  }
]
L2 TRANSACTION

CREATOR_INIT_L2

IMPLEMENTED

One-time L2 initialization linked to L1 Creator state.

When to use it: Only on a new uninitialized L2 chain.
Payload example
{
  "manifest_hash": "...",
  "l1_creator_tx_hash": "...",
  "l1_creator_height": 1
}
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_L2</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_L2</h1><p>One-time L2 initialization linked to L1 Creator state.</p><label>RPC endpoint<input id="rpc" value="https://l2-11-2.diamondthumb.com/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" }

L2 TRANSACTION

STORE

IMPLEMENTED

Create or owner-update arbitrary JSON under an L2 key.

When to use it: Any application content write.
Payload example
{
  "key": "post:EXAMPLE",
  "content": {
    "kind": "post",
    "text": "Hello chainWare"
  }
}
Quick HTML transaction builder
<!doctype html>
<html>
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>STORE</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>STORE</h1><p>Create or owner-update arbitrary JSON under an L2 key.</p><label>RPC endpoint<input id="rpc" value="https://l2-11-2.diamondthumb.com/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" }

L2 TRANSACTION

DELETE

IMPLEMENTED

Delete an L2 key owned by the signer.

When to use it: Owner-controlled content removal.
Payload example
{
  "key": "post:EXAMPLE"
}
Quick HTML transaction builder
<!doctype html>
<html>
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>DELETE</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>DELETE</h1><p>Delete an L2 key owned by the signer.</p><label>RPC endpoint<input id="rpc" value="https://l2-11-2.diamondthumb.com/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" }

L2 TRANSACTION

SIGNAL

IMPLEMENTED

Store generic signed JSON on L2.

When to use it: Experimental/application events.
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 L2.</p><label>RPC endpoint<input id="rpc" value="https://l2-11-2.diamondthumb.com/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" }

L2 TRANSACTION

STORAGE_CREDIT

FAIL-CLOSED

Reserved recognition of L1-funded storage credit; currently fail-closed.

When to use it: Do not expose as operational yet.
Payload example
{
  "l1_funding_tx": "ABCDEF..."
}
Quick HTML transaction builder
<!doctype html>
<html>
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>STORAGE_CREDIT</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_CREDIT</h1><p>Reserved recognition of L1-funded storage credit; currently fail-closed.</p><label>RPC endpoint<input id="rpc" value="https://l2-11-2.diamondthumb.com/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 L1 inclusion-proof verification exists.

SOCIAL / DESO-STYLE UX

Posts, comments, replies, reactions, profiles, mentions and notifications

L2 SOCIAL SCHEMA

post:<id>

STORE + L1 POINTER

Create a social post, then index it on L1 as SUBMIT_POST.

When to use it: When implementing the corresponding social feature.
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>post:<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>post:<id></h1><p>Create a social post, then index it on L1 as SUBMIT_POST.</p><label>RPC endpoint<input id="rpc" value="https://l2-11-2.diamondthumb.com/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
{
  "key": "post:EXAMPLE",
  "content": {
    "kind": "post",
    "id": "EXAMPLE",
    "text": "Hello",
    "image": "",
    "video": "",
    "author": "cwYOURADDRESS",
    "created_at": "2026-09-24T18:00:00Z"
  }
}
L2 SOCIAL SCHEMA

comment:<id>

STORE + L1 POINTER

Create a comment pointing to a post, then index with COMMENT.

When to use it: When implementing the corresponding social feature.
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:<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>comment:<id></h1><p>Create a comment pointing to a post, then index with COMMENT.</p><label>RPC endpoint<input id="rpc" value="https://l2-11-2.diamondthumb.com/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
{
  "key": "comment:EXAMPLE",
  "content": {
    "kind": "comment",
    "target": "post:EXAMPLE",
    "text": "Reply",
    "author": "cwYOURADDRESS",
    "created_at": "2026-09-24T18:00:00Z"
  }
}
L2 SOCIAL SCHEMA

Nested reply

STORE + L1 POINTER

Use the parent comment key as target; the client recursively renders the thread.

When to use it: When implementing the corresponding social feature.
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>Nested reply</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>Nested reply</h1><p>Use the parent comment key as target; the client recursively renders the thread.</p><label>RPC endpoint<input id="rpc" value="https://l2-11-2.diamondthumb.com/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
{
  "key": "comment:CHILD",
  "content": {
    "kind": "comment",
    "target": "comment:PARENT",
    "text": "Nested reply",
    "author": "cwYOURADDRESS"
  }
}
L2 SOCIAL SCHEMA

reaction:<post>:<wallet>

STORE + L1 POINTER

Current feed uses generic REACTION records; recognized examples include diamond and poop.

When to use it: When implementing the corresponding social feature.
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:<post>:<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>reaction:<post>:<wallet></h1><p>Current feed uses generic REACTION records; recognized examples include diamond and poop.</p><label>RPC endpoint<input id="rpc" value="https://l2-11-2.diamondthumb.com/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
{
  "key": "reaction:post:EXAMPLE:cwYOURADDRESS",
  "content": {
    "kind": "reaction",
    "target": "post:EXAMPLE",
    "reaction": "diamond",
    "author": "cwYOURADDRESS",
    "updated_at": "2026-09-24T18:00:00Z"
  }
}
L2 SOCIAL SCHEMA

profile:<wallet>

STORE + L1 POINTER

Store/update profile content and index it on L1 with UPDATE_PROFILE.

When to use it: When implementing the corresponding social feature.
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>profile:<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>profile:<wallet></h1><p>Store/update profile content and index it on L1 with UPDATE_PROFILE.</p><label>RPC endpoint<input id="rpc" value="https://l2-11-2.diamondthumb.com/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
{
  "key": "profile:cwYOURADDRESS",
  "content": {
    "kind": "profile",
    "name": "Alice",
    "bio": "Hello",
    "image": "",
    "owner": "cwYOURADDRESS",
    "updated_at": "2026-09-24T18:00:00Z"
  }
}
SOCIAL DERIVED FEATURE

Mentions

CLIENT-DERIVED

The feed detects @profile-name aliases in post/comment text and builds mention notifications client-side.

When to use it: When building social UX above the base chain primitives.
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>Mentions</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>Mentions</h1><p>The feed detects @profile-name aliases in post/comment text and builds mention notifications client-side.</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
{
  "feature": "derived from chain data"
}
SOCIAL DERIVED FEATURE

Notifications

CLIENT-DERIVED

The client compares new L1 pointers, resolves L2 content, then builds comment/reaction/mention notifications for the wallet.

When to use it: When building social UX above the base chain primitives.
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>Notifications</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>Notifications</h1><p>The client compares new L1 pointers, resolves L2 content, then builds comment/reaction/mention notifications for the wallet.</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
{
  "feature": "derived from chain data"
}
MEDIA

Images, video, audio, PDF and arbitrary files

The generic v2 media engine chunks, hashes, maps, manifests and automatically reassembles media.

L2 MEDIA SCHEMA

media:chunk:<id>:<index>

STORE

Bounded chunk with byte count and per-chunk SHA-256.

When to use it: During generic chunked media upload.
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>media:chunk:<id>:<index></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>media:chunk:<id>:<index></h1><p>Bounded chunk with byte count and per-chunk SHA-256.</p><label>RPC endpoint<input id="rpc" value="https://l2-11-2.diamondthumb.com/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
{
  "key": "media:chunk:MEDIAID:000000",
  "content": {
    "kind": "media_chunk",
    "version": 2,
    "media_id": "MEDIAID",
    "media_type": "audio",
    "scope": "post:EXAMPLE",
    "index": 0,
    "total": 10,
    "bytes": 196608,
    "sha256": "CHUNK_SHA256",
    "data": "BASE64_BYTES"
  }
}
L2 MEDIA SCHEMA

media:map:<id>:<page>

STORE

Paged chunk descriptor list so the root manifest stays small.

When to use it: During generic chunked media upload.
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>media:map:<id>:<page></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>media:map:<id>:<page></h1><p>Paged chunk descriptor list so the root manifest stays small.</p><label>RPC endpoint<input id="rpc" value="https://l2-11-2.diamondthumb.com/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
{
  "key": "media:map:MEDIAID:00000",
  "content": {
    "kind": "media_map_page",
    "version": 2,
    "media_id": "MEDIAID",
    "media_type": "audio",
    "page_index": 0,
    "page_count": 1,
    "first_chunk": 0,
    "chunk_count": 2,
    "chunks": [
      {
        "index": 0,
        "key": "media:chunk:MEDIAID:000000",
        "bytes": 196608,
        "sha256": "..."
      }
    ]
  }
}
L2 MEDIA SCHEMA

media:manifest:<id>

STORE

Root record describing the complete file and map pages.

When to use it: During generic chunked media upload.
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>media:manifest:<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>media:manifest:<id></h1><p>Root record describing the complete file and map pages.</p><label>RPC endpoint<input id="rpc" value="https://l2-11-2.diamondthumb.com/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
{
  "key": "media:manifest:MEDIAID",
  "content": {
    "kind": "media_manifest",
    "version": 2,
    "media_id": "MEDIAID",
    "media_type": "pdf",
    "mime": "application/pdf",
    "name": "document.pdf",
    "size": 1234567,
    "file_sha256": "FILE_SHA256",
    "chunk_bytes": 196608,
    "chunk_count": 7,
    "map_page_count": 1,
    "map_pages": [
      {
        "index": 0,
        "key": "media:map:MEDIAID:00000"
      }
    ],
    "scope": "post:EXAMPLE"
  }
}
L2 MEDIA · IMAGE

Upload image

GENERIC MEDIA

Use the generic media engine to store image data as hashed chunks, paged maps and a root manifest.

When to use it: When a post, comment, profile or application needs image content.
Raw JSON-RPC request
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "abci_query",
  "params": {
    "path": "/content/media:manifest:MEDIAID",
    "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>Upload image</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>Upload image</h1><p>Use the generic media engine to store image data as hashed chunks, paged maps and a root manifest.</p><label>RPC endpoint<input id="rpc" value="https://l2-11-2.diamondthumb.com/chainware-rpc"></label><h3>Editable JSON-RPC</h3><textarea id="req">{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "abci_query",
  "params": {
    "path": "/content/media:manifest:MEDIAID",
    "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
{
  "kind": "media_ref",
  "version": 2,
  "media_id": "MEDIAID",
  "media_type": "image",
  "mime": "image/jpeg",
  "name": "photo.jpg",
  "size": 123456,
  "file_sha256": "FILE_SHA256",
  "manifest_key": "media:manifest:MEDIAID",
  "manifest_tx_hash": "ABC...",
  "manifest_height": 1234
}
L2 MEDIA · VIDEO

Upload video

GENERIC MEDIA

Use the generic media engine to store video data as hashed chunks, paged maps and a root manifest.

When to use it: When a post, comment, profile or application needs video content.
Raw JSON-RPC request
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "abci_query",
  "params": {
    "path": "/content/media:manifest:MEDIAID",
    "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>Upload video</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>Upload video</h1><p>Use the generic media engine to store video data as hashed chunks, paged maps and a root manifest.</p><label>RPC endpoint<input id="rpc" value="https://l2-11-2.diamondthumb.com/chainware-rpc"></label><h3>Editable JSON-RPC</h3><textarea id="req">{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "abci_query",
  "params": {
    "path": "/content/media:manifest:MEDIAID",
    "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
{
  "kind": "media_ref",
  "version": 2,
  "media_id": "MEDIAID",
  "media_type": "video",
  "mime": "video/mp4",
  "name": "clip.mp4",
  "size": 123456,
  "file_sha256": "FILE_SHA256",
  "manifest_key": "media:manifest:MEDIAID",
  "manifest_tx_hash": "ABC...",
  "manifest_height": 1234
}
L2 MEDIA · AUDIO

Upload audio

GENERIC MEDIA

Use the generic media engine to store audio data as hashed chunks, paged maps and a root manifest.

When to use it: When a post, comment, profile or application needs audio content.
Raw JSON-RPC request
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "abci_query",
  "params": {
    "path": "/content/media:manifest:MEDIAID",
    "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>Upload audio</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>Upload audio</h1><p>Use the generic media engine to store audio data as hashed chunks, paged maps and a root manifest.</p><label>RPC endpoint<input id="rpc" value="https://l2-11-2.diamondthumb.com/chainware-rpc"></label><h3>Editable JSON-RPC</h3><textarea id="req">{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "abci_query",
  "params": {
    "path": "/content/media:manifest:MEDIAID",
    "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
{
  "kind": "media_ref",
  "version": 2,
  "media_id": "MEDIAID",
  "media_type": "audio",
  "mime": "audio/mpeg",
  "name": "recording.mp3",
  "size": 123456,
  "file_sha256": "FILE_SHA256",
  "manifest_key": "media:manifest:MEDIAID",
  "manifest_tx_hash": "ABC...",
  "manifest_height": 1234
}
L2 MEDIA · PDF

Upload pdf

GENERIC MEDIA

Use the generic media engine to store pdf data as hashed chunks, paged maps and a root manifest.

When to use it: When a post, comment, profile or application needs pdf content.
Raw JSON-RPC request
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "abci_query",
  "params": {
    "path": "/content/media:manifest:MEDIAID",
    "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>Upload pdf</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>Upload pdf</h1><p>Use the generic media engine to store pdf data as hashed chunks, paged maps and a root manifest.</p><label>RPC endpoint<input id="rpc" value="https://l2-11-2.diamondthumb.com/chainware-rpc"></label><h3>Editable JSON-RPC</h3><textarea id="req">{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "abci_query",
  "params": {
    "path": "/content/media:manifest:MEDIAID",
    "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
{
  "kind": "media_ref",
  "version": 2,
  "media_id": "MEDIAID",
  "media_type": "pdf",
  "mime": "application/pdf",
  "name": "document.pdf",
  "size": 123456,
  "file_sha256": "FILE_SHA256",
  "manifest_key": "media:manifest:MEDIAID",
  "manifest_tx_hash": "ABC...",
  "manifest_height": 1234
}
L2 MEDIA · FILE

Upload file

GENERIC MEDIA

Use the generic media engine to store file data as hashed chunks, paged maps and a root manifest.

When to use it: When a post, comment, profile or application needs file content.
Raw JSON-RPC request
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "abci_query",
  "params": {
    "path": "/content/media:manifest:MEDIAID",
    "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>Upload file</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>Upload file</h1><p>Use the generic media engine to store file data as hashed chunks, paged maps and a root manifest.</p><label>RPC endpoint<input id="rpc" value="https://l2-11-2.diamondthumb.com/chainware-rpc"></label><h3>Editable JSON-RPC</h3><textarea id="req">{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "abci_query",
  "params": {
    "path": "/content/media:manifest:MEDIAID",
    "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
{
  "kind": "media_ref",
  "version": 2,
  "media_id": "MEDIAID",
  "media_type": "file",
  "mime": "application/octet-stream",
  "name": "archive.bin",
  "size": 123456,
  "file_sha256": "FILE_SHA256",
  "manifest_key": "media:manifest:MEDIAID",
  "manifest_tx_hash": "ABC...",
  "manifest_height": 1234
}
L2 MEDIA READ

Reassemble media

VERIFY + ASSEMBLE

Load manifest → map pages → chunks, validate byte lengths and SHA-256, concatenate in index order, then create a Blob/object URL.

When to use it: Whenever displaying or downloading chunked media.
Raw JSON-RPC request
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "abci_query",
  "params": {
    "path": "/content/media:manifest:MEDIAID",
    "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>Reassemble media</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>Reassemble media</h1><p>Load manifest → map pages → chunks, validate byte lengths and SHA-256, concatenate in index order, then create a Blob/object URL.</p><label>RPC endpoint<input id="rpc" value="https://l2-11-2.diamondthumb.com/chainware-rpc"></label><h3>Editable JSON-RPC</h3><textarea id="req">{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "abci_query",
  "params": {
    "path": "/content/media:manifest:MEDIAID",
    "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
{
  "result": "verified reconstructed Blob bytes"
}
LEGACY / COMPATIBILITY

DeSo-compatible social calls

These direct calls existed in the earlier chainWare social engine. They are included for migration and compatibility; always query the running validator's /capabilities before using them.

The current v11 two-layer social model replaces most direct DeSo-style protocol calls with generic L2 STORE schemas plus L1 L2_POINTER actions. The boxes below are intentionally labeled legacy so a programmer does not accidentally send them to the v11 base app.
LEGACY DESO-COMPAT TRANSACTION

SUBMIT_POST

OLDER SOCIAL ENGINE

Legacy DeSo-compatible post/comment/repost transaction.

When to use it: Only when intentionally targeting the older DeSo-compatible social engine, not a current v11 base validator.
Payload example
{
  "UpdaterPublicKeyBase58Check": "cwYOURADDRESS",
  "ParentStakeID": "",
  "BodyObj": {
    "Body": "Hello",
    "ImageURLs": [],
    "VideoURLs": []
  },
  "RepostedPostHashHex": "",
  "PostExtraData": {
    "Client": "chainWare-Social-Feed-v5"
  },
  "IsHidden": false
}
Quick HTML transaction builder
<!doctype html>
<html>
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>SUBMIT_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</h1><p>Legacy DeSo-compatible post/comment/repost transaction.</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

{ "compatibility": "legacy direct transaction" }

LEGACY DESO-COMPAT TRANSACTION

UPDATE_PROFILE

OLDER SOCIAL ENGINE

Legacy direct profile update.

When to use it: Only when intentionally targeting the older DeSo-compatible social engine, not a current v11 base validator.
Payload example
{
  "UpdaterPublicKeyBase58Check": "cwYOURADDRESS",
  "ProfilePublicKeyBase58Check": "cwYOURADDRESS",
  "NewUsername": "Alice",
  "NewDescription": "Bio",
  "NewProfilePic": "",
  "NewCreatorBasisPoints": 0,
  "NewStakeMultipleBasisPoints": 0,
  "IsHidden": false,
  "ExtraData": {}
}
Quick HTML transaction builder
<!doctype html>
<html>
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>UPDATE_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</h1><p>Legacy direct 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>
Expected result / behavior

{ "compatibility": "legacy direct transaction" }

LEGACY DESO-COMPAT TRANSACTION

CREATE_LIKE

OLDER SOCIAL ENGINE

Legacy direct like/unlike.

When to use it: Only when intentionally targeting the older DeSo-compatible social engine, not a current v11 base validator.
Payload example
{
  "ReaderPublicKeyBase58Check": "cwYOURADDRESS",
  "LikedPostHashHex": "POSTHASH",
  "IsUnlike": false
}
Quick HTML transaction builder
<!doctype html>
<html>
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>CREATE_LIKE</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>CREATE_LIKE</h1><p>Legacy direct like/unlike.</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

{ "compatibility": "legacy direct transaction" }

LEGACY DESO-COMPAT TRANSACTION

SEND_DIAMOND

OLDER SOCIAL ENGINE

Legacy direct diamond.

When to use it: Only when intentionally targeting the older DeSo-compatible social engine, not a current v11 base validator.
Payload example
{
  "SenderPublicKeyBase58Check": "cwYOURADDRESS",
  "ReceiverPublicKeyBase58Check": "cwAUTHOR",
  "DiamondPostHashHex": "POSTHASH",
  "DiamondLevel": 1
}
Quick HTML transaction builder
<!doctype html>
<html>
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>SEND_DIAMOND</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>SEND_DIAMOND</h1><p>Legacy direct diamond.</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

{ "compatibility": "legacy direct transaction" }

LEGACY DESO-COMPAT TRANSACTION

CREATE_FOLLOW

OLDER SOCIAL ENGINE

Legacy direct follow/unfollow.

When to use it: Only when intentionally targeting the older DeSo-compatible social engine, not a current v11 base validator.
Payload example
{
  "FollowerPublicKeyBase58Check": "cwYOURADDRESS",
  "FollowedPublicKeyBase58Check": "cwOTHER",
  "IsUnfollow": false
}
Quick HTML transaction builder
<!doctype html>
<html>
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>CREATE_FOLLOW</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>CREATE_FOLLOW</h1><p>Legacy direct follow/unfollow.</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

{ "compatibility": "legacy direct transaction" }

LEGACY DESO-COMPAT TRANSACTION

MEDIA_BEGIN

OLDER SOCIAL ENGINE

Legacy media upload start.

When to use it: Only when intentionally targeting the older DeSo-compatible social engine, not a current v11 base validator.
Payload example
{
  "asset_id": "...",
  "mime_type": "image/jpeg"
}
Quick HTML transaction builder
<!doctype html>
<html>
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>MEDIA_BEGIN</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>MEDIA_BEGIN</h1><p>Legacy media upload start.</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

{ "compatibility": "legacy direct transaction" }

LEGACY DESO-COMPAT TRANSACTION

MEDIA_CHUNK

OLDER SOCIAL ENGINE

Legacy media chunk.

When to use it: Only when intentionally targeting the older DeSo-compatible social engine, not a current v11 base validator.
Payload example
{
  "asset_id": "...",
  "chunk_index": 0,
  "data_base64": "..."
}
Quick HTML transaction builder
<!doctype html>
<html>
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>MEDIA_CHUNK</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>MEDIA_CHUNK</h1><p>Legacy media chunk.</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

{ "compatibility": "legacy direct transaction" }

LEGACY DESO-COMPAT TRANSACTION

MEDIA_FINALIZE

OLDER SOCIAL ENGINE

Legacy media finalize.

When to use it: Only when intentionally targeting the older DeSo-compatible social engine, not a current v11 base validator.
Payload example
{
  "asset_id": "..."
}
Quick HTML transaction builder
<!doctype html>
<html>
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>MEDIA_FINALIZE</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>MEDIA_FINALIZE</h1><p>Legacy media finalize.</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

{ "compatibility": "legacy direct transaction" }

LEGACY DESO-COMPAT TRANSACTION

MEDIA_TAG

OLDER SOCIAL ENGINE

Legacy media tag.

When to use it: Only when intentionally targeting the older DeSo-compatible social engine, not a current v11 base validator.
Payload example
{
  "asset_id": "...",
  "tag": "..."
}
Quick HTML transaction builder
<!doctype html>
<html>
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>MEDIA_TAG</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>MEDIA_TAG</h1><p>Legacy media tag.</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

{ "compatibility": "legacy direct transaction" }

LEGACY DESO-COMPAT TRANSACTION

MEDIA_NFT_MINT

OLDER SOCIAL ENGINE

Legacy NFT mint for media.

When to use it: Only when intentionally targeting the older DeSo-compatible social engine, not a current v11 base validator.
Payload example
{
  "asset_id": "..."
}
Quick HTML transaction builder
<!doctype html>
<html>
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>MEDIA_NFT_MINT</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>MEDIA_NFT_MINT</h1><p>Legacy NFT mint for media.</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

{ "compatibility": "legacy direct transaction" }

LEGACY DESO-COMPAT TRANSACTION

MINT_TEST_COIN

OLDER SOCIAL ENGINE

Legacy test coin mint.

When to use it: Only when intentionally targeting the older DeSo-compatible social engine, not a current v11 base validator.
Payload example
{
  "to": "cwYOURADDRESS",
  "amount": "..."
}
Quick HTML transaction builder
<!doctype html>
<html>
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>MINT_TEST_COIN</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>MINT_TEST_COIN</h1><p>Legacy test coin mint.</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

{ "compatibility": "legacy direct transaction" }

LEGACY DESO-COMPAT TRANSACTION

VALIDATOR_JOIN_TESTNET

OLDER SOCIAL ENGINE

Legacy testnet validator join.

When to use it: Only when intentionally targeting the older DeSo-compatible social engine, not a current v11 base validator.
Payload example
{
  "domain": "validator.example"
}
Quick HTML transaction builder
<!doctype html>
<html>
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>VALIDATOR_JOIN_TESTNET</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>VALIDATOR_JOIN_TESTNET</h1><p>Legacy testnet validator join.</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

{ "compatibility": "legacy direct transaction" }

LEGACY DESO-COMPAT QUERY

/feed/100/cwREADER

OLDER SOCIAL ENGINE

Legacy DeSo-compatible feed query.

When to use it: Only against the older social engine.
Raw JSON-RPC request
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "abci_query",
  "params": {
    "path": "/feed/100/cwREADER",
    "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/100/cwREADER</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/100/cwREADER</h1><p>Legacy DeSo-compatible feed query.</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": "/feed/100/cwREADER",
    "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
{
  "compatibility": "legacy response"
}
LEGACY DESO-COMPAT QUERY

/comments/POSTHASH/200/cwREADER

OLDER SOCIAL ENGINE

Legacy comment query.

When to use it: Only against the older social engine.
Raw JSON-RPC request
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "abci_query",
  "params": {
    "path": "/comments/POSTHASH/200/cwREADER",
    "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>/comments/POSTHASH/200/cwREADER</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>/comments/POSTHASH/200/cwREADER</h1><p>Legacy comment query.</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": "/comments/POSTHASH/200/cwREADER",
    "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
{
  "compatibility": "legacy response"
}
LEGACY DESO-COMPAT QUERY

/posts-author/cwAUTHOR/50

OLDER SOCIAL ENGINE

Legacy author-post query.

When to use it: Only against the older social engine.
Raw JSON-RPC request
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "abci_query",
  "params": {
    "path": "/posts-author/cwAUTHOR/50",
    "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>/posts-author/cwAUTHOR/50</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>/posts-author/cwAUTHOR/50</h1><p>Legacy author-post query.</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": "/posts-author/cwAUTHOR/50",
    "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
{
  "compatibility": "legacy response"
}
LEGACY DESO-COMPAT QUERY

/profile/cwADDRESS

OLDER SOCIAL ENGINE

Legacy profile query.

When to use it: Only against the older social engine.
Raw JSON-RPC request
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "abci_query",
  "params": {
    "path": "/profile/cwADDRESS",
    "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>/profile/cwADDRESS</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>/profile/cwADDRESS</h1><p>Legacy profile query.</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": "/profile/cwADDRESS",
    "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
{
  "compatibility": "legacy response"
}
LEGACY DESO-COMPAT QUERY

/media/ASSETID

OLDER SOCIAL ENGINE

Legacy media summary query.

When to use it: Only against the older social engine.
Raw JSON-RPC request
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "abci_query",
  "params": {
    "path": "/media/ASSETID",
    "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>/media/ASSETID</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>/media/ASSETID</h1><p>Legacy media summary query.</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": "/media/ASSETID",
    "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
{
  "compatibility": "legacy response"
}
LEGACY DESO-COMPAT QUERY

/media-chunk/ASSETID/0

OLDER SOCIAL ENGINE

Legacy direct media chunk query.

When to use it: Only against the older social engine.
Raw JSON-RPC request
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "abci_query",
  "params": {
    "path": "/media-chunk/ASSETID/0",
    "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>/media-chunk/ASSETID/0</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>/media-chunk/ASSETID/0</h1><p>Legacy direct media chunk query.</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": "/media-chunk/ASSETID/0",
    "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
{
  "compatibility": "legacy response"
}
LEGACY DESO-COMPAT QUERY

/media-user/cwADDRESS

OLDER SOCIAL ENGINE

Legacy user media query.

When to use it: Only against the older social engine.
Raw JSON-RPC request
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "abci_query",
  "params": {
    "path": "/media-user/cwADDRESS",
    "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>/media-user/cwADDRESS</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>/media-user/cwADDRESS</h1><p>Legacy user media query.</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": "/media-user/cwADDRESS",
    "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
{
  "compatibility": "legacy response"
}
LEGACY DESO-COMPAT QUERY

/nft/NFTID

OLDER SOCIAL ENGINE

Legacy NFT query.

When to use it: Only against the older social engine.
Raw JSON-RPC request
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "abci_query",
  "params": {
    "path": "/nft/NFTID",
    "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>/nft/NFTID</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>/nft/NFTID</h1><p>Legacy NFT query.</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": "/nft/NFTID",
    "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
{
  "compatibility": "legacy response"
}
LEGACY DESO-COMPAT QUERY

/validators/all

OLDER SOCIAL ENGINE

Legacy application validator query.

When to use it: Only against the older social engine.
Raw JSON-RPC request
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "abci_query",
  "params": {
    "path": "/validators/all",
    "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>/validators/all</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>/validators/all</h1><p>Legacy application validator query.</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": "/validators/all",
    "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
{
  "compatibility": "legacy response"
}
MAPPING

Old name → current v11 equivalent

SUBMIT_POSTv11: L2 STORE post/comment + L1 L2_POINTER action SUBMIT_POST/COMMENT.
UPDATE_PROFILEv11: L2 STORE profile:<wallet> + L1 pointer action UPDATE_PROFILE.
CREATE_LIKEv11: generic REACTION content rather than a native CREATE_LIKE type.
SEND_DIAMONDv11: REACTION with reaction:"diamond".
CREATE_FOLLOWOlder engine feature; no native current-v11 base transaction found.
MEDIA_BEGIN / CHUNK / FINALIZEv11: generic L2 STORE media chunks + map pages + manifest.
/feed/...v11: derive feed from L1 /l2-pointers + L2 content.
/comments/...v11: derive comments from COMMENT pointers + L2 comment records.
/profile/...v11: resolve profile:<wallet> L2 content from profile pointer.
/media/...v11: read media via /content/media:manifest..., map pages and chunks.
SHARED NODE RPC

CometBFT calls

Status, peers, validators, blocks, tx search, mempool and broadcast methods are shared by L1 and L2 validators through /chainware-rpc.

statusNetwork ID, latest block height/time, catching_up, validator identity.
healthSimple node health check.
net_infoConnected peers.
validatorsValidator set and voting power.
blockFetch a block.
block_resultsExecution results/events.
txTransaction lookup.
tx_searchIndexed transaction search.
unconfirmed_txsMempool contents.
num_unconfirmed_txsMempool count/bytes.
abci_infoApplication info.
abci_queryApplication query transport.
genesisGenesis data.
broadcast_tx_syncFast CheckTx acknowledgement.
broadcast_tx_commitBroadcast and wait for commit.