Arbitrum mainnet release#291
Merged
Merged
Conversation
* docs: add llms.txt intro page for AI agents (#256) Add a GitBook-friendly page introducing PolyPay's llms.txt support so non-technical readers can discover the feature and link AI agents to the live playbook. - New page docs/llms-txt-for-agents.md covering what llms.txt is, the live endpoint, the five integration flows it documents, two ways to wire an agent up, and compatibility notes. - Add the page to docs/SUMMARY.md between x402 and Architecture. - Fix stale api.polypay.xyz references in docs/x402-deposits.md to the real api.polypay.pro host. * feat(x402): add Coinbase CDP bazaar deposit route for agentic.market listing (#260) Adds a second x402 deposit endpoint /x402/bazaar/deposit/:multisig that routes through Coinbase CDP facilitator instead of PayAI, so the resource gets indexed in CDP discovery and surfaces on agentic.market. The default /x402/deposit/:multisig path keeps using PayAI (better rate limits, simpler auth) — no UI change. CDP path activates implicitly when CDP_API_KEY_ID is set; otherwise it returns a clear config error. CDP requires Ed25519 JWT signed per-request (2-min TTL), so the service now lazy-imports @coinbase/x402 createAuthHeader to produce the Authorization header. Payment requirements for the CDP path also embed a declareDiscoveryExtension-shaped extensions.bazaar block (strict JSON Schema), without which CDP would settle but not index. Includes scripts/bazaar-bootstrap.ts to produce the first real settlement that triggers CDP indexing — bootstrap must run against a deployed backend (the resource URL ends up in the catalog). Refs #259 --------- Co-authored-by: BoHsuu <115441679+Huygon764@users.noreply.github.com>
…ring Add a Rust/WASM (Arbitrum Stylus) port of MetaMultiSigWallet and wire Arbitrum Sepolia (421614) through shared, frontend and backend. The contract is deployed and validated on-chain (Poseidon parity proven vs the deployed PoseidonT3 library). Per-account auto-deploy from the relayer is still open: the full contract is ~29KB compressed, over the 24KB EVM limit, so cargo-stylus fragments it and the single-bytecode StylusDeployer path can't be used. Options to resume (proxy factory / CLI shell-out / manual) are documented in packages/stylus/NOTES.md.
Wire Arbitrum Sepolia (421614) as a third destination chain alongside Horizen and Base. Testnet only — zkVerify has no Arbitrum One verifier yet. - Per-account multisig wallets via EIP-1167 proxy + shared Stylus impl, created on-chain by MetaMultiSigWalletStylusFactory. - Stylus impl adds init() for the proxy pattern, plus an internal self-call dispatcher to work around the Stylus delegatecall + CALL msg.sender issue (see packages/stylus/NOTES.md). - Custom 52-byte proxy variant of EIP-1167 that accepts plain ETH transfers (empty-calldata STOP) so cargo-stylus's fragmented loader doesn't revert deposits. - Backend relayer routes Stylus-chain deploys through the factory; zkVerify aggregation domain 4 wired for chain 421614. - Frontend network picker + sidebar surface Arbitrum Sepolia on testnet. - Shared config carries impl/factory addresses + Circle USDC for 421614. - Fix prisma findUnique by address_chainId in add/remove signer handlers (existing bug surfaced by the new chain). - New docs/arbitrum-stylus.md user guide covering flows, limitations (add/remove signer broken, 6h aggregation cadence, MetaMask Blockaid warning) and on-chain addresses.
Reduces flaky "Invalid proof" reverts on execute() when Kurier marks a proof aggregated but the receipt hasn't been published to the destination chain yet. The 40s heuristic was occasionally too tight for Horizen testnet under load.
Add packages/stylus-factory — a Rust/Stylus port of the Solidity MetaMultiSigWalletStylusFactory. Emits byte-identical 62-byte proxy bytecode (unit test in src/lib.rs guards against drift), so accounts created by either factory are indistinguishable on-chain. The new factory is the one wired into shared/contracts-config.ts; the Solidity factory is no longer referenced from app code. The accompanying NOTES.md update explains why Poseidon hashing inside the Stylus impl is not feasible without breaking the Noir circuit (only Stylus-native Poseidon library — OpenZeppelin — is Poseidon2, incompatible) and stays as a STATICCALL to the on-chain PoseidonT3 Solidity library.
… account contracts
The log line hardcoded "40s" but CROSS_CHAIN_FINALIZATION_WAIT is now 120s, so the message was misleading. Interpolate the constant so the logged duration stays in sync with the actual wait. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Revert the global bump to 2min — 40s is the value develop runs in production and works reliably for Horizen and Base. zkVerify reduced Arbitrum Sepolia aggregation time, so the existing 40s post-aggregation wait is sufficient there too; no need to slow every chain to 2min. The finalization log still derives its duration from the constant, so it now correctly reports 40s. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
zkVerify reduced Arbitrum Sepolia aggregation from ~6h to ~2 min, so the "can sit pending for hours / prefer Horizen for fast demos" caveat no longer applies. Reframe the section as a normal note. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Removes the daily relayer low-balance Telegram alert and its orphaned config wiring. This is replaced by an external scheduled agent that checks the relayer balance on Base + Horizen mainnet (plus ETH/BTC prices) and posts to Telegram. - Delete src/balance-alert/* (module, scheduler, TelegramService) - Unregister BalanceAlertModule from app.module; keep ScheduleModule (still used by transaction-reconciler + price schedulers) - Delete src/config/telegram.config.ts and drop its load entry - Remove TELEGRAM_* config keys, env validation, and .env.example block Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add Arbitrum One as a Stylus chain across shared/backend/frontend (chain def, contracts-config entry, STYLUS_CHAIN_IDS, native USDC, zkVerify domain 10). Introduce a shared CHAIN_IDS single source of truth and reuse it in token.ts and ChooseNetwork. Add the mainnet deploy script and the hardhat arbitrum public-RPC fix. Deploy is deferred: the Stylus impl (31202 bytes) exceeds Arbitrum One's 24576-byte code-size limit until ArbOS 60 lands there. See packages/stylus/NOTES.md.
The full impl was 31202 bytes (2 fragments), over Arbitrum One's 24576-byte Stylus code-size limit, so it only deployed on Arbitrum Sepolia (ArbOS 60). Slimmed to 24295 bytes (1 fragment) so it deploys on Arbitrum One today: - Drop on-chain events (Deposit/TransactionExecuted/Owner); the app tracks txs via the backend DB + relayer, not on-chain logs, so no functional impact. Largest saving (~6KB of alloy event encoding). - Hand-roll the PoseidonT3 and zkVerify STATICCALLs instead of sol_interface bindings (internal only, no ABI change). Kept: execute (same ABI), transfer, batch, signer management, getters, proof verification. Deployed and tested (transfer/batch) on Arbitrum Sepolia and Arbitrum One. Revert plan (restore events when ArbOS 60 lands on Arbitrum One) in packages/stylus/NOTES.md.
The PriceScheduler captured the weekly ZEN price solely to feed the Quest/Reward payout flow, which is disabled. Unregister it from PriceModule so its Friday cron no longer runs. The scheduler file and PriceService capture methods are kept for future reuse; the live GET /prices endpoint is unaffected.
docs(arbitrum): document Arbitrum One mainnet support
Update docs
The impl is now 24295 bytes (single fragment, under the 24 KiB limit), not ~29-31 KB / fragmented. Update the comments in MetaMultiSigWalletStylus.ts, relayer-wallet.service.ts, contracts-config.ts, stylus lib.rs / factory and README that still described the old fragmented impl and the reverted Poseidon experiment; the per-account proxy rationale is now framed as cost.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Task name here
Support arbitrum one in production
Types of change
Comments (optional)