| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| <meta charset="UTF-8"> |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
| <title>Configuration · NWO ASM</title> |
| <link rel="icon" type="image/png" href="phi.png"> |
| <link href="https://fonts.googleapis.com/css2?family=Orbitron:wght@400;500;600;700&family=IBM+Plex+Mono:wght@300;400;500;600&family=Chakra+Petch:wght@300;400;500&display=swap" rel="stylesheet"> |
| <style> |
| :root{ |
| --bg:#000;--bg2:#070707;--ink:#fff;--muted:#8c8c8c;--dim:#4a4a4a;--faint:#1c1c1c; |
| --line:rgba(255,255,255,.12);--line2:rgba(255,255,255,.26); |
| --panel:rgba(255,255,255,.022);--panel2:rgba(255,255,255,.045); |
| --disp:'Orbitron',sans-serif;--robo:'Chakra Petch',sans-serif;--mono:'IBM Plex Mono',monospace; |
| --sidebar:280px; |
| } |
| *{margin:0;padding:0;box-sizing:border-box} |
| html{scroll-behavior:smooth} |
| body{background:var(--bg);color:var(--ink);font-family:var(--robo);font-weight:300;line-height:1.6;-webkit-font-smoothing:antialiased;overflow-x:hidden} |
| a{color:inherit;text-decoration:none}::selection{background:#fff;color:#000} |
| .mono{font-family:var(--mono)} |
|
|
| /* ===== layout ===== */ |
| .shell{display:flex;min-height:100vh} |
| .sidebar{width:var(--sidebar);flex:0 0 var(--sidebar);border-right:1px solid var(--line);background:var(--bg2);position:fixed;top:0;left:0;height:100vh;overflow-y:auto;transition:transform .28s ease;z-index:60} |
| .sidebar.collapsed{transform:translateX(calc(-1 * var(--sidebar)))} |
| .main{flex:1;margin-left:var(--sidebar);transition:margin-left .28s ease;width:calc(100% - var(--sidebar))} |
| .main.full{margin-left:0;width:100%} |
| @media(max-width:900px){.sidebar{transform:translateX(calc(-1 * var(--sidebar)))}.sidebar.collapsed{transform:translateX(0)}.main{margin-left:0;width:100%}} |
|
|
| /* ===== sidebar content ===== */ |
| .sb-head{padding:22px 22px 16px;border-bottom:1px solid var(--line);display:flex;align-items:center;gap:13px} |
| .sb-head img{width:36px;height:36px;border:1px solid var(--line2);border-radius:8px} |
| .sb-head .t{font-family:var(--disp);font-weight:600;font-size:15px;letter-spacing:3px} |
| .sb-head .s{font-family:var(--mono);font-size:8.5px;letter-spacing:2px;color:var(--muted);text-transform:uppercase;margin-top:2px} |
| .sb-group{padding:16px 14px 4px} |
| .sb-group-t{font-family:var(--mono);font-size:9px;letter-spacing:2px;color:var(--dim);text-transform:uppercase;padding:6px 10px} |
| .sb-link{display:flex;align-items:center;gap:11px;padding:10px 12px;border-radius:8px;color:var(--muted);font-size:13.5px;letter-spacing:.4px;transition:all .18s;margin:1px 0} |
| .sb-link svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:1.4;flex:0 0 16px} |
| .sb-link:hover{background:var(--panel2);color:#fff} |
| .sb-link.active{background:rgba(255,255,255,.06);color:rgba(255,255,255,.78)} |
| .sb-foot{padding:18px 22px;border-top:1px solid var(--line);font-family:var(--mono);font-size:9px;color:var(--dim);line-height:1.8;letter-spacing:.5px} |
|
|
| /* ===== topbar ===== */ |
| .topbar{position:sticky;top:0;z-index:50;display:flex;align-items:center;justify-content:space-between;padding:13px 26px;border-bottom:1px solid var(--line);background:rgba(0,0,0,.78);backdrop-filter:blur(12px)} |
| .menu-btn{display:flex;align-items:center;gap:9px;background:transparent;border:1px solid var(--line2);border-radius:8px;color:#fff;font-family:var(--mono);font-size:10px;letter-spacing:1px;text-transform:uppercase;padding:9px 13px;cursor:pointer;transition:all .2s} |
| .menu-btn:hover{background:#fff;color:#000} |
| .menu-btn .bars{display:flex;flex-direction:column;gap:3px} |
| .menu-btn .bars span{width:14px;height:1.5px;background:currentColor;display:block} |
| .topbar .tb-right{display:flex;gap:9px;align-items:center} |
| .wallet-btn{background:transparent;color:#fff;border:1px solid var(--line2);border-radius:8px;font-family:var(--mono);font-size:10px;letter-spacing:1px;text-transform:uppercase;padding:9px 16px;cursor:pointer;transition:all .2s} |
| .wallet-btn:hover{background:#fff;color:#000} |
| .tb-pill{font-family:var(--mono);font-size:9px;letter-spacing:1px;color:var(--muted);border:1px solid var(--line);border-radius:20px;padding:6px 12px;text-transform:uppercase} |
|
|
| /* ===== hero video ===== */ |
| .hero{position:relative;width:100%;height:clamp(560px,88vh,920px);overflow:hidden;border-bottom:1px solid var(--line);background:#000} |
| .hero video{position:absolute;top:-8%;left:0;width:100%;height:116%;object-fit:cover;opacity:.5;will-change:transform} |
| .hero::after{content:"";position:absolute;inset:0;background:radial-gradient(ellipse at center,transparent 0%,rgba(0,0,0,.55) 100%),linear-gradient(180deg,rgba(0,0,0,.3) 0%,transparent 30%,transparent 60%,rgba(0,0,0,.9) 100%)} |
| .hero-inner{position:absolute;inset:0;z-index:2;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:0 24px} |
| .hero-phi{width:50px;height:50px;border:1px solid var(--line2);border-radius:12px;margin-bottom:22px;opacity:0;animation:rise .9s .1s forwards} |
| .hero-over{font-family:var(--disp);font-weight:400;font-size:clamp(20px,3.6vw,42px);letter-spacing:clamp(3px,1.2vw,14px);text-transform:uppercase;line-height:1.14;opacity:0;animation:rise .9s .25s forwards} |
| .hero-over b{font-weight:700} |
| .hero-sub{font-family:var(--mono);font-size:clamp(8px,1.1vw,10px);letter-spacing:3px;color:var(--muted);text-transform:uppercase;margin-top:15px;opacity:0;animation:rise .9s .45s forwards} |
| @keyframes rise{to{opacity:1;transform:translateY(0)}} |
| .hero-phi,.hero-over,.hero-sub{transform:translateY(16px)} |
|
|
| /* ===== code stream strip ===== */ |
| .codestream{border-bottom:1px solid var(--line);background:var(--bg2);padding:16px 26px;overflow:hidden;white-space:nowrap} |
| .codestream .cs-line{font-family:var(--mono);font-size:13px;letter-spacing:.5px;color:#fff;display:inline-block} |
| .codestream .cs-prompt{color:var(--muted)} |
| .codestream .cs-cur{display:inline-block;width:8px;height:15px;background:#fff;margin-left:2px;vertical-align:-2px;animation:blink 1s steps(1) infinite} |
| @keyframes blink{50%{opacity:0}} |
|
|
| /* ===== content ===== */ |
| .content{max-width:1280px;margin:0 auto;padding:56px 34px 100px} |
| .sec-tag{font-family:var(--mono);font-size:10px;letter-spacing:3px;color:var(--muted);text-transform:uppercase;margin-bottom:16px;display:flex;align-items:center;gap:12px} |
| .sec-tag::before{content:"";width:26px;height:1px;background:var(--line2)} |
| h2{font-family:var(--disp);font-weight:400;font-size:clamp(22px,3.4vw,34px);letter-spacing:1px;margin-bottom:12px} |
| h2 b{font-weight:700} |
| .intro{font-size:16px;color:#bcbcbc;max-width:780px;margin-bottom:14px} |
| .intro b{color:#fff;font-weight:500} |
|
|
| /* ===== feature nav boxes — gradient thin borders ===== */ |
| .feat-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-top:30px} |
| @media(max-width:1100px){.feat-grid{grid-template-columns:repeat(2,1fr)}} |
| @media(max-width:560px){.feat-grid{grid-template-columns:1fr}} |
| .feat{position:relative;border-radius:15px;padding:1px;background:linear-gradient(135deg,rgba(255,255,255,.45) 0%,rgba(255,255,255,.05) 45%,rgba(0,0,0,0) 100%);transition:transform .2s} |
| .feat:hover{transform:translateY(-3px)} |
| .feat:hover .feat-in{background:#0a0a0a} |
| .feat-in{background:#000;border-radius:14px;padding:24px 22px;height:100%;display:flex;flex-direction:column} |
| .feat-ic{width:42px;height:42px;border:1px solid var(--line2);border-radius:10px;display:grid;place-items:center;margin-bottom:16px} |
| .feat-ic svg{width:21px;height:21px;stroke:#fff;fill:none;stroke-width:1.2} |
| .feat h3{font-family:var(--disp);font-weight:500;font-size:15px;letter-spacing:1px;margin-bottom:8px} |
| .feat p{font-size:13px;color:var(--muted);line-height:1.6;flex:1} |
| .feat .st{margin-top:14px;font-family:var(--mono);font-size:8.5px;letter-spacing:1.5px;text-transform:uppercase;padding:4px 10px;border-radius:14px;align-self:flex-start} |
| .st.live{border:1px solid #fff;color:#fff} |
| .st.beta{border:1px solid var(--line2);color:var(--muted)} |
| .st.road{border:1px dashed var(--line2);color:var(--dim)} |
| .feat .go{margin-top:13px;font-family:var(--mono);font-size:9px;letter-spacing:1.5px;color:var(--dim);text-transform:uppercase;display:flex;align-items:center;gap:6px} |
| .feat:hover .go{color:#fff} |
|
|
| /* ===== strip ===== */ |
| .strip{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:var(--line);border:1px solid var(--line);border-radius:13px;overflow:hidden;margin:34px 0} |
| @media(max-width:760px){.strip{grid-template-columns:repeat(2,1fr)}} |
| .strip .c{background:#000;padding:22px 18px;text-align:center} |
| .strip .v{font-family:var(--disp);font-size:24px;font-weight:600} |
| .strip .l{font-family:var(--mono);font-size:8.5px;letter-spacing:1.5px;color:var(--muted);text-transform:uppercase;margin-top:6px} |
|
|
| .callout{border:1px solid var(--line);border-left:2px solid var(--line2);border-radius:11px;background:var(--panel);padding:18px 20px;margin:26px 0;font-family:var(--mono);font-size:11.5px;color:var(--muted);line-height:1.8} |
| .callout b{color:#fff} |
| /* ===== flow diagram ===== */ |
| .flowwrap{border:1px solid var(--line2);border-radius:16px;background:var(--panel);padding:26px;margin:26px 0;overflow-x:auto} |
| .flowwrap svg{width:100%;min-width:760px;height:auto;display:block} |
| /* ===== terminal ui ===== */ |
| .term{border:1px solid var(--line2);border-radius:13px;background:#040404;overflow:hidden;margin:24px 0;box-shadow:0 0 40px rgba(0,0,0,.6)} |
| .term-bar{display:flex;align-items:center;gap:8px;padding:11px 15px;border-bottom:1px solid var(--line);background:var(--bg2)} |
| .term-bar .dot{width:9px;height:9px;border-radius:50%;border:1px solid var(--line2)} |
| .term-bar .t{font-family:var(--mono);font-size:10px;letter-spacing:1.5px;color:var(--muted);text-transform:uppercase;margin-left:8px} |
| .term-body{padding:18px;font-family:var(--mono);font-size:12.5px;line-height:1.75;min-height:230px;max-height:340px;overflow-y:auto} |
| .term-body .ln{white-space:pre-wrap;word-break:break-word} |
| .term-body .pr{color:var(--muted)} |
| .term-body .ok{color:#fff} |
| .term-body .dim{color:var(--dim)} |
| .term-input{display:flex;align-items:center;gap:9px;border-top:1px solid var(--line);padding:12px 15px} |
| .term-input .ps{font-family:var(--mono);font-size:12.5px;color:var(--muted)} |
| .term-input input{flex:1;background:transparent;border:none;outline:none;color:#fff;font-family:var(--mono);font-size:12.5px} |
| .foot{margin-top:46px;padding-top:24px;border-top:1px solid var(--line);font-family:var(--mono);font-size:10px;color:var(--dim);line-height:1.9} |
|
|
| .page-title{display:flex;align-items:center;justify-content:space-between;gap:14px;margin-bottom:6px;flex-wrap:wrap} |
| .page-title h1{font-family:var(--disp);font-weight:500;font-size:clamp(22px,3vw,32px);letter-spacing:2px} |
| .page-title .badge{font-family:var(--mono);font-size:9px;letter-spacing:1.5px;padding:5px 10px;border-radius:14px;border:1px solid var(--line2);color:var(--muted);text-transform:uppercase} |
| .page-lead{font-size:14.5px;color:#bcbcbc;max-width:780px;margin-bottom:22px;line-height:1.65} |
| .page-lead b{color:#fff;font-weight:500} |
| .sec-tag{font-family:var(--mono);font-size:10px;letter-spacing:3px;color:var(--muted);text-transform:uppercase;margin:42px 0 12px;display:flex;align-items:center;gap:12px} |
| .sec-tag::before{content:"";width:24px;height:1px;background:var(--line2)} |
| h2.s{font-family:var(--disp);font-weight:400;font-size:clamp(20px,3vw,28px);letter-spacing:1px;margin-bottom:12px} |
| h2.s b{font-weight:700} |
| .p{font-size:14px;color:#c0c0c0;margin:8px 0 12px;line-height:1.66;max-width:820px} |
| .p b{color:#fff;font-weight:500} |
| .callout{border:1px solid var(--line);border-left:2px solid var(--line2);border-radius:11px;background:var(--panel);padding:16px 18px;margin:18px 0;font-family:var(--mono);font-size:11.5px;color:var(--muted);line-height:1.75} |
| .callout b{color:#fff} |
| .callout.strong{border-left-color:#fff;background:var(--panel2)} |
|
|
| /* gradient-bordered cards (line-only) */ |
| .gcards{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:14px;margin:14px 0 8px} |
| .gcards.cols3{grid-template-columns:repeat(3,1fr)} |
| .gcards.cols2{grid-template-columns:repeat(2,1fr)} |
| @media(max-width:980px){.gcards.cols3,.gcards.cols2{grid-template-columns:repeat(2,1fr)}} |
| @media(max-width:620px){.gcards.cols3,.gcards.cols2{grid-template-columns:1fr}} |
| .gcard{position:relative;padding:1px;border-radius:14px;background:linear-gradient(135deg,rgba(255,255,255,.45) 0%,rgba(255,255,255,.04) 50%,rgba(0,0,0,0) 100%);transition:transform .18s} |
| .gcard:hover{transform:translateY(-2px)} |
| .gcard-in{background:#000;border-radius:13px;padding:20px;height:100%;display:flex;flex-direction:column} |
| .gcard .ic{width:38px;height:38px;border:1px solid var(--line2);border-radius:10px;display:grid;place-items:center;margin-bottom:14px} |
| .gcard .ic svg{width:19px;height:19px;stroke:#fff;fill:none;stroke-width:1.2} |
| .gcard h3{font-family:var(--disp);font-weight:500;font-size:14px;letter-spacing:1px;margin-bottom:8px} |
| .gcard p{font-size:13px;color:var(--muted);line-height:1.6;flex:1} |
| .gcard .st{margin-top:14px;font-family:var(--mono);font-size:8.5px;letter-spacing:1.5px;text-transform:uppercase;padding:4px 10px;border-radius:14px;align-self:flex-start} |
| .st.live{border:1px solid #fff;color:#fff} |
| .st.beta{border:1px solid var(--line2);color:var(--muted)} |
| .st.road{border:1px dashed var(--line2);color:var(--dim)} |
|
|
| /* flow diagram wrapper */ |
| .flowwrap{border:1px solid var(--line2);border-radius:16px;background:var(--panel);padding:24px;margin:18px 0;overflow-x:auto} |
| .flowwrap svg{width:100%;height:auto;display:block} |
| .flowwrap svg.h{min-width:760px} |
| .flowwrap svg.v{min-width:420px;max-width:680px;margin:0 auto} |
|
|
| /* code block */ |
| .code{background:#040404;border:1px solid var(--line2);border-radius:11px;padding:18px 20px;font-family:var(--mono);font-size:12.5px;color:#e6e6e6;line-height:1.7;overflow-x:auto;margin:14px 0} |
| .code .c{color:var(--dim)} |
| .code .k{color:#fff} |
| .code .o{color:#9a9a9a} |
| .code .label{font-family:var(--mono);font-size:9px;letter-spacing:2px;color:var(--muted);text-transform:uppercase;margin-bottom:6px;display:block} |
|
|
| /* stats strip */ |
| .strip{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:var(--line);border:1px solid var(--line);border-radius:13px;overflow:hidden;margin:22px 0} |
| @media(max-width:760px){.strip{grid-template-columns:repeat(2,1fr)}} |
| .strip .c{background:#000;padding:18px 14px;text-align:center} |
| .strip .v{font-family:var(--disp);font-size:22px;font-weight:600} |
| .strip .l{font-family:var(--mono);font-size:8.5px;letter-spacing:1.5px;color:var(--muted);text-transform:uppercase;margin-top:5px} |
|
|
| /* tech-stack table */ |
| table.tech{width:100%;border-collapse:collapse;margin:10px 0;font-size:13px} |
| table.tech th,table.tech td{text-align:left;padding:11px 14px;border-bottom:1px solid var(--line);vertical-align:top} |
| table.tech th{font-family:var(--mono);font-size:9px;letter-spacing:1.5px;text-transform:uppercase;color:var(--muted);font-weight:500} |
| table.tech td{color:#c4c4c4} |
| table.tech td b{color:#fff;font-weight:500} |
| table.tech td code{font-family:var(--mono);font-size:11.5px;color:#fff;background:rgba(255,255,255,.05);padding:1px 6px;border-radius:4px} |
|
|
| /* step list (vertical) */ |
| .steps{display:flex;flex-direction:column;gap:0;border:1px solid var(--line);border-radius:13px;overflow:hidden;background:var(--panel);margin:14px 0} |
| .step{display:flex;gap:18px;padding:18px 20px;border-bottom:1px solid var(--line)} |
| .step:last-child{border-bottom:none} |
| .step .n{font-family:var(--disp);font-size:18px;font-weight:600;color:#fff;flex:0 0 36px} |
| .step .b h4{font-family:var(--disp);font-weight:500;font-size:13.5px;letter-spacing:.8px;margin-bottom:5px} |
| .step .b p{font-size:13px;color:var(--muted);line-height:1.6;margin:0} |
| .step .b .code{margin-top:10px} |
|
|
| /* shared script chrome */ |
| </style> |
| </head> |
| <body> |
| <div class="shell"> |
| <aside class="sidebar" id="sidebar"> |
| <div class="sb-head"> |
| <img src="phi.png" alt="phi"> |
| <div><div class="t">NWO ASM</div><div class="s">Neural Wave Operator</div></div> |
| </div> |
|
|
| <div class="sb-group"> |
| <div class="sb-group-t">Overview</div> |
| <a class="sb-link" href="index.html"><svg viewBox="0 0 24 24"><path d="M3 12l9-9 9 9M5 10v10h14V10"/></svg>Home</a> |
| <a class="sb-link" href="architecture.html"><svg viewBox="0 0 24 24"><rect x="3" y="3" width="7" height="7"/><rect x="14" y="3" width="7" height="7"/><rect x="3" y="14" width="7" height="7"/><rect x="14" y="14" width="7" height="7"/></svg>Architecture</a> |
| <a class="sb-link" href="how-to.html"><svg viewBox="0 0 24 24"><path d="M12 2L2 7l10 5 10-5-10-5zM2 17l10 5 10-5M2 12l10 5 10-5"/></svg>How-To & Examples</a> |
| <a class="sb-link active" href="configuration.html"><svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="3"/><path d="M19 12a7 7 0 0 0-.1-1l2-1.6-2-3.4-2.4 1a7 7 0 0 0-1.7-1L16 2H8l-.8 2.9a7 7 0 0 0-1.7 1l-2.4-1-2 3.4 2 1.6a7 7 0 0 0 0 2l-2 1.6 2 3.4 2.4-1a7 7 0 0 0 1.7 1L8 22h8l.8-2.9a7 7 0 0 0 1.7-1l2.4 1 2-3.4-2-1.6a7 7 0 0 0 .1-1z"/></svg>Configuration</a> |
| </div> |
|
|
| <div class="sb-group"> |
| <div class="sb-group-t">Build</div> |
| <a class="sb-link" href="compiler.html"><svg viewBox="0 0 24 24"><path d="M16 18l6-6-6-6M8 6l-6 6 6 6"/></svg>Compiler & ISA</a> |
| <a class="sb-link" href="portals.html"><svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="9"/><ellipse cx="12" cy="12" rx="4" ry="9"/><path d="M3 12h18"/></svg>Portals</a> |
| <a class="sb-link" href="terminal.html"><svg viewBox="0 0 24 24"><rect x="2" y="4" width="20" height="16" rx="2"/><path d="M6 9l3 3-3 3M13 15h5"/></svg>Terminal</a> |
| </div> |
|
|
| <div class="sb-group"> |
| <div class="sb-group-t">Network</div> |
| <a class="sb-link" href="metastate.html"><svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="3"/><circle cx="12" cy="12" r="9"/><path d="M12 3v3m0 12v3M3 12h3m12 0h3"/></svg>MetaState Link</a> |
| <a class="sb-link" href="affiliate.html"><svg viewBox="0 0 24 24"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M23 21v-2a4 4 0 0 0-3-3.87"/></svg>Affiliate & Earn</a> |
| <a class="sb-link" href="agent.md"><svg viewBox="0 0 24 24"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><path d="M14 2v6h6"/></svg>agent.md</a> |
| </div> |
|
|
| <div class="sb-foot"> |
| v4.0 · static substrate<br> |
| MIT — free to build on<br> |
| USDC settlement on Base |
| </div> |
| </aside> |
| <div class="main" id="main"> |
| <div class="topbar"> |
| <button class="menu-btn" id="menuBtn"><span class="bars"><span></span><span></span><span></span></span> Menu</button> |
| <div class="tb-right"> |
| <span class="tb-pill" id="netPill">Base · 8453</span> |
| <button class="wallet-btn" id="walletBtn">Connect Wallet</button> |
| </div> |
| </div> |
| |
| <div class="content"> |
| <div class="page-title"> |
| <h1>Configuration</h1> |
| <span class="badge">setup · keys · networks</span> |
| </div> |
| <p class="page-lead">Everything you need to wire NWO-ASM into your environment — install, configure substrates, connect a wallet for USDC settlement, and verify the install. Defaults are <b>safe and offline</b>: the language compiles and runs on CPU/GPU with zero credentials. Live substrates and on-chain settlement are opt-in.</p> |
|
|
| <div class="callout strong"> |
| <b>SAFE BY DEFAULT</b> · No credentials are required to write, compile, or simulate NWO-ASM code. Keys and wallet only enter the picture when you choose to dispatch to a live external backend or settle on-chain. |
| </div> |
|
|
| |
| <div class="sec-tag">Setup flow</div> |
| <h2 class="s">From install to <b>first dispatch</b></h2> |
| <p class="p">A five-step setup path. Stop at any step — you can compile and simulate locally without ever connecting external backends or a wallet.</p> |
| <div class="flowwrap"> |
| <svg class="h" viewBox="0 0 980 230" xmlns="http://www.w3.org/2000/svg" font-family="IBM Plex Mono, monospace"> |
| <defs><marker id="cfa" markerWidth="9" markerHeight="9" refX="7" refY="3" orient="auto" markerUnits="strokeWidth"><path d="M0,0 L7,3 L0,6 Z" fill="#fff"/></marker></defs> |
|
|
| <rect x="14" y="78" width="168" height="74" rx="11" fill="#000" stroke="rgba(255,255,255,.35)" stroke-width="1"/> |
| <text x="30" y="100" fill="#4a4a4a" font-size="8" letter-spacing="1.4">01 · INSTALL</text> |
| <text x="30" y="122" fill="#fff" font-size="12.5">toolchain</text> |
| <text x="30" y="138" fill="#9a9a9a" font-size="10">~30s · no credentials</text> |
|
|
| <path d="M182,115 L214,115" stroke="#fff" stroke-width="1.2" fill="none" marker-end="url(#cfa)"/> |
|
|
| <rect x="216" y="78" width="168" height="74" rx="11" fill="#000" stroke="rgba(255,255,255,.35)" stroke-width="1"/> |
| <text x="232" y="100" fill="#4a4a4a" font-size="8" letter-spacing="1.4">02 · INIT</text> |
| <text x="232" y="122" fill="#fff" font-size="12.5">nwo-asm init</text> |
| <text x="232" y="138" fill="#9a9a9a" font-size="10">scaffold + config</text> |
|
|
| <path d="M384,115 L416,115" stroke="#fff" stroke-width="1.2" fill="none" marker-end="url(#cfa)"/> |
|
|
| <rect x="418" y="78" width="168" height="74" rx="11" fill="#000" stroke="rgba(255,255,255,.35)" stroke-width="1"/> |
| <text x="434" y="100" fill="#4a4a4a" font-size="8" letter-spacing="1.4">03 · BACKENDS</text> |
| <text x="434" y="122" fill="#fff" font-size="12.5">pick targets</text> |
| <text x="434" y="138" fill="#9a9a9a" font-size="10">CPU/GPU/QPU/…</text> |
|
|
| <path d="M586,115 L618,115" stroke="#fff" stroke-width="1.2" fill="none" marker-end="url(#cfa)"/> |
|
|
| <rect x="620" y="78" width="168" height="74" rx="11" fill="#000" stroke="rgba(255,255,255,.35)" stroke-width="1"/> |
| <text x="636" y="100" fill="#4a4a4a" font-size="8" letter-spacing="1.4">04 · WALLET</text> |
| <text x="636" y="122" fill="#fff" font-size="12.5">connect Base</text> |
| <text x="636" y="138" fill="#9a9a9a" font-size="10">optional · for live</text> |
|
|
| <path d="M788,115 L820,115" stroke="#fff" stroke-width="1.2" fill="none" marker-end="url(#cfa)"/> |
|
|
| <rect x="822" y="78" width="146" height="74" rx="11" fill="#000" stroke="rgba(255,255,255,.35)" stroke-width="1"/> |
| <text x="838" y="100" fill="#4a4a4a" font-size="8" letter-spacing="1.4">05 · VERIFY</text> |
| <text x="838" y="122" fill="#fff" font-size="12.5">nwo-asm doctor</text> |
| <text x="838" y="138" fill="#9a9a9a" font-size="10">health check</text> |
|
|
| <text x="14" y="200" fill="#4a4a4a" font-size="8" letter-spacing="1.4">STOP AT 01-03 FOR LOCAL DEV · COMPLETE 04-05 ONLY IF YOU INTEND TO DISPATCH TO LIVE BACKENDS</text> |
| </svg> |
| </div> |
|
|
| |
| <div class="sec-tag">Install</div> |
| <h2 class="s">Get the <b>toolchain</b></h2> |
| <p class="p">A single binary plus a Rust crate for embedding. macOS, Linux, and Windows on x86_64 and ARM64. No network calls during install or build — the binary is self-contained.</p> |
|
|
| <span class="label">macos / linux · one-liner</span> |
| <pre class="code"><span class="c"># installs to ~/.nwo-asm/bin; adds to PATH</span> |
| curl -fsSL <span class="o">https://nwo-asm.dev/install</span> | bash |
|
|
| <span class="c"># verify</span> |
| nwo-asm --version |
| <span class="c">→ nwo-asm 4.0.0 (rust 1.84.0)</span></pre> |
|
|
| <span class="label">cargo · embed in your project</span> |
| <pre class="code"><span class="k">[dependencies]</span> |
| nwo-asm = <span class="o">"4.0"</span> |
| metastate-client = { version = <span class="o">"0.6"</span>, features = [<span class="o">"base"</span>, <span class="o">"poi"</span>] }</pre> |
|
|
| |
| <div class="sec-tag">Config file</div> |
| <h2 class="s"><b>nwo-asm.toml</b></h2> |
| <p class="p">A single TOML file at the project root. Everything below has a sane default — values shown are illustrative, not required.</p> |
|
|
| <span class="label">nwo-asm.toml · annotated</span> |
| <pre class="code"><span class="k">[project]</span> |
| name = <span class="o">"my-asm-program"</span> |
| version = <span class="o">"0.1.0"</span> |
| license = <span class="o">"MIT"</span> <span class="c"># language is MIT; your code can be anything</span> |
|
|
| <span class="k">[targets]</span> |
| default = <span class="o">"cpu"</span> <span class="c"># cpu | gpu | qpu | ecg_hive</span> |
| allow = [<span class="o">"cpu"</span>, <span class="o">"gpu"</span>, <span class="o">"qpu"</span>] |
| deny = [<span class="o">"photonic"</span>, <span class="o">"dna"</span>] <span class="c"># roadmap; refuse routing here</span> |
|
|
| <span class="k">[optimizer]</span> |
| mode = <span class="o">"free-energy"</span> <span class="c"># or "manual"</span> |
| budget_ms = 800 <span class="c"># max time to spend on placement</span> |
|
|
| <span class="k">[metastate]</span> |
| endpoint = <span class="o">"https://cpater-metastate.hf.space"</span> |
| beacon = <span class="o">"https://nwo-agent-runner.ciprianpater.workers.dev"</span> |
| poi = <span class="k">true</span> <span class="c"># require Proof of Inference</span> |
| zk = <span class="k">false</span> <span class="c"># enable zk variant if needed</span> |
|
|
| <span class="k">[settlement]</span> |
| chain = <span class="o">"base"</span> <span class="c"># 8453</span> |
| asset = <span class="o">"usdc"</span> |
| splitter = <span class="o">"0x93a7962f75475b7e3Fbb62d3A23194f8833b1BE4"</span> |
| affiliate = <span class="o">""</span> <span class="c"># 0x… address to receive 15% — optional</span> |
|
|
| <span class="k">[signing]</span> |
| algo = <span class="o">"dilithium3"</span> <span class="c"># PQC; key at ~/.nwo-asm/keys/</span> |
| auto = <span class="k">true</span></pre> |
|
|
| |
| <div class="sec-tag">Backends</div> |
| <h2 class="s">Per-substrate <b>configuration</b></h2> |
| <p class="p">Each substrate has its own minimal block in <code style="font-family:var(--mono);font-size:11.5px;color:#fff;background:rgba(255,255,255,.05);padding:1px 6px;border-radius:4px">nwo-asm.toml</code>. Anything not listed below uses safe defaults.</p> |
| <table class="tech"> |
| <tr><th>Backend</th><th>Required</th><th>Optional</th><th>Status</th></tr> |
| <tr><td><b>CPU</b></td><td>none</td><td><code>threads</code>, <code>simd</code></td><td>Live</td></tr> |
| <tr><td><b>GPU</b></td><td>driver present (CUDA/ROCm/Metal)</td><td><code>devices</code>, <code>memory_gb</code></td><td>Live</td></tr> |
| <tr><td><b>GPU mesh (nwo-agi)</b></td><td>none</td><td><code>endpoint</code>, <code>max_cost_usdc</code></td><td>Live</td></tr> |
| <tr><td><b>QPU (IBM)</b></td><td><code>IBM_QUANTUM_TOKEN</code></td><td><code>instance</code>, <code>backend</code></td><td>Live</td></tr> |
| <tr><td><b>QPU (Origin Wukong)</b></td><td><code>ORIGIN_API_KEY</code></td><td><code>backend</code></td><td>Live</td></tr> |
| <tr><td><b>ECG hive · BCI</b></td><td>device URI or serial</td><td><code>channels</code>, <code>sample_rate</code></td><td>Beta</td></tr> |
| <tr><td><b>Photonic · Neuro · DNA · Crystalline</b></td><td>—</td><td>—</td><td>Roadmap</td></tr> |
| </table> |
|
|
| |
| <div class="sec-tag">Environment</div> |
| <h2 class="s">Credentials & <b>environment</b></h2> |
| <p class="p">Read from <code style="font-family:var(--mono);font-size:11.5px;color:#fff;background:rgba(255,255,255,.05);padding:1px 6px;border-radius:4px">.env</code> at the project root or the system environment. None are required for local CPU/GPU work.</p> |
| <span class="label">.env · only fill what you need</span> |
| <pre class="code"><span class="c"># quantum backends (only if you want live QPU)</span> |
| IBM_QUANTUM_TOKEN = <span class="o">""</span> |
| ORIGIN_API_KEY = <span class="o">""</span> |
|
|
| <span class="c"># wallet & settlement (only for on-chain dispatch)</span> |
| BASE_RPC_URL = <span class="o">"https://mainnet.base.org"</span> |
| WALLET_PRIVATE_KEY = <span class="o">""</span> <span class="c"># or use a hardware wallet via WalletConnect</span> |
|
|
| <span class="c"># optional</span> |
| METASTATE_URL = <span class="o">"https://cpater-metastate.hf.space"</span> |
| HF_TOKEN = <span class="o">""</span> <span class="c"># for private HF Spaces or models</span></pre> |
| <div class="callout"><b>Never commit secrets.</b> Add <code>.env</code> to your <code>.gitignore</code>. The toolchain does not transmit secrets except to the configured endpoints you choose.</div> |
|
|
| |
| <div class="sec-tag">Verify</div> |
| <h2 class="s"><b>nwo-asm doctor</b></h2> |
| <p class="p">Walks the entire config and reports what's wired and what's not — clearly. Doctor is read-only; it makes no live calls without your confirmation.</p> |
| <pre class="code">nwo-asm doctor |
|
|
| <span class="c">==> toolchain</span> |
| [✓] nwo-asm 4.0.0 |
| [✓] compiler artifacts cache: ~/.nwo-asm/cache (12 MB) |
|
|
| <span class="c">==> targets</span> |
| [✓] cpu · 16 threads · simd avx2 |
| [✓] gpu · 1 device · NVIDIA RTX 4090 · 24 GB |
| [✓] gpu mesh · nwo-agi reachable |
| [ ] qpu ibm · IBM_QUANTUM_TOKEN missing |
| [ ] qpu origin · ORIGIN_API_KEY missing |
| [ ] ecg_hive · no device configured (skip if not using) |
|
|
| <span class="c">==> metastate</span> |
| [✓] endpoint reachable · v0.6 |
| [✓] agent-card.json reachable |
| [✓] PoI: enabled · zk: disabled |
|
|
| <span class="c">==> settlement</span> |
| [ ] wallet not connected · OK for local-only use |
| [i] connect a wallet to enable live dispatch |
|
|
| <span class="c">==> result</span> |
| local-only: <span class="k">READY</span> |
| live dispatch: <span class="k">PARTIAL</span> · supply IBM/Origin tokens and wallet for full live</pre> |
|
|
| |
| <div class="sec-tag">Tech stack</div> |
| <h2 class="s">What configuration <b>relies on</b></h2> |
| <table class="tech"> |
| <tr><th>Layer</th><th>Tech</th><th>Notes</th></tr> |
| <tr><td><b>Config format</b></td><td>TOML (parsed by toml crate)</td><td>Single file at project root.</td></tr> |
| <tr><td><b>Secrets</b></td><td>dotenv · OS keychain (optional)</td><td>Toolchain never logs secrets.</td></tr> |
| <tr><td><b>PQC keys</b></td><td>CRYSTALS-Dilithium · liboqs</td><td>Stored at <code>~/.nwo-asm/keys/</code>.</td></tr> |
| <tr><td><b>Wallet</b></td><td>EIP-1193 (MetaMask · WalletConnect)</td><td>Hardware wallets supported.</td></tr> |
| <tr><td><b>RPC</b></td><td>Base mainnet (chain 8453) via JSON-RPC</td><td>User-provided endpoint.</td></tr> |
| <tr><td><b>Telemetry</b></td><td>None by default</td><td>Doctor command is local-only.</td></tr> |
| </table> |
|
|
| <div style="display:flex;gap:10px;flex-wrap:wrap;margin-top:24px"> |
| <a href="how-to.html" style="font-family:var(--mono);font-size:11px;letter-spacing:1.5px;text-transform:uppercase;padding:13px 22px;border:1px solid var(--line2);border-radius:9px;background:#fff;color:#000">How-to & examples</a> |
| <a href="compiler.html" style="font-family:var(--mono);font-size:11px;letter-spacing:1.5px;text-transform:uppercase;padding:13px 22px;border:1px solid var(--line2);border-radius:9px;color:#fff">Compiler</a> |
| <a href="terminal.html" style="font-family:var(--mono);font-size:11px;letter-spacing:1.5px;text-transform:uppercase;padding:13px 22px;border:1px solid var(--line2);border-radius:9px;color:#fff">Terminal</a> |
| </div> |
| </div> |
|
|
| </div> |
| </div> |
|
|
| <script> |
| const sidebar=document.getElementById('sidebar'); |
| const main=document.getElementById('main'); |
| const menuBtn=document.getElementById('menuBtn'); |
| const wide=window.matchMedia('(min-width:901px)'); |
| menuBtn.addEventListener('click',()=>{ |
| if(wide.matches){ sidebar.classList.toggle('collapsed'); main.classList.toggle('full'); } |
| else { sidebar.classList.toggle('collapsed'); } |
| }); |
| const walletBtn=document.getElementById('walletBtn'); |
| function pickProvider(){const e=window.ethereum;if(!e)return null;if(Array.isArray(e.providers))return e.providers.find(p=>p.isMetaMask)||e.providers[0];return e;} |
| walletBtn.addEventListener('click',async()=>{ |
| const p=pickProvider(); |
| if(!p){ walletBtn.textContent='No wallet found'; return; } |
| try{ |
| const a=await p.request({method:'eth_requestAccounts'}); |
| walletBtn.textContent=a[0].slice(0,6)+'…'+a[0].slice(-4); |
| document.getElementById('netPill').textContent='Connected · Base'; |
| }catch(e){ walletBtn.textContent='Connection refused'; } |
| }); |
| </script> |
|
|
| </body> |
| </html> |