@continuumdao/ctm-mpc-defi 0.2.56 → 0.2.58
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/dist/agent/catalog.cjs +749 -171
- package/dist/agent/catalog.cjs.map +1 -1
- package/dist/agent/catalog.d.ts +373 -44
- package/dist/agent/catalog.js +738 -173
- package/dist/agent/catalog.js.map +1 -1
- package/dist/agent/skills/aave-v4/SKILL.md +26 -3
- package/dist/agent/skills/aerodrome/SKILL.md +3 -1
- package/dist/agent/skills/circle-cctp/SKILL.md +1 -1
- package/dist/agent/skills/curve-dao/SKILL.md +2 -2
- package/dist/agent/skills/railgun/SKILL.md +39 -0
- package/dist/agent/skills/uniswap-v4/SKILL.md +2 -2
- package/dist/index.cjs +165 -19
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +166 -20
- package/dist/index.js.map +1 -1
- package/dist/protocols/evm/aave-v4/index.cjs +198 -15
- package/dist/protocols/evm/aave-v4/index.cjs.map +1 -1
- package/dist/protocols/evm/aave-v4/index.d.ts +62 -7
- package/dist/protocols/evm/aave-v4/index.js +189 -16
- package/dist/protocols/evm/aave-v4/index.js.map +1 -1
- package/dist/protocols/evm/aerodrome/index.cjs +152 -63
- package/dist/protocols/evm/aerodrome/index.cjs.map +1 -1
- package/dist/protocols/evm/aerodrome/index.d.ts +30 -58
- package/dist/protocols/evm/aerodrome/index.js +151 -64
- package/dist/protocols/evm/aerodrome/index.js.map +1 -1
- package/dist/protocols/evm/circle-cctp/index.cjs +5 -3
- package/dist/protocols/evm/circle-cctp/index.cjs.map +1 -1
- package/dist/protocols/evm/circle-cctp/index.d.ts +3 -1
- package/dist/protocols/evm/circle-cctp/index.js +5 -4
- package/dist/protocols/evm/circle-cctp/index.js.map +1 -1
- package/dist/protocols/evm/compound-v3/index.cjs +115 -2
- package/dist/protocols/evm/compound-v3/index.cjs.map +1 -1
- package/dist/protocols/evm/compound-v3/index.js +116 -3
- package/dist/protocols/evm/compound-v3/index.js.map +1 -1
- package/dist/protocols/evm/continuum-dao/index.cjs +1 -1
- package/dist/protocols/evm/continuum-dao/index.cjs.map +1 -1
- package/dist/protocols/evm/continuum-dao/index.d.ts +1 -1
- package/dist/protocols/evm/continuum-dao/index.js +1 -1
- package/dist/protocols/evm/continuum-dao/index.js.map +1 -1
- package/dist/protocols/evm/curve-dao/index.cjs +120 -5
- package/dist/protocols/evm/curve-dao/index.cjs.map +1 -1
- package/dist/protocols/evm/curve-dao/index.js +120 -5
- package/dist/protocols/evm/curve-dao/index.js.map +1 -1
- package/dist/protocols/evm/euler-v2/index.cjs +121 -6
- package/dist/protocols/evm/euler-v2/index.cjs.map +1 -1
- package/dist/protocols/evm/euler-v2/index.js +121 -6
- package/dist/protocols/evm/euler-v2/index.js.map +1 -1
- package/dist/protocols/evm/morpho/index.cjs +129 -57
- package/dist/protocols/evm/morpho/index.cjs.map +1 -1
- package/dist/protocols/evm/morpho/index.d.ts +2 -1
- package/dist/protocols/evm/morpho/index.js +129 -58
- package/dist/protocols/evm/morpho/index.js.map +1 -1
- package/dist/protocols/evm/pendle/index.cjs +129 -10
- package/dist/protocols/evm/pendle/index.cjs.map +1 -1
- package/dist/protocols/evm/pendle/index.js +129 -10
- package/dist/protocols/evm/pendle/index.js.map +1 -1
- package/dist/protocols/evm/railgun/index.cjs +1261 -0
- package/dist/protocols/evm/railgun/index.cjs.map +1 -0
- package/dist/protocols/evm/railgun/index.d.ts +294 -0
- package/dist/protocols/evm/railgun/index.js +1218 -0
- package/dist/protocols/evm/railgun/index.js.map +1 -0
- package/dist/protocols/evm/uniswap-v4/index.cjs +164 -17
- package/dist/protocols/evm/uniswap-v4/index.cjs.map +1 -1
- package/dist/protocols/evm/uniswap-v4/index.js +165 -18
- package/dist/protocols/evm/uniswap-v4/index.js.map +1 -1
- package/package.json +17 -1
|
@@ -702,6 +702,121 @@ async function fetchEulerBorrowCollateralMaxWithdrawAssetsWei(args) {
|
|
|
702
702
|
caller
|
|
703
703
|
});
|
|
704
704
|
}
|
|
705
|
+
var COINBASE_B20_STOCK_DECIMALS = 8;
|
|
706
|
+
var COINBASE_B20_ASSET_PREFIX = "0xb200000000000000000000";
|
|
707
|
+
function isCoinbaseB20AssetToken(address) {
|
|
708
|
+
try {
|
|
709
|
+
return viem.getAddress(address).toLowerCase().startsWith(COINBASE_B20_ASSET_PREFIX);
|
|
710
|
+
} catch {
|
|
711
|
+
return false;
|
|
712
|
+
}
|
|
713
|
+
}
|
|
714
|
+
function looksLikeCoinbaseStockSymbol(symbol) {
|
|
715
|
+
return /^[A-Za-z][A-Za-z0-9]{0,8}(?:\.[A-Za-z][A-Za-z0-9]{0,4})?c$/.test((symbol ?? "").trim());
|
|
716
|
+
}
|
|
717
|
+
var COINBASE_TOKENIZED_STOCKS_API_URL = "https://api.coinbase.com/v1/tokenized-stocks";
|
|
718
|
+
var CATALOG_TTL_MS = 15 * 60 * 1e3;
|
|
719
|
+
var CATALOG_MAX = 500;
|
|
720
|
+
var catalogRows = null;
|
|
721
|
+
var catalogAt = 0;
|
|
722
|
+
var catalogInflight = null;
|
|
723
|
+
var catalogBySymbol = /* @__PURE__ */ new Map();
|
|
724
|
+
var catalogByAddress = /* @__PURE__ */ new Map();
|
|
725
|
+
function indexCatalog(rows) {
|
|
726
|
+
catalogRows = rows;
|
|
727
|
+
catalogAt = Date.now();
|
|
728
|
+
catalogBySymbol.clear();
|
|
729
|
+
catalogByAddress.clear();
|
|
730
|
+
for (const row of rows) {
|
|
731
|
+
catalogBySymbol.set(row.symbol.toLowerCase(), row);
|
|
732
|
+
catalogByAddress.set(row.address.toLowerCase(), row);
|
|
733
|
+
}
|
|
734
|
+
}
|
|
735
|
+
function parseCoinbaseTokenizedStocksPayload(payload) {
|
|
736
|
+
const tokens = Array.isArray(payload) ? payload : payload && typeof payload === "object" && Array.isArray(payload.tokens) ? payload.tokens : [];
|
|
737
|
+
const out = [];
|
|
738
|
+
const seen = /* @__PURE__ */ new Set();
|
|
739
|
+
for (const row of tokens) {
|
|
740
|
+
if (!row || typeof row !== "object") continue;
|
|
741
|
+
const rec = row;
|
|
742
|
+
const symbol = typeof rec.symbol === "string" ? rec.symbol.trim() : "";
|
|
743
|
+
const addressRaw = typeof rec.contract_address === "string" ? rec.contract_address.trim() : "";
|
|
744
|
+
if (!looksLikeCoinbaseStockSymbol(symbol) || !isCoinbaseB20AssetToken(addressRaw)) continue;
|
|
745
|
+
const address = viem.getAddress(addressRaw);
|
|
746
|
+
const key = address.toLowerCase();
|
|
747
|
+
if (seen.has(key)) continue;
|
|
748
|
+
seen.add(key);
|
|
749
|
+
const name = typeof rec.name === "string" && rec.name.trim() ? rec.name.trim() : symbol;
|
|
750
|
+
const iconUrl = typeof rec.icon_url === "string" && rec.icon_url.trim() ? rec.icon_url.trim() : void 0;
|
|
751
|
+
const decimals = typeof rec.decimals === "number" && Number.isInteger(rec.decimals) && rec.decimals >= 0 && rec.decimals <= 18 ? rec.decimals : COINBASE_B20_STOCK_DECIMALS;
|
|
752
|
+
out.push({ address, symbol, name, decimals, iconUrl });
|
|
753
|
+
if (out.length >= CATALOG_MAX) break;
|
|
754
|
+
}
|
|
755
|
+
return out;
|
|
756
|
+
}
|
|
757
|
+
async function fetchCoinbaseB20StockCatalog() {
|
|
758
|
+
const merged = [];
|
|
759
|
+
const seen = /* @__PURE__ */ new Set();
|
|
760
|
+
let pageToken = "";
|
|
761
|
+
for (let page = 0; page < 4; page++) {
|
|
762
|
+
const url = new URL(COINBASE_TOKENIZED_STOCKS_API_URL);
|
|
763
|
+
url.searchParams.set("page_size", "500");
|
|
764
|
+
if (pageToken) url.searchParams.set("page_token", pageToken);
|
|
765
|
+
const res = await fetch(url, { cache: "no-store", signal: AbortSignal.timeout(8e3) });
|
|
766
|
+
if (!res.ok) break;
|
|
767
|
+
const json = await res.json();
|
|
768
|
+
for (const row of parseCoinbaseTokenizedStocksPayload(json)) {
|
|
769
|
+
const key = row.address.toLowerCase();
|
|
770
|
+
if (seen.has(key)) continue;
|
|
771
|
+
seen.add(key);
|
|
772
|
+
merged.push(row);
|
|
773
|
+
if (merged.length >= CATALOG_MAX) break;
|
|
774
|
+
}
|
|
775
|
+
pageToken = typeof json.next_page_token === "string" ? json.next_page_token.trim() : "";
|
|
776
|
+
if (!pageToken || merged.length >= CATALOG_MAX) break;
|
|
777
|
+
}
|
|
778
|
+
if (merged.length > 0) indexCatalog(merged);
|
|
779
|
+
return catalogRows ?? [];
|
|
780
|
+
}
|
|
781
|
+
async function ensureCoinbaseB20StockCatalog() {
|
|
782
|
+
if (catalogRows && catalogRows.length > 0 && Date.now() - catalogAt < CATALOG_TTL_MS) return catalogRows;
|
|
783
|
+
if (!catalogInflight) {
|
|
784
|
+
catalogInflight = fetchCoinbaseB20StockCatalog().finally(() => {
|
|
785
|
+
catalogInflight = null;
|
|
786
|
+
});
|
|
787
|
+
}
|
|
788
|
+
try {
|
|
789
|
+
return await catalogInflight;
|
|
790
|
+
} catch {
|
|
791
|
+
return catalogRows ?? [];
|
|
792
|
+
}
|
|
793
|
+
}
|
|
794
|
+
function lookupCoinbaseB20StockToken(token) {
|
|
795
|
+
const key = (token ?? "").trim();
|
|
796
|
+
if (!key) return null;
|
|
797
|
+
const fromCatalog = catalogBySymbol.get(key.toLowerCase());
|
|
798
|
+
if (fromCatalog) return fromCatalog;
|
|
799
|
+
try {
|
|
800
|
+
return catalogByAddress.get(viem.getAddress(key).toLowerCase()) ?? null;
|
|
801
|
+
} catch {
|
|
802
|
+
return null;
|
|
803
|
+
}
|
|
804
|
+
}
|
|
805
|
+
async function canonicalizeEvmTokenInput(token) {
|
|
806
|
+
const raw = (token ?? "").trim();
|
|
807
|
+
if (!raw || viem.isAddress(raw)) return raw;
|
|
808
|
+
if (!looksLikeCoinbaseStockSymbol(raw)) return raw;
|
|
809
|
+
await ensureCoinbaseB20StockCatalog().catch(() => []);
|
|
810
|
+
const hit = lookupCoinbaseB20StockToken(raw);
|
|
811
|
+
if (!hit) {
|
|
812
|
+
throw new Error(
|
|
813
|
+
`Unknown Coinbase stock ticker "${raw}". It is not in the live tokenized-stocks catalog.`
|
|
814
|
+
);
|
|
815
|
+
}
|
|
816
|
+
return hit.address;
|
|
817
|
+
}
|
|
818
|
+
|
|
819
|
+
// src/protocols/evm/euler-v2/isolatedLendMultisign.ts
|
|
705
820
|
var EULER_V2_ISOLATED_VAULT_DEPOSIT_FALLBACK_GAS = 950000n;
|
|
706
821
|
var EULER_VAULT_DEPOSIT_ESTIMATE_FALLBACK = EULER_V2_ISOLATED_VAULT_DEPOSIT_FALLBACK_GAS;
|
|
707
822
|
var EULER_ERC20_APPROVE_FALLBACK = 100000n;
|
|
@@ -716,7 +831,7 @@ var erc4626DepositAbi = viem.parseAbi([
|
|
|
716
831
|
"function deposit(uint256 assets, address receiver) returns (uint256 shares)"
|
|
717
832
|
]);
|
|
718
833
|
async function buildEvmMultisignBodyEulerV2IsolatedLendDepositBatch(args) {
|
|
719
|
-
const asset = viem.getAddress(args.underlying);
|
|
834
|
+
const asset = viem.getAddress(await canonicalizeEvmTokenInput(args.underlying));
|
|
720
835
|
const evault = viem.getAddress(args.evault);
|
|
721
836
|
const weth = viem.getAddress(args.nativeWrapped);
|
|
722
837
|
const executor = viem.getAddress(args.executorAddress);
|
|
@@ -913,8 +1028,8 @@ async function buildEvmMultisignBodyEulerV2IsolatedBorrowBatch(args) {
|
|
|
913
1028
|
const evc = viem.getAddress(args.evc);
|
|
914
1029
|
const borrowVault = viem.getAddress(args.borrowVault);
|
|
915
1030
|
const collateralVault = viem.getAddress(args.collateralVault);
|
|
916
|
-
const collateralAsset = viem.getAddress(args.collateralUnderlying);
|
|
917
|
-
const borrowAsset = viem.getAddress(args.borrowUnderlying);
|
|
1031
|
+
const collateralAsset = viem.getAddress(await canonicalizeEvmTokenInput(args.collateralUnderlying));
|
|
1032
|
+
const borrowAsset = viem.getAddress(await canonicalizeEvmTokenInput(args.borrowUnderlying));
|
|
918
1033
|
const weth = viem.getAddress(args.nativeWrapped);
|
|
919
1034
|
const executor = viem.getAddress(args.executorAddress);
|
|
920
1035
|
const receiver = viem.getAddress(args.receiver);
|
|
@@ -1324,7 +1439,7 @@ var evcAbi3 = viem.parseAbi([
|
|
|
1324
1439
|
async function buildEvmMultisignBodyEulerV2BorrowCollateralDepositBatch(args) {
|
|
1325
1440
|
const evc = viem.getAddress(args.evc);
|
|
1326
1441
|
const collateralVault = viem.getAddress(args.collateralVault);
|
|
1327
|
-
const collateralAsset = viem.getAddress(args.collateralUnderlying);
|
|
1442
|
+
const collateralAsset = viem.getAddress(await canonicalizeEvmTokenInput(args.collateralUnderlying));
|
|
1328
1443
|
const subAccount = viem.getAddress(args.subAccount);
|
|
1329
1444
|
const executor = viem.getAddress(args.executorAddress);
|
|
1330
1445
|
const ch = viem.defineChain({
|
|
@@ -2544,7 +2659,7 @@ async function fetchEulerV2IsolatedLendMarketsForRowAsset(args) {
|
|
|
2544
2659
|
return rows;
|
|
2545
2660
|
}
|
|
2546
2661
|
async function eulerV2FetchLendVaultsSummary(args) {
|
|
2547
|
-
const addr = args.underlyingAddress.trim();
|
|
2662
|
+
const addr = (await canonicalizeEvmTokenInput(args.underlyingAddress)).trim();
|
|
2548
2663
|
if (!viem.isAddress(addr)) {
|
|
2549
2664
|
throw new Error("underlyingAddress must be a valid ERC-20 address.");
|
|
2550
2665
|
}
|
|
@@ -2840,7 +2955,7 @@ function checksumHex2(raw) {
|
|
|
2840
2955
|
|
|
2841
2956
|
// src/protocols/evm/euler-v2/eulerV2EarnDiscovery.ts
|
|
2842
2957
|
async function eulerV2FetchEarnVaultsSummary(args) {
|
|
2843
|
-
const addr = args.underlyingAddress.trim();
|
|
2958
|
+
const addr = (await canonicalizeEvmTokenInput(args.underlyingAddress)).trim();
|
|
2844
2959
|
if (!viem.isAddress(addr)) {
|
|
2845
2960
|
throw new Error("underlyingAddress must be a valid ERC-20 address.");
|
|
2846
2961
|
}
|