@oracle-agent/oracle 0.9.7 → 0.10.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 +9 -13
- package/package.json +3 -2
- package/public/oracle-splash/index.html +223 -46
- 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/model.mjs +79 -23
- package/src/cli/kernel.mjs +4 -3
- package/src/cli/model-config.mjs +70 -0
- package/src/router/best-execution.mjs +105 -0
- package/src/router/index.mjs +42 -1
- package/src/router/prepare-route.mjs +17 -1
- package/src/tui/app.mjs +18 -7
- package/src/tui/backend.mjs +145 -0
- package/src/tui/standalone-client.mjs +666 -0
- package/protocols/templates/safe-erc20/README.md +0 -9
- package/src/cli/__pycache__/oracle-harness.cpython-311.pyc +0 -0
package/README.md
CHANGED
|
@@ -4,11 +4,12 @@
|
|
|
4
4
|
|
|
5
5
|
```bash
|
|
6
6
|
npm i -g @oracle-agent/oracle
|
|
7
|
-
oracle
|
|
8
|
-
oracle
|
|
7
|
+
oracle auth login claude # or codex / grok OAuth
|
|
8
|
+
oracle # native standalone chat
|
|
9
|
+
oracle init --apply # optional Hermes lanes + read plane, no keys
|
|
9
10
|
oracle data serve # loopback read/prepare plane on 127.0.0.1:8787
|
|
10
11
|
oracle doctor # verify
|
|
11
|
-
# optional, explicit second step
|
|
12
|
+
# optional, explicit second step: signing stays a separate local package
|
|
12
13
|
npm i -g @oracle-agent/operator
|
|
13
14
|
oracle sign init
|
|
14
15
|
```
|
|
@@ -19,12 +20,11 @@ oracle sign init
|
|
|
19
20
|
Specialist agent profiles, real protocol intents, self-custody by default,
|
|
20
21
|
receipts or it didn't happen.
|
|
21
22
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
An existing compatible runtime is reused when available.
|
|
23
|
+
Hermes is optional. Oracle can run its native chat directly with Claude, Codex,
|
|
24
|
+
or Grok OAuth, a securely stored provider API key, or a custom OpenAI-compatible
|
|
25
|
+
endpoint. Existing compatible Hermes installations are reused in automatic mode.
|
|
26
|
+
OAuth tokens and stored API keys stay in the OS credential store when available,
|
|
27
|
+
with a private `0600` local fallback.
|
|
28
28
|
|
|
29
29
|
This package is **prepare-only**: it never takes a private key and never
|
|
30
30
|
broadcasts. For agentic trading with **your** keys on **your** machine, install
|
|
@@ -35,10 +35,6 @@ alongside it — same split we run ourselves.
|
|
|
35
35
|
|
|
36
36
|
## Start in 5 steps
|
|
37
37
|
|
|
38
|
-
Source tree: **oracle `0.5.0`** · **operator `0.14.0`**
|
|
39
|
-
|
|
40
|
-
Published npm: **oracle `0.4.2`** · **operator `0.13.7`** until this source release is published.
|
|
41
|
-
|
|
42
38
|
```bash
|
|
43
39
|
# 1) install Oracle's public prepare plane
|
|
44
40
|
npm i @oracle-agent/oracle@latest
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@oracle-agent/oracle",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Oracle: prepare-only multichain agent control plane. Policy-bounded intents for a user-signed wallet
|
|
3
|
+
"version": "0.10.0",
|
|
4
|
+
"description": "Oracle: standalone prepare-only multichain agent control plane with optional Hermes integration. Policy-bounded intents for a user-signed wallet; the public package never takes your key.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"publishConfig": {
|
|
@@ -85,6 +85,7 @@
|
|
|
85
85
|
"files": [
|
|
86
86
|
"bin/",
|
|
87
87
|
"src/",
|
|
88
|
+
"!src/**/__pycache__/**",
|
|
88
89
|
"profiles/",
|
|
89
90
|
"skills/",
|
|
90
91
|
"skins/",
|
|
@@ -498,8 +498,8 @@ main{position:relative;z-index:2;padding-top:84px}
|
|
|
498
498
|
.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)}
|
|
499
499
|
.marquee:hover .track{animation-play-state:paused}
|
|
500
500
|
.marquee + .marquee{border-top:1px solid rgba(124,196,255,.08)}
|
|
501
|
-
.track{display:inline-flex;gap:26px;padding:12px 0;animation:scroll
|
|
502
|
-
.marquee.rev .track{animation-direction:reverse;animation-duration:
|
|
501
|
+
.track{display:inline-flex;gap:26px;padding:12px 0;animation:scroll 240s linear infinite;will-change:transform;transform:translate3d(0,0,0);backface-visibility:hidden;perspective:1000px}
|
|
502
|
+
.marquee.rev .track{animation-direction:reverse;animation-duration:255s}
|
|
503
503
|
a.chip{text-decoration:none;color:inherit}
|
|
504
504
|
.chip{
|
|
505
505
|
display:inline-flex;align-items:center;gap:10px;
|
|
@@ -516,6 +516,9 @@ a.chip:hover{border-color:rgba(124,196,255,.3);background:rgba(21,32,49,.6);tran
|
|
|
516
516
|
.chip img.wm.mono{filter:brightness(0) invert(1)}
|
|
517
517
|
|
|
518
518
|
.chip .wordmark{font-family:var(--proto-font,var(--sans));font-weight:var(--proto-weight,750);font-style:var(--proto-style,normal);text-transform:var(--proto-transform,none);letter-spacing:var(--proto-track,-.025em);line-height:1.2}
|
|
519
|
+
.chip .cap{font-family:var(--mono);font-size:9px;letter-spacing:.12em;text-transform:uppercase;color:var(--mute);padding-left:8px;border-left:1px solid rgba(124,196,255,.14)}
|
|
520
|
+
.chip .cap.t4{color:var(--blue)}
|
|
521
|
+
.chip .cap.t3{color:var(--cool)}
|
|
519
522
|
.proto-uniswap{--proto-font:"Inter",var(--sans);--proto-color:#ff4dcb;--proto-weight:850}
|
|
520
523
|
.proto-hyperliquid{--proto-font:var(--display);--proto-style:italic;--proto-color:#50d2c1;--proto-weight:500;--proto-track:.01em}
|
|
521
524
|
.proto-polymarket{--proto-font:"Manrope",var(--sans);--proto-color:#7aa7ff;--proto-weight:800;--proto-track:-.035em}
|
|
@@ -706,7 +709,6 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
|
|
|
706
709
|
</div>
|
|
707
710
|
<div class="hero-lockup" id="hero-title">
|
|
708
711
|
<h1 class="home-title">OR<em>ACLE</em></h1>
|
|
709
|
-
<a class="hero-byline" href="https://x.com/demi_hl" target="_blank" rel="noopener noreferrer">BY DEMI</a>
|
|
710
712
|
</div>
|
|
711
713
|
</div>
|
|
712
714
|
<div class="home-copy">
|
|
@@ -735,6 +737,98 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
|
|
|
735
737
|
<span class="evolve-pill on">more chains</span>
|
|
736
738
|
</div>
|
|
737
739
|
|
|
740
|
+
<div class="venue-rail-head">solana venues routed · <b id="sol-count">101</b> programs verified on-chain · 88 venues</div>
|
|
741
|
+
<div class="evolve-rail venue-rail" id="sol-venue-rail">
|
|
742
|
+
<span class="evolve-pill on">1DEX</span>
|
|
743
|
+
<span class="evolve-pill on">Aldrin</span>
|
|
744
|
+
<span class="evolve-pill on">AlphaQ</span>
|
|
745
|
+
<span class="evolve-pill on">Aquifer</span>
|
|
746
|
+
<span class="evolve-pill on">BinaryFi</span>
|
|
747
|
+
<span class="evolve-pill on">BisonFi</span>
|
|
748
|
+
<span class="evolve-pill on">Bonkswap</span>
|
|
749
|
+
<span class="evolve-pill on">Boop.fun</span>
|
|
750
|
+
<span class="evolve-pill on">Byreal</span>
|
|
751
|
+
<span class="evolve-pill on">Carrot</span>
|
|
752
|
+
<span class="evolve-pill on">Crema</span>
|
|
753
|
+
<span class="evolve-pill on">Cropper</span>
|
|
754
|
+
<span class="evolve-pill on">DefiTuna</span>
|
|
755
|
+
<span class="evolve-pill on">Denali</span>
|
|
756
|
+
<span class="evolve-pill on">Deriverse</span>
|
|
757
|
+
<span class="evolve-pill on">DexLab</span>
|
|
758
|
+
<span class="evolve-pill on">Dynamic Bonding Curve</span>
|
|
759
|
+
<span class="evolve-pill on">Flint</span>
|
|
760
|
+
<span class="evolve-pill on">Flux</span>
|
|
761
|
+
<span class="evolve-pill on">FluxBeam</span>
|
|
762
|
+
<span class="evolve-pill on">GatorSwap</span>
|
|
763
|
+
<span class="evolve-pill on">Gavel</span>
|
|
764
|
+
<span class="evolve-pill on">GoonFi</span>
|
|
765
|
+
<span class="evolve-pill on">GooseFX GAMMA</span>
|
|
766
|
+
<span class="evolve-pill on">Guacswap</span>
|
|
767
|
+
<span class="evolve-pill on">Hadron</span>
|
|
768
|
+
<span class="evolve-pill on">Heaven</span>
|
|
769
|
+
<span class="evolve-pill on">Helium Network</span>
|
|
770
|
+
<span class="evolve-pill on">Huma</span>
|
|
771
|
+
<span class="evolve-pill on">HumidiFi</span>
|
|
772
|
+
<span class="evolve-pill on">Hylo Exchange</span>
|
|
773
|
+
<span class="evolve-pill on">Hylo Stability</span>
|
|
774
|
+
<span class="evolve-pill on">Invariant</span>
|
|
775
|
+
<span class="evolve-pill on">Jupiter Lend</span>
|
|
776
|
+
<span class="evolve-pill on">JupiterRfqV2</span>
|
|
777
|
+
<span class="evolve-pill on">JupLend</span>
|
|
778
|
+
<span class="evolve-pill on">Kipseli</span>
|
|
779
|
+
<span class="evolve-pill on">LemmingsFi</span>
|
|
780
|
+
<span class="evolve-pill on">M Swap</span>
|
|
781
|
+
<span class="evolve-pill on">Manifest</span>
|
|
782
|
+
<span class="evolve-pill on">Mercurial</span>
|
|
783
|
+
<span class="evolve-pill on">MetaDAO</span>
|
|
784
|
+
<span class="evolve-pill on">Meteora</span>
|
|
785
|
+
<span class="evolve-pill on">Meteora DAMM</span>
|
|
786
|
+
<span class="evolve-pill on">Metric</span>
|
|
787
|
+
<span class="evolve-pill on">Moonit</span>
|
|
788
|
+
<span class="evolve-pill on">Obric</span>
|
|
789
|
+
<span class="evolve-pill on">Obsidian</span>
|
|
790
|
+
<span class="evolve-pill on">Omnipair</span>
|
|
791
|
+
<span class="evolve-pill on">OpenBook</span>
|
|
792
|
+
<span class="evolve-pill on">Orca</span>
|
|
793
|
+
<span class="evolve-pill on">PancakeSwap</span>
|
|
794
|
+
<span class="evolve-pill on">Penguin</span>
|
|
795
|
+
<span class="evolve-pill on">Perena</span>
|
|
796
|
+
<span class="evolve-pill on">Perena Star</span>
|
|
797
|
+
<span class="evolve-pill on">Perps</span>
|
|
798
|
+
<span class="evolve-pill on">Phoenix</span>
|
|
799
|
+
<span class="evolve-pill on">Pump.fun</span>
|
|
800
|
+
<span class="evolve-pill on">Quantum</span>
|
|
801
|
+
<span class="evolve-pill on">Raydium</span>
|
|
802
|
+
<span class="evolve-pill on">Riptide</span>
|
|
803
|
+
<span class="evolve-pill on">RunnerRodeo</span>
|
|
804
|
+
<span class="evolve-pill on">Saber</span>
|
|
805
|
+
<span class="evolve-pill on">Saber (Decimals)</span>
|
|
806
|
+
<span class="evolve-pill on">Sanctum</span>
|
|
807
|
+
<span class="evolve-pill on">Sanctum Infinity</span>
|
|
808
|
+
<span class="evolve-pill on">Saros</span>
|
|
809
|
+
<span class="evolve-pill on">Scale</span>
|
|
810
|
+
<span class="evolve-pill on">Scale Vmm</span>
|
|
811
|
+
<span class="evolve-pill on">Scorch</span>
|
|
812
|
+
<span class="evolve-pill on">Solayer</span>
|
|
813
|
+
<span class="evolve-pill on">SolFi</span>
|
|
814
|
+
<span class="evolve-pill on">Stabble</span>
|
|
815
|
+
<span class="evolve-pill on">Stabble Stable Swap</span>
|
|
816
|
+
<span class="evolve-pill on">Stabble Weighted Swap</span>
|
|
817
|
+
<span class="evolve-pill on">StepN</span>
|
|
818
|
+
<span class="evolve-pill on">TaurusFi</span>
|
|
819
|
+
<span class="evolve-pill on">TesseraV</span>
|
|
820
|
+
<span class="evolve-pill on">Token Swap</span>
|
|
821
|
+
<span class="evolve-pill on">Trends</span>
|
|
822
|
+
<span class="evolve-pill on">VaultLiquidUnstake</span>
|
|
823
|
+
<span class="evolve-pill on">Virtuals</span>
|
|
824
|
+
<span class="evolve-pill on">Voltr</span>
|
|
825
|
+
<span class="evolve-pill on">WhaleStreet</span>
|
|
826
|
+
<span class="evolve-pill on">Whirlpool</span>
|
|
827
|
+
<span class="evolve-pill on">Woofi</span>
|
|
828
|
+
<span class="evolve-pill on">XOrca</span>
|
|
829
|
+
<span class="evolve-pill on">ZeroFi</span>
|
|
830
|
+
</div>
|
|
831
|
+
|
|
738
832
|
<div class="graph-canvas">
|
|
739
833
|
<div class="orch" aria-label="Oracle multi-profile graph">
|
|
740
834
|
<div class="row">
|
|
@@ -807,7 +901,7 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
|
|
|
807
901
|
<div class="tag">profile</div>
|
|
808
902
|
<div class="name">solana agent</div>
|
|
809
903
|
<div class="sub">jup · nfts · dexs</div>
|
|
810
|
-
<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>
|
|
904
|
+
<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><span class="ch" id="sol-venue-count">88 venues routed</span></div>
|
|
811
905
|
</div>
|
|
812
906
|
<div class="node route p-btc">
|
|
813
907
|
<div class="tag">profile</div>
|
|
@@ -1021,7 +1115,7 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
|
|
|
1021
1115
|
</div>
|
|
1022
1116
|
</div>
|
|
1023
1117
|
<div class="venues rv">
|
|
1024
|
-
<div class="venues-head"><span>protocols // venues</span><span><b>
|
|
1118
|
+
<div class="venues-head"><span>protocols // venues</span><span><b>exact proven rungs</b> · read + quote does not mean live submit</span></div>
|
|
1025
1119
|
<div class="marquee"><div class="track" id="proto-track-a"></div></div>
|
|
1026
1120
|
<div class="marquee rev"><div class="track" id="proto-track-b"></div></div>
|
|
1027
1121
|
</div>
|
|
@@ -1091,43 +1185,121 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
|
|
|
1091
1185
|
}).join("");
|
|
1092
1186
|
|
|
1093
1187
|
var WM = "assets/wordmarks/";
|
|
1188
|
+
var BRAND = "brand/";
|
|
1094
1189
|
var PROTOS_A = [
|
|
1095
|
-
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
|
|
1104
|
-
|
|
1105
|
-
|
|
1106
|
-
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1190
|
+
{ n: "Uniswap V3", img: "uniswap", cap: "read + quote + prepare + policy", u: "https://app.uniswap.org/" },
|
|
1191
|
+
{ n: "Aerodrome Slipstream", img: "aerodrome", cap: "read + quote + prepare", u: "https://aerodrome.finance/" },
|
|
1192
|
+
{ n: "Pancake V3", img: "pancakeswap", cap: "read + quote", u: "https://pancakeswap.finance/swap" },
|
|
1193
|
+
{ n: "LFJ Liquidity Book", img: "lfj", cap: "read + quote", u: "https://lfj.gg/avalanche/trade" },
|
|
1194
|
+
{ n: "Curve RouterNG", img: "curve", cap: "read + quote + prepare + policy", u: "https://curve.finance" },
|
|
1195
|
+
{ n: "Pendle Router", img: "pendle", cap: "read + quote + prepare + policy", u: "https://pendle.finance/" },
|
|
1196
|
+
{ n: "Morpho vaults", img: "morpho", cap: "read + deposit prepare", u: "https://app.morpho.org/" },
|
|
1197
|
+
{ n: "Lido stETH", img: "lido", cap: "read + stake prepare + policy", u: "https://lido.fi/" },
|
|
1198
|
+
{ n: "Kinetiq kHYPE", img: "kinetiq", cap: "read + quote + stake prepare + policy", u: "https://kinetiq.xyz/stake" },
|
|
1199
|
+
{ n: "Project X", img: "projectx", cap: "read", u: "https://www.prjx.com" },
|
|
1200
|
+
{ n: "Uniswap V4", img: "uniswapv4", cap: "read + quote", u: "https://app.uniswap.org/" },
|
|
1201
|
+
{ n: "Aborean CL", img: "aborean", cap: "read + quote", u: "https://aborean.finance/" },
|
|
1202
|
+
{ n: "Aborean AMM", img: "aborean", cap: "read + quote", u: "https://aborean.finance/" },
|
|
1203
|
+
{ n: "Stable Swap V3", img: "stableswap", cap: "read + quote", u: "https://swap.stable.xyz/" },
|
|
1204
|
+
{ n: "Stable Swap V2", img: "stableswap", cap: "read + quote", u: "https://swap.stable.xyz/" },
|
|
1205
|
+
{ n: "Compound V3", img: "compound", cap: "read + quote", u: "https://www.compound.xyz/" },
|
|
1206
|
+
{ n: "Aerodrome V1", img: "aerodrome", cap: "read + quote", u: "https://aerodrome.finance/" },
|
|
1207
|
+
{ n: "Ethena sUSDe", img: "ethena", cap: "read + quote", u: "https://app.ethena.fi/" },
|
|
1208
|
+
{ n: "Lido wstETH", img: "lido", cap: "read + quote", u: "https://lido.fi/" },
|
|
1209
|
+
{ n: "Benqi sAVAX", img: "benqi", cap: "read + quote", u: "https://app.benqi.fi/savax" },
|
|
1210
|
+
{ n: "EigenLayer", img: "eigenlayer", cap: "read + quote", u: "https://www.eigencloud.xyz/eigenlayer" },
|
|
1211
|
+
{ n: "SSV Network", img: "ssv", cap: "read", u: "https://ssv.network/" },
|
|
1212
|
+
{ n: "Fluid Lending", img: "fluid", cap: "read + quote", u: "https://www.fluid.io/" },
|
|
1213
|
+
{ n: "Rain", img: "rain", cap: "read + quote", u: "https://www.rain.one/" },
|
|
1214
|
+
{ n: "Derive V2", img: "derive", cap: "read", u: "https://app.derive.xyz" },
|
|
1215
|
+
{ n: "PancakeSwap AMM", img: "pancakeswap", cap: "read + quote", u: "https://pancakeswap.finance/" },
|
|
1216
|
+
{ n: "Lista Lending", img: "lista", cap: "read + quote", u: "https://lista.org/lending" },
|
|
1217
|
+
{ n: "Lista CDP", img: "lista", cap: "read", u: "https://lista.org/" },
|
|
1218
|
+
{ n: "Benqi Lending", img: "benqi", cap: "read", u: "https://benqi.fi" },
|
|
1219
|
+
{ n: "Pharaoh V3", img: "pharaoh", cap: "read + quote", u: "https://www.phar.gg/" },
|
|
1220
|
+
{ n: "Polymarket", img: "polymarket", cap: "read", u: "https://polymarket.com/" },
|
|
1221
|
+
{ n: "XSY", img: "xsy", cap: "read", u: "https://xsy.fi" },
|
|
1222
|
+
{ n: "Balancer V2", img: "balancer", cap: "read + quote", u: "https://balancer.fi/" },
|
|
1223
|
+
{ n: "Harmonix", img: "harmonix", cap: "read + quote", u: "https://app.harmonix.fi/" },
|
|
1224
|
+
{ n: "Hyperliquid HLP", img: "hyperliquidhpl", cap: "read", u: "https://app.hyperliquid.xyz" },
|
|
1225
|
+
{ n: "stHYPE + wstHYPE", img: "sthype", cap: "read + quote", u: "https://app.valantis.xyz" },
|
|
1226
|
+
{ n: "Arcus Perps", img: "arcus", cap: "read", u: "https://arcus.xyz/" },
|
|
1227
|
+
{ n: "NOXA Fun", img: "noxa", cap: "read + quote", u: "https://fun.noxa.eth.limo/" },
|
|
1228
|
+
{ n: "Kona V2", img: "kona", cap: "read + quote", u: "https://kona.surf/" },
|
|
1229
|
+
{ n: "Kona Stableswap", img: "kona", cap: "read + quote", u: "https://kona.surf/" },
|
|
1230
|
+
{ n: "NOXA DEX V2", img: "noxa", cap: "read", u: "https://fun.noxa.eth.limo/" },
|
|
1231
|
+
{ n: "AFI Protocol", img: "afi", cap: "read + quote", u: "https://afiprotocol.xyz/" },
|
|
1232
|
+
{ n: "Kelp", img: "kelp", cap: "read + quote", u: "https://kelpdao.xyz/" },
|
|
1233
|
+
{ n: "Dolomite", img: "dolomite", cap: "read", u: "https://dolomite.io" },
|
|
1234
|
+
{ n: "Camelot V3", img: "camelot", cap: "read + quote", u: "https://camelot.exchange/" },
|
|
1235
|
+
{ n: "Beefy", img: "beefy", cap: "read + quote", u: "https://beefy.com" },
|
|
1236
|
+
{ n: "BounceBit", img: "bouncebit", cap: "read", u: "https://bouncebit.io/" },
|
|
1237
|
+
{ n: "BitFi", img: "bitfi", cap: "read", u: "https://www.bitfi.one/" },
|
|
1238
|
+
{ n: "Hypha", img: "hypha", cap: "read + quote", u: "https://www.hypha.sh/" },
|
|
1239
|
+
{ n: "40 Acres", img: "fortyacres", cap: "read + quote", u: "https://www.40acres.finance/" },
|
|
1240
|
+
{ n: "Hyperbeat", img: "hyperbeat", cap: "read + quote", u: "https://app.hyperbeat.org/" },
|
|
1241
|
+
{ n: "GMX V2", img: "gmx", cap: "read + order attestation", u: "https://gmx.io/" },
|
|
1242
|
+
{ n: "Relay", img: "relay", cap: "route source", u: "https://relay.link/" },
|
|
1243
|
+
{ n: "Odos", img: "odos", cap: "read + route source", u: "https://app.odos.xyz" },
|
|
1244
|
+
{ n: "Jupiter", img: "jupiter", cap: "solana route source", u: "https://jup.ag/" },
|
|
1245
|
+
{ n: "Stargate", img: "stargate", cap: "read + bridge route", u: "https://stargate.finance/" }
|
|
1246
|
+
];
|
|
1247
|
+
var PROTOS_B = [
|
|
1248
|
+
{ n: "Uniswap V3 LP", img: "uniswap", cap: "preview + mint/collect prepare", u: "https://app.uniswap.org/" },
|
|
1249
|
+
{ n: "Velodrome V2", img: "velodrome", cap: "read + quote", u: "https://velodrome.finance/" },
|
|
1250
|
+
{ n: "QuickSwap", img: "quickswap", cap: "read + quote", u: "https://quickswap.exchange/" },
|
|
1251
|
+
{ n: "HyperSwap V3", img: "hyperswap", cap: "read + quote", u: "https://app.hyperswap.exchange/" },
|
|
1252
|
+
{ n: "Balancer V3", img: "balancer", cap: "read + quote + prepare + policy", u: "https://balancer.fi/" },
|
|
1253
|
+
{ n: "Aave V3", img: "aave", cap: "read + supply/withdraw prepare + policy", u: "https://aave.com/" },
|
|
1254
|
+
{ n: "Morpho Blue", img: "morpho", cap: "read", u: "https://app.morpho.org" },
|
|
1255
|
+
{ n: "Concrete", img: "concrete", cap: "read + quote", u: "https://app.concrete.xyz" },
|
|
1256
|
+
{ n: "HyperLend", img: "hyperlend", cap: "read + supply/withdraw prepare + policy", u: "https://app.hyperlend.finance/" },
|
|
1257
|
+
{ n: "Kinetiq Earn", img: "kinetiq", cap: "read + quote", u: "https://kinetiq.xyz/stake-hype#kinetiq-earn" },
|
|
1258
|
+
{ n: "Kona Lend", img: "konalend", cap: "read + supply/withdraw prepare + policy", u: "https://app.kona.surf/lending" },
|
|
1259
|
+
{ n: "Uniswap V2", img: "uniswapv2", cap: "read + quote", u: "https://app.uniswap.org/" },
|
|
1260
|
+
{ n: "SakuraSwap AMM", img: "sakuraswap", cap: "read + quote", u: "https://sakuraswap.com/" },
|
|
1261
|
+
{ n: "SakuraSwap CLMM", img: "sakuraswap", cap: "read + quote", u: "https://sakuraswap.com/" },
|
|
1262
|
+
{ n: "Curve DEX", img: "curve", cap: "read + quote", u: "https://curve.finance" },
|
|
1263
|
+
{ n: "Aave V2", img: "aavev2", cap: "read + quote", u: "https://aave.com" },
|
|
1264
|
+
{ n: "Velodrome Slipstream", img: "velodrome", cap: "read + quote", u: "https://velodrome.finance/" },
|
|
1265
|
+
{ n: "Sky sUSDS", img: "sky", cap: "read + quote", u: "https://app.sky.money/" },
|
|
1266
|
+
{ n: "ether.fi weETH", img: "etherfi", cap: "read + quote", u: "https://www.ether.fi/" },
|
|
1267
|
+
{ n: "SparkLend", img: "spark", cap: "read + supply/withdraw prepare + policy", u: "https://spark.finance/" },
|
|
1268
|
+
{ n: "Binance wBETH", img: "wbeth", cap: "read + quote", u: "https://www.binance.com/en/wbeth" },
|
|
1269
|
+
{ n: "Spark Savings", img: "sparksavings", cap: "read + quote", u: "https://spark.finance/" },
|
|
1270
|
+
{ n: "Fluid DEX", img: "fluid", cap: "read + quote", u: "https://www.fluid.io/" },
|
|
1271
|
+
{ n: "ZEROBASE", img: "zerobase", cap: "read", u: "https://app.zerobase.pro/" },
|
|
1272
|
+
{ n: "EtherFi Cash", img: "etherfiborrow", cap: "read", u: "https://www.ether.fi/cash" },
|
|
1273
|
+
{ n: "Venus", img: "venus", cap: "read + quote", u: "https://app.venus.io/" },
|
|
1274
|
+
{ n: "Lista slisBNB", img: "lista", cap: "read + quote", u: "https://lista.org/" },
|
|
1275
|
+
{ n: "Solv", img: "solv", cap: "read + quote", u: "https://solv.finance/" },
|
|
1276
|
+
{ n: "Avant avUSD", img: "avant", cap: "read + quote", u: "https://app.avantprotocol.com/" },
|
|
1277
|
+
{ n: "Yield Yak", img: "yieldyak", cap: "read + quote", u: "https://yieldyak.com/" },
|
|
1278
|
+
{ n: "SushiSwap", img: "sushiswap", cap: "read + quote", u: "https://sushi.com/" },
|
|
1279
|
+
{ n: "Sphere", img: "sphere", cap: "read", u: "https://sphere.finance/" },
|
|
1280
|
+
{ n: "Felix", img: "felix", cap: "read + quote", u: "https://www.usefelix.xyz/" },
|
|
1281
|
+
{ n: "Unit", img: "unit", cap: "read", u: "https://hyperunit.xyz/" },
|
|
1282
|
+
{ n: "Hyperliquid Spot", img: "hyperliquidspot", cap: "read + quote", u: "https://app.hyperliquid.xyz/" },
|
|
1283
|
+
{ n: "Kinetiq kmHYPE", img: "kmhype", cap: "read + quote", u: "https://markets.xyz" },
|
|
1284
|
+
{ n: "Lighter Robinhood", img: "lighter", cap: "read", u: "https://robinhoodchain.lighter.xyz/trade/LIT" },
|
|
1285
|
+
{ n: "Ekubo", img: "ekubo", cap: "read", u: "https://ekubo.org/" },
|
|
1286
|
+
{ n: "Myriad Markets", img: "myriad", cap: "read + quote", u: "https://myriad.markets/markets" },
|
|
1287
|
+
{ n: "GASSSS", img: "gassss", cap: "read + quote", u: "https://gassss.xyz" },
|
|
1288
|
+
{ n: "Rocket Pool", img: "rocketpool", cap: "read + quote", u: "https://rocketpool.net" },
|
|
1289
|
+
{ n: "StakeWise V2", img: "stakewise", cap: "read + quote", u: "https://stakewise.io/" },
|
|
1290
|
+
{ n: "Ostium", img: "ostium", cap: "read + quote", u: "https://www.ostium.io/" },
|
|
1291
|
+
{ n: "Gains Network", img: "gainsnetwork", cap: "read + quote", u: "https://gains.trade/" },
|
|
1292
|
+
{ n: "Aster asBNB", img: "aster", cap: "read + quote", u: "https://www.asterdex.com/en/earn" },
|
|
1293
|
+
{ n: "Lorenzo", img: "lorenzo", cap: "read", u: "https://www.lorenzo-protocol.xyz/" },
|
|
1294
|
+
{ n: "Trader Joe", img: "joedex", cap: "read + quote", u: "https://lfj.gg/avalanche" },
|
|
1295
|
+
{ n: "Folks Finance", img: "folks", cap: "read", u: "https://folks.finance/" },
|
|
1296
|
+
{ n: "Velodrome V1", img: "velodrome", cap: "read + quote", u: "https://velodrome.finance/" },
|
|
1297
|
+
{ n: "Looped Hype", img: "loopedhype", cap: "read + quote", u: "https://www.loopingcollective.org/" },
|
|
1298
|
+
{ n: "LI.FI", img: "lifi", cap: "read + route source", u: "https://li.fi/" },
|
|
1299
|
+
{ n: "Velora", img: "velora", cap: "read + route source", u: "https://app.velora.xyz" },
|
|
1300
|
+
{ n: "CoW Swap", img: "cow", cap: "read + route source", u: "https://cow.fi/" },
|
|
1301
|
+
{ n: "Across", img: "across", cap: "read + bridge route", u: "https://across.to" }
|
|
1302
|
+
];
|
|
1131
1303
|
|
|
1132
1304
|
// Equalize optical weight: constant target area, clamped, then width-capped.
|
|
1133
1305
|
function normalizeMark(img) {
|
|
@@ -1148,10 +1320,15 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
|
|
|
1148
1320
|
function chipRow(list) {
|
|
1149
1321
|
var seq = list.concat(list);
|
|
1150
1322
|
return seq.map(function (x) {
|
|
1151
|
-
var
|
|
1152
|
-
|
|
1153
|
-
|
|
1154
|
-
|
|
1323
|
+
var tier = /policy/.test(x.cap || "") ? " t4" : /prepare/.test(x.cap || "") ? " t3" : "";
|
|
1324
|
+
var body = x.img
|
|
1325
|
+
? '<img class="wm tall" src="' + BRAND + x.img + '.webp" alt="' + x.n + '" decoding="async">' +
|
|
1326
|
+
'<span class="wordmark">' + x.n + '</span>' +
|
|
1327
|
+
'<span class="cap' + tier + '">' + x.cap + '</span>'
|
|
1328
|
+
: x.wm
|
|
1329
|
+
? '<img class="' + (x.tall ? 'wm tall' : 'wm') + (x.mono ? ' mono' : '') + '" src="' + WM + x.wm + '" alt="' + x.n + '" decoding="async">' +
|
|
1330
|
+
(x.tall ? '<span class="wordmark">' + x.n + '</span>' : '')
|
|
1331
|
+
: '<span class="wordmark">' + x.n + '</span>';
|
|
1155
1332
|
return '<a class="chip wm-chip" href="' + x.u + '" target="_blank" rel="noopener noreferrer" aria-label="' + x.n + '">' + body + '</a>';
|
|
1156
1333
|
}).join("");
|
|
1157
1334
|
}
|
|
@@ -1176,7 +1353,7 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
|
|
|
1176
1353
|
];
|
|
1177
1354
|
document.getElementById("llm-track").innerHTML = LLMS.concat(LLMS).map(function (x) {
|
|
1178
1355
|
var cls = x.tall ? "wm tall" : "wm";
|
|
1179
|
-
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 + '"
|
|
1356
|
+
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>';
|
|
1180
1357
|
}).join("");
|
|
1181
1358
|
|
|
1182
1359
|
wireMarks(document.getElementById("proto-track-a"));
|