Redeploy testnet with chain ID 420690 and update all contracts#45
Open
prophet10x wants to merge 74 commits intoJejuNetwork:mainfrom
Open
Redeploy testnet with chain ID 420690 and update all contracts#45prophet10x wants to merge 74 commits intoJejuNetwork:mainfrom
prophet10x wants to merge 74 commits intoJejuNetwork:mainfrom
Conversation
- Update chain ID from 2151908 to 420690 across all deployment configs, genesis files, rollup configs, docker-compose files, scripts, and docs - Fix BasePaymaster v0.9 compatibility in LiquidityPaymaster and MultiTokenPaymaster (2-arg constructor, entryPoint() function calls) - Update contracts.json testnet section with all deployed addresses: registries, moderation, payments, OIF, EIL, federation, sequencer, governance timelocks, fees, and more - Update e2e test scripts with chain ID 420690 and new contract addresses - Add e2e-paymaster-elizaos.mjs for JEJU/ELIZAOS token gas sponsorship - Add TESTNET-DEPLOYMENT.md with comprehensive deployment documentation - Fix DWS frontend to use relative URLs (avoids CORS/IP issues) - Add on-chain ComputeRegistry integration to Tauri node Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Extract AMM/swap functionality into CrossChainSwapRouter (4.3KB) and remove heavy view functions (getBestPaymentTokenForApp, checkAppPreference, getTokensInfo, getPaymasterStatus, protocol fee claiming). Before: 26.7KB (exceeded 24.576KB limit, could not deploy) After: 22.4KB (well within limit, deployable) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…rFactory Deployed to Jeju Testnet (chain ID 420690): - CrossChainPaymaster: 0x38a024C0b412B9d1db8BC398140D00F5Af3093D4 - CrossChainSwapRouter: 0x525C7063E7C20997BaaE9bDa922159152D0e8417 - MultiTokenPaymaster: 0x5fc748f1FEb28d7b76fa1c6B07D8ba2d5535177c - PaymasterFactory: 0xB82008565FdC7e44609fA118A4a681E92581e680 CrossChainPaymaster refactored from 26.7KB to 20.5KB by extracting AMM/swap into CrossChainSwapRouter. All 3 previously undeployable contracts now compile and deploy successfully. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The PRAGMA table_info query doesn't work reliably through the SQLit adapter, returning empty rows even when the table exists. This caused the env column migration to always run, failing on tables that already have the column from CREATE TABLE. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Change getContracts() to warn and fallback to testnet instead of throwing when mainnet contracts are not deployed - Add Cache-Control: no-cache to DWS frontend HTML responses Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
… proxy The /rpc/proxy route doesn't exist - the actual RPC proxy is at POST /rpc/:chainId. Use getRpcUrl() which returns the correct testnet RPC (https://jeju-testnet.fartbag.fun/). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The 'dws.apps.jeju' JNS name isn't registered yet, causing login to fail with "App not found". Disable decentralized mode so wallet sign-in works directly. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- configureOAuth3RouterConfig now reads OAUTH3_AGENT_URL env var - Settings page register agent link points to testnet gateway Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The OAUTH3_AGENT_URL constant was captured at module import time, before configureOAuth3RouterConfig() was called. Replace with a getter function so it reads the configured value lazily. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Root node_modules has @noble/hashes v2 which renamed sha256->sha2, but browser deps (viem, ox, @coinbase/wallet-sdk) need v1 paths. Resolve all @noble/hashes imports to v1 from ox's nested node_modules. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
getServicesConfig() omitted graphqlCors from the returned indexer
object even though it existed in services.json and the schema.
This caused getServiceUrl('indexer', 'graphqlCors') to throw.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…ulateRequiredStake The deployed IdentityRegistry doesn't have calculateRequiredStake. Default to 0n so registration can proceed on testnet. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Update ABI to match deployed contract (tier-based staking, not token-address-based calculateRequiredStake) - Add StakeTier enum (NONE/SMALL/MEDIUM/HIGH) matching contract - Support free registration (register) and staked (registerWithStake) - Use ELIZAOS token for staking instead of ETH - Store a2a endpoint as contract metadata entry - Replace token selector with tier selector in form Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add IdentityRegistry config, list 4 undeployed contracts, and add running services (faucet, gateway, DWS, OAuth3). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Redeployed IdentityRegistry to 0x8A93d247134d91e0de6f96547cB0204e5BE8e5D8 with updated stake amounts (1000x increase: 1/10/100 ELIZAOS for Small/ Medium/High tiers). Updated gateway contracts config, registration form tier descriptions, and TESTNET-DEPLOYMENT.md. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Changed STAKE_SMALL/MEDIUM/HIGH from constants to mutable state variables with a governance-only setStakeTiers() setter. Redeployed to 0x40918Ba7f132E0aCba2CE4de4c4baF9BD2D7D849 with ELIZAOS token support. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…ity registry address detectNetworkFromHostname() didn't recognize jeju-testnet.fartbag.fun, so it fell back to localnet (127.0.0.1:6546). Also updated contracts.json testnet registry.identity to new governance-adjustable deployment. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
OAuth3 is now running on Oracle server port 4200, proxied via nginx at /oauth3/. Updated services.json testnet oauth3.api URL from non-existent auth.testnet.jejunetwork.org to the real endpoint. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The wallet auth endpoint rejects sign-in messages from domains not in its allowlist. Added jeju-testnet.fartbag.fun so gateway users can authenticate. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Implements the previously-commented USE_MEMORY_STATE=true env var to use Map-based in-memory storage instead of SQLit for all state stores (sessions, clients, auth codes, refresh tokens, OAuth states, passkeys, reports). Enables OAuth3 to run on servers without a SQLit database. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…LIZAOS→JEJU in UI - Make IPFS session storage non-blocking in OAuth3 client so login succeeds even when DWS storage is unavailable - Update testnet services.json: point indexer/DWS/storage URLs to jeju-testnet.fartbag.fun instead of non-existent jejunetwork.org subdomains - Update DWS_ENDPOINTS in auth config for testnet - Rename ELIZAOS to JEJU in gateway stake tier descriptions Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- FaucetTab: check registration via IdentityRegistry contract when faucet API is unavailable, with static fallback for faucet info - FaucetTab: fix "Register Now" link to use React Router Link (respects BrowserRouter basename) - RegisteredAppsList: read registered agents directly from IdentityRegistry contract instead of requiring GraphQL indexer Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Read agents() mapping for tier, stakedToken, stakedAmount, registeredAt - Resolve JEJU token address to "JEJU" name in all displays - Read tokenURI for agent name/description in detail modal - Show "JEJU" instead of "ETH" in browse cards and detail modal - Fix deposit date (was always 1/1/1970, now reads registeredAt) - Show "Faucet service not running" message when backend unavailable Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace KMS-based signing with direct viem wallet client using DEPLOYER_PRIVATE_KEY for testnet. Add USE_MEMORY_STATE support for in-memory faucet cooldown tracking. Create minimal faucet-server.ts entry point that can run independently on port 4014. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Deploy NodeStakingManager contract at 0x5FeaeBfB4439F3516c74939A9D04e95AFE82C4ae on testnet. Fix gateway build script to use /gateway/ base path for asset URLs so they resolve correctly behind nginx. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…uencer info Add NodeStakingManager contract address, Faucet API documentation, Gateway portal features, and sequencer architecture notes. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Simplified node staking without TokenRegistry/PaymasterFactory/PriceOracle dependencies. Same ABI as NodeStakingManager for UI compatibility. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…tracts - ITokenRegistry: isRegistered() -> isSupported() (matches TokenRegistry) - IPaymasterFactory: hasPaymaster() -> isDeployed() (matches PaymasterFactory) - ISimplePriceOracle -> IPriceOracle: getPrice returns (uint256, uint256) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
New address: 0x32EEce76C2C2e8758584A83Ee2F522D4788feA0f Also set JEJU price ($1) on PriceOracle and deployed JEJU paymaster. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Forge scripts use PRIVATE_KEY not DEPLOYER_PRIVATE_KEY - Pass deployed contract addresses as env vars between phases so DWS can find IdentityRegistry, BanManager, etc. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…ntory - Updated all contract addresses from fresh deployment with new deployer key - Added comprehensive "Not Yet Deployed" section with reasons for each - Added "Contracts Without Deploy Scripts" section (~30 contract categories) - Deploy script: added all missing phases (core, compute, dws-infra, etc.) - Deploy script: fixed RPC URL and env var passing between phases Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
97 contracts deployed with new deployer key (0x86d240...). Added new sections: tee, da, rpc, content, entryPoint. Updated all existing sections with fresh addresses. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- New scripts: DeployStaking, DeployVPN, DeployEscrow, DeployContainers, DeployMarketplace, DeployFeeDistributor - Fix DWSInfra/Governance: remove vm.writeFile calls causing fs permission errors - Add 8 new phases to orchestrator: staking, vpn, escrow, containers, marketplace, fee-distributor, uniswap Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Deployed contracts: - DWSInfra: ProviderRegistry, Billing, ServiceProvisioning - Governance: Standard/Critical/Emergency Timelocks - Staking: NodeStakingManager, AutoSlasher, ServiceStaking - VPN: VPNRegistry - Escrow: TradeEscrow - Containers: ContainerRegistry - Marketplace: General Marketplace - FeeDistributor + AirdropManager - AppFeeRegistry Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Deploy new EntryPoint at 0x922D6956C99E12DFeB3224DEA977D0939758A1Fe - Deploy SimpleAccountFactory at 0x5081a39b8A5f0E35a8D959395a630b68B74Dd30f - Update e2e-bundler test with correct addresses - Add accountAbstraction section to testnet contracts.json Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Use CONTRACTS.jeju from centralized config instead of hardcoded localnet address. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add try/catch/finally to LoginButton.handleClick so the button resets from "Connecting..." state even if login() throws - Use CONTRACTS.jeju from centralized config instead of hardcoded localnet address in useRegistry.ts Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Show MultiTokenBalanceDisplay only when authenticated (OAuth3), not just when wallet is connected (wagmi persists connections) - Remove hardcoded localnet JEJU token address in RegisteredAppsList, use CONTRACTS.jeju from centralized config Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Call onSuccess even when login fails so modal closes (wallet may be connected even if OAuth3 session creation failed) - Show token balance only when authenticated, not just connected - Use CONTRACTS.jeju from config in RegisteredAppsList Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Adds verify-contracts.ts that checks all contracts.json addresses have bytecode on-chain via getCode(), with --gateway-check flag to detect stale gateway builds with baked-in old addresses. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…alized config Three bugs all rooted in stale hardcoded addresses: - RegisterAppForm: hardcoded JEJU token address (Foundry default) broke staking - lib/config/contracts.ts: entire file of wrong localnet addresses broke token list - DeployPaymaster: blocked deploy when TokenRegistry not deployed on testnet Now all addresses sourced from @jejunetwork/config (contracts.json). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…dle audit New checks: - Source audit: scans gateway source for hardcoded addresses not in contracts.json - Functional checks: calls key contract functions to verify ABI compatibility - Bundle audit: flags unknown addresses in built JS bundle - Better summary with total error count This would have caught the hardcoded JEJU token address bug. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
TokenRegistry ABI:
- isRegistered → isSupported (matching deployed contract)
- getAllTokens → getSupportedTokens
- getTokenInfo struct: was {token,symbol,name,decimals,priceOracle,enabled}
now: {supported,priceFeed,minMargin,maxMargin,registrant,registeredAt}
- Added registerToken and registrationFee functions
PaymasterFactory ABI:
- deployPaymaster args: was (owner,token,salt) now (token,feeMargin,operator)
- getDeployedPaymasters → getDeployedTokens
- Added proper Deployment struct with all fields
Config:
- tokenRegistry now reads from payments.tokenRegistry (was registry.token)
- TokenList reads name/symbol/decimals from ERC20 contract directly
Also registered JEJU token in TokenRegistry on testnet.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Addresses verified to have no code deployed at their locations. They will be redeployed with fresh addresses. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Deployed via forge scripts and forge create on Oracle: - TEE: UnifiedAttestationVerifier, TEERegistry - RPC: MultiChainRPCRegistry, BandwidthRewards, UsageRewardDistributor - DWS: DWSMarketplace, ManagedDatabaseRegistry, CronTriggerRegistry - Training: TrainingCoordinator/Rewards/Registry, NodePerformanceOracle - Chainlink: VRFCoordinator, AutomationRegistry - Commerce: AuthCaptureEscrow - Governance: TimelockController (standard) - Bazaar: PredictionMarket/Oracle, SimpleCollectible, TokenFactory - Perps: PerpetualMarket, MarginManager, InsuranceFund, PerpsPriceOracle - Liquidity: LiquidityVault, LiquidityRouter, MultiServiceStakeManager, FederatedLiquidity - Moderation: EvidenceRegistry, ReportingSystem, UserBlockRegistry - Payments: LiquidityPaymaster - Compute: WorkerRegistry, CronTriggerRegistry, ServiceStaking - CDN: CDNBilling, CDNRegistry (nodeRegistry) - DeFi: SimplePoolManager, SimpleSwapRouter, XLPPositionManager - Security: SecurityBountyRegistry - Registry: OAuth3AppRegistry, TokenFactory - SQLit: SQLitIdentityRegistry - Agents: RoomRegistry - EIL: CrossChainSwapRouter 19 entries remain empty (no source code exists). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
DWSMarketplace, SQLitIdentityRegistry, and governance TimelockController were reported as deployed by forge script but actually had null tx hashes (wrong sender used). Re-deployed via forge create with correct private key. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Prevents false positives for WETH/USDC addresses on Ethereum mainnet, Sepolia, and Arbitrum referenced in gateway networks.ts and x402 chains.ts. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Split heavy logic into 3 internal libraries (ModerationReputationLib, ModerationVotingLib, ModerationRewardsLib) and moved complex view functions to a separate ModerationMarketplaceViews contract. Contract size: 23,975 bytes (was ~27KB, limit is 24,576). All 93 moderation tests pass. Deployed to testnet at 0x5FeaeBfB4439F3516c74939A9D04e95AFE82C4ae. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- TokenSelector: Use React portal for dropdown to avoid overflow:hidden clipping - TokenSelector: Replace hardcoded 'white' backgrounds with CSS variables for dark mode - DeployPaymaster: Add 60s timeout warning for stuck transactions (nonce gap) - DeployPaymaster: Add cancel button and error display during deployment - usePaymasterFactory: Expose error and reset from useTypedWriteContract Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Root cause: the previous LoginButton try/catch/finally fix only handles
rejections, not hanging promises. Two paths could hang indefinitely:
1. Provider init: client.initialize() does RPC/JNS discovery calls with
no timeout. If the L2 RPC hangs, isLoading stays true forever and the
header button shows "Connecting..." before the modal even opens.
Fix: wrap in Promise.race with 10s timeout.
2. Login fetch: loginWithWallet/passkey/farcaster/OAuth fetch calls to
the TEE agent had no AbortSignal timeout. If the agent is slow or
unreachable, the login promise hangs and finally{} never runs.
Fix: add AbortSignal.timeout(15000) to all auth fetch calls.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The comment said "non-blocking" but the code used `await` on storage.storeSession() which uploads to IPFS. When IPFS is slow or unreachable, this hangs the entire login() promise, keeping the LoginButton stuck on "Connecting..." indefinitely even though the OAuth3 session was already successfully created. Fix: fire-and-forget the storage call with .catch() instead of await. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Deployed Blockscout on Oracle server (Docker) connected to op-geth. Updated all hardcoded explorer URLs to use config-driven URLs pointing to https://jeju-testnet.fartbag.fun/explorer. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…h check - Dashboard counts 'available' services as healthy (was only counting 'healthy') - KMS health check now uses local URL since it runs in-process - Show correct status colors for 'available' services in expanded view Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- HardwareDetection: fetch system info from server /health/system endpoint instead of browser APIs (was showing client's Mac, not the server) - Add /health/system API endpoint returning OS, CPU, memory, uptime - Expand node registration services from 6 to 21 (workers, agents, git, pkg, ci, s3, da, email, lb, indexer, scraping, security, observability, etc.) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add diskTotalGb/diskFreeGb to /health/system endpoint using fs.statfsSync - Display disk space in HardwareDetection requirements and server details - Change Secure Context from 'fail' to 'warning' for HTTP (expected on direct IP) - Differentiate Memory (Database icon) and Disk (HardDrive icon) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
DWS app router was extracting first subdomain label and trying to find a deployed app. Added known DWS dashboard hostnames to skip list. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The top-right Sign In button used OAuth3 auth exclusively, which requires the OAuth3 agent to be running. Now falls back to wagmi useAccount so the button shows the connected wallet address even without OAuth3. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The wizard only had vpn, cdn, storage, rpc. Added all available services matching the RunNode page: compute, gpu, workers, workerd, agents, git, pkg, ci, s3, da, email, lb, indexer, scraping, security, observability. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
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.
Summary
entryPoint()function calls)contracts.jsontestnet section with all 70+ deployed contract addressesTESTNET-DEPLOYMENT.mdwith comprehensive deployment documentatione2e-paymaster-elizaos.mjsfor JEJU/ELIZAOS token gas sponsorship testing/explorer/with Docker Compose config and documentationBlock Explorer
Blockscout deployed at
https://jeju-testnet.fartbag.fun/explorer/:packages/deployment/docker/blockscout-explorer.compose.yamlTESTNET-DEPLOYMENT.mdservices.json,rpc-chains.ts,networks.ts,Settings.tsxDeployed Contracts (Chain ID 420690)
All core contracts deployed on Jeju Testnet at
https://jeju-testnet.fartbag.fun/:Test plan
curl https://jeju-testnet.fartbag.fun/returns chainId0x66b32(420690)https://jeju-testnet.fartbag.fun/faucet/distributes JEJU/ELIZAOS tokenshttps://jeju-testnet.fartbag.fun/explorer//explorer/api/v2/stats)e2e-paymaster-elizaos.mjsagainst testnet🤖 Generated with Claude Code