@oracle-agent/oracle 0.9.8 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -10
- package/bin/oracle-data-mcp.mjs +9 -0
- package/docs/architecture.md +3 -1
- package/docs/profiles.md +3 -6
- package/docs/public-surface.md +133 -0
- package/package.json +3 -2
- package/public/oracle-splash/assets/cli-chain-hyperliquid.jpg +0 -0
- package/public/oracle-splash/brand/aave.webp +0 -0
- package/public/oracle-splash/brand/aavev2.webp +0 -0
- package/public/oracle-splash/brand/aborean.webp +0 -0
- package/public/oracle-splash/brand/across.webp +0 -0
- package/public/oracle-splash/brand/aerodrome.webp +0 -0
- package/public/oracle-splash/brand/afi.webp +0 -0
- package/public/oracle-splash/brand/arcus.webp +0 -0
- package/public/oracle-splash/brand/aster.webp +0 -0
- package/public/oracle-splash/brand/avant.webp +0 -0
- package/public/oracle-splash/brand/balancer.webp +0 -0
- package/public/oracle-splash/brand/beefy.webp +0 -0
- package/public/oracle-splash/brand/benqi.webp +0 -0
- package/public/oracle-splash/brand/bestinslot.ico +0 -0
- package/public/oracle-splash/brand/bitfi.webp +0 -0
- package/public/oracle-splash/brand/bonkswap.webp +0 -0
- package/public/oracle-splash/brand/bouncebit.webp +0 -0
- package/public/oracle-splash/brand/camelot.webp +0 -0
- package/public/oracle-splash/brand/compound.webp +0 -0
- package/public/oracle-splash/brand/concrete.webp +0 -0
- package/public/oracle-splash/brand/cow.webp +0 -0
- package/public/oracle-splash/brand/curve.webp +0 -0
- package/public/oracle-splash/brand/derive.webp +0 -0
- package/public/oracle-splash/brand/dolomite.webp +0 -0
- package/public/oracle-splash/brand/eigenlayer.webp +0 -0
- package/public/oracle-splash/brand/ekubo.webp +0 -0
- package/public/oracle-splash/brand/ethena.webp +0 -0
- package/public/oracle-splash/brand/etherfi.webp +0 -0
- package/public/oracle-splash/brand/etherfiborrow.webp +0 -0
- package/public/oracle-splash/brand/felix.webp +0 -0
- package/public/oracle-splash/brand/fluid.webp +0 -0
- package/public/oracle-splash/brand/fluxbeam.webp +0 -0
- package/public/oracle-splash/brand/folks.webp +0 -0
- package/public/oracle-splash/brand/fortyacres.webp +0 -0
- package/public/oracle-splash/brand/gainsnetwork.webp +0 -0
- package/public/oracle-splash/brand/gassss.webp +0 -0
- package/public/oracle-splash/brand/gmx.webp +0 -0
- package/public/oracle-splash/brand/harmonix.webp +0 -0
- package/public/oracle-splash/brand/hlorderbook.webp +0 -0
- package/public/oracle-splash/brand/hlp.webp +0 -0
- package/public/oracle-splash/brand/hop.webp +0 -0
- package/public/oracle-splash/brand/hyperbeat.webp +0 -0
- package/public/oracle-splash/brand/hyperlend.webp +0 -0
- package/public/oracle-splash/brand/hyperliquid.webp +0 -0
- package/public/oracle-splash/brand/hyperliquidhpl.webp +0 -0
- package/public/oracle-splash/brand/hyperliquidspot.webp +0 -0
- package/public/oracle-splash/brand/hyperswap.webp +0 -0
- package/public/oracle-splash/brand/hypha.webp +0 -0
- package/public/oracle-splash/brand/joedex.webp +0 -0
- package/public/oracle-splash/brand/jupiter.webp +0 -0
- package/public/oracle-splash/brand/kelp.webp +0 -0
- package/public/oracle-splash/brand/kinetiq.webp +0 -0
- package/public/oracle-splash/brand/kmhype.webp +0 -0
- package/public/oracle-splash/brand/kona.webp +0 -0
- package/public/oracle-splash/brand/konalend.webp +0 -0
- package/public/oracle-splash/brand/lfj.webp +0 -0
- package/public/oracle-splash/brand/lido.webp +0 -0
- package/public/oracle-splash/brand/lifi.webp +0 -0
- package/public/oracle-splash/brand/lighter.webp +0 -0
- package/public/oracle-splash/brand/lista.webp +0 -0
- package/public/oracle-splash/brand/loopedhype.webp +0 -0
- package/public/oracle-splash/brand/lorenzo.webp +0 -0
- package/public/oracle-splash/brand/magic-eden.webp +0 -0
- package/public/oracle-splash/brand/magiceden.webp +0 -0
- package/public/oracle-splash/brand/mempool.png +0 -0
- package/public/oracle-splash/brand/meteora.webp +0 -0
- package/public/oracle-splash/brand/morpho.webp +0 -0
- package/public/oracle-splash/brand/myriad.webp +0 -0
- package/public/oracle-splash/brand/noxa.webp +0 -0
- package/public/oracle-splash/brand/odos.webp +0 -0
- package/public/oracle-splash/brand/oneinch.webp +0 -0
- package/public/oracle-splash/brand/openbook.webp +0 -0
- package/public/oracle-splash/brand/opensea.webp +0 -0
- package/public/oracle-splash/brand/orca.webp +0 -0
- package/public/oracle-splash/brand/ordinals.png +0 -0
- package/public/oracle-splash/brand/ostium.webp +0 -0
- package/public/oracle-splash/brand/pancakeswap.webp +0 -0
- package/public/oracle-splash/brand/pendle.webp +0 -0
- package/public/oracle-splash/brand/perena.webp +0 -0
- package/public/oracle-splash/brand/pharaoh.webp +0 -0
- package/public/oracle-splash/brand/phoenix.webp +0 -0
- package/public/oracle-splash/brand/polymarket.webp +0 -0
- package/public/oracle-splash/brand/polynomial.webp +0 -0
- package/public/oracle-splash/brand/projectx.webp +0 -0
- package/public/oracle-splash/brand/pumpfun.webp +0 -0
- package/public/oracle-splash/brand/quickswap.webp +0 -0
- package/public/oracle-splash/brand/rain.webp +0 -0
- package/public/oracle-splash/brand/raydium.webp +0 -0
- package/public/oracle-splash/brand/relay.webp +0 -0
- package/public/oracle-splash/brand/rocketpool.webp +0 -0
- package/public/oracle-splash/brand/saber.webp +0 -0
- package/public/oracle-splash/brand/sakuraswap.webp +0 -0
- package/public/oracle-splash/brand/sanctum.webp +0 -0
- package/public/oracle-splash/brand/satflow.png +0 -0
- package/public/oracle-splash/brand/sierra.webp +0 -0
- package/public/oracle-splash/brand/sky.webp +0 -0
- package/public/oracle-splash/brand/solv.webp +0 -0
- package/public/oracle-splash/brand/spark.webp +0 -0
- package/public/oracle-splash/brand/sparksavings.webp +0 -0
- package/public/oracle-splash/brand/sphere.webp +0 -0
- package/public/oracle-splash/brand/ssv.webp +0 -0
- package/public/oracle-splash/brand/stabble.webp +0 -0
- package/public/oracle-splash/brand/stableswap.webp +0 -0
- package/public/oracle-splash/brand/stakewise.webp +0 -0
- package/public/oracle-splash/brand/stargate.webp +0 -0
- package/public/oracle-splash/brand/sthype.webp +0 -0
- package/public/oracle-splash/brand/sushiswap.webp +0 -0
- package/public/oracle-splash/brand/unisat.png +0 -0
- package/public/oracle-splash/brand/uniswap.webp +0 -0
- package/public/oracle-splash/brand/uniswapv2.webp +0 -0
- package/public/oracle-splash/brand/uniswapv4.webp +0 -0
- package/public/oracle-splash/brand/unit.webp +0 -0
- package/public/oracle-splash/brand/velodrome.webp +0 -0
- package/public/oracle-splash/brand/velora.webp +0 -0
- package/public/oracle-splash/brand/venus.webp +0 -0
- package/public/oracle-splash/brand/wbeth.webp +0 -0
- package/public/oracle-splash/brand/xsy.webp +0 -0
- package/public/oracle-splash/brand/yieldyak.webp +0 -0
- package/public/oracle-splash/brand/zerobase.webp +0 -0
- package/public/oracle-splash/brand/zerox.webp +0 -0
- package/public/oracle-splash/index.html +337 -197
- package/scripts/check-doc-drift.mjs +11 -0
- package/scripts/e2e-solana-bitcoin.mjs +1 -1
- package/scripts/secret-scan.mjs +1 -1
- package/src/action-receipts.mjs +108 -11
- package/src/auth/oauth.mjs +672 -0
- package/src/cli/commands/auth.mjs +193 -0
- package/src/cli/commands/bootstrap.mjs +2 -2
- package/src/cli/commands/chat.mjs +97 -75
- package/src/cli/commands/data.mjs +3 -1
- package/src/cli/commands/doctor.mjs +11 -1
- package/src/cli/commands/model.mjs +79 -23
- package/src/cli/kernel.mjs +4 -3
- package/src/cli/model-config.mjs +70 -0
- package/src/data/catalog.mjs +38 -7
- package/src/data/desk-data.mjs +12 -0
- package/src/data/providers/evm-rpc.mjs +19 -16
- package/src/data/providers/jupiter-venues.mjs +119 -0
- package/src/data/providers/jupiter.mjs +132 -0
- package/src/data/providers/magiceden-sol.mjs +13 -0
- package/src/data/providers/morpho.mjs +6 -2
- package/src/data/providers/pendle.mjs +3 -2
- package/src/data/providers/satflow.mjs +4 -1
- package/src/data/providers/signed-material-guard.mjs +108 -0
- package/src/data/providers/uniswap-v3.mjs +34 -5
- package/src/data/providers/uniswap-v4.mjs +414 -0
- package/src/prepare-envelope.mjs +22 -4
- package/src/router/prepare-route.mjs +17 -0
- package/src/router/route-sources.mjs +35 -0
- package/src/tui/app.mjs +18 -7
- package/src/tui/backend.mjs +145 -0
- package/src/tui/standalone-client.mjs +666 -0
- package/src/cards.mjs +0 -369
- package/src/cli/__pycache__/oracle-harness.cpython-311.pyc +0 -0
|
@@ -143,7 +143,8 @@ main{position:relative;z-index:2;padding-top:84px}
|
|
|
143
143
|
background:linear-gradient(180deg, rgba(124,196,255,.65), transparent);
|
|
144
144
|
transform-origin:50% 0;animation:drop-line 2.8s var(--ease) infinite;
|
|
145
145
|
}
|
|
146
|
-
.home-inner{max-width:min(
|
|
146
|
+
.home-inner{max-width:min(920px,100%);width:100%;margin:0 auto;position:relative}
|
|
147
|
+
.hero-primary{min-width:0;display:flex;flex-direction:column;align-items:center}
|
|
147
148
|
.home-kicker{
|
|
148
149
|
font-family:var(--mono);font-size:10px;letter-spacing:.34em;text-transform:uppercase;color:var(--blue);
|
|
149
150
|
margin-bottom:6px;position:relative;z-index:3;
|
|
@@ -192,7 +193,7 @@ main{position:relative;z-index:2;padding-top:84px}
|
|
|
192
193
|
.hero-orb .orbit-dot{position:absolute;width:9px;height:9px;border-radius:50%;background:radial-gradient(circle at 38% 34%, #fff, var(--blue2) 55%, rgba(124,196,255,.5));box-shadow:0 0 22px rgba(167,216,255,.95), 0 0 44px rgba(124,196,255,.4);left:calc(50% - 4.5px);top:calc(50% - 4.5px);transform-style:preserve-3d;animation:orbit-travel 14s linear infinite}
|
|
193
194
|
.home-title{
|
|
194
195
|
position:relative;z-index:2;
|
|
195
|
-
font-family:var(--display);font-weight:300;font-size:clamp(
|
|
196
|
+
font-family:var(--display);font-weight:300;font-size:clamp(72px,10vw,150px);line-height:.9;letter-spacing:-.045em;
|
|
196
197
|
text-transform:uppercase;color:var(--ink);
|
|
197
198
|
text-shadow:0 2px 30px rgba(0,0,0,.6);
|
|
198
199
|
}
|
|
@@ -391,6 +392,41 @@ main{position:relative;z-index:2;padding-top:84px}
|
|
|
391
392
|
.moat-card h3{font-family:var(--display);font-weight:400;font-size:clamp(20px,2.2vw,26px)}
|
|
392
393
|
.moat-card p{color:#C9DAEC;font-size:15px;line-height:1.55;max-width:44ch}
|
|
393
394
|
@media (max-width:860px){.moat-grid{grid-template-columns:1fr}}
|
|
395
|
+
|
|
396
|
+
.strategy-surface{
|
|
397
|
+
margin-top:clamp(30px,5vw,52px);border:1px solid var(--line);border-radius:20px;overflow:hidden;
|
|
398
|
+
background:linear-gradient(145deg,rgba(124,196,255,.07),rgba(17,25,37,.92) 40%,rgba(11,16,24,.98));
|
|
399
|
+
}
|
|
400
|
+
.strategy-head{display:flex;align-items:end;justify-content:space-between;gap:20px;padding:clamp(22px,3vw,34px);border-bottom:1px solid var(--line)}
|
|
401
|
+
.strategy-kicker{font-family:var(--mono);font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--blue)}
|
|
402
|
+
.strategy-head h3{font-family:var(--display);font-weight:400;font-size:clamp(28px,4vw,42px);line-height:1.05;margin-top:8px}
|
|
403
|
+
.strategy-head p{max-width:50ch;color:#C9DAEC;font-size:14px;line-height:1.6}
|
|
404
|
+
.strategy-grid{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:1px;background:var(--line)}
|
|
405
|
+
.strategy-card{min-height:205px;padding:clamp(20px,2.6vw,28px);background:rgba(11,16,24,.96);display:flex;flex-direction:column;gap:11px}
|
|
406
|
+
.strategy-card .mode{font-family:var(--mono);font-size:9px;letter-spacing:.16em;text-transform:uppercase;color:var(--blue2)}
|
|
407
|
+
.strategy-card h4{font-family:var(--display);font-weight:400;font-size:clamp(23px,2.5vw,30px)}
|
|
408
|
+
.strategy-card p{color:#C9DAEC;font-size:14px;line-height:1.6}
|
|
409
|
+
.strategy-posture{padding:14px clamp(20px,3vw,34px);border-top:1px solid var(--line);font-family:var(--mono);font-size:9px;line-height:1.6;letter-spacing:.11em;text-transform:uppercase;color:var(--mute)}
|
|
410
|
+
.strategy-posture b{color:var(--blue2);font-weight:500}
|
|
411
|
+
@media (max-width:1180px){.strategy-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}
|
|
412
|
+
@media (max-width:980px){.strategy-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.strategy-head{align-items:start;flex-direction:column}}
|
|
413
|
+
@media (max-width:620px){.strategy-grid{grid-template-columns:1fr}.strategy-card{min-height:0}}
|
|
414
|
+
|
|
415
|
+
/* actual Oracle CLI */
|
|
416
|
+
.convert-grid{display:grid;grid-template-columns:1fr;gap:clamp(18px,3vw,28px);align-items:stretch;margin-top:8px}
|
|
417
|
+
.convert-copy{display:flex;flex-direction:column;gap:14px;text-align:left;max-width:780px}
|
|
418
|
+
.convert-copy h3{font-family:var(--display);font-weight:400;font-size:clamp(26px,3vw,34px);line-height:1.1}
|
|
419
|
+
.convert-copy p{color:#C9DAEC;font-size:15px;line-height:1.65;max-width:54ch}
|
|
420
|
+
.convert-pills{display:flex;flex-wrap:wrap;gap:8px;margin-top:4px}
|
|
421
|
+
.convert-pills span{font-family:var(--mono);font-size:10px;letter-spacing:.14em;text-transform:uppercase;border:1px solid rgba(124,196,255,.28);border-radius:999px;padding:8px 12px;color:var(--blue2)}
|
|
422
|
+
.platform-beta{display:inline-flex;align-items:center;gap:10px;width:max-content;max-width:100%;font-family:var(--mono);font-size:11px;letter-spacing:.08em;color:var(--cool)}
|
|
423
|
+
.platform-beta b{font-size:9px;letter-spacing:.16em;text-transform:uppercase;color:#071018;background:var(--blue2);border-radius:999px;padding:5px 8px}
|
|
424
|
+
.cli-frame{border:1px solid var(--line);border-radius:16px;overflow:hidden;background:#0d1420;box-shadow:0 24px 60px rgba(0,0,0,.35)}
|
|
425
|
+
.cli-frame img{display:block;width:100%;height:auto}
|
|
426
|
+
.cli-cap{font-family:var(--mono);font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:var(--mute);margin-top:10px;text-align:left}
|
|
427
|
+
.cli-code{margin-top:14px;padding:14px 16px;border-radius:12px;border:1px solid var(--line);background:rgba(17,25,37,.9);font-family:var(--mono);font-size:12px;line-height:1.55;color:var(--cool);overflow-x:auto;text-align:left}
|
|
428
|
+
.cli-code b{color:var(--blue2);font-weight:500}
|
|
429
|
+
|
|
394
430
|
.evolve-rail{
|
|
395
431
|
display:flex;flex-wrap:wrap;gap:8px;justify-content:center;
|
|
396
432
|
padding:14px 16px 4px;
|
|
@@ -401,18 +437,6 @@ main{position:relative;z-index:2;padding-top:84px}
|
|
|
401
437
|
}
|
|
402
438
|
.evolve-pill.on{border-color:rgba(124,196,255,.35);color:var(--blue2)}
|
|
403
439
|
|
|
404
|
-
.venue-rail-head{
|
|
405
|
-
font-family:var(--mono);font-size:10px;letter-spacing:.14em;text-transform:uppercase;
|
|
406
|
-
color:var(--cool);text-align:center;padding:14px 16px 0;opacity:.75;
|
|
407
|
-
}
|
|
408
|
-
.venue-rail-head b{color:var(--blue2);font-weight:600}
|
|
409
|
-
.venue-rail{padding:10px 16px 4px;max-height:96px;overflow:hidden;position:relative}
|
|
410
|
-
.venue-rail .evolve-pill{font-size:9px;padding:6px 10px;opacity:.9}
|
|
411
|
-
.venue-rail::after{
|
|
412
|
-
content:"";position:absolute;left:0;right:0;bottom:0;height:34px;pointer-events:none;
|
|
413
|
-
background:linear-gradient(to bottom,transparent,var(--bg));
|
|
414
|
-
}
|
|
415
|
-
|
|
416
440
|
.wires{height:40px;position:relative}
|
|
417
441
|
.wires svg{width:100%;height:100%;display:block;overflow:visible}
|
|
418
442
|
.wires path{
|
|
@@ -510,8 +534,8 @@ main{position:relative;z-index:2;padding-top:84px}
|
|
|
510
534
|
.marquee{overflow:hidden;white-space:nowrap;mask-image:linear-gradient(90deg,transparent,#000 6%,#000 94%,transparent);-webkit-mask-image:linear-gradient(90deg,transparent,#000 6%,#000 94%,transparent)}
|
|
511
535
|
.marquee:hover .track{animation-play-state:paused}
|
|
512
536
|
.marquee + .marquee{border-top:1px solid rgba(124,196,255,.08)}
|
|
513
|
-
.track{display:inline-flex;gap:26px;padding:12px 0;animation:scroll
|
|
514
|
-
.marquee.rev .track{animation-direction:reverse
|
|
537
|
+
.track{display:inline-flex;gap:26px;padding:12px 0;animation:scroll var(--marquee-duration,240s) linear infinite;will-change:transform;transform:translate3d(0,0,0);backface-visibility:hidden;perspective:1000px}
|
|
538
|
+
.marquee.rev .track{animation-direction:reverse}
|
|
515
539
|
a.chip{text-decoration:none;color:inherit}
|
|
516
540
|
.chip{
|
|
517
541
|
display:inline-flex;align-items:center;gap:10px;
|
|
@@ -581,6 +605,7 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
|
|
|
581
605
|
.js .rv.done{transform:none;will-change:auto}
|
|
582
606
|
|
|
583
607
|
@media (max-width:960px){
|
|
608
|
+
.home-inner{max-width:760px}
|
|
584
609
|
.hero-stage{min-height:clamp(300px,44vh,460px)}.home-title{font-size:clamp(80px,20vw,150px)}
|
|
585
610
|
.nav-chip{display:none}
|
|
586
611
|
.nav-links .hide-sm{display:none}
|
|
@@ -692,7 +717,9 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
|
|
|
692
717
|
</span>
|
|
693
718
|
oracle</a>
|
|
694
719
|
<nav class="nav-links" aria-label="Primary">
|
|
695
|
-
<a class="hide-sm" href="#
|
|
720
|
+
<a class="hide-sm" href="#cli">CLI</a>
|
|
721
|
+
<a class="hide-sm" href="#orchestration">Profiles</a>
|
|
722
|
+
<a class="hide-sm" href="#strategies">Strategies</a>
|
|
696
723
|
<a class="hide-sm" href="#chains">Chains</a>
|
|
697
724
|
</nav>
|
|
698
725
|
</header>
|
|
@@ -703,38 +730,69 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
|
|
|
703
730
|
|
|
704
731
|
<section class="home" id="home">
|
|
705
732
|
<div class="home-inner">
|
|
706
|
-
<div class="hero-
|
|
707
|
-
<div class="hero-
|
|
708
|
-
<
|
|
709
|
-
<
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
<
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
733
|
+
<div class="hero-primary">
|
|
734
|
+
<div class="hero-stage">
|
|
735
|
+
<div class="hero-art" aria-hidden="true">
|
|
736
|
+
<video id="orb-vid" muted loop playsinline preload="none" hidden>
|
|
737
|
+
<source src="assets/hero/orb.webm" type="video/webm">
|
|
738
|
+
</video>
|
|
739
|
+
<div class="hero-orb" id="hero-orb">
|
|
740
|
+
<span class="lat l1"></span><span class="lat l2"></span><span class="lat l3"></span><span class="lat l4"></span>
|
|
741
|
+
<span class="par p1"></span><span class="par p2"></span><span class="par p3"></span>
|
|
742
|
+
<span class="eq"></span>
|
|
743
|
+
<span class="core-glow"></span>
|
|
744
|
+
<span class="orbit-dot"></span>
|
|
745
|
+
</div>
|
|
746
|
+
</div>
|
|
747
|
+
<div class="hero-lockup" id="hero-title">
|
|
748
|
+
<h1 class="home-title">OR<em>ACLE</em></h1>
|
|
717
749
|
</div>
|
|
718
750
|
</div>
|
|
719
|
-
<div class="
|
|
720
|
-
<
|
|
721
|
-
<
|
|
751
|
+
<div class="home-copy">
|
|
752
|
+
<p class="home-kicker">self-custody agent control</p>
|
|
753
|
+
<p>One control plane for Hyperliquid, Polymarket, EVM, Bitcoin, Solana, Stable, Robinhood Chain, and new protocol builds. Cross-chain research, trade, protocol interactions, NFT listing and buying. The all-in-one crypto agent. The future is agentic.</p>
|
|
754
|
+
<div class="home-actions">
|
|
755
|
+
<a class="enter-cta" href="#cli">See the CLI</a>
|
|
756
|
+
<a class="enter-cta" href="#orchestration" style="margin-left:10px;opacity:.85">See profiles</a>
|
|
757
|
+
</div>
|
|
722
758
|
</div>
|
|
723
759
|
</div>
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
760
|
+
</div>
|
|
761
|
+
</section>
|
|
762
|
+
|
|
763
|
+
<section class="section cli-section" id="cli">
|
|
764
|
+
<p class="section-label rv">Oracle CLI</p>
|
|
765
|
+
<h2 class="section-title rv">One surface. <em>Every chain.</em></h2>
|
|
766
|
+
<p class="section-lede rv">The real Oracle shell, isolated from desktop chrome. Pin the active surface with <code style="color:var(--blue2)">/chain hyperliquid</code>, switch models with <code style="color:var(--blue2)">/model</code>, then ask naturally.</p>
|
|
767
|
+
<div class="convert-grid rv">
|
|
768
|
+
<div>
|
|
769
|
+
<figure class="cli-frame">
|
|
770
|
+
<img src="assets/cli-chain-hyperliquid.jpg?v=cli-visible" alt="Oracle CLI selecting Hyperliquid with the /chain hyperliquid command" width="1600" height="900" loading="eager" fetchpriority="high" />
|
|
771
|
+
</figure>
|
|
772
|
+
<p class="cli-cap">actual oracle shell // /chain hyperliquid</p>
|
|
773
|
+
</div>
|
|
774
|
+
<div class="convert-copy">
|
|
775
|
+
<h3>The actual Oracle CLI</h3>
|
|
776
|
+
<p>The active chain follows each read, quote, prepare, and bounded execution path.</p>
|
|
777
|
+
<div class="convert-pills">
|
|
778
|
+
<span>HyperCore + HyperEVM</span>
|
|
779
|
+
<span>multichain routing</span>
|
|
780
|
+
<span>self-custody</span>
|
|
781
|
+
</div>
|
|
782
|
+
<p class="platform-beta"><b>Beta</b> Linux, Windows, and macOS apps are in beta.</p>
|
|
783
|
+
<div class="cli-code">
|
|
784
|
+
<div><b>oracle ›</b> /chain hyperliquid</div>
|
|
785
|
+
<div><b>oracle ›</b> /chain show</div>
|
|
786
|
+
<div><b>oracle ›</b> what can you do on hyperliquid?</div>
|
|
729
787
|
</div>
|
|
730
788
|
</div>
|
|
731
789
|
</div>
|
|
732
790
|
</section>
|
|
733
791
|
|
|
734
792
|
<section class="section" id="orchestration">
|
|
735
|
-
<p class="section-label rv">
|
|
793
|
+
<p class="section-label rv">Profiles</p>
|
|
736
794
|
<h2 class="section-title rv">Multi-profile. <em>Customizable.</em></h2>
|
|
737
|
-
<p class="section-lede rv">
|
|
795
|
+
<p class="section-lede rv">Input / Command hits the Oracle control plane, then routes across venue profiles, multi-chain EVM, Bitcoin, Solana, and the protocol builder. Any MCP harness can drive a single agent.</p>
|
|
738
796
|
|
|
739
797
|
<div class="graph-shell rv">
|
|
740
798
|
<div class="graph-top">
|
|
@@ -747,98 +805,6 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
|
|
|
747
805
|
<span class="evolve-pill on">more chains</span>
|
|
748
806
|
</div>
|
|
749
807
|
|
|
750
|
-
<div class="venue-rail-head">solana venues routed · <b id="sol-count">101</b> programs verified on-chain · 88 venues</div>
|
|
751
|
-
<div class="evolve-rail venue-rail" id="sol-venue-rail">
|
|
752
|
-
<span class="evolve-pill on">1DEX</span>
|
|
753
|
-
<span class="evolve-pill on">Aldrin</span>
|
|
754
|
-
<span class="evolve-pill on">AlphaQ</span>
|
|
755
|
-
<span class="evolve-pill on">Aquifer</span>
|
|
756
|
-
<span class="evolve-pill on">BinaryFi</span>
|
|
757
|
-
<span class="evolve-pill on">BisonFi</span>
|
|
758
|
-
<span class="evolve-pill on">Bonkswap</span>
|
|
759
|
-
<span class="evolve-pill on">Boop.fun</span>
|
|
760
|
-
<span class="evolve-pill on">Byreal</span>
|
|
761
|
-
<span class="evolve-pill on">Carrot</span>
|
|
762
|
-
<span class="evolve-pill on">Crema</span>
|
|
763
|
-
<span class="evolve-pill on">Cropper</span>
|
|
764
|
-
<span class="evolve-pill on">DefiTuna</span>
|
|
765
|
-
<span class="evolve-pill on">Denali</span>
|
|
766
|
-
<span class="evolve-pill on">Deriverse</span>
|
|
767
|
-
<span class="evolve-pill on">DexLab</span>
|
|
768
|
-
<span class="evolve-pill on">Dynamic Bonding Curve</span>
|
|
769
|
-
<span class="evolve-pill on">Flint</span>
|
|
770
|
-
<span class="evolve-pill on">Flux</span>
|
|
771
|
-
<span class="evolve-pill on">FluxBeam</span>
|
|
772
|
-
<span class="evolve-pill on">GatorSwap</span>
|
|
773
|
-
<span class="evolve-pill on">Gavel</span>
|
|
774
|
-
<span class="evolve-pill on">GoonFi</span>
|
|
775
|
-
<span class="evolve-pill on">GooseFX GAMMA</span>
|
|
776
|
-
<span class="evolve-pill on">Guacswap</span>
|
|
777
|
-
<span class="evolve-pill on">Hadron</span>
|
|
778
|
-
<span class="evolve-pill on">Heaven</span>
|
|
779
|
-
<span class="evolve-pill on">Helium Network</span>
|
|
780
|
-
<span class="evolve-pill on">Huma</span>
|
|
781
|
-
<span class="evolve-pill on">HumidiFi</span>
|
|
782
|
-
<span class="evolve-pill on">Hylo Exchange</span>
|
|
783
|
-
<span class="evolve-pill on">Hylo Stability</span>
|
|
784
|
-
<span class="evolve-pill on">Invariant</span>
|
|
785
|
-
<span class="evolve-pill on">Jupiter Lend</span>
|
|
786
|
-
<span class="evolve-pill on">JupiterRfqV2</span>
|
|
787
|
-
<span class="evolve-pill on">JupLend</span>
|
|
788
|
-
<span class="evolve-pill on">Kipseli</span>
|
|
789
|
-
<span class="evolve-pill on">LemmingsFi</span>
|
|
790
|
-
<span class="evolve-pill on">M Swap</span>
|
|
791
|
-
<span class="evolve-pill on">Manifest</span>
|
|
792
|
-
<span class="evolve-pill on">Mercurial</span>
|
|
793
|
-
<span class="evolve-pill on">MetaDAO</span>
|
|
794
|
-
<span class="evolve-pill on">Meteora</span>
|
|
795
|
-
<span class="evolve-pill on">Meteora DAMM</span>
|
|
796
|
-
<span class="evolve-pill on">Metric</span>
|
|
797
|
-
<span class="evolve-pill on">Moonit</span>
|
|
798
|
-
<span class="evolve-pill on">Obric</span>
|
|
799
|
-
<span class="evolve-pill on">Obsidian</span>
|
|
800
|
-
<span class="evolve-pill on">Omnipair</span>
|
|
801
|
-
<span class="evolve-pill on">OpenBook</span>
|
|
802
|
-
<span class="evolve-pill on">Orca</span>
|
|
803
|
-
<span class="evolve-pill on">PancakeSwap</span>
|
|
804
|
-
<span class="evolve-pill on">Penguin</span>
|
|
805
|
-
<span class="evolve-pill on">Perena</span>
|
|
806
|
-
<span class="evolve-pill on">Perena Star</span>
|
|
807
|
-
<span class="evolve-pill on">Perps</span>
|
|
808
|
-
<span class="evolve-pill on">Phoenix</span>
|
|
809
|
-
<span class="evolve-pill on">Pump.fun</span>
|
|
810
|
-
<span class="evolve-pill on">Quantum</span>
|
|
811
|
-
<span class="evolve-pill on">Raydium</span>
|
|
812
|
-
<span class="evolve-pill on">Riptide</span>
|
|
813
|
-
<span class="evolve-pill on">RunnerRodeo</span>
|
|
814
|
-
<span class="evolve-pill on">Saber</span>
|
|
815
|
-
<span class="evolve-pill on">Saber (Decimals)</span>
|
|
816
|
-
<span class="evolve-pill on">Sanctum</span>
|
|
817
|
-
<span class="evolve-pill on">Sanctum Infinity</span>
|
|
818
|
-
<span class="evolve-pill on">Saros</span>
|
|
819
|
-
<span class="evolve-pill on">Scale</span>
|
|
820
|
-
<span class="evolve-pill on">Scale Vmm</span>
|
|
821
|
-
<span class="evolve-pill on">Scorch</span>
|
|
822
|
-
<span class="evolve-pill on">Solayer</span>
|
|
823
|
-
<span class="evolve-pill on">SolFi</span>
|
|
824
|
-
<span class="evolve-pill on">Stabble</span>
|
|
825
|
-
<span class="evolve-pill on">Stabble Stable Swap</span>
|
|
826
|
-
<span class="evolve-pill on">Stabble Weighted Swap</span>
|
|
827
|
-
<span class="evolve-pill on">StepN</span>
|
|
828
|
-
<span class="evolve-pill on">TaurusFi</span>
|
|
829
|
-
<span class="evolve-pill on">TesseraV</span>
|
|
830
|
-
<span class="evolve-pill on">Token Swap</span>
|
|
831
|
-
<span class="evolve-pill on">Trends</span>
|
|
832
|
-
<span class="evolve-pill on">VaultLiquidUnstake</span>
|
|
833
|
-
<span class="evolve-pill on">Virtuals</span>
|
|
834
|
-
<span class="evolve-pill on">Voltr</span>
|
|
835
|
-
<span class="evolve-pill on">WhaleStreet</span>
|
|
836
|
-
<span class="evolve-pill on">Whirlpool</span>
|
|
837
|
-
<span class="evolve-pill on">Woofi</span>
|
|
838
|
-
<span class="evolve-pill on">XOrca</span>
|
|
839
|
-
<span class="evolve-pill on">ZeroFi</span>
|
|
840
|
-
</div>
|
|
841
|
-
|
|
842
808
|
<div class="graph-canvas">
|
|
843
809
|
<div class="orch" aria-label="Oracle multi-profile graph">
|
|
844
810
|
<div class="row">
|
|
@@ -911,7 +877,7 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
|
|
|
911
877
|
<div class="tag">profile</div>
|
|
912
878
|
<div class="name">solana agent</div>
|
|
913
879
|
<div class="sub">jup · nfts · dexs</div>
|
|
914
|
-
<div class="chains"><span class="ch">Solana <img src="https://icons.llamao.fi/icons/chains/rsz_solana?w=24&h=24" alt="" loading="lazy"></span
|
|
880
|
+
<div class="chains"><span class="ch">Solana <img src="https://icons.llamao.fi/icons/chains/rsz_solana?w=24&h=24" alt="" loading="lazy"></span></div>
|
|
915
881
|
</div>
|
|
916
882
|
<div class="node route p-btc">
|
|
917
883
|
<div class="tag">profile</div>
|
|
@@ -931,12 +897,6 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
|
|
|
931
897
|
<div class="sub">launches · memecoins</div>
|
|
932
898
|
<div class="chains"><span class="ch">Stable <img src="https://icons.llamao.fi/icons/chains/rsz_stable?w=24&h=24" alt="" loading="lazy"></span></div>
|
|
933
899
|
</div>
|
|
934
|
-
<div class="node add">
|
|
935
|
-
<div class="tag">open slot</div>
|
|
936
|
-
<div class="name">+ add agent</div>
|
|
937
|
-
<div class="sub">new chain · new venue · your rules</div>
|
|
938
|
-
<div class="chains" style="margin-top:12px;font-family:var(--mono);font-size:10px;color:var(--blue2)">sits beside stable · same custody</div>
|
|
939
|
-
</div>
|
|
940
900
|
</div>
|
|
941
901
|
|
|
942
902
|
<div class="wires funnel" aria-hidden="true">
|
|
@@ -1057,20 +1017,10 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
|
|
|
1057
1017
|
<span class="chip-s">unsigned deploy</span>
|
|
1058
1018
|
</div>
|
|
1059
1019
|
</article>
|
|
1060
|
-
<article class="route-card p-add">
|
|
1061
|
-
<div class="where">+ add agent →</div>
|
|
1062
|
-
<h3>Next chain</h3>
|
|
1063
|
-
<p>Drop in another profile for a new chain or venue. Same custody model, your wallet, your limits, your revoke.</p>
|
|
1064
|
-
<div class="chips">
|
|
1065
|
-
<span class="chip-s">custom profile</span>
|
|
1066
|
-
<span class="chip-s">more chains</span>
|
|
1067
|
-
<span class="chip-s">same custody</span>
|
|
1068
|
-
</div>
|
|
1069
|
-
</article>
|
|
1070
1020
|
</div>
|
|
1071
1021
|
|
|
1072
1022
|
<div class="why-band">
|
|
1073
|
-
<p>The model proposes. Policy bounds. You own signatures. Multi-profile desks
|
|
1023
|
+
<p>The model proposes. Policy bounds. You own signatures. Multi-profile desks route each request to the right surface. Vaults, perps, bridges, and protocol scaffolds, not just swaps. Empty allowlists refuse everything until you configure them.</p>
|
|
1074
1024
|
</div>
|
|
1075
1025
|
</div>
|
|
1076
1026
|
|
|
@@ -1106,7 +1056,45 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
|
|
|
1106
1056
|
<p>A fresh install signs nothing. Every lane refuses while its allowlists are empty, so nothing moves until you set the bounds.</p>
|
|
1107
1057
|
</article>
|
|
1108
1058
|
</div>
|
|
1109
|
-
|
|
1059
|
+
|
|
1060
|
+
<div class="strategy-surface rv" id="strategies" aria-labelledby="strategies-title">
|
|
1061
|
+
<div class="strategy-head">
|
|
1062
|
+
<div>
|
|
1063
|
+
<div class="strategy-kicker">Agentic strategies</div>
|
|
1064
|
+
<h3 id="strategies-title">Move liquidity. Bound the risk.</h3>
|
|
1065
|
+
</div>
|
|
1066
|
+
<p>Oracle reads the position, models the route and costs, then prepares only the steps the selected lane can actually support.</p>
|
|
1067
|
+
</div>
|
|
1068
|
+
<div class="strategy-grid">
|
|
1069
|
+
<article class="strategy-card">
|
|
1070
|
+
<div class="mode">read · model · prepare</div>
|
|
1071
|
+
<h4>LP rebalancing</h4>
|
|
1072
|
+
<p>Read concentrated-liquidity positions, model new ranges and fee drag, then prepare collect, swap and redeploy steps on supported venues. You sign each step.</p>
|
|
1073
|
+
</article>
|
|
1074
|
+
<article class="strategy-card">
|
|
1075
|
+
<div class="mode">monitor · shadow · simulate</div>
|
|
1076
|
+
<h4>MEV</h4>
|
|
1077
|
+
<p>Monitor cross-venue divergence and simulate net edge after gas, slippage and lender costs. Public mode is shadow analysis, not autonomous execution.</p>
|
|
1078
|
+
</article>
|
|
1079
|
+
<article class="strategy-card">
|
|
1080
|
+
<div class="mode">simulate · policy-check</div>
|
|
1081
|
+
<h4>Flash loans</h4>
|
|
1082
|
+
<p>Build bounded atomic loan routes and test premium, calldata, gas and minimum-profit gates. Public live execution remains disabled.</p>
|
|
1083
|
+
</article>
|
|
1084
|
+
<article class="strategy-card">
|
|
1085
|
+
<div class="mode">read · quote · prepare</div>
|
|
1086
|
+
<h4>Staking</h4>
|
|
1087
|
+
<p>Compare validators, staking vaults, rewards and unlock periods, then prepare supported stake, withdraw and delegate actions for your signature.</p>
|
|
1088
|
+
</article>
|
|
1089
|
+
<article class="strategy-card">
|
|
1090
|
+
<div class="mode">discover · compare · prepare</div>
|
|
1091
|
+
<h4>Yield</h4>
|
|
1092
|
+
<p>Rank lending, staking, vault and LP opportunities by net APY after fees, liquidity, lockups and smart-contract risk, then prepare supported deposits or migrations for your signature.</p>
|
|
1093
|
+
</article>
|
|
1094
|
+
</div>
|
|
1095
|
+
<div class="strategy-posture"><b>Public posture:</b> research, simulation and unsigned preparation. MEV and flash-loan broadcast stays off; supported staking, LP and yield actions require the user wallet to sign.</div>
|
|
1096
|
+
</div>
|
|
1097
|
+
</section>
|
|
1110
1098
|
|
|
1111
1099
|
<section class="section" id="chains">
|
|
1112
1100
|
<p class="section-label rv">Chains</p>
|
|
@@ -1125,7 +1113,7 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
|
|
|
1125
1113
|
</div>
|
|
1126
1114
|
</div>
|
|
1127
1115
|
<div class="venues rv">
|
|
1128
|
-
<div class="venues-head"><span>protocols // venues</span
|
|
1116
|
+
<div class="venues-head"><span>protocols // venues</span></div>
|
|
1129
1117
|
<div class="marquee"><div class="track" id="proto-track-a"></div></div>
|
|
1130
1118
|
<div class="marquee rev"><div class="track" id="proto-track-b"></div></div>
|
|
1131
1119
|
</div>
|
|
@@ -1195,43 +1183,121 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
|
|
|
1195
1183
|
}).join("");
|
|
1196
1184
|
|
|
1197
1185
|
var WM = "assets/wordmarks/";
|
|
1186
|
+
var BRAND = "brand/";
|
|
1198
1187
|
var PROTOS_A = [
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
|
|
1208
|
-
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
1214
|
-
|
|
1215
|
-
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
1222
|
-
|
|
1223
|
-
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
|
|
1229
|
-
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
|
|
1188
|
+
{ n: "Uniswap V3", wm: "uniswap.svg", cap: "read + quote + prepare + policy", u: "https://app.uniswap.org/" },
|
|
1189
|
+
{ n: "Aerodrome Slipstream", wm: "aerodrome.svg", cap: "read + quote + prepare", u: "https://aerodrome.finance/" },
|
|
1190
|
+
{ n: "Pancake V3", wm: "pancakeswap.svg", cap: "read + quote", u: "https://pancakeswap.finance/swap" },
|
|
1191
|
+
{ n: "LFJ Liquidity Book", img: "lfj", cap: "read + quote", u: "https://lfj.gg/avalanche/trade" },
|
|
1192
|
+
{ n: "Curve RouterNG", img: "curve", cap: "read + quote + prepare + policy", u: "https://curve.finance" },
|
|
1193
|
+
{ n: "Pendle Router", img: "pendle", cap: "read + quote + prepare + policy", u: "https://pendle.finance/" },
|
|
1194
|
+
{ n: "Morpho vaults", wm: "morpho.svg", cap: "read + deposit prepare", u: "https://app.morpho.org/" },
|
|
1195
|
+
{ n: "Lido stETH", img: "lido", cap: "read + stake prepare + policy", u: "https://lido.fi/" },
|
|
1196
|
+
{ n: "Kinetiq kHYPE", wm: "kinetiq.svg", tall: 1, cap: "read + quote + stake prepare + policy", u: "https://kinetiq.xyz/stake" },
|
|
1197
|
+
{ n: "Project X", img: "projectx", cap: "read", u: "https://www.prjx.com" },
|
|
1198
|
+
{ n: "Uniswap V4", img: "uniswapv4", cap: "read + quote", u: "https://app.uniswap.org/" },
|
|
1199
|
+
{ n: "Aborean CL", img: "aborean", cap: "read + quote", u: "https://aborean.finance/" },
|
|
1200
|
+
{ n: "Aborean AMM", img: "aborean", cap: "read + quote", u: "https://aborean.finance/" },
|
|
1201
|
+
{ n: "Stable Swap V3", img: "stableswap", cap: "read + quote", u: "https://swap.stable.xyz/" },
|
|
1202
|
+
{ n: "Stable Swap V2", img: "stableswap", cap: "read + quote", u: "https://swap.stable.xyz/" },
|
|
1203
|
+
{ n: "Compound V3", img: "compound", cap: "read + quote", u: "https://www.compound.xyz/" },
|
|
1204
|
+
{ n: "Aerodrome V1", img: "aerodrome", cap: "read + quote", u: "https://aerodrome.finance/" },
|
|
1205
|
+
{ n: "Ethena sUSDe", img: "ethena", cap: "read + quote", u: "https://app.ethena.fi/" },
|
|
1206
|
+
{ n: "Lido wstETH", img: "lido", cap: "read + quote", u: "https://lido.fi/" },
|
|
1207
|
+
{ n: "Benqi sAVAX", img: "benqi", cap: "read + quote", u: "https://app.benqi.fi/savax" },
|
|
1208
|
+
{ n: "EigenLayer", img: "eigenlayer", cap: "read + quote", u: "https://www.eigencloud.xyz/eigenlayer" },
|
|
1209
|
+
{ n: "SSV Network", img: "ssv", cap: "read", u: "https://ssv.network/" },
|
|
1210
|
+
{ n: "Fluid Lending", img: "fluid", cap: "read + quote", u: "https://www.fluid.io/" },
|
|
1211
|
+
{ n: "Rain", img: "rain", cap: "read + quote", u: "https://www.rain.one/" },
|
|
1212
|
+
{ n: "Derive V2", img: "derive", cap: "read", u: "https://app.derive.xyz" },
|
|
1213
|
+
{ n: "PancakeSwap AMM", img: "pancakeswap", cap: "read + quote", u: "https://pancakeswap.finance/" },
|
|
1214
|
+
{ n: "Lista Lending", img: "lista", cap: "read + quote", u: "https://lista.org/lending" },
|
|
1215
|
+
{ n: "Lista CDP", img: "lista", cap: "read", u: "https://lista.org/" },
|
|
1216
|
+
{ n: "Benqi Lending", img: "benqi", cap: "read", u: "https://benqi.fi" },
|
|
1217
|
+
{ n: "Pharaoh V3", img: "pharaoh", cap: "read + quote", u: "https://www.phar.gg/" },
|
|
1218
|
+
{ n: "Polymarket", img: "polymarket", cap: "read", u: "https://polymarket.com/" },
|
|
1219
|
+
{ n: "XSY", img: "xsy", cap: "read", u: "https://xsy.fi" },
|
|
1220
|
+
{ n: "Balancer V2", wm: "balancer.svg", cap: "read + quote", u: "https://balancer.fi/" },
|
|
1221
|
+
{ n: "Harmonix", img: "harmonix", cap: "read + quote", u: "https://app.harmonix.fi/" },
|
|
1222
|
+
{ n: "Hyperliquid HLP", wm: "hyperliquid.svg", cap: "read", u: "https://app.hyperliquid.xyz" },
|
|
1223
|
+
{ n: "stHYPE + wstHYPE", img: "sthype", cap: "read + quote", u: "https://app.valantis.xyz" },
|
|
1224
|
+
{ n: "Arcus Perps", img: "arcus", cap: "read", u: "https://arcus.xyz/" },
|
|
1225
|
+
{ n: "NOXA Fun", img: "noxa", cap: "read + quote", u: "https://fun.noxa.eth.limo/" },
|
|
1226
|
+
{ n: "Kona V2", img: "kona", cap: "read + quote", u: "https://kona.surf/" },
|
|
1227
|
+
{ n: "Kona Stableswap", img: "kona", cap: "read + quote", u: "https://kona.surf/" },
|
|
1228
|
+
{ n: "NOXA DEX V2", img: "noxa", cap: "read", u: "https://fun.noxa.eth.limo/" },
|
|
1229
|
+
{ n: "AFI Protocol", img: "afi", cap: "read + quote", u: "https://afiprotocol.xyz/" },
|
|
1230
|
+
{ n: "Kelp", img: "kelp", cap: "read + quote", u: "https://kelpdao.xyz/" },
|
|
1231
|
+
{ n: "Dolomite", img: "dolomite", cap: "read", u: "https://dolomite.io" },
|
|
1232
|
+
{ n: "Camelot V3", img: "camelot", cap: "read + quote", u: "https://camelot.exchange/" },
|
|
1233
|
+
{ n: "Beefy", img: "beefy", cap: "read + quote", u: "https://beefy.com" },
|
|
1234
|
+
{ n: "BounceBit", img: "bouncebit", cap: "read", u: "https://bouncebit.io/" },
|
|
1235
|
+
{ n: "BitFi", img: "bitfi", cap: "read", u: "https://www.bitfi.one/" },
|
|
1236
|
+
{ n: "Hypha", img: "hypha", cap: "read + quote", u: "https://www.hypha.sh/" },
|
|
1237
|
+
{ n: "40 Acres", img: "fortyacres", cap: "read + quote", u: "https://www.40acres.finance/" },
|
|
1238
|
+
{ n: "Hyperbeat", img: "hyperbeat", cap: "read + quote", u: "https://app.hyperbeat.org/" },
|
|
1239
|
+
{ n: "GMX V2", wm: "gmx.svg", cap: "read + order attestation", u: "https://gmx.io/" },
|
|
1240
|
+
{ n: "Relay", wm: "relay.svg", cap: "route source", u: "https://relay.link/" },
|
|
1241
|
+
{ n: "Odos", wm: "odos.svg", cap: "read + route source", u: "https://app.odos.xyz" },
|
|
1242
|
+
{ n: "Jupiter", wm: "jupiter.svg", cap: "solana route source", u: "https://jup.ag/" },
|
|
1243
|
+
{ n: "Stargate", wm: "stargate.svg", cap: "read + bridge route", u: "https://stargate.finance/" }
|
|
1244
|
+
];
|
|
1245
|
+
var PROTOS_B = [
|
|
1246
|
+
{ n: "Uniswap V3 LP", img: "uniswap", cap: "preview + mint/collect prepare", u: "https://app.uniswap.org/" },
|
|
1247
|
+
{ n: "Velodrome V2", wm: "velodrome.svg", cap: "read + quote", u: "https://velodrome.finance/" },
|
|
1248
|
+
{ n: "QuickSwap", img: "quickswap", cap: "read + quote", u: "https://quickswap.exchange/" },
|
|
1249
|
+
{ n: "HyperSwap V3", wm: "hyperswap.svg", cap: "read + quote", u: "https://app.hyperswap.exchange/" },
|
|
1250
|
+
{ n: "Balancer V3", img: "balancer", cap: "read + quote + prepare + policy", u: "https://balancer.fi/" },
|
|
1251
|
+
{ n: "Aave V3", img: "aave", cap: "read + supply/withdraw prepare + policy", u: "https://aave.com/" },
|
|
1252
|
+
{ n: "Morpho Blue", img: "morpho", cap: "read", u: "https://app.morpho.org" },
|
|
1253
|
+
{ n: "Concrete", img: "concrete", cap: "read + quote", u: "https://app.concrete.xyz" },
|
|
1254
|
+
{ n: "HyperLend", img: "hyperlend", cap: "read + supply/withdraw prepare + policy", u: "https://app.hyperlend.finance/" },
|
|
1255
|
+
{ n: "Kinetiq Earn", img: "kinetiq", cap: "read + quote", u: "https://kinetiq.xyz/stake-hype#kinetiq-earn" },
|
|
1256
|
+
{ n: "Kona Lend", img: "konalend", cap: "read + supply/withdraw prepare + policy", u: "https://app.kona.surf/lending" },
|
|
1257
|
+
{ n: "Uniswap V2", img: "uniswapv2", cap: "read + quote", u: "https://app.uniswap.org/" },
|
|
1258
|
+
{ n: "SakuraSwap AMM", img: "sakuraswap", cap: "read + quote", u: "https://sakuraswap.com/" },
|
|
1259
|
+
{ n: "SakuraSwap CLMM", img: "sakuraswap", cap: "read + quote", u: "https://sakuraswap.com/" },
|
|
1260
|
+
{ n: "Curve DEX", img: "curve", cap: "read + quote", u: "https://curve.finance" },
|
|
1261
|
+
{ n: "Aave V2", img: "aavev2", cap: "read + quote", u: "https://aave.com" },
|
|
1262
|
+
{ n: "Velodrome Slipstream", img: "velodrome", cap: "read + quote", u: "https://velodrome.finance/" },
|
|
1263
|
+
{ n: "Sky sUSDS", img: "sky", cap: "read + quote", u: "https://app.sky.money/" },
|
|
1264
|
+
{ n: "ether.fi weETH", img: "etherfi", cap: "read + quote", u: "https://www.ether.fi/" },
|
|
1265
|
+
{ n: "SparkLend", img: "spark", cap: "read + supply/withdraw prepare + policy", u: "https://spark.finance/" },
|
|
1266
|
+
{ n: "Binance wBETH", img: "wbeth", cap: "read + quote", u: "https://www.binance.com/en/wbeth" },
|
|
1267
|
+
{ n: "Spark Savings", img: "sparksavings", cap: "read + quote", u: "https://spark.finance/" },
|
|
1268
|
+
{ n: "Fluid DEX", img: "fluid", cap: "read + quote", u: "https://www.fluid.io/" },
|
|
1269
|
+
{ n: "ZEROBASE", img: "zerobase", cap: "read", u: "https://app.zerobase.pro/" },
|
|
1270
|
+
{ n: "EtherFi Cash", img: "etherfiborrow", cap: "read", u: "https://www.ether.fi/cash" },
|
|
1271
|
+
{ n: "Venus", img: "venus", cap: "read + quote", u: "https://app.venus.io/" },
|
|
1272
|
+
{ n: "Lista slisBNB", img: "lista", cap: "read + quote", u: "https://lista.org/" },
|
|
1273
|
+
{ n: "Solv", img: "solv", cap: "read + quote", u: "https://solv.finance/" },
|
|
1274
|
+
{ n: "Avant avUSD", img: "avant", cap: "read + quote", u: "https://app.avantprotocol.com/" },
|
|
1275
|
+
{ n: "Yield Yak", img: "yieldyak", cap: "read + quote", u: "https://yieldyak.com/" },
|
|
1276
|
+
{ n: "SushiSwap", img: "sushiswap", cap: "read + quote", u: "https://sushi.com/" },
|
|
1277
|
+
{ n: "Sphere", img: "sphere", cap: "read", u: "https://sphere.finance/" },
|
|
1278
|
+
{ n: "Felix", img: "felix", cap: "read + quote", u: "https://www.usefelix.xyz/" },
|
|
1279
|
+
{ n: "Unit", img: "unit", cap: "read", u: "https://hyperunit.xyz/" },
|
|
1280
|
+
{ n: "Hyperliquid Spot", img: "hyperliquidspot", cap: "read + quote", u: "https://app.hyperliquid.xyz/" },
|
|
1281
|
+
{ n: "Kinetiq kmHYPE", img: "kmhype", cap: "read + quote", u: "https://markets.xyz" },
|
|
1282
|
+
{ n: "Lighter Robinhood", img: "lighter", cap: "read", u: "https://robinhoodchain.lighter.xyz/trade/LIT" },
|
|
1283
|
+
{ n: "Ekubo", img: "ekubo", cap: "read", u: "https://ekubo.org/" },
|
|
1284
|
+
{ n: "Myriad Markets", img: "myriad", cap: "read + quote", u: "https://myriad.markets/markets" },
|
|
1285
|
+
{ n: "GASSSS", img: "gassss", cap: "read + quote", u: "https://gassss.xyz" },
|
|
1286
|
+
{ n: "Rocket Pool", img: "rocketpool", cap: "read + quote", u: "https://rocketpool.net" },
|
|
1287
|
+
{ n: "StakeWise V2", img: "stakewise", cap: "read + quote", u: "https://stakewise.io/" },
|
|
1288
|
+
{ n: "Ostium", img: "ostium", cap: "read + quote", u: "https://www.ostium.io/" },
|
|
1289
|
+
{ n: "Gains Network", img: "gainsnetwork", cap: "read + quote", u: "https://gains.trade/" },
|
|
1290
|
+
{ n: "Aster asBNB", img: "aster", cap: "read + quote", u: "https://www.asterdex.com/en/earn" },
|
|
1291
|
+
{ n: "Lorenzo", img: "lorenzo", cap: "read", u: "https://www.lorenzo-protocol.xyz/" },
|
|
1292
|
+
{ n: "Trader Joe", img: "joedex", cap: "read + quote", u: "https://lfj.gg/avalanche" },
|
|
1293
|
+
{ n: "Folks Finance", img: "folks", cap: "read", u: "https://folks.finance/" },
|
|
1294
|
+
{ n: "Velodrome V1", img: "velodrome", cap: "read + quote", u: "https://velodrome.finance/" },
|
|
1295
|
+
{ n: "Looped Hype", img: "loopedhype", cap: "read + quote", u: "https://www.loopingcollective.org/" },
|
|
1296
|
+
{ n: "LI.FI", img: "lifi", cap: "read + route source", u: "https://li.fi/" },
|
|
1297
|
+
{ n: "Velora", img: "velora", cap: "read + route source", u: "https://app.velora.xyz" },
|
|
1298
|
+
{ n: "CoW Swap", wm: "cowswap.svg", cap: "read + route source", u: "https://cow.fi/" },
|
|
1299
|
+
{ n: "Across", wm: "across.svg", cap: "read + bridge route", u: "https://across.to" }
|
|
1300
|
+
];
|
|
1235
1301
|
|
|
1236
1302
|
// Equalize optical weight: constant target area, clamped, then width-capped.
|
|
1237
1303
|
function normalizeMark(img) {
|
|
@@ -1243,24 +1309,91 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
|
|
|
1243
1309
|
img.style.height = h.toFixed(1) + "px";
|
|
1244
1310
|
}
|
|
1245
1311
|
function wireMarks(root) {
|
|
1246
|
-
root.querySelectorAll("img.wm
|
|
1247
|
-
if (img.complete
|
|
1248
|
-
|
|
1312
|
+
root.querySelectorAll("img.wm").forEach(function (img) {
|
|
1313
|
+
if (img.complete) {
|
|
1314
|
+
if (!img.classList.contains("tall") && img.naturalWidth) normalizeMark(img);
|
|
1315
|
+
return;
|
|
1316
|
+
}
|
|
1317
|
+
img.addEventListener("load", function () {
|
|
1318
|
+
if (!img.classList.contains("tall")) normalizeMark(img);
|
|
1319
|
+
syncMarqueeVelocity();
|
|
1320
|
+
}, { once: true });
|
|
1321
|
+
});
|
|
1322
|
+
}
|
|
1323
|
+
|
|
1324
|
+
var MARQUEE_PX_PER_SECOND = 20;
|
|
1325
|
+
var marqueeResizeTimer = 0;
|
|
1326
|
+
function syncMarqueeVelocity() {
|
|
1327
|
+
document.querySelectorAll(".track").forEach(function (track) {
|
|
1328
|
+
var distance = track.scrollWidth / 2;
|
|
1329
|
+
if (distance > 0) {
|
|
1330
|
+
track.style.setProperty("--marquee-duration", Math.max(30, distance / MARQUEE_PX_PER_SECOND).toFixed(2) + "s");
|
|
1331
|
+
}
|
|
1249
1332
|
});
|
|
1250
1333
|
}
|
|
1251
1334
|
|
|
1335
|
+
function protocolName(name) {
|
|
1336
|
+
var label = name.replace(/\s+(?:DEX\s+)?V\d+(?:\s+LP)?\b/gi, "").trim();
|
|
1337
|
+
var aliases = [
|
|
1338
|
+
[/^Aerodrome\b/i, "Aerodrome"],
|
|
1339
|
+
[/^Pancake(?:Swap)?\b/i, "PancakeSwap"],
|
|
1340
|
+
[/^LFJ\b/i, "LFJ"],
|
|
1341
|
+
[/^Curve\b/i, "Curve"],
|
|
1342
|
+
[/^Pendle\b/i, "Pendle"],
|
|
1343
|
+
[/^Morpho\b/i, "Morpho"],
|
|
1344
|
+
[/^Lido\b/i, "Lido"],
|
|
1345
|
+
[/^Kinetiq\b/i, "Kinetiq"],
|
|
1346
|
+
[/^Aborean\b/i, "Aborean"],
|
|
1347
|
+
[/^Stable Swap\b/i, "Stable"],
|
|
1348
|
+
[/^Ethena\b/i, "Ethena"],
|
|
1349
|
+
[/^Benqi\b/i, "Benqi"],
|
|
1350
|
+
[/^Fluid\b/i, "Fluid"],
|
|
1351
|
+
[/^Lista\b/i, "Lista"],
|
|
1352
|
+
[/^Hyperliquid\b/i, "Hyperliquid"],
|
|
1353
|
+
[/^Arcus\b/i, "Arcus"],
|
|
1354
|
+
[/^NOXA\b/i, "NOXA"],
|
|
1355
|
+
[/^Kona\b/i, "Kona"],
|
|
1356
|
+
[/^Velodrome\b/i, "Velodrome"],
|
|
1357
|
+
[/^SakuraSwap\b/i, "SakuraSwap"],
|
|
1358
|
+
[/^Spark(?:Lend|\b)/i, "Spark"],
|
|
1359
|
+
[/^(?:ether\.fi|EtherFi)\b/i, "EtherFi"],
|
|
1360
|
+
[/^Sky\b/i, "Sky"],
|
|
1361
|
+
[/^Binance\b/i, "Binance"],
|
|
1362
|
+
[/^Avant\b/i, "Avant"],
|
|
1363
|
+
[/^Aster\b/i, "Aster"],
|
|
1364
|
+
[/^Lighter\b/i, "Lighter"],
|
|
1365
|
+
[/^stHYPE \+ wstHYPE$/i, "Valantis"]
|
|
1366
|
+
];
|
|
1367
|
+
for (var i = 0; i < aliases.length; i++) {
|
|
1368
|
+
if (aliases[i][0].test(label)) return aliases[i][1];
|
|
1369
|
+
}
|
|
1370
|
+
return label;
|
|
1371
|
+
}
|
|
1372
|
+
function uniqueProtocols(list, seen) {
|
|
1373
|
+
return list.filter(function (x) {
|
|
1374
|
+
var label = protocolName(x.n);
|
|
1375
|
+
if (seen[label]) return false;
|
|
1376
|
+
seen[label] = true;
|
|
1377
|
+
return true;
|
|
1378
|
+
});
|
|
1379
|
+
}
|
|
1252
1380
|
function chipRow(list) {
|
|
1253
1381
|
var seq = list.concat(list);
|
|
1254
1382
|
return seq.map(function (x) {
|
|
1255
|
-
var
|
|
1256
|
-
|
|
1257
|
-
|
|
1258
|
-
|
|
1259
|
-
|
|
1383
|
+
var label = protocolName(x.n);
|
|
1384
|
+
var body = x.img
|
|
1385
|
+
? '<img class="wm tall" src="' + BRAND + x.img + '.webp" alt="' + label + '" decoding="async">' +
|
|
1386
|
+
'<span class="wordmark">' + label + '</span>'
|
|
1387
|
+
: x.wm
|
|
1388
|
+
? '<img class="' + (x.tall ? 'wm tall' : 'wm') + (x.mono ? ' mono' : '') + '" src="' + WM + x.wm + '" alt="' + label + '" decoding="async">' +
|
|
1389
|
+
(x.tall ? '<span class="wordmark">' + label + '</span>' : '')
|
|
1390
|
+
: '<span class="wordmark">' + label + '</span>';
|
|
1391
|
+
return '<a class="chip wm-chip" href="' + x.u + '" target="_blank" rel="noopener noreferrer" aria-label="' + label + '">' + body + '</a>';
|
|
1260
1392
|
}).join("");
|
|
1261
1393
|
}
|
|
1262
|
-
|
|
1263
|
-
document.getElementById("proto-track-
|
|
1394
|
+
var visibleProtocols = Object.create(null);
|
|
1395
|
+
document.getElementById("proto-track-a").innerHTML = chipRow(uniqueProtocols(PROTOS_A, visibleProtocols));
|
|
1396
|
+
document.getElementById("proto-track-b").innerHTML = chipRow(uniqueProtocols(PROTOS_B, visibleProtocols));
|
|
1264
1397
|
|
|
1265
1398
|
var LM = "assets/llms/";
|
|
1266
1399
|
var LLMS = [
|
|
@@ -1280,12 +1413,19 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
|
|
|
1280
1413
|
];
|
|
1281
1414
|
document.getElementById("llm-track").innerHTML = LLMS.concat(LLMS).map(function (x) {
|
|
1282
1415
|
var cls = x.tall ? "wm tall" : "wm";
|
|
1283
|
-
return '<a class="chip wm-chip" href="' + x.u + '" target="_blank" rel="noopener noreferrer" aria-label="' + x.n + '"><img class="' + cls + '" src="' + LM + x.wm + '" alt="' + x.n + '"
|
|
1416
|
+
return '<a class="chip wm-chip" href="' + x.u + '" target="_blank" rel="noopener noreferrer" aria-label="' + x.n + '"><img class="' + cls + '" src="' + LM + x.wm + '" alt="' + x.n + '" decoding="async">' + (x.tall ? '<span class="wordmark">' + x.n + '</span>' : '') + '</a>';
|
|
1284
1417
|
}).join("");
|
|
1285
1418
|
|
|
1286
1419
|
wireMarks(document.getElementById("proto-track-a"));
|
|
1287
1420
|
wireMarks(document.getElementById("proto-track-b"));
|
|
1288
1421
|
wireMarks(document.getElementById("llm-track"));
|
|
1422
|
+
syncMarqueeVelocity();
|
|
1423
|
+
if (document.fonts && document.fonts.ready) document.fonts.ready.then(syncMarqueeVelocity);
|
|
1424
|
+
window.addEventListener("load", syncMarqueeVelocity);
|
|
1425
|
+
window.addEventListener("resize", function () {
|
|
1426
|
+
clearTimeout(marqueeResizeTimer);
|
|
1427
|
+
marqueeResizeTimer = setTimeout(syncMarqueeVelocity, 120);
|
|
1428
|
+
});
|
|
1289
1429
|
|
|
1290
1430
|
var loader = document.getElementById("loader");
|
|
1291
1431
|
var fill = document.getElementById("loader-fill");
|