@continuumdao/ctm-mpc-defi 0.2.63 → 0.2.64
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 +1 -1
- package/dist/agent/catalog.cjs.map +1 -1
- package/dist/agent/catalog.js +1 -1
- package/dist/agent/catalog.js.map +1 -1
- package/dist/agent/skills/aerodrome/SKILL.md +8 -6
- package/dist/agent/skills/continuum-dao/SKILL.md +2 -2
- package/dist/protocols/evm/continuum-dao/index.cjs +397 -70
- package/dist/protocols/evm/continuum-dao/index.cjs.map +1 -1
- package/dist/protocols/evm/continuum-dao/index.d.ts +27 -3
- package/dist/protocols/evm/continuum-dao/index.js +398 -71
- package/dist/protocols/evm/continuum-dao/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -29,7 +29,7 @@ Use `get_defi_protocol_supported_tokens` only as a slim ticker list (ETH, USDC,
|
|
|
29
29
|
## Before writes
|
|
30
30
|
|
|
31
31
|
1. `load_defi_protocol({ protocolId: "aerodrome" })` — activates **market-data** (includes quote)
|
|
32
|
-
2. `get_defi_protocol_supported_chains` — must
|
|
32
|
+
2. `get_defi_protocol_supported_chains` — the chain you pass must be a launch chain with a node `rpcGateway`. Base `8453` is the default, not the only chain.
|
|
33
33
|
3. Writes: `activate_tool_group` with `aerodrome:swap`, `aerodrome:lp`, or `aerodrome:rewards`
|
|
34
34
|
|
|
35
35
|
`aerodrome:trading` expands to swaps + lp + rewards (not market-data).
|
|
@@ -38,7 +38,7 @@ Use `get_defi_protocol_supported_tokens` only as a slim ticker list (ETH, USDC,
|
|
|
38
38
|
|
|
39
39
|
After the quote (include `amountOutHuman` and `priceImpactPercent`), **stop and ask** before any `ctm_aerodrome_build_*_multisign`:
|
|
40
40
|
|
|
41
|
-
1. `get_multi_sign_gas_options({ chainId
|
|
41
|
+
1. `get_multi_sign_gas_options({ chainId })` — same launch chain as the quote. Confirm `useCustomGas` **false** (live RPC, default) vs **true** (Custom Gas Config from the chain registry).
|
|
42
42
|
2. Confirm the **30-minute** multiSignRequest deadline (members must agree, Get Sig, and broadcast before it expires). The on-chain router/NFPM deadline uses the same window. Omit `expiryDate` for 30 minutes; pass `expiryDate` as unix seconds only if they choose a different window.
|
|
43
43
|
|
|
44
44
|
Do not create the request until they confirm both.
|
|
@@ -57,9 +57,11 @@ Do not create the request until they confirm both.
|
|
|
57
57
|
Same as the Multi-Sign Liquidity tab:
|
|
58
58
|
|
|
59
59
|
```
|
|
60
|
-
ctm_aerodrome_quote_add_liquidity({ chainId
|
|
60
|
+
ctm_aerodrome_quote_add_liquidity({ chainId, tokenA: "ETH", tokenB: "USDC", amountAHuman: "0.01" })
|
|
61
61
|
```
|
|
62
62
|
|
|
63
|
+
`chainId` is the launch chain for this request. Base `8453` is the default. Coinbase stock pairs stay on Base.
|
|
64
|
+
|
|
63
65
|
- One-sided: pass **either** `amountAHuman` or `amountBHuman`. The other side is filled from the current vAMM/sAMM reserves, or from Slipstream `slot0` when there is no v2 pool.
|
|
64
66
|
- Tickers work (`AAPLc`, `USDC`, `ETH`). B20 stocks are 8 decimals. Unissued stocks (`totalSupply == 0`) error the same as the dialog.
|
|
65
67
|
- **ETH / Coinbase stock has no pool.** `seedable` is `false` and `hint` tells you to pair the stock vs **USDC**. Do not first-deposit an empty vAMM.
|
|
@@ -84,11 +86,11 @@ Skip emissions when `claimEmissions` is `null` (no gauge). Slipstream unstaked f
|
|
|
84
86
|
|
|
85
87
|
## Addresses
|
|
86
88
|
|
|
87
|
-
|
|
89
|
+
Baked per launch chain from https://app.aero.xyz/docs/security/ (launched 2026-10-22). Do not invent addresses. Pass the chain the user is on: Base `8453` (default), Ethereum `1`, OP Mainnet `10`, Arbitrum `42161`, Robinhood Chain `4663`, Arc `5042`, or Ink `57073`.
|
|
88
90
|
|
|
89
|
-
|
|
91
|
+
V2 swaps use the shared Metarouter on every launch chain. On Base, v2 add-liquidity still quotes the legacy router. Other chains do not encode v2 add-liquidity yet. LpSugar is the Base pool index only. Arc has no known WETH or USDC. The tracked token is new AERO on Base and xAERO on the other launch chains.
|
|
90
92
|
|
|
91
|
-
Coinbase B20 stocks (AAPLc, NVDAc, PYPLc, AMDc, ORCLc, BRK.Bc, …) trade on **Slipstream 3** (`clFactory3`) vs USDC. Tickers resolve from the live Coinbase tokenized-stocks API. There is no baked-in address list. Pass the ticker — do not ask for a contract address. Stock-backed **loans** (lend/borrow USDC against B20 collateral) are Morpho — `load_defi_protocol morpho` and `ctm_morpho_fetch_stock_markets`, not
|
|
93
|
+
Coinbase B20 stocks (AAPLc, NVDAc, PYPLc, AMDc, ORCLc, BRK.Bc, …) stay on **Base only** and trade on **Slipstream 3** (`clFactory3`) vs USDC. Tickers resolve from the live Coinbase tokenized-stocks API. There is no baked-in address list. Pass the ticker — do not ask for a contract address. Stock-backed **loans** (lend/borrow USDC against B20 collateral) are Morpho — `load_defi_protocol morpho` and `ctm_morpho_fetch_stock_markets`, not Aero LP. Sugar tokens whose address uses the B20 ASSET prefix `0xb200…` are also treated as stocks. `issued` is live `totalSupply() > 0`. Quotes use factory `getPool` discovery + MixedRouteQuoterV3 (path bitmasks). Sugar `forSwaps` alone misses these pools. Native ETH → stock is typically WETH → USDC → stock.
|
|
92
94
|
|
|
93
95
|
## Out of scope
|
|
94
96
|
|
|
@@ -67,7 +67,7 @@ When a proposal has a `forumKey`, fetch that thread (`ctm_continuum_dao_forum_re
|
|
|
67
67
|
1. `get_forum_session` then `forum_me`. If `loggedIn`, reuse the ticket. Only if there is no session or `loggedIn` is false: `forum_sign_in_eligible` then `build_forum_sign_in_multisign`. Pass `address` on forum writes so the tool loads that node session before posting.
|
|
68
68
|
2. If it is only an idea: `forum_create_idea`. Stop (no propose).
|
|
69
69
|
3. If it is a proposal: `forum_create_topic` with the matching Governance `section` (proposal-threshold veCTM). Keep the returned `url`.
|
|
70
|
-
4. Compose actions with `ctm_continuum_dao_compose_proposal_action` (prefer ABI from `etherscan__get_contract_abi` with chainid 59144/59141, type-check values, preview table). Then offer `ctm_continuum_dao_simulate_proposal` — pass `account` for another EOA, or `keyGenId` / omit `account` for the preferred KeyGen. Write `foundry.files` and run `foundry__forge_script` on a Linea fork with no `--broadcast
|
|
70
|
+
4. Compose actions with `ctm_continuum_dao_compose_proposal_action` (prefer ABI from `etherscan__get_contract_abi` with chainid 59144/59141, type-check values, preview table). Then offer `ctm_continuum_dao_simulate_proposal` — pass `account` for another EOA, or `keyGenId` / omit `account` for the preferred KeyGen. Write each `foundry.files` source unchanged (`abi.encodeCall` on the function signature, not raw hex calldata) and run `foundry__forge_script` on a Linea fork with no `--broadcast` until every file has a result. Isolated `eth_call` is not success. Stop if `ok` is false or a forge script reverts, and quote the bubbled revert.
|
|
71
71
|
5. `build_propose_bravo_multisign` or `build_propose_delta_multisign` with that `url` as `forumKey`, plus `description` and `type` (KeyGen submit only). The tool writes the governance catalog, then submits the multi-sign request. It refuses a reverting `propose()` or (when the RPC supports it) sequential `eth_simulateV1` execute. Sequential execute still requires the forge scripts above.
|
|
72
72
|
6. If the catalog POST failed, retry with `register_proposal` and the same `forumKey`, `description`, `type`, input names, and `onchainId`. A 409 updates the existing row. Do not create a second propose.
|
|
73
73
|
|
|
@@ -84,7 +84,7 @@ Forum sign-in and sign-out are **agent/MCP only**. There is no Sign in / Sign ou
|
|
|
84
84
|
|
|
85
85
|
Propose builders **hard-fail** if `getVotes(KeyGen) <` live `proposalThreshold()` — no sign request is created. On-chain rule (vectm `ContinuumDAO`): `max(1000 ether, 1% of past total voting power)`. Do not hardcode `1000`. The standalone simulate tool only **warns** when a different `account` is short.
|
|
86
86
|
|
|
87
|
-
`build_propose_*` dry-runs `propose()` from the preferred signer KeyGen and refuses a revert or a short `getVotes`. `ctm_continuum_dao_simulate_proposal` is the same voting-power + `propose()` dry-run for a **different** `account` (draft / committee EOA) without submitting. It always reads `getVotes(account)` vs live `proposalThreshold()`; if the address is short, the result includes `warning` — read that aloud (Committee is not exempt). Both paths return `foundry.files`: a propose script (prank the proposer) and sequential execute scripts (prank the governor; no timelock). Bravo is one execute script; Delta is one file per option. Later actions in the same `run()` see earlier state. Isolated `eth_call` / `cast call` cannot do that. `forumKey` is not required on the standalone simulate tool.
|
|
87
|
+
`build_propose_*` dry-runs `propose()` from the preferred signer KeyGen and refuses a revert or a short `getVotes`. `ctm_continuum_dao_simulate_proposal` is the same voting-power + `propose()` dry-run for a **different** `account` (draft / committee EOA) without submitting. It always reads `getVotes(account)` vs live `proposalThreshold()`; if the address is short, the result includes `warning` — read that aloud (Committee is not exempt). Both paths return `foundry.files`: a propose script (prank the proposer) and sequential execute scripts (prank the governor; no timelock). Each action is `abi.encodeCall` on its Solidity signature. Write that source unchanged and finish `foundry__forge_script` (no `--broadcast`) for every file in the same turn; quote a bubbled revert and stop. Bravo is one execute script; Delta is one file per option. Later actions in the same `run()` see earlier state. Isolated `eth_call` / `cast call` cannot do that. `forumKey` is not required on the standalone simulate tool.
|
|
88
88
|
|
|
89
89
|
## Tools
|
|
90
90
|
|