@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
|
@@ -700,6 +700,121 @@ async function fetchEulerBorrowCollateralMaxWithdrawAssetsWei(args) {
|
|
|
700
700
|
caller
|
|
701
701
|
});
|
|
702
702
|
}
|
|
703
|
+
var COINBASE_B20_STOCK_DECIMALS = 8;
|
|
704
|
+
var COINBASE_B20_ASSET_PREFIX = "0xb200000000000000000000";
|
|
705
|
+
function isCoinbaseB20AssetToken(address) {
|
|
706
|
+
try {
|
|
707
|
+
return getAddress(address).toLowerCase().startsWith(COINBASE_B20_ASSET_PREFIX);
|
|
708
|
+
} catch {
|
|
709
|
+
return false;
|
|
710
|
+
}
|
|
711
|
+
}
|
|
712
|
+
function looksLikeCoinbaseStockSymbol(symbol) {
|
|
713
|
+
return /^[A-Za-z][A-Za-z0-9]{0,8}(?:\.[A-Za-z][A-Za-z0-9]{0,4})?c$/.test((symbol ?? "").trim());
|
|
714
|
+
}
|
|
715
|
+
var COINBASE_TOKENIZED_STOCKS_API_URL = "https://api.coinbase.com/v1/tokenized-stocks";
|
|
716
|
+
var CATALOG_TTL_MS = 15 * 60 * 1e3;
|
|
717
|
+
var CATALOG_MAX = 500;
|
|
718
|
+
var catalogRows = null;
|
|
719
|
+
var catalogAt = 0;
|
|
720
|
+
var catalogInflight = null;
|
|
721
|
+
var catalogBySymbol = /* @__PURE__ */ new Map();
|
|
722
|
+
var catalogByAddress = /* @__PURE__ */ new Map();
|
|
723
|
+
function indexCatalog(rows) {
|
|
724
|
+
catalogRows = rows;
|
|
725
|
+
catalogAt = Date.now();
|
|
726
|
+
catalogBySymbol.clear();
|
|
727
|
+
catalogByAddress.clear();
|
|
728
|
+
for (const row of rows) {
|
|
729
|
+
catalogBySymbol.set(row.symbol.toLowerCase(), row);
|
|
730
|
+
catalogByAddress.set(row.address.toLowerCase(), row);
|
|
731
|
+
}
|
|
732
|
+
}
|
|
733
|
+
function parseCoinbaseTokenizedStocksPayload(payload) {
|
|
734
|
+
const tokens = Array.isArray(payload) ? payload : payload && typeof payload === "object" && Array.isArray(payload.tokens) ? payload.tokens : [];
|
|
735
|
+
const out = [];
|
|
736
|
+
const seen = /* @__PURE__ */ new Set();
|
|
737
|
+
for (const row of tokens) {
|
|
738
|
+
if (!row || typeof row !== "object") continue;
|
|
739
|
+
const rec = row;
|
|
740
|
+
const symbol = typeof rec.symbol === "string" ? rec.symbol.trim() : "";
|
|
741
|
+
const addressRaw = typeof rec.contract_address === "string" ? rec.contract_address.trim() : "";
|
|
742
|
+
if (!looksLikeCoinbaseStockSymbol(symbol) || !isCoinbaseB20AssetToken(addressRaw)) continue;
|
|
743
|
+
const address = getAddress(addressRaw);
|
|
744
|
+
const key = address.toLowerCase();
|
|
745
|
+
if (seen.has(key)) continue;
|
|
746
|
+
seen.add(key);
|
|
747
|
+
const name = typeof rec.name === "string" && rec.name.trim() ? rec.name.trim() : symbol;
|
|
748
|
+
const iconUrl = typeof rec.icon_url === "string" && rec.icon_url.trim() ? rec.icon_url.trim() : void 0;
|
|
749
|
+
const decimals = typeof rec.decimals === "number" && Number.isInteger(rec.decimals) && rec.decimals >= 0 && rec.decimals <= 18 ? rec.decimals : COINBASE_B20_STOCK_DECIMALS;
|
|
750
|
+
out.push({ address, symbol, name, decimals, iconUrl });
|
|
751
|
+
if (out.length >= CATALOG_MAX) break;
|
|
752
|
+
}
|
|
753
|
+
return out;
|
|
754
|
+
}
|
|
755
|
+
async function fetchCoinbaseB20StockCatalog() {
|
|
756
|
+
const merged = [];
|
|
757
|
+
const seen = /* @__PURE__ */ new Set();
|
|
758
|
+
let pageToken = "";
|
|
759
|
+
for (let page = 0; page < 4; page++) {
|
|
760
|
+
const url = new URL(COINBASE_TOKENIZED_STOCKS_API_URL);
|
|
761
|
+
url.searchParams.set("page_size", "500");
|
|
762
|
+
if (pageToken) url.searchParams.set("page_token", pageToken);
|
|
763
|
+
const res = await fetch(url, { cache: "no-store", signal: AbortSignal.timeout(8e3) });
|
|
764
|
+
if (!res.ok) break;
|
|
765
|
+
const json = await res.json();
|
|
766
|
+
for (const row of parseCoinbaseTokenizedStocksPayload(json)) {
|
|
767
|
+
const key = row.address.toLowerCase();
|
|
768
|
+
if (seen.has(key)) continue;
|
|
769
|
+
seen.add(key);
|
|
770
|
+
merged.push(row);
|
|
771
|
+
if (merged.length >= CATALOG_MAX) break;
|
|
772
|
+
}
|
|
773
|
+
pageToken = typeof json.next_page_token === "string" ? json.next_page_token.trim() : "";
|
|
774
|
+
if (!pageToken || merged.length >= CATALOG_MAX) break;
|
|
775
|
+
}
|
|
776
|
+
if (merged.length > 0) indexCatalog(merged);
|
|
777
|
+
return catalogRows ?? [];
|
|
778
|
+
}
|
|
779
|
+
async function ensureCoinbaseB20StockCatalog() {
|
|
780
|
+
if (catalogRows && catalogRows.length > 0 && Date.now() - catalogAt < CATALOG_TTL_MS) return catalogRows;
|
|
781
|
+
if (!catalogInflight) {
|
|
782
|
+
catalogInflight = fetchCoinbaseB20StockCatalog().finally(() => {
|
|
783
|
+
catalogInflight = null;
|
|
784
|
+
});
|
|
785
|
+
}
|
|
786
|
+
try {
|
|
787
|
+
return await catalogInflight;
|
|
788
|
+
} catch {
|
|
789
|
+
return catalogRows ?? [];
|
|
790
|
+
}
|
|
791
|
+
}
|
|
792
|
+
function lookupCoinbaseB20StockToken(token) {
|
|
793
|
+
const key = (token ?? "").trim();
|
|
794
|
+
if (!key) return null;
|
|
795
|
+
const fromCatalog = catalogBySymbol.get(key.toLowerCase());
|
|
796
|
+
if (fromCatalog) return fromCatalog;
|
|
797
|
+
try {
|
|
798
|
+
return catalogByAddress.get(getAddress(key).toLowerCase()) ?? null;
|
|
799
|
+
} catch {
|
|
800
|
+
return null;
|
|
801
|
+
}
|
|
802
|
+
}
|
|
803
|
+
async function canonicalizeEvmTokenInput(token) {
|
|
804
|
+
const raw = (token ?? "").trim();
|
|
805
|
+
if (!raw || isAddress(raw)) return raw;
|
|
806
|
+
if (!looksLikeCoinbaseStockSymbol(raw)) return raw;
|
|
807
|
+
await ensureCoinbaseB20StockCatalog().catch(() => []);
|
|
808
|
+
const hit = lookupCoinbaseB20StockToken(raw);
|
|
809
|
+
if (!hit) {
|
|
810
|
+
throw new Error(
|
|
811
|
+
`Unknown Coinbase stock ticker "${raw}". It is not in the live tokenized-stocks catalog.`
|
|
812
|
+
);
|
|
813
|
+
}
|
|
814
|
+
return hit.address;
|
|
815
|
+
}
|
|
816
|
+
|
|
817
|
+
// src/protocols/evm/euler-v2/isolatedLendMultisign.ts
|
|
703
818
|
var EULER_V2_ISOLATED_VAULT_DEPOSIT_FALLBACK_GAS = 950000n;
|
|
704
819
|
var EULER_VAULT_DEPOSIT_ESTIMATE_FALLBACK = EULER_V2_ISOLATED_VAULT_DEPOSIT_FALLBACK_GAS;
|
|
705
820
|
var EULER_ERC20_APPROVE_FALLBACK = 100000n;
|
|
@@ -714,7 +829,7 @@ var erc4626DepositAbi = parseAbi([
|
|
|
714
829
|
"function deposit(uint256 assets, address receiver) returns (uint256 shares)"
|
|
715
830
|
]);
|
|
716
831
|
async function buildEvmMultisignBodyEulerV2IsolatedLendDepositBatch(args) {
|
|
717
|
-
const asset = getAddress(args.underlying);
|
|
832
|
+
const asset = getAddress(await canonicalizeEvmTokenInput(args.underlying));
|
|
718
833
|
const evault = getAddress(args.evault);
|
|
719
834
|
const weth = getAddress(args.nativeWrapped);
|
|
720
835
|
const executor = getAddress(args.executorAddress);
|
|
@@ -911,8 +1026,8 @@ async function buildEvmMultisignBodyEulerV2IsolatedBorrowBatch(args) {
|
|
|
911
1026
|
const evc = getAddress(args.evc);
|
|
912
1027
|
const borrowVault = getAddress(args.borrowVault);
|
|
913
1028
|
const collateralVault = getAddress(args.collateralVault);
|
|
914
|
-
const collateralAsset = getAddress(args.collateralUnderlying);
|
|
915
|
-
const borrowAsset = getAddress(args.borrowUnderlying);
|
|
1029
|
+
const collateralAsset = getAddress(await canonicalizeEvmTokenInput(args.collateralUnderlying));
|
|
1030
|
+
const borrowAsset = getAddress(await canonicalizeEvmTokenInput(args.borrowUnderlying));
|
|
916
1031
|
const weth = getAddress(args.nativeWrapped);
|
|
917
1032
|
const executor = getAddress(args.executorAddress);
|
|
918
1033
|
const receiver = getAddress(args.receiver);
|
|
@@ -1322,7 +1437,7 @@ var evcAbi3 = parseAbi([
|
|
|
1322
1437
|
async function buildEvmMultisignBodyEulerV2BorrowCollateralDepositBatch(args) {
|
|
1323
1438
|
const evc = getAddress(args.evc);
|
|
1324
1439
|
const collateralVault = getAddress(args.collateralVault);
|
|
1325
|
-
const collateralAsset = getAddress(args.collateralUnderlying);
|
|
1440
|
+
const collateralAsset = getAddress(await canonicalizeEvmTokenInput(args.collateralUnderlying));
|
|
1326
1441
|
const subAccount = getAddress(args.subAccount);
|
|
1327
1442
|
const executor = getAddress(args.executorAddress);
|
|
1328
1443
|
const ch = defineChain({
|
|
@@ -2542,7 +2657,7 @@ async function fetchEulerV2IsolatedLendMarketsForRowAsset(args) {
|
|
|
2542
2657
|
return rows;
|
|
2543
2658
|
}
|
|
2544
2659
|
async function eulerV2FetchLendVaultsSummary(args) {
|
|
2545
|
-
const addr = args.underlyingAddress.trim();
|
|
2660
|
+
const addr = (await canonicalizeEvmTokenInput(args.underlyingAddress)).trim();
|
|
2546
2661
|
if (!isAddress(addr)) {
|
|
2547
2662
|
throw new Error("underlyingAddress must be a valid ERC-20 address.");
|
|
2548
2663
|
}
|
|
@@ -2838,7 +2953,7 @@ function checksumHex2(raw) {
|
|
|
2838
2953
|
|
|
2839
2954
|
// src/protocols/evm/euler-v2/eulerV2EarnDiscovery.ts
|
|
2840
2955
|
async function eulerV2FetchEarnVaultsSummary(args) {
|
|
2841
|
-
const addr = args.underlyingAddress.trim();
|
|
2956
|
+
const addr = (await canonicalizeEvmTokenInput(args.underlyingAddress)).trim();
|
|
2842
2957
|
if (!isAddress(addr)) {
|
|
2843
2958
|
throw new Error("underlyingAddress must be a valid ERC-20 address.");
|
|
2844
2959
|
}
|