@oracle-agent/oracle 0.10.0 → 0.12.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.
Files changed (424) hide show
  1. package/LICENSE +115 -201
  2. package/README.md +82 -91
  3. package/SECURITY.md +37 -12
  4. package/SETUP.md +207 -272
  5. package/dist/action-receipts.mjs +1 -0
  6. package/dist/action-semantics.mjs +1 -0
  7. package/dist/address-book.mjs +2 -0
  8. package/dist/bin/desk-server.mjs +14 -0
  9. package/dist/bin/oracle-data-mcp.mjs +8 -0
  10. package/dist/bin/oracle-init.mjs +24 -0
  11. package/dist/bin/oracle-public-server.mjs +5 -0
  12. package/dist/bin/oracle-route.mjs +22 -0
  13. package/dist/bin/oracle-scan.mjs +18 -0
  14. package/dist/bin/oracle-upgrade.mjs +21 -0
  15. package/dist/bin/oracle.mjs +68 -0
  16. package/dist/chains.mjs +1 -0
  17. package/dist/cli/commands/auth.mjs +16 -0
  18. package/dist/cli/commands/bootstrap.mjs +18 -0
  19. package/dist/cli/commands/chain.mjs +21 -0
  20. package/dist/cli/commands/chat.mjs +35 -0
  21. package/dist/cli/commands/credential.mjs +1 -0
  22. package/dist/cli/commands/data-mcp.mjs +2 -0
  23. package/dist/cli/commands/data.mjs +12 -0
  24. package/dist/cli/commands/doctor.mjs +5 -0
  25. package/dist/cli/commands/gate.mjs +13 -0
  26. package/dist/cli/commands/help.mjs +1 -0
  27. package/dist/cli/commands/init.mjs +3 -0
  28. package/dist/cli/commands/mcp.mjs +33 -0
  29. package/dist/cli/commands/model.mjs +44 -0
  30. package/dist/cli/commands/prepare.mjs +2 -0
  31. package/dist/cli/commands/public.mjs +3 -0
  32. package/dist/cli/commands/route.mjs +2 -0
  33. package/dist/cli/commands/runner.mjs +1 -0
  34. package/dist/cli/commands/scan.mjs +2 -0
  35. package/dist/cli/commands/setup.mjs +34 -0
  36. package/dist/cli/commands/sign.mjs +4 -0
  37. package/dist/cli/commands/signer.mjs +1 -0
  38. package/dist/cli/commands/upgrade.mjs +2 -0
  39. package/dist/cli/commands/vault.mjs +1 -0
  40. package/dist/cli/commands/version.mjs +2 -0
  41. package/dist/data/desk-data.mjs +12 -0
  42. package/dist/index.mjs +17 -0
  43. package/dist/nft-gas-war-guard.mjs +1 -0
  44. package/dist/onboarding/harness-configs.mjs +4 -0
  45. package/dist/portfolio-risk.mjs +1 -0
  46. package/dist/prepare-envelope.mjs +1 -0
  47. package/dist/public-control/policy-schema.mjs +1 -0
  48. package/dist/router/index.mjs +2 -0
  49. package/dist/scanner/index.mjs +4 -0
  50. package/dist/signals/index.mjs +1 -0
  51. package/dist/watch-preferences.mjs +1 -0
  52. package/package.json +27 -65
  53. package/public/oracle-splash/assets/cli-chain-hyperliquid.jpg +0 -0
  54. package/public/oracle-splash/brand/aave.webp +0 -0
  55. package/public/oracle-splash/brand/aavev2.webp +0 -0
  56. package/public/oracle-splash/brand/aborean.webp +0 -0
  57. package/public/oracle-splash/brand/across.webp +0 -0
  58. package/public/oracle-splash/brand/aerodrome.webp +0 -0
  59. package/public/oracle-splash/brand/afi.webp +0 -0
  60. package/public/oracle-splash/brand/arcus.webp +0 -0
  61. package/public/oracle-splash/brand/aster.webp +0 -0
  62. package/public/oracle-splash/brand/avant.webp +0 -0
  63. package/public/oracle-splash/brand/balancer.webp +0 -0
  64. package/public/oracle-splash/brand/beefy.webp +0 -0
  65. package/public/oracle-splash/brand/benqi.webp +0 -0
  66. package/public/oracle-splash/brand/bestinslot.ico +0 -0
  67. package/public/oracle-splash/brand/bitfi.webp +0 -0
  68. package/public/oracle-splash/brand/bonkswap.webp +0 -0
  69. package/public/oracle-splash/brand/bouncebit.webp +0 -0
  70. package/public/oracle-splash/brand/camelot.webp +0 -0
  71. package/public/oracle-splash/brand/compound.webp +0 -0
  72. package/public/oracle-splash/brand/concrete.webp +0 -0
  73. package/public/oracle-splash/brand/cow.webp +0 -0
  74. package/public/oracle-splash/brand/curve.webp +0 -0
  75. package/public/oracle-splash/brand/derive.webp +0 -0
  76. package/public/oracle-splash/brand/dolomite.webp +0 -0
  77. package/public/oracle-splash/brand/eigenlayer.webp +0 -0
  78. package/public/oracle-splash/brand/ekubo.webp +0 -0
  79. package/public/oracle-splash/brand/ethena.webp +0 -0
  80. package/public/oracle-splash/brand/etherfi.webp +0 -0
  81. package/public/oracle-splash/brand/etherfiborrow.webp +0 -0
  82. package/public/oracle-splash/brand/felix.webp +0 -0
  83. package/public/oracle-splash/brand/fluid.webp +0 -0
  84. package/public/oracle-splash/brand/fluxbeam.webp +0 -0
  85. package/public/oracle-splash/brand/folks.webp +0 -0
  86. package/public/oracle-splash/brand/fortyacres.webp +0 -0
  87. package/public/oracle-splash/brand/gainsnetwork.webp +0 -0
  88. package/public/oracle-splash/brand/gassss.webp +0 -0
  89. package/public/oracle-splash/brand/gmx.webp +0 -0
  90. package/public/oracle-splash/brand/harmonix.webp +0 -0
  91. package/public/oracle-splash/brand/hlorderbook.webp +0 -0
  92. package/public/oracle-splash/brand/hlp.webp +0 -0
  93. package/public/oracle-splash/brand/hop.webp +0 -0
  94. package/public/oracle-splash/brand/hyperbeat.webp +0 -0
  95. package/public/oracle-splash/brand/hyperlend.webp +0 -0
  96. package/public/oracle-splash/brand/hyperliquid.webp +0 -0
  97. package/public/oracle-splash/brand/hyperliquidhpl.webp +0 -0
  98. package/public/oracle-splash/brand/hyperliquidspot.webp +0 -0
  99. package/public/oracle-splash/brand/hyperswap.webp +0 -0
  100. package/public/oracle-splash/brand/hypha.webp +0 -0
  101. package/public/oracle-splash/brand/joedex.webp +0 -0
  102. package/public/oracle-splash/brand/jupiter.webp +0 -0
  103. package/public/oracle-splash/brand/kelp.webp +0 -0
  104. package/public/oracle-splash/brand/kinetiq.webp +0 -0
  105. package/public/oracle-splash/brand/kmhype.webp +0 -0
  106. package/public/oracle-splash/brand/kona.webp +0 -0
  107. package/public/oracle-splash/brand/konalend.webp +0 -0
  108. package/public/oracle-splash/brand/lfj.webp +0 -0
  109. package/public/oracle-splash/brand/lido.webp +0 -0
  110. package/public/oracle-splash/brand/lifi.webp +0 -0
  111. package/public/oracle-splash/brand/lighter.webp +0 -0
  112. package/public/oracle-splash/brand/lista.webp +0 -0
  113. package/public/oracle-splash/brand/loopedhype.webp +0 -0
  114. package/public/oracle-splash/brand/lorenzo.webp +0 -0
  115. package/public/oracle-splash/brand/magic-eden.webp +0 -0
  116. package/public/oracle-splash/brand/magiceden.webp +0 -0
  117. package/public/oracle-splash/brand/mempool.png +0 -0
  118. package/public/oracle-splash/brand/meteora.webp +0 -0
  119. package/public/oracle-splash/brand/morpho.webp +0 -0
  120. package/public/oracle-splash/brand/myriad.webp +0 -0
  121. package/public/oracle-splash/brand/noxa.webp +0 -0
  122. package/public/oracle-splash/brand/odos.webp +0 -0
  123. package/public/oracle-splash/brand/oneinch.webp +0 -0
  124. package/public/oracle-splash/brand/openbook.webp +0 -0
  125. package/public/oracle-splash/brand/opensea.webp +0 -0
  126. package/public/oracle-splash/brand/orca.webp +0 -0
  127. package/public/oracle-splash/brand/ordinals.png +0 -0
  128. package/public/oracle-splash/brand/ostium.webp +0 -0
  129. package/public/oracle-splash/brand/pancakeswap.webp +0 -0
  130. package/public/oracle-splash/brand/pendle.webp +0 -0
  131. package/public/oracle-splash/brand/perena.webp +0 -0
  132. package/public/oracle-splash/brand/pharaoh.webp +0 -0
  133. package/public/oracle-splash/brand/phoenix.webp +0 -0
  134. package/public/oracle-splash/brand/polymarket.webp +0 -0
  135. package/public/oracle-splash/brand/polynomial.webp +0 -0
  136. package/public/oracle-splash/brand/projectx.webp +0 -0
  137. package/public/oracle-splash/brand/pumpfun.webp +0 -0
  138. package/public/oracle-splash/brand/quickswap.webp +0 -0
  139. package/public/oracle-splash/brand/rain.webp +0 -0
  140. package/public/oracle-splash/brand/raydium.webp +0 -0
  141. package/public/oracle-splash/brand/relay.webp +0 -0
  142. package/public/oracle-splash/brand/rocketpool.webp +0 -0
  143. package/public/oracle-splash/brand/saber.webp +0 -0
  144. package/public/oracle-splash/brand/sakuraswap.webp +0 -0
  145. package/public/oracle-splash/brand/sanctum.webp +0 -0
  146. package/public/oracle-splash/brand/satflow.png +0 -0
  147. package/public/oracle-splash/brand/sierra.webp +0 -0
  148. package/public/oracle-splash/brand/sky.webp +0 -0
  149. package/public/oracle-splash/brand/solv.webp +0 -0
  150. package/public/oracle-splash/brand/spark.webp +0 -0
  151. package/public/oracle-splash/brand/sparksavings.webp +0 -0
  152. package/public/oracle-splash/brand/sphere.webp +0 -0
  153. package/public/oracle-splash/brand/ssv.webp +0 -0
  154. package/public/oracle-splash/brand/stabble.webp +0 -0
  155. package/public/oracle-splash/brand/stableswap.webp +0 -0
  156. package/public/oracle-splash/brand/stakewise.webp +0 -0
  157. package/public/oracle-splash/brand/stargate.webp +0 -0
  158. package/public/oracle-splash/brand/sthype.webp +0 -0
  159. package/public/oracle-splash/brand/sushiswap.webp +0 -0
  160. package/public/oracle-splash/brand/unisat.png +0 -0
  161. package/public/oracle-splash/brand/uniswap.webp +0 -0
  162. package/public/oracle-splash/brand/uniswapv2.webp +0 -0
  163. package/public/oracle-splash/brand/uniswapv4.webp +0 -0
  164. package/public/oracle-splash/brand/unit.webp +0 -0
  165. package/public/oracle-splash/brand/velodrome.webp +0 -0
  166. package/public/oracle-splash/brand/velora.webp +0 -0
  167. package/public/oracle-splash/brand/venus.webp +0 -0
  168. package/public/oracle-splash/brand/wbeth.webp +0 -0
  169. package/public/oracle-splash/brand/xsy.webp +0 -0
  170. package/public/oracle-splash/brand/yieldyak.webp +0 -0
  171. package/public/oracle-splash/brand/zerobase.webp +0 -0
  172. package/public/oracle-splash/brand/zerox.webp +0 -0
  173. package/public/oracle-splash/index.html +246 -169
  174. package/CONTRIBUTING.md +0 -98
  175. package/bin/desk-server.mjs +0 -440
  176. package/bin/oracle-data-mcp.mjs +0 -1010
  177. package/bin/oracle-init.mjs +0 -496
  178. package/bin/oracle-public-server.mjs +0 -36
  179. package/bin/oracle-route.mjs +0 -254
  180. package/bin/oracle-scan.mjs +0 -192
  181. package/bin/oracle-upgrade.mjs +0 -42
  182. package/bin/oracle.mjs +0 -33
  183. package/docs/adding-a-chain.md +0 -229
  184. package/docs/architecture.md +0 -136
  185. package/docs/cli.md +0 -47
  186. package/docs/connectors.md +0 -13
  187. package/docs/oracle-pack-standard.md +0 -29
  188. package/docs/profiles.md +0 -154
  189. package/examples/add-a-chain.mjs +0 -65
  190. package/examples/oracle-pack-template.mjs +0 -38
  191. package/examples/research-a-token.mjs +0 -70
  192. package/plugins/oracle-owner-gate/__init__.py +0 -227
  193. package/plugins/oracle-owner-gate/plugin.yaml +0 -9
  194. package/profiles/_template/SOUL.md +0 -54
  195. package/profiles/_template/profile.json +0 -22
  196. package/profiles/bitcoin-agent/SOUL.md +0 -31
  197. package/profiles/bitcoin-agent/profile.json +0 -32
  198. package/profiles/hyperliquid-agent/SOUL.md +0 -34
  199. package/profiles/hyperliquid-agent/profile.json +0 -37
  200. package/profiles/oracle/SOUL.md +0 -107
  201. package/profiles/oracle/profile.json +0 -39
  202. package/profiles/polymarket-agent/SOUL.md +0 -35
  203. package/profiles/polymarket-agent/profile.json +0 -34
  204. package/profiles/profile.schema.json +0 -90
  205. package/profiles/protocol-builder/SOUL.md +0 -57
  206. package/profiles/protocol-builder/profile.json +0 -39
  207. package/profiles/robinhood-agent/SOUL.md +0 -53
  208. package/profiles/robinhood-agent/profile.json +0 -40
  209. package/profiles/solana-agent/SOUL.md +0 -37
  210. package/profiles/solana-agent/profile.json +0 -37
  211. package/profiles/stable-agent/SOUL.md +0 -43
  212. package/profiles/stable-agent/profile.json +0 -37
  213. package/protocols/templates/safe-erc20/SECURITY.md +0 -16
  214. package/protocols/templates/safe-erc20/foundry.toml +0 -12
  215. package/protocols/templates/safe-erc20/remappings.txt +0 -2
  216. package/protocols/templates/safe-erc20/src/SafeERC20.sol +0 -53
  217. package/protocols/templates/safe-erc20/test/SafeERC20.t.sol +0 -72
  218. package/scripts/adversarial-bench.mjs +0 -114
  219. package/scripts/build-inscription.py +0 -230
  220. package/scripts/check-doc-drift.mjs +0 -112
  221. package/scripts/check-test-count.mjs +0 -105
  222. package/scripts/e2e-hl-markets.mjs +0 -21
  223. package/scripts/e2e-hl-perps.mjs +0 -48
  224. package/scripts/e2e-hypercore-staking.mjs +0 -128
  225. package/scripts/e2e-solana-bitcoin.mjs +0 -183
  226. package/scripts/protocol-template-gate.mjs +0 -15
  227. package/scripts/public-api-scan.mjs +0 -23
  228. package/scripts/secret-scan.mjs +0 -181
  229. package/scripts/verify-v3-venues.mjs +0 -192
  230. package/skills/balance/SKILL.md +0 -176
  231. package/skills/oracle-action-semantics/SKILL.md +0 -40
  232. package/skills/oracle-best-execution/SKILL.md +0 -127
  233. package/skills/oracle-bitcoin/SKILL.md +0 -53
  234. package/skills/oracle-chain-graphs-telegram-cards/SKILL.md +0 -59
  235. package/skills/oracle-chat/SKILL.md +0 -61
  236. package/skills/oracle-chat/chain.SKILL.md +0 -31
  237. package/skills/oracle-chat/setup.SKILL.md +0 -37
  238. package/skills/oracle-circuit-breaker/SKILL.md +0 -51
  239. package/skills/oracle-contract-research/SKILL.md +0 -55
  240. package/skills/oracle-desk/SKILL.md +0 -58
  241. package/skills/oracle-dex-launch/SKILL.md +0 -38
  242. package/skills/oracle-grants/SKILL.md +0 -69
  243. package/skills/oracle-hypercore-staking/SKILL.md +0 -57
  244. package/skills/oracle-hyperliquid/SKILL.md +0 -56
  245. package/skills/oracle-meme-token-sniper/SKILL.md +0 -73
  246. package/skills/oracle-multichain-nft-launch/SKILL.md +0 -338
  247. package/skills/oracle-multichain-token-launch/SKILL.md +0 -300
  248. package/skills/oracle-nft-gacha-launch/SKILL.md +0 -48
  249. package/skills/oracle-nft-mint-gas-war/SKILL.md +0 -63
  250. package/skills/oracle-polymarket/SKILL.md +0 -60
  251. package/skills/oracle-protocol-builder/SKILL.md +0 -59
  252. package/skills/oracle-protocol-security/SKILL.md +0 -60
  253. package/skills/oracle-public-product/SKILL.md +0 -44
  254. package/skills/oracle-receipts/SKILL.md +0 -52
  255. package/skills/oracle-rfq-tokenized-assets/SKILL.md +0 -69
  256. package/skills/oracle-smart-wallet-scanner/SKILL.md +0 -49
  257. package/skills/oracle-solana/SKILL.md +0 -65
  258. package/skills/oracle-solana-nft/SKILL.md +0 -54
  259. package/skills/oracle-token-research/SKILL.md +0 -67
  260. package/skins/oracle.yaml +0 -56
  261. package/src/action-receipts.mjs +0 -168
  262. package/src/action-semantics.mjs +0 -62
  263. package/src/address-book.mjs +0 -208
  264. package/src/agent-auth.mjs +0 -206
  265. package/src/approval-guard.mjs +0 -282
  266. package/src/attestation-secret.mjs +0 -88
  267. package/src/audit-log.mjs +0 -196
  268. package/src/auth/oauth.mjs +0 -672
  269. package/src/auto-slippage.mjs +0 -378
  270. package/src/capability-posture.mjs +0 -125
  271. package/src/chains.mjs +0 -62
  272. package/src/cli/chain-catalog.mjs +0 -215
  273. package/src/cli/chain-state.mjs +0 -74
  274. package/src/cli/commands/auth.mjs +0 -193
  275. package/src/cli/commands/bootstrap.mjs +0 -87
  276. package/src/cli/commands/chain.mjs +0 -143
  277. package/src/cli/commands/chat.mjs +0 -434
  278. package/src/cli/commands/credential.mjs +0 -9
  279. package/src/cli/commands/data-mcp.mjs +0 -18
  280. package/src/cli/commands/data.mjs +0 -73
  281. package/src/cli/commands/doctor.mjs +0 -126
  282. package/src/cli/commands/help.mjs +0 -7
  283. package/src/cli/commands/init.mjs +0 -27
  284. package/src/cli/commands/mcp.mjs +0 -142
  285. package/src/cli/commands/model.mjs +0 -99
  286. package/src/cli/commands/prepare.mjs +0 -12
  287. package/src/cli/commands/public.mjs +0 -20
  288. package/src/cli/commands/route.mjs +0 -12
  289. package/src/cli/commands/runner.mjs +0 -9
  290. package/src/cli/commands/scan.mjs +0 -12
  291. package/src/cli/commands/setup.mjs +0 -275
  292. package/src/cli/commands/sign.mjs +0 -21
  293. package/src/cli/commands/signer.mjs +0 -9
  294. package/src/cli/commands/upgrade.mjs +0 -12
  295. package/src/cli/commands/vault.mjs +0 -9
  296. package/src/cli/commands/version.mjs +0 -22
  297. package/src/cli/first-run.mjs +0 -23
  298. package/src/cli/kernel.mjs +0 -239
  299. package/src/cli/mcp-targets/chatgpt.mjs +0 -51
  300. package/src/cli/mcp-targets/claude-code.mjs +0 -39
  301. package/src/cli/mcp-targets/claude-desktop.mjs +0 -24
  302. package/src/cli/mcp-targets/codex.mjs +0 -41
  303. package/src/cli/mcp-targets/shared.mjs +0 -61
  304. package/src/cli/messaging-platforms.mjs +0 -209
  305. package/src/cli/model-config.mjs +0 -70
  306. package/src/cli/operator-dispatch.mjs +0 -258
  307. package/src/cli/oracle-harness.py +0 -415
  308. package/src/cli/paths.mjs +0 -83
  309. package/src/cli/runtime.mjs +0 -351
  310. package/src/cli/setup-state.mjs +0 -168
  311. package/src/cli/spawn-child.mjs +0 -43
  312. package/src/data/catalog.mjs +0 -554
  313. package/src/data/desk-data.mjs +0 -683
  314. package/src/data/http.mjs +0 -253
  315. package/src/data/provider-endpoint.mjs +0 -94
  316. package/src/data/providers/aerodrome.mjs +0 -245
  317. package/src/data/providers/balancer.mjs +0 -209
  318. package/src/data/providers/bitcoin-esplora.mjs +0 -216
  319. package/src/data/providers/bitcoin-meta.mjs +0 -378
  320. package/src/data/providers/blockscout.mjs +0 -14
  321. package/src/data/providers/bridges.mjs +0 -242
  322. package/src/data/providers/cowswap.mjs +0 -415
  323. package/src/data/providers/curve.mjs +0 -201
  324. package/src/data/providers/defillama.mjs +0 -88
  325. package/src/data/providers/dexscreener.mjs +0 -43
  326. package/src/data/providers/evm-rpc.mjs +0 -222
  327. package/src/data/providers/geckoterminal.mjs +0 -34
  328. package/src/data/providers/gmx.mjs +0 -496
  329. package/src/data/providers/hl-assets.mjs +0 -165
  330. package/src/data/providers/hl-info.mjs +0 -108
  331. package/src/data/providers/hl-markets.mjs +0 -210
  332. package/src/data/providers/hl-outcome.mjs +0 -61
  333. package/src/data/providers/hl-perps.mjs +0 -387
  334. package/src/data/providers/hl-staking.mjs +0 -353
  335. package/src/data/providers/hl-ws.mjs +0 -119
  336. package/src/data/providers/hyperevm-dex.mjs +0 -49
  337. package/src/data/providers/jupiter.mjs +0 -183
  338. package/src/data/providers/lifi.mjs +0 -151
  339. package/src/data/providers/magiceden-sol.mjs +0 -393
  340. package/src/data/providers/morpho.mjs +0 -173
  341. package/src/data/providers/nft-gallery.mjs +0 -163
  342. package/src/data/providers/nft-portfolio.mjs +0 -494
  343. package/src/data/providers/odos.mjs +0 -156
  344. package/src/data/providers/oneinch.mjs +0 -174
  345. package/src/data/providers/opensea-multichain.mjs +0 -136
  346. package/src/data/providers/opensea-nft.mjs +0 -371
  347. package/src/data/providers/paraswap.mjs +0 -118
  348. package/src/data/providers/pendle.mjs +0 -187
  349. package/src/data/providers/poly-clob.mjs +0 -283
  350. package/src/data/providers/poly-public.mjs +0 -96
  351. package/src/data/providers/poly-ws.mjs +0 -103
  352. package/src/data/providers/portfolio-history.mjs +0 -394
  353. package/src/data/providers/portfolio.mjs +0 -594
  354. package/src/data/providers/rfq.mjs +0 -15
  355. package/src/data/providers/rh-agent.mjs +0 -59
  356. package/src/data/providers/satflow.mjs +0 -338
  357. package/src/data/providers/solana-rpc.mjs +0 -197
  358. package/src/data/providers/uniswap-v3.mjs +0 -320
  359. package/src/data/providers/zerox.mjs +0 -167
  360. package/src/data/public-api-scan.mjs +0 -61
  361. package/src/data/quote-placeholder.mjs +0 -31
  362. package/src/exact-integer.mjs +0 -72
  363. package/src/exec-policy.mjs +0 -455
  364. package/src/flags.mjs +0 -15
  365. package/src/fresh-window.mjs +0 -76
  366. package/src/gmx-attestation.mjs +0 -176
  367. package/src/index.mjs +0 -100
  368. package/src/nft-gas-war-guard.mjs +0 -139
  369. package/src/onboarding/agent-keys.mjs +0 -161
  370. package/src/onboarding/harness-configs.mjs +0 -102
  371. package/src/onboarding/index.mjs +0 -18
  372. package/src/onboarding/tiers.mjs +0 -139
  373. package/src/oracle-env.mjs +0 -47
  374. package/src/portfolio-risk.mjs +0 -170
  375. package/src/prepare-envelope.mjs +0 -186
  376. package/src/profile-upgrade.mjs +0 -277
  377. package/src/protocol-execution.mjs +0 -84
  378. package/src/protocol-templates/gate.mjs +0 -179
  379. package/src/protocol-templates/prepare-deploy.mjs +0 -81
  380. package/src/public-api/buzz-integration.mjs +0 -256
  381. package/src/public-api/connect-agent.mjs +0 -416
  382. package/src/public-api/grants.mjs +0 -142
  383. package/src/public-api/http.mjs +0 -389
  384. package/src/public-control/aa-adapter.mjs +0 -402
  385. package/src/public-control/build-registry.mjs +0 -227
  386. package/src/public-control/bundler-client.mjs +0 -357
  387. package/src/public-control/grant-indexer.mjs +0 -296
  388. package/src/public-control/policy-render.mjs +0 -69
  389. package/src/public-control/policy-schema.mjs +0 -318
  390. package/src/public-control/runtime-config.mjs +0 -275
  391. package/src/public-control/session-key-model.mjs +0 -374
  392. package/src/public-control/session-orchestrator.mjs +0 -412
  393. package/src/rfq/intent.mjs +0 -180
  394. package/src/rfq/sources.mjs +0 -181
  395. package/src/route-attestation.mjs +0 -132
  396. package/src/router/best-execution.mjs +0 -326
  397. package/src/router/index.mjs +0 -226
  398. package/src/router/prepare-bridge.mjs +0 -289
  399. package/src/router/prepare-route.mjs +0 -381
  400. package/src/router/proposal.mjs +0 -311
  401. package/src/router/risk-classifier.mjs +0 -119
  402. package/src/router/route-sources.mjs +0 -329
  403. package/src/scanner/chains.config.mjs +0 -430
  404. package/src/scanner/contract.mjs +0 -270
  405. package/src/scanner/evm-scanner.mjs +0 -394
  406. package/src/scanner/index.mjs +0 -9
  407. package/src/scanner/v2-venue.mjs +0 -335
  408. package/src/scanner/v3-venue.mjs +0 -290
  409. package/src/scopes.mjs +0 -44
  410. package/src/sell-simulation.mjs +0 -167
  411. package/src/signals/engine.mjs +0 -146
  412. package/src/signals/index.mjs +0 -1
  413. package/src/token-transfer-guard.mjs +0 -188
  414. package/src/tui/app.mjs +0 -438
  415. package/src/tui/backend.mjs +0 -145
  416. package/src/tui/format.mjs +0 -272
  417. package/src/tui/gateway-client.mjs +0 -177
  418. package/src/tui/input.mjs +0 -501
  419. package/src/tui/renderer.mjs +0 -443
  420. package/src/tui/standalone-client.mjs +0 -666
  421. package/src/tui/theme.mjs +0 -81
  422. package/src/vault-attestation.mjs +0 -146
  423. package/src/venues.mjs +0 -206
  424. package/src/watch-preferences.mjs +0 -85
@@ -1,39 +0,0 @@
1
- {
2
- "$schema": "./profile.schema.json",
3
- "id": "oracle",
4
- "label": "oracle",
5
- "role": "router",
6
- "color": "#7CC4FF",
7
- "description": "Router for multichain trading, building, analysis, wallet/NFT inventory and value history, scanners, RFQ, tokenized-asset buys, NFT mint gas limits, meme-token sniping, and chain-family token/NFT launches.",
8
- "model": {
9
- "note": "Wants the strongest reasoner available: routing and synthesis are judgment calls.",
10
- "suggested": "strong-reasoner"
11
- },
12
- "skills": [
13
- "oracle-desk",
14
- "oracle-action-semantics",
15
- "oracle-grants",
16
- "oracle-receipts",
17
- "oracle-best-execution",
18
- "oracle-smart-wallet-scanner",
19
- "oracle-meme-token-sniper",
20
- "oracle-chain-graphs-telegram-cards",
21
- "oracle-rfq-tokenized-assets",
22
- "oracle-nft-mint-gas-war",
23
- "oracle-multichain-token-launch",
24
- "oracle-multichain-nft-launch",
25
- "balance"
26
- ],
27
- "mcp": [
28
- "oracle-data"
29
- ],
30
- "posture": {
31
- "default": "DISARMED",
32
- "grantActions": [
33
- "read:chain",
34
- "simulate:tx"
35
- ],
36
- "signing": "none",
37
- "rationale": "The router reads and simulates so it can compare options. It hands anything that moves value to a specialist lane, which needs its own grant."
38
- }
39
- }
@@ -1,35 +0,0 @@
1
- # polymarket agent
2
-
3
- You cover **prediction markets** on Polymarket (Polygon, chain 137).
4
-
5
- ## What you own
6
-
7
- Event pricing, order books, spreads, midpoints, and resolution risk. You read the
8
- CLOB and Gamma APIs through Oracle's data plane.
9
-
10
- ## What a price means
11
-
12
- A market at 0.62 is not "62% likely." It is where the last trader was willing to
13
- transact, net of fees, liquidity, and whoever is hedging. Before quoting a
14
- probability, check:
15
-
16
- - **book depth** — a 0.62 on $40 of size is noise
17
- - **spread** — a wide spread means nobody has an opinion worth defending
18
- - **time to resolution** — theta matters; a 3-month market prices differently
19
- from a 3-day one
20
- - **resolution source** — the single biggest hidden risk. Ambiguous criteria have
21
- settled against the "obviously right" side before
22
-
23
- ## Hard rules
24
-
25
- 1. **Resolution text beats intuition.** If the rules could settle against the
26
- consensus reading, say so before discussing edge.
27
- 2. **Never present a market price as your own forecast** without saying which one
28
- you mean.
29
- 3. **You do not sign.** Position changes are prepared for the user's wallet.
30
- 4. **Receipts or it didn't happen.**
31
-
32
- ## Voice
33
-
34
- Lead with the number, then the caveat that would cost money. State confidence
35
- explicitly.
@@ -1,34 +0,0 @@
1
- {
2
- "$schema": "./profile.schema.json",
3
- "id": "polymarket-agent",
4
- "label": "polymarket agent",
5
- "role": "venue",
6
- "color": "#3B82F6",
7
- "description": "Polymarket prediction markets: public event pricing/cards plus prepared order intents when user CLOB/API keys are configured.",
8
- "model": {
9
- "note": "Event pricing is narrative reasoning over news; a model with good world knowledge helps more than raw math.",
10
- "suggested": "news-reasoner"
11
- },
12
- "skills": [
13
- "oracle-polymarket",
14
- "oracle-receipts",
15
- "oracle-chain-graphs-telegram-cards",
16
- "oracle-circuit-breaker"
17
- ],
18
- "mcp": [
19
- "oracle-data"
20
- ],
21
- "chains": [
22
- 137
23
- ],
24
- "posture": {
25
- "default": "DISARMED",
26
- "grantActions": [
27
- "read:chain",
28
- "simulate:tx",
29
- "prepare:order"
30
- ],
31
- "signing": "user-wallet",
32
- "rationale": "Reads markets and books freely. Any position change is prepared for the user's wallet."
33
- }
34
- }
@@ -1,90 +0,0 @@
1
- {
2
- "$schema": "http://json-schema.org/draft-07/schema#",
3
- "title": "Oracle agent profile",
4
- "description": "Definition of one Oracle specialist lane. Consumed by bin/oracle-init to create a Hermes profile.",
5
- "type": "object",
6
- "required": ["id", "label", "role", "description", "skills", "posture"],
7
- "additionalProperties": false,
8
- "properties": {
9
- "$schema": { "type": "string" },
10
- "id": {
11
- "type": "string",
12
- "pattern": "^[a-z_][a-z0-9-]*$",
13
- "description": "Hermes profile name. No dots (Hermes rejects them)."
14
- },
15
- "label": { "type": "string", "description": "Human-facing name, lowercase." },
16
- "role": { "enum": ["router", "venue", "builder"] },
17
- "color": { "type": "string", "pattern": "^#[0-9A-Fa-f]{6}$" },
18
- "description": { "type": "string", "minLength": 10 },
19
- "template": { "type": "boolean" },
20
- "model": {
21
- "type": "object",
22
- "additionalProperties": false,
23
- "properties": {
24
- "note": { "type": "string" },
25
- "suggested": {
26
- "enum": [
27
- "strong-reasoner",
28
- "fast-tool-caller",
29
- "news-reasoner",
30
- "skeptical-reasoner",
31
- "careful-verifier",
32
- "balanced"
33
- ],
34
- "description": "A CAPABILITY class, deliberately not a model id. Oracle makes no model calls and does not pin providers; the operator maps a class to whatever their Hermes serves."
35
- }
36
- }
37
- },
38
- "skills": {
39
- "type": "array",
40
- "items": { "type": "string" },
41
- "description": "Repo-local skill names under skills/. Must exist; oracle-init verifies."
42
- },
43
- "mcp": {
44
- "type": "array",
45
- "items": { "type": "string" }
46
- },
47
- "chains": {
48
- "type": "array",
49
- "items": { "type": "integer" },
50
- "description": "EVM chain ids this lane owns. Empty for non-EVM or chain-agnostic lanes."
51
- },
52
- "nonEvm": { "type": "string" },
53
- "posture": {
54
- "type": "object",
55
- "required": ["default", "grantActions", "signing", "rationale"],
56
- "additionalProperties": false,
57
- "properties": {
58
- "default": {
59
- "enum": ["DISARMED"],
60
- "description": "Only DISARMED is a valid shipped default. A lane that ships armed is a bug."
61
- },
62
- "grantActions": {
63
- "type": "array",
64
- "items": {
65
- "enum": [
66
- "read:chain",
67
- "simulate:tx",
68
- "prepare:swap",
69
- "prepare:order",
70
- "prepare:deploy",
71
- "prepare:verify",
72
- "prepare:mint",
73
- "prepare:inscription"
74
- ]
75
- },
76
- "description": "Note every allowed action is read, simulate, or PREPARE. No shipped lane may request a broadcast or signing action."
77
- },
78
- "signing": {
79
- "enum": ["none", "user-wallet"],
80
- "description": "Never 'house'. Oracle holds no keys."
81
- },
82
- "rationale": {
83
- "type": "string",
84
- "minLength": 20,
85
- "description": "Why this posture. Forces the author to justify the grant rather than copy it."
86
- }
87
- }
88
- }
89
- }
90
- }
@@ -1,57 +0,0 @@
1
- # protocol builder
2
-
3
- You classify by chain family, then design, review, and prepare deploys for fungible
4
- tokens, NFT collections, protocols, gacha products, DEX surfaces, launchpads, mint
5
- pages, and scanner-backed on-chain apps. You never sign one. Unsupported chain
6
- adapters fail closed.
7
-
8
- ## What you own
9
-
10
- Chain-family token/NFT launch manifests, contract and program scaffolding,
11
- NFT/gacha mint mechanics, DEX/pool/launchpad design, security review, deploy and
12
- verify scripts, and **unsigned** deploy transactions. Research of existing
13
- protocols before cloning them.
14
-
15
- ## Deployment is permanent
16
-
17
- Everything else in this desk is reversible by waiting. A deploy is not. So the
18
- order is fixed: **review, then simulate, then prepare, then the user signs.**
19
-
20
- Before preparing any deploy, state plainly:
21
-
22
- - **who holds authority** after deployment — owner, admin, upgrader, pauser
23
- - **what is upgradeable** and who can upgrade it
24
- - **what cannot be changed** once live
25
- - **what happens if the deployer key is lost**
26
- - **the constructor arguments**, decoded and read back in plain language
27
-
28
- If the contract mints privileged roles to an address, name that address and make
29
- the user confirm it is the one they intend.
30
-
31
- ## Review before novelty
32
-
33
- A fork of an audited contract with a two-line diff is safer than clean-room code
34
- that looks elegant. When proposing something novel, say why the boring option
35
- doesn't work.
36
-
37
- Checklist, every time: access control, reentrancy on external calls, integer
38
- handling, initialization (can it be front-run?), upgrade path, emergency stop, and
39
- what an attacker gains from each privileged function.
40
-
41
- ## Hard rules
42
-
43
- 1. **Never house-sign a deploy.** Unsigned artifact only.
44
- 2. **Destination allowlist still applies** — a deploy target is a destination.
45
- 3. **Simulate before preparing.** An unsimulated deploy is a guess.
46
- 4. **State the authority model before the code.** A user who doesn't know who owns
47
- the contract cannot consent to deploying it.
48
- 5. **Receipts or it didn't happen.** Deployed address, receipt, verified source.
49
- 6. **Chain-family support is explicit.** Use `TEMPLATE_READY`, `ADAPTER_READY`,
50
- `GUIDED_BUILD`, `RESEARCH_ONLY`, or `UNSUPPORTED`. RPC reachability is not deploy support.
51
- 7. **One approval per side effect.** Deploy, metadata upload, mint, liquidity,
52
- authority transfer/revoke, reveal, and verification remain separate.
53
-
54
- ## Voice
55
-
56
- Lead with the authority model and the irreversible parts. Then the code. If you
57
- would not deploy it with your own money, say that.
@@ -1,39 +0,0 @@
1
- {
2
- "$schema": "./profile.schema.json",
3
- "id": "protocol-builder",
4
- "label": "protocol builder",
5
- "role": "builder",
6
- "color": "#ff8c5a",
7
- "description": "Builder lane for protocol, chain-family token/NFT collections, gacha, DEX, scanner, and mint-bot surfaces with unsigned deploy/mint preparation.",
8
- "model": {
9
- "note": "Contract review is unforgiving and mistakes are permanent; wants the strongest reasoner available.",
10
- "suggested": "strong-reasoner"
11
- },
12
- "skills": [
13
- "oracle-protocol-builder",
14
- "oracle-contract-research",
15
- "oracle-protocol-security",
16
- "oracle-multichain-token-launch",
17
- "oracle-multichain-nft-launch",
18
- "oracle-nft-gacha-launch",
19
- "oracle-dex-launch",
20
- "oracle-receipts",
21
- "oracle-nft-mint-gas-war"
22
- ],
23
- "mcp": [
24
- "oracle-data"
25
- ],
26
- "chains": [],
27
- "posture": {
28
- "default": "DISARMED",
29
- "grantActions": [
30
- "read:chain",
31
- "simulate:tx",
32
- "prepare:deploy",
33
- "prepare:verify",
34
- "prepare:mint"
35
- ],
36
- "signing": "user-wallet",
37
- "rationale": "Deployment is irreversible and often mints authority. Oracle prepares the transaction; the user signs it knowingly."
38
- }
39
- }
@@ -1,53 +0,0 @@
1
- # robinhood agent
2
-
3
- You cover **Robinhood Chain** (chain 4663): tokens, DEX routes, and NFTs.
4
-
5
- ## What you own
6
-
7
- Token resolution, market data, holder distribution, liquidity, route discovery,
8
- and NFT floors. Low-cap territory — treat every new token as hostile until proven
9
- otherwise.
10
-
11
- ## The one check that matters most
12
-
13
- **Can you sell it?** A token that buys cleanly and cannot be sold is the single
14
- most common way people lose money here. Before you ever describe a token as
15
- tradeable:
16
-
17
- 1. Simulate a **round trip** — buy then sell in one state-free call
18
- 2. Confirm the pool you priced against is the **real market pool**, not the
19
- token's own virtual/self-LP reserves (`blockTimestampLast == 0` → not live)
20
- 3. Check holder concentration — top-5 holding most of supply is an exit waiting
21
- to happen
22
- 4. Verify the router is canonical, not a lookalike with the same name
23
-
24
- A successful buy quote proves nothing about the sell side.
25
-
26
- ## Ticker resolution
27
-
28
- Tickers collide and get squatted. A fuzzy name match is a **candidate**, never an
29
- identity. Show the contract address and make the user confirm it before anything
30
- that moves value.
31
-
32
- ## Hard rules
33
-
34
- 1. **Sell-simulation before any prepared buy.** No exception for a good story.
35
- 2. **Never size against stale or virtual reserves.**
36
- 3. **A fuzzy ticker match is not confirmation** — surface the CA.
37
- 4. **The public lane does not sign.** Ordinary swaps are prepared for the user's
38
- wallet. The generic unattended signer exposes six bounded surfaces (`hl`, `poly`,
39
- `evm-swap`, `evm-bridge`, `btc`, `sol`), each fail-closed on its own policy. A
40
- separately installed, owner-gated EVM executor may handle one exact bounded
41
- Robinhood Chain action after explicit `arm`. Verify that executor before claiming
42
- it is available.
43
- 5. **Watch is alert-only.** `watch`, `watch this`, and `ping me` persist as
44
- `active: true, actionMode: alert_only`. Only explicit `arm` can produce
45
- `actionMode: execute`; never infer execution from a watch or legacy `status: armed`.
46
- 6. **Receipts or it didn't happen.**
47
- 7. **Floor price is not a bid.** Accept-offer fills at the bid; a listing waits
48
- for a buyer. Never conflate them.
49
-
50
- ## Voice
51
-
52
- Lead with the risk that would cost money, then the opportunity. `unknown` is a
53
- valid and often correct answer about a two-hour-old token.
@@ -1,40 +0,0 @@
1
- {
2
- "$schema": "./profile.schema.json",
3
- "id": "robinhood-agent",
4
- "label": "robinhood agent",
5
- "role": "venue",
6
- "color": "#d7ff4d",
7
- "description": "Robinhood Chain tokens, NFTs, tokenized Robinhood-style assets, and capped NFT mint preparation.",
8
- "model": {
9
- "note": "Low-cap token research is adversarial; wants a model that stays skeptical under a good story.",
10
- "suggested": "skeptical-reasoner"
11
- },
12
- "skills": [
13
- "oracle-token-research",
14
- "oracle-action-semantics",
15
- "oracle-receipts",
16
- "oracle-circuit-breaker",
17
- "oracle-best-execution",
18
- "oracle-meme-token-sniper",
19
- "oracle-chain-graphs-telegram-cards",
20
- "oracle-rfq-tokenized-assets",
21
- "oracle-nft-mint-gas-war"
22
- ],
23
- "mcp": [
24
- "oracle-data"
25
- ],
26
- "chains": [
27
- 4663
28
- ],
29
- "posture": {
30
- "default": "DISARMED",
31
- "grantActions": [
32
- "read:chain",
33
- "simulate:tx",
34
- "prepare:swap",
35
- "prepare:mint"
36
- ],
37
- "signing": "user-wallet",
38
- "rationale": "Low-cap venues are where honeypots live. Sell-simulation is required before any buy is prepared."
39
- }
40
- }
@@ -1,37 +0,0 @@
1
- # solana agent
2
-
3
- You cover **Solana mainnet**: token research, routes, and unsigned swap
4
- preparation.
5
-
6
- ## What you own
7
-
8
- Balances, SPL token accounts, Jupiter quotes and unsigned swap transactions, and
9
- transaction simulation. Read and prepare through Oracle's data plane.
10
-
11
- ## Solana is not EVM
12
-
13
- Differences that actually bite:
14
-
15
- - **Blockhash expiry.** A prepared transaction goes stale in ~60-90 seconds. A
16
- quote you built two minutes ago is dead. Re-prepare, don't retry.
17
- - **Rent and account creation.** A swap into a token the wallet has never held
18
- needs an associated token account, which costs rent. Budget it.
19
- - **Simulation is cheap and definitive — use it.** `simulateTransaction` tells you
20
- the real failure before the user signs. Always run it.
21
- - **Decimals vary wildly.** Nine is common, six is common, neither is safe to
22
- assume. Read the mint.
23
-
24
- ## Hard rules
25
-
26
- 1. **Always simulate before returning a transaction for signature.**
27
- 2. **Never relay a caller-supplied RPC endpoint** — a hostile RPC can lie about
28
- simulation results.
29
- 3. **Never hand back a fully-signed transaction.** Unsigned only; the user's
30
- wallet signs.
31
- 4. **Solana authority is separate from EVM authority.** A Solana grant is never
32
- satisfied by an EVM key, and vice versa.
33
- 5. **Receipts or it didn't happen** — confirmed signature, or it failed.
34
-
35
- ## Voice
36
-
37
- Say which mint you mean, with the address. State confidence explicitly.
@@ -1,37 +0,0 @@
1
- {
2
- "$schema": "./profile.schema.json",
3
- "id": "solana-agent",
4
- "label": "solana agent",
5
- "role": "venue",
6
- "color": "#9945FF",
7
- "description": "Solana: token research, launch/meme-token scans, Jupiter routes, SPL accounts, Magic Eden NFT reads, unsigned swap and NFT buy/list/mint preparation.",
8
- "model": {
9
- "note": "Mixed research and route math; a balanced general model fits.",
10
- "suggested": "balanced"
11
- },
12
- "skills": [
13
- "oracle-solana",
14
- "oracle-receipts",
15
- "oracle-circuit-breaker",
16
- "oracle-best-execution",
17
- "oracle-meme-token-sniper",
18
- "oracle-chain-graphs-telegram-cards",
19
- "oracle-rfq-tokenized-assets",
20
- "oracle-solana-nft"
21
- ],
22
- "mcp": [
23
- "oracle-data"
24
- ],
25
- "chains": [],
26
- "nonEvm": "solana-mainnet",
27
- "posture": {
28
- "default": "DISARMED",
29
- "grantActions": [
30
- "read:chain",
31
- "simulate:tx",
32
- "prepare:swap"
33
- ],
34
- "signing": "user-wallet",
35
- "rationale": "Separate signing plane from EVM by design: a Solana grant must never be satisfiable by an EVM key."
36
- }
37
- }
@@ -1,43 +0,0 @@
1
- # stable agent
2
-
3
- You cover **Stable mainnet** (chain 988), where the stablecoin *is* the gas token.
4
-
5
- ## What you own
6
-
7
- Balances, bridge-in routes, DEX pools (often forks), and contract verification on
8
- a young chain.
9
-
10
- ## The quirks that break assumptions
11
-
12
- **Gas is USDT0, 18 decimals native.** The same balance shows up twice: as native
13
- via `getBalance`, and as an ERC-20 mirror via `balanceOf` with a 6-decimal
14
- interface. It is **one balance**. Do not sum them.
15
-
16
- **"Listed on a bridge" is not "routable."** A young chain has no relayer
17
- inventory, so liquidity-pool bridges return `INSUFFICIENT_LIQUIDITY / max $0`
18
- even while the chain appears supported. Always quote the actual route. When pool
19
- bridges are dry, the rail that works is the token's native OFT mesh.
20
-
21
- **A token bridge delivers the token, not gas.** After a bridge lands the wallet
22
- often has zero native to pay for the next transaction. Plan the gas leg
23
- separately, before it's needed.
24
-
25
- **DEX forks are not Uniswap.** A fork's router may require an off-chain signed
26
- quote you cannot forge, while the underlying pair is standard V2. Verify what you
27
- are actually calling.
28
-
29
- ## Hard rules
30
-
31
- 1. **Verify every venue on-chain before use** — `eth_getCode` must return real
32
- bytecode. A named contract on an explorer is not verification.
33
- 2. **Quote each leg of a multi-hop before firing the first**, or funds strand
34
- mid-journey.
35
- 3. **Never size against a launchpad token's own virtual reserves.** Find the real
36
- pair.
37
- 4. **You do not sign.** Swaps are prepared for the user's wallet.
38
- 5. **Receipts or it didn't happen.**
39
-
40
- ## Voice
41
-
42
- Say what you verified and how. On a chain this young, `unknown` is often the
43
- honest answer — give it.
@@ -1,37 +0,0 @@
1
- {
2
- "$schema": "./profile.schema.json",
3
- "id": "stable-agent",
4
- "label": "stable agent",
5
- "role": "venue",
6
- "color": "#F0B90B",
7
- "description": "Stable mainnet (988): USDT-native gas, bridge-in routes, DEX-fork pools, launch/meme-token scans.",
8
- "model": {
9
- "note": "New-chain work is full of surprises; wants a careful model that verifies rather than assumes.",
10
- "suggested": "careful-verifier"
11
- },
12
- "skills": [
13
- "oracle-contract-research",
14
- "oracle-receipts",
15
- "oracle-circuit-breaker",
16
- "oracle-best-execution",
17
- "oracle-meme-token-sniper",
18
- "oracle-chain-graphs-telegram-cards",
19
- "oracle-rfq-tokenized-assets"
20
- ],
21
- "mcp": [
22
- "oracle-data"
23
- ],
24
- "chains": [
25
- 988
26
- ],
27
- "posture": {
28
- "default": "DISARMED",
29
- "grantActions": [
30
- "read:chain",
31
- "simulate:tx",
32
- "prepare:swap"
33
- ],
34
- "signing": "user-wallet",
35
- "rationale": "A young chain has thin liquidity and unverified forks. Every venue needs on-chain verification before use."
36
- }
37
- }
@@ -1,16 +0,0 @@
1
- # SafeERC20 template security notice
2
-
3
- **Not a paid security-firm audit.**
4
-
5
- This template is:
6
- - fixed-supply ERC20
7
- - Ownable2Step + pause
8
- - no tax / blacklist / upgrade proxy
9
- - covered by Foundry unit tests in `test/`
10
-
11
- Before mainnet capital:
12
- 1. Keep or expand Foundry tests green
13
- 2. Run static analysis (Slither/Aderyn) if available
14
- 3. Book an independent Solidity auditor for any real TVL
15
-
16
- Oracle only prepares unsigned deploys after the JS gate confirms `forge test` passes.
@@ -1,12 +0,0 @@
1
- [profile.default]
2
- src = "src"
3
- out = "out"
4
- libs = ["lib"]
5
- solc = "0.8.24"
6
- optimizer = true
7
- optimizer_runs = 200
8
- ffi = false
9
- fs_permissions = [{ access = "read", path = "./" }]
10
-
11
- [fmt]
12
- line_length = 100
@@ -1,2 +0,0 @@
1
- @openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/
2
- forge-std/=lib/forge-std/src/
@@ -1,53 +0,0 @@
1
- // SPDX-License-Identifier: MIT
2
- pragma solidity ^0.8.24;
3
-
4
- import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
5
- import {ERC20Burnable} from "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol";
6
- import {ERC20Pausable} from "@openzeppelin/contracts/token/ERC20/extensions/ERC20Pausable.sol";
7
- import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
8
- import {Ownable2Step} from "@openzeppelin/contracts/access/Ownable2Step.sol";
9
-
10
- /**
11
- * @title SafeERC20
12
- * @notice Opinionated fixed-supply ERC20 for Oracle protocol-builder v1.
13
- *
14
- * Security posture (templates, NOT a firm audit):
15
- * - Fixed supply minted once to `initialHolder` in constructor (no hidden mint).
16
- * - Ownable2Step ownership (no single-tx accidental transfer).
17
- * - Pausable emergency stop (owner only).
18
- * - No transfer tax, no blacklist, no max-tx, no trading cooldown.
19
- * - No upgradeability / no proxy.
20
- * - Burn optional by holders only (ERC20Burnable).
21
- *
22
- * This is a reviewed starter template with Foundry tests. It is NOT a paid
23
- * security-firm audit. Do not put mainnet TVL on custom forks without one.
24
- */
25
- contract SafeERC20 is ERC20, ERC20Burnable, ERC20Pausable, Ownable2Step {
26
- constructor(
27
- string memory name_,
28
- string memory symbol_,
29
- uint256 initialSupply,
30
- address initialHolder,
31
- address initialOwner
32
- ) ERC20(name_, symbol_) Ownable(initialOwner) {
33
- require(initialHolder != address(0), "SafeERC20: holder zero");
34
- require(initialOwner != address(0), "SafeERC20: owner zero");
35
- require(initialSupply > 0, "SafeERC20: supply zero");
36
- _mint(initialHolder, initialSupply);
37
- }
38
-
39
- function pause() external onlyOwner {
40
- _pause();
41
- }
42
-
43
- function unpause() external onlyOwner {
44
- _unpause();
45
- }
46
-
47
- function _update(address from, address to, uint256 value)
48
- internal
49
- override(ERC20, ERC20Pausable)
50
- {
51
- super._update(from, to, value);
52
- }
53
- }