From 53875ea8e544b0c990375a93d9a2621fd67990c6 Mon Sep 17 00:00:00 2001 From: tate Date: Thu, 14 Aug 2025 10:02:14 +1000 Subject: [PATCH 1/7] fix: price oracle deployment --- contracts/deploy/l2/02_PriceOracle.ts | 31 +++++++----- contracts/test/utils/ndps.ts | 68 +++++++++++++++++++++++++++ 2 files changed, 87 insertions(+), 12 deletions(-) create mode 100644 contracts/test/utils/ndps.ts diff --git a/contracts/deploy/l2/02_PriceOracle.ts b/contracts/deploy/l2/02_PriceOracle.ts index 691eba99..a8e9ad4b 100644 --- a/contracts/deploy/l2/02_PriceOracle.ts +++ b/contracts/deploy/l2/02_PriceOracle.ts @@ -1,8 +1,14 @@ /// we import what we need from the @rocketh alias, see ../rocketh.ts import { artifacts, execute } from "@rocketh"; +import { + dollarsPerYearToNdpsExact, + ndpsToDollarsPerYearStringExact, +} from "../../test/utils/ndps.ts"; -// USD prices in 6 decimals (USDC standard) -const BASE_PRICE_USD = 10n * 10n**6n; // $10.00 +// nanodollars per second pricing +const PRICE_5_CHAR = dollarsPerYearToNdpsExact("5"); +const PRICE_4_CHAR = dollarsPerYearToNdpsExact("160"); +const PRICE_3_CHAR = dollarsPerYearToNdpsExact("640"); export default execute( async ({ deploy, namedAccounts, get }) => { @@ -14,24 +20,25 @@ export default execute( const tokenAddresses = [mockUSDC.address, mockDAI.address]; const tokenDecimals = [6, 18]; // USDC: 6 decimals, DAI: 18 decimals - const rentPrices = [BASE_PRICE_USD, BASE_PRICE_USD, BASE_PRICE_USD, 0n, 0n]; // Array of rent prices (5 prices for StablePriceOracle) + const rentPrices = [PRICE_5_CHAR, PRICE_4_CHAR, PRICE_3_CHAR, 0n, 0n]; // Array of rent prices (5 prices for StablePriceOracle) // Use the full path to access StablePriceOracle from artifacts - const StablePriceOracle = artifacts["src/L2/StablePriceOracle.sol/StablePriceOracle"]; + const StablePriceOracle = + artifacts["src/L2/StablePriceOracle.sol/StablePriceOracle"]; await deploy("PriceOracle", { account: deployer, artifact: StablePriceOracle, - args: [ - tokenAddresses, - tokenDecimals, - rentPrices, - ], + args: [tokenAddresses, tokenDecimals, rentPrices], }); - console.log(`✅ TokenPriceOracle deployed with:`) - console.log(` - Base Price: $${Number(BASE_PRICE_USD) / 10**6}`); - console.log(` - Rent Prices: [${rentPrices.map(p => `$${Number(p) / 10**6}`).join(', ')}]`); + console.log(`✅ TokenPriceOracle deployed with:`); + console.log( + ` - Base Price: $${ndpsToDollarsPerYearStringExact(PRICE_5_CHAR)}`, + ); + console.log( + ` - Rent Prices: [${rentPrices.map((p) => `$${ndpsToDollarsPerYearStringExact(p)}`).join(", ")}]`, + ); console.log(` - Supported Tokens:`); console.log(` - MockUSDC (6 decimals): ${tokenAddresses[0]}`); console.log(` - MockDAI (18 decimals): ${tokenAddresses[1]}`); diff --git a/contracts/test/utils/ndps.ts b/contracts/test/utils/ndps.ts new file mode 100644 index 00000000..7fb2294f --- /dev/null +++ b/contracts/test/utils/ndps.ts @@ -0,0 +1,68 @@ +type Rounding = "nearest" | "floor" | "ceil"; + +const SECONDS_PER_YEAR_BI = 31_557_600n; // exact (365.25 * 86400) +const ND_PER_DOLLAR_BI = 1_000_000_000n; // nanodollars per dollar + +function divRound(n: bigint, d: bigint, mode: Rounding): bigint { + if (mode === "floor") return n / d; + if (mode === "ceil") return (n + d - 1n) / d; + // nearest, half-up (inputs assumed non-negative) + return (n + d / 2n) / d; +} + +/** + * exact: dollars/year (string, up to 9 decimal places) -> nd/s (bigint) + * examples of valid inputs: "12", "12.3", "12.345678901" + */ +export function dollarsPerYearToNdpsExact( + dollarsPerYear: string, + rounding: Rounding = "nearest", +): bigint { + const s = dollarsPerYear.trim(); + if (!/^\d+(\.\d{0,9})?$/.test(s)) { + throw new Error("use dollars with up to 9 decimal places"); + } + const [dollars, fracRaw = ""] = s.split("."); + const frac = (fracRaw + "000000000").slice(0, 9); // pad to 9 places + const ndPerYear = BigInt(dollars) * ND_PER_DOLLAR_BI + BigInt(frac); // already nanodollars + + return divRound(ndPerYear, SECONDS_PER_YEAR_BI, rounding); +} + +const POW10N: readonly bigint[] = [ + 1n, + 10n, + 100n, + 1_000n, + 10_000n, + 100_000n, + 1_000_000n, + 10_000_000n, + 100_000_000n, + 1_000_000_000n, +]; + +function formatFixed(n: bigint, decimals: number): string { + if (decimals === 0) return n.toString(); + const base = POW10N[decimals]; + const i = n / base; + const f = (n % base).toString().padStart(decimals, "0"); + return `${i}.${f}`; +} + +/** + * exact: nd/s (bigint) -> $/yr as a decimal string with `decimals` places (0..9) + * default 9 decimals gives the exact dollar value since inputs are in nanodollars. + */ +export function ndpsToDollarsPerYearStringExact( + ndps: bigint, + decimals: number = 9, + rounding: Rounding = "nearest", +): string { + if (decimals < 0 || decimals > 9) throw new Error("decimals must be 0..9"); + const ndPerYear = ndps * SECONDS_PER_YEAR_BI; // nanodollars/year (exact) + const scaleDown = 9 - decimals; // convert nd -> dollars with N decimals + const divisor = POW10N[scaleDown]; + const scaled = divRound(ndPerYear, divisor, rounding); // integer of dollars * 10^decimals + return formatFixed(scaled, decimals); +} From 14ba8fea97f61602cd36d2af123abf271cf42cfd Mon Sep 17 00:00:00 2001 From: Edax Ucles Date: Mon, 25 Aug 2025 13:52:46 -0600 Subject: [PATCH 2/7] adds debug utils scripts --- contracts/package.json | 4 + contracts/script/README.md | 68 +++++++++++ contracts/script/corsProxy.ts | 46 +++++++ contracts/script/listRegisteredNames.ts | 87 ++++++++++++++ contracts/script/mintTokensDirect.ts | 126 +++++++++++++++++++ contracts/script/watchNameRegistrations.ts | 133 +++++++++++++++++++++ 6 files changed, 464 insertions(+) create mode 100644 contracts/script/README.md create mode 100644 contracts/script/corsProxy.ts create mode 100644 contracts/script/listRegisteredNames.ts create mode 100644 contracts/script/mintTokensDirect.ts create mode 100644 contracts/script/watchNameRegistrations.ts diff --git a/contracts/package.json b/contracts/package.json index 0997d490..0fce9e6e 100644 --- a/contracts/package.json +++ b/contracts/package.json @@ -12,6 +12,10 @@ "clean": "forge clean && hardhat clean", "devnet": "bun ./script/runDevnet.ts", "aakit": "bun ./script/deployAAkit.ts", + "list-names": "bun ./script/listRegisteredNames.ts", + "watch-names": "bun ./script/watchNameRegistrations.ts", + "cors-proxy": "bun ./script/corsProxy.ts", + "mint-tokens": "bun ./script/mintTokensDirect.ts", "check:types": "tsc --noEmit" }, "devDependencies": { diff --git a/contracts/script/README.md b/contracts/script/README.md new file mode 100644 index 00000000..8937c1e2 --- /dev/null +++ b/contracts/script/README.md @@ -0,0 +1,68 @@ +# Scripts Documentation + +Quick reference for the available scripts in this project. + +## 📋 List Registered Names + +**Script:** `listRegisteredNames.ts` +**Command:** `bun run list-names` +**Purpose:** Lists all registered domain names in a table format +**Shows:** Name, Owner, Duration, Total Cost (USD) +**Use case:** Check which names are registered and who owns them + +## 🪙 Mint Mock Tokens + +**Script:** `mintTokensDirect.ts` +**Command:** `bun run mint-tokens ` +**Purpose:** Mints 1000 MockUSDC and 1000 MockDAI to a specified address +**Use case:** Give test tokens to addresses for testing name registration + +## 👀 Watch Name Registrations + +**Script:** `watchNameRegistrations.ts` +**Command:** `bun run watch-names` +**Purpose:** Real-time monitoring of new name registrations +**Shows:** New registrations as they happen with owner and cost details +**Use case:** Monitor registration activity during development/testing + +## 🌐 CORS Proxy + +**Script:** `corsProxy.ts` +**Command:** `bun run cors-proxy` +**Purpose:** Adds CORS headers to Alto bundler responses for frontend access +**Port:** 4339 (proxies to Alto L2 on 4338) +**Use case:** Enable frontend to communicate with AA infrastructure + +## 🚀 Development Environment + +**Script:** `runDevnet.ts` +**Command:** `bun run devnet` +**Purpose:** Sets up the complete development environment with AA Kit +**Shows:** Contract addresses, endpoints, test accounts +**Use case:** Initialize the local development setup + +## 📝 Usage Examples + +```bash +# List all registered names +bun run list-names + +# Mint tokens to an address +bun run mint-tokens 0x1234... + +# Watch for new registrations +bun run watch-names + +# Start CORS proxy +bun run cors-proxy + +# Setup devnet +bun run devnet +``` + +## 🔧 Prerequisites + +- Running local blockchain (Anvil/Hardhat) +- AA Kit infrastructure (Alto bundlers, mock paymasters) +- Contracts deployed +- Bun package manager diff --git a/contracts/script/corsProxy.ts b/contracts/script/corsProxy.ts new file mode 100644 index 00000000..84532b9b --- /dev/null +++ b/contracts/script/corsProxy.ts @@ -0,0 +1,46 @@ +import express from 'express'; +import { createProxyMiddleware } from 'http-proxy-middleware'; +import cors from 'cors'; + +const app = express(); +const PORT = 4339; + +app.use(cors({ + origin: ['http://localhost:3002'], + methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'], + allowedHeaders: ['Content-Type', 'Authorization', 'X-Requested-With'], + credentials: true +})); + +app.get('/health', (req, res) => { + res.json({ status: 'ok', service: 'cors-proxy', timestamp: new Date().toISOString() }); +}); + +app.use('/', createProxyMiddleware({ + target: 'http://localhost:4338', + changeOrigin: true, + pathRewrite: { + '^/': '/' + }, + onProxyRes: (proxyRes, req, res) => { + proxyRes.headers['Access-Control-Allow-Origin'] = '*'; + proxyRes.headers['Access-Control-Allow-Methods'] = 'GET, POST, PUT, DELETE, OPTIONS'; + proxyRes.headers['Access-Control-Allow-Headers'] = 'Content-Type, Authorization, X-Requested-With'; + proxyRes.headers['Access-Control-Allow-Credentials'] = 'true'; + }, + onError: (err, req, res) => { + console.error('Proxy error:', err); + res.status(500).json({ error: 'Proxy error', message: err.message }); + } +})); + +app.listen(PORT, () => { + console.log(`CORS Proxy running on http://localhost:${PORT}`); + console.log(`Proxying requests to Alto L2 at http://localhost:4338`); + console.log(`CORS enabled for frontend at http://localhost:3002`); +}); + +process.on('SIGINT', () => { + console.log('\nShutting down CORS Proxy...'); + process.exit(0); +}); diff --git a/contracts/script/listRegisteredNames.ts b/contracts/script/listRegisteredNames.ts new file mode 100644 index 00000000..4047e866 --- /dev/null +++ b/contracts/script/listRegisteredNames.ts @@ -0,0 +1,87 @@ +import { createPublicClient, http, parseAbiItem, decodeEventLog } from 'viem'; +import { localhost } from 'viem/chains'; + +const RPC_URL = 'http://localhost:8546'; +const ETH_REGISTRAR_ADDRESS = '0xa513e6e4b8f2a923d98304ec87f64353c4d5c853'; + +const client = createPublicClient({ + chain: localhost, + transport: http(RPC_URL), +}); + +const nameRegisteredEvent = parseAbiItem( + 'event NameRegistered(string name, address owner, address subregistry, address resolver, uint64 duration, uint256 tokenId, uint256 baseCost, uint256 premium)' +); + +function shortenAddress(address: string): string { + return `${address.slice(0, 6)}...${address.slice(-4)}`; +} + +async function listRegisteredNames() { + console.log('Fetching all registered names...\n'); + + try { + const logs = await client.getLogs({ + address: ETH_REGISTRAR_ADDRESS as `0x${string}`, + event: nameRegisteredEvent, + fromBlock: 0n, + toBlock: 'latest', + }); + + console.log(`Found ${logs.length} registered names\n`); + + if (logs.length === 0) { + console.log('No names found'); + return; + } + + const namesData = logs.map((log, index) => { + try { + const decoded = decodeEventLog({ + abi: [nameRegisteredEvent], + data: log.data, + topics: log.topics, + }); + + const { name, owner, duration, baseCost, premium } = decoded.args; + const totalCost = Number(baseCost) + Number(premium); + const durationInDays = Math.floor(Number(duration) / 86400); + + return { + '#': index + 1, + 'Name': name, + 'Owner': shortenAddress(owner), + 'Duration (days)': durationInDays, + 'Total Cost (USD)': (totalCost / 1e8).toFixed(2), + }; + } catch (error) { + return { + '#': index + 1, + 'Name': 'Error decoding', + 'Owner': 'Error', + 'Duration (days)': 'Error', + 'Total Cost (USD)': 'Error', + }; + } + }); + + console.table(namesData); + + console.log('\nSummary:'); + console.log('==========='); + + const uniqueOwners = new Set(namesData.map(item => item.Owner).filter(owner => owner !== 'Error')); + const totalCost = namesData + .filter(item => item['Total Cost (USD)'] !== 'Error') + .reduce((sum, item) => sum + parseFloat(item['Total Cost (USD)']), 0); + + console.log(`Total Names: ${namesData.length}`); + console.log(`Unique Owners: ${uniqueOwners.size}`); + console.log(`Total Value: $${totalCost.toFixed(2)} USD`); + + } catch (error) { + console.error('Error fetching names:', error); + } +} + +listRegisteredNames().catch(console.error); diff --git a/contracts/script/mintTokensDirect.ts b/contracts/script/mintTokensDirect.ts new file mode 100644 index 00000000..5989197a --- /dev/null +++ b/contracts/script/mintTokensDirect.ts @@ -0,0 +1,126 @@ +#!/usr/bin/env bun +import { createPublicClient, createWalletClient, http, parseEther, parseUnits } from 'viem'; +import { privateKeyToAccount } from 'viem/accounts'; + +const MOCK_USDC_ADDRESS = '0xe7f1725e7734ce288f8367e1bb143e90bb3f0512'; +const MOCK_DAI_ADDRESS = '0x9fe46736679d2d9a65f0992f2272de9f3c7fa6e0'; + +const MOCK_ERC20_ABI = [ + { + inputs: [ + { name: 'to', type: 'address' }, + { name: 'amount', type: 'uint256' } + ], + name: 'mint', + outputs: [], + stateMutability: 'nonpayable', + type: 'function' + }, + { + inputs: [{ name: 'account', type: 'address' }], + name: 'balanceOf', + outputs: [{ name: '', type: 'uint256' }], + stateMutability: 'view', + type: 'function' + } +]; + +async function main() { + const targetWallet = process.argv[2]; + + if (!targetWallet) { + console.error('Usage: bun run script/mintTokensDirect.ts '); + console.error('Example: bun run script/mintTokensDirect.ts 0x1234...'); + process.exit(1); + } + + console.log(`Minting mock tokens to: ${targetWallet}`); + console.log(`MockUSDC: ${MOCK_USDC_ADDRESS}`); + console.log(`MockDAI: ${MOCK_DAI_ADDRESS}`); + + const l2Client = createPublicClient({ + chain: { + id: 31338, + name: 'L2 Local', + nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 }, + rpcUrls: { + default: { http: ['http://127.0.0.1:8546'] }, + public: { http: ['http://127.0.0.1:8546'] }, + }, + }, + transport: http('http://127.0.0.1:8546'), + }); + + const deployerAccount = privateKeyToAccount('0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80'); + + const walletClient = createWalletClient({ + account: deployerAccount, + chain: { + id: 31338, + name: 'L2 Local', + nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 }, + rpcUrls: { + default: { http: ['http://127.0.0.1:8546'] }, + public: { http: ['http://127.0.0.1:8546'] }, + }, + }, + transport: http('http://127.0.0.1:8546'), + }); + + try { + const usdcAmount = parseUnits('1000', 6); + console.log(`Minting 1000 USDC...`); + + const usdcMintTx = await walletClient.writeContract({ + address: MOCK_USDC_ADDRESS, + abi: MOCK_ERC20_ABI, + functionName: 'mint', + args: [targetWallet, usdcAmount], + }); + + console.log(`USDC minted! Transaction: ${usdcMintTx}`); + + const daiAmount = parseEther('1000'); + console.log(`Minting 1000 DAI...`); + + const daiMintTx = await walletClient.writeContract({ + address: MOCK_DAI_ADDRESS, + abi: MOCK_ERC20_ABI, + functionName: 'mint', + args: [targetWallet, daiAmount], + }); + + console.log(`DAI minted! Transaction: ${daiMintTx}`); + + console.log('Waiting for transactions to be mined...'); + await new Promise(resolve => setTimeout(resolve, 2000)); + + const usdcBalance = await l2Client.readContract({ + address: MOCK_USDC_ADDRESS, + abi: MOCK_ERC20_ABI, + functionName: 'balanceOf', + args: [targetWallet], + }); + + const daiBalance = await l2Client.readContract({ + address: MOCK_DAI_ADDRESS, + abi: MOCK_ERC20_ABI, + functionName: 'balanceOf', + args: [targetWallet], + }); + + console.log('\nToken minting complete!'); + console.log(`${targetWallet} now has:`); + console.log(` - USDC: ${Number(usdcBalance) / 1e6} USDC`); + console.log(` - DAI: ${Number(daiBalance) / 1e18} DAI`); + console.log('\nYou can now use these tokens to register names from your frontend!'); + console.log(` - Each name registration costs $10 (in either USDC or DAI)`); + console.log(` - Make sure to approve the ETHRegistrar contract to spend your tokens`); + + } catch (error) { + console.error('Error minting tokens:', error); + process.exit(1); + } +} + +main().catch(console.error); \ No newline at end of file diff --git a/contracts/script/watchNameRegistrations.ts b/contracts/script/watchNameRegistrations.ts new file mode 100644 index 00000000..f513e65e --- /dev/null +++ b/contracts/script/watchNameRegistrations.ts @@ -0,0 +1,133 @@ +import { createPublicClient, http, parseAbiItem, decodeEventLog } from 'viem'; +import { localhost } from 'viem/chains'; + +const RPC_URL = 'http://localhost:8546'; +const ETH_REGISTRAR_ADDRESS = '0xa513e6e4b8f2a923d98304ec87f64353c4d5c853'; +const POLL_INTERVAL = 2000; + +const client = createPublicClient({ + chain: localhost, + transport: http(RPC_URL), +}); + +const nameRegisteredEvent = parseAbiItem( + 'event NameRegistered(string name, address owner, address subregistry, address resolver, uint64 duration, uint256 tokenId, uint256 baseCost, uint256 premium)' +); + +const processedEvents = new Set(); + +const colors = { + reset: '\x1b[0m', + bright: '\x1b[1m', + green: '\x1b[32m', + yellow: '\x1b[33m', + blue: '\x1b[34m', + cyan: '\x1b[36m', + white: '\x1b[37m', + red: '\x1b[31m', +}; + +function log(message: string, color: keyof typeof colors = 'reset') { + const timestamp = new Date().toLocaleTimeString(); + console.log(`${colors[color]}[${timestamp}] ${message}${colors.reset}`); +} + +function displayNewRegistration(name: string, owner: string, baseCost: string, premium: string) { + const totalCost = Number(baseCost) + Number(premium); + const costInUSD = (totalCost / 1e8).toFixed(2); + + log('NEW NAME REGISTERED!', 'green'); + log('======================', 'green'); + log(`Name: ${colors.bright}${name}${colors.reset}`, 'white'); + log(`Owner: ${colors.cyan}${owner}${colors.reset}`, 'white'); + log(`Total Cost: ${colors.yellow}$${costInUSD}${colors.reset}`, 'white'); + + if (Number(premium) > 0) { + log(` └─ Base: $${(Number(baseCost) / 1e8).toFixed(2)} | Premium: $${(Number(premium) / 1e8).toFixed(2)}`, 'white'); + } + log(''); +} + +async function checkForNewRegistrations() { + try { + const logs = await client.getLogs({ + address: ETH_REGISTRAR_ADDRESS as `0x${string}`, + event: nameRegisteredEvent, + fromBlock: 0n, + toBlock: 'latest', + }); + + logs.forEach(log => { + const eventKey = `${log.transactionHash}-${log.logIndex}`; + + if (!processedEvents.has(eventKey)) { + try { + const decoded = decodeEventLog({ + abi: [nameRegisteredEvent], + data: log.data, + topics: log.topics, + }); + + const { name, owner, baseCost, premium } = decoded.args; + + displayNewRegistration( + name, + owner, + baseCost.toString(), + premium.toString() + ); + + processedEvents.add(eventKey); + + } catch (error) { + // Skip invalid logs + } + } + }); + + } catch (error) { + log(`Error checking for new registrations: ${error}`, 'red'); + } +} + +async function watchRegistrations() { + log('Starting Name Registration Monitor...', 'green'); + log(`Watching ETHRegistrar: ${ETH_REGISTRAR_ADDRESS}`, 'blue'); + log(`Polling every ${POLL_INTERVAL / 1000} seconds`, 'blue'); + log('Try registering a new name to see it here!', 'yellow'); + log('Press Ctrl+C to stop monitoring\n', 'yellow'); + + try { + log('Loading existing registrations...', 'cyan'); + const existingLogs = await client.getLogs({ + address: ETH_REGISTRAR_ADDRESS as `0x${string}`, + event: nameRegisteredEvent, + fromBlock: 0n, + toBlock: 'latest', + }); + + log(`Found ${existingLogs.length} existing registrations (will show new ones only)`, 'cyan'); + + existingLogs.forEach(log => { + const eventKey = `${log.transactionHash}-${log.logIndex}`; + processedEvents.add(eventKey); + }); + + log('\nMonitoring for new registrations...', 'green'); + + const pollInterval = setInterval(async () => { + await checkForNewRegistrations(); + }, POLL_INTERVAL); + + process.on('SIGINT', () => { + log('\nStopping monitor...', 'yellow'); + clearInterval(pollInterval); + process.exit(0); + }); + + } catch (error) { + log(`Error setting up monitor: ${error}`, 'red'); + } +} + +watchRegistrations().catch(console.error); From 963d9b9dcce74ca8b85c5ede82ea6f7cdbcb3d24 Mon Sep 17 00:00:00 2001 From: Edax Ucles Date: Mon, 25 Aug 2025 22:22:14 -0600 Subject: [PATCH 3/7] adds ascii banner with gradient ens blue --- contracts/script/runDevnet.ts | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/contracts/script/runDevnet.ts b/contracts/script/runDevnet.ts index 23683598..73f1a33b 100644 --- a/contracts/script/runDevnet.ts +++ b/contracts/script/runDevnet.ts @@ -2,16 +2,29 @@ import { toHex } from "viem"; import { createMockRelay } from "./mockRelay.js"; import { setupCrossChainEnvironment } from "./setup.js"; -const banner = ` -███╗ ██╗ █████╗ ███╗ ███╗███████╗ ██████╗██╗ ██╗ █████╗ ██╗███╗ ██╗ -████╗ ██║██╔══██╗████╗ ████║██╔════╝██╔════╝██║ ██║██╔══██╗██║████╗ ██║ -██╔██╗ ██║███████║██╔████╔██║█████╗ ██║ ███████║███████║██║██╔██╗ ██║ -██║╚██╗██║██╔══██║██║╚██╔╝██║██╔══╝ ██║ ██╔══██║██╔══██║██║██║╚██╗██║ -██║ ╚████║██║ ██║██║ ╚═╝ ██║███████╗╚██████╗██║ ██║██║ ██║██║██║ ╚████║ -╚═╝ ╚═══╝╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝ ╚═════╝╚═╝ ╚═╝╚═╝ ╚═╝╚═╝╚═╝ ╚═══╝ -`; +const banner = [ + "███╗ ██╗ █████╗ ███╗ ███╗███████╗ ██████╗██╗ ██╗ █████╗ ██╗███╗ ██╗", + "████╗ ██║██╔══██╗████╗ ████║██╔════╝██╔════╝██║ ██║██╔══██╗██║████╗ ██║", + "██╔██╗ ██║███████║██╔████╔██║█████╗ ██║ ███████║███████║██║██╔██╗ ██║", + "██║╚██╗██║██╔══██║██║╚██╔╝██║██╔══╝ ██║ ██╔══██║██╔══██║██║██║╚██╗██║", + "██║ ╚████║██║ ██║██║ ╚═╝ ██║███████╗╚██████╗██║ ██║██║ ██║██║██║ ╚████║", + "╚═╝ ╚═══╝╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝ ╚═════╝╚═╝ ╚═╝╚═╝ ╚═╝╚═╝╚═╝ ╚═══╝" +]; -console.log(banner); +// RGB gradient from #0080bc to darker shades +const rgbColors = [ + '\x1b[38;2;0;128;188m', // #0080bc (your exact color) + '\x1b[38;2;0;110;160m', // Slightly darker + '\x1b[38;2;0;95;140m', // Medium dark + '\x1b[38;2;0;80;120m', // Darker + '\x1b[38;2;0;65;100m', // Much darker + '\x1b[38;2;0;50;80m' // Very dark +]; +console.log('\n'); +banner.forEach((line, i) => { + console.log(rgbColors[i] + line + '\x1b[0m'); +}); +console.log('\n'); console.log("🚀 Starting NameChain Development Environment...\n"); const env = await setupCrossChainEnvironment({ From 066257138d371fc2579882aa7ad590d0fefc5d12 Mon Sep 17 00:00:00 2001 From: Edax Ucles Date: Mon, 25 Aug 2025 22:43:47 -0600 Subject: [PATCH 4/7] changes new ports for l2 on aa kit deploy script --- alto/alto-config-l2-local.json | 2 +- contracts/script/deployAAkit.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/alto/alto-config-l2-local.json b/alto/alto-config-l2-local.json index 417d9232..c2945f86 100644 --- a/alto/alto-config-l2-local.json +++ b/alto/alto-config-l2-local.json @@ -3,7 +3,7 @@ "log-environment": "production", "entrypoints": "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789,0x0000000071727De22E5E9d8BAf0edAc6f37da032,0x4337084D9E255Ff0702461CF8895CE9E3b5Ff108", "api-version": "v1,v2", - "rpc-url": "http://host.docker.internal:8546", + "rpc-url": "http://host.docker.internal:8456", "min-balance": "0", "utility-private-key": "0xdbda1821b80551c9d65939329250298aa3472ba22feea921c0cf5d620ea67b97", "executor-private-keys": "0x2a871d0798f97d79848a013d4936a73bf4cc922c825d33c1cf7073dff6d409c6,0x4bbbf85ce3377467afe5d46f804f221813b2bb87f24d81f60f1fcdbf7cbf4356,0x92db14e403b83dfe3df233f83dfa3a0d7096f21ca9b0d6d6b8d88b2b4ec1564e,0x8b3a350cf5c34c9194ca85829a2df0ec3153be0318b5e2d3348e872092edffba,0x47e179ec197488593b187f80a00eb0da91f1b9d0b13f8733639f19c30a34926a", diff --git a/contracts/script/deployAAkit.ts b/contracts/script/deployAAkit.ts index 5c97efe1..3e46976e 100644 --- a/contracts/script/deployAAkit.ts +++ b/contracts/script/deployAAkit.ts @@ -22,7 +22,7 @@ async function checkDevnetRunning(): Promise { }); const l2Client = createPublicClient({ - transport: http("http://localhost:8546"), + transport: http("http://localhost:8456"), }); // Try to get the chain ID from both chains @@ -32,7 +32,7 @@ async function checkDevnetRunning(): Promise { ]); log(`✓ L1 devnet running on localhost:8545 (Chain ID: ${l1ChainId})`, "green"); - log(`✓ L2 devnet running on localhost:8546 (Chain ID: ${l2ChainId})`, "green"); + log(`✓ L2 devnet running on localhost:8456 (Chain ID: ${l2ChainId})`, "green"); return true; } catch (error) { From 4111924c1a19bfe9a85b5b6265e3d60fb1fc8ab8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Muhammed=20Tanr=C4=B1kulu?= Date: Wed, 27 Aug 2025 19:25:48 +0200 Subject: [PATCH 5/7] suggest revert back tot he original port sequence --- alto/alto-config-l2-local.json | 2 +- bun.lockb | Bin 213896 -> 215944 bytes contracts/script/deployAAkit.ts | 4 ++-- contracts/script/runDevnet.ts | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/alto/alto-config-l2-local.json b/alto/alto-config-l2-local.json index c2945f86..417d9232 100644 --- a/alto/alto-config-l2-local.json +++ b/alto/alto-config-l2-local.json @@ -3,7 +3,7 @@ "log-environment": "production", "entrypoints": "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789,0x0000000071727De22E5E9d8BAf0edAc6f37da032,0x4337084D9E255Ff0702461CF8895CE9E3b5Ff108", "api-version": "v1,v2", - "rpc-url": "http://host.docker.internal:8456", + "rpc-url": "http://host.docker.internal:8546", "min-balance": "0", "utility-private-key": "0xdbda1821b80551c9d65939329250298aa3472ba22feea921c0cf5d620ea67b97", "executor-private-keys": "0x2a871d0798f97d79848a013d4936a73bf4cc922c825d33c1cf7073dff6d409c6,0x4bbbf85ce3377467afe5d46f804f221813b2bb87f24d81f60f1fcdbf7cbf4356,0x92db14e403b83dfe3df233f83dfa3a0d7096f21ca9b0d6d6b8d88b2b4ec1564e,0x8b3a350cf5c34c9194ca85829a2df0ec3153be0318b5e2d3348e872092edffba,0x47e179ec197488593b187f80a00eb0da91f1b9d0b13f8733639f19c30a34926a", diff --git a/bun.lockb b/bun.lockb index 52adb525a5a1cbc13ac1eb48520f5e60ae939b6b..89c230de68b3f118d946f1f54af314e675203057 100755 GIT binary patch delta 34198 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 { }); const l2Client = createPublicClient({ - transport: http("http://localhost:8456"), + transport: http("http://localhost:8546"), }); // Try to get the chain ID from both chains @@ -32,7 +32,7 @@ async function checkDevnetRunning(): Promise { ]); log(`✓ L1 devnet running on localhost:8545 (Chain ID: ${l1ChainId})`, "green"); - log(`✓ L2 devnet running on localhost:8456 (Chain ID: ${l2ChainId})`, "green"); + log(`✓ L2 devnet running on localhost:8546 (Chain ID: ${l2ChainId})`, "green"); return true; } catch (error) { diff --git a/contracts/script/runDevnet.ts b/contracts/script/runDevnet.ts index 73f1a33b..96c134e0 100644 --- a/contracts/script/runDevnet.ts +++ b/contracts/script/runDevnet.ts @@ -29,8 +29,8 @@ console.log("🚀 Starting NameChain Development Environment...\n"); const env = await setupCrossChainEnvironment({ l1Port: 8545, - l2Port: 8456, - urgPort: 8457, + l2Port: 8546, + urgPort: 8547, saveDeployments: true, }); From ea0a8c35e08da83353a78fa94fa3c41baaae3642 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Muhammed=20Tanr=C4=B1kulu?= Date: Thu, 28 Aug 2025 16:42:03 +0200 Subject: [PATCH 6/7] bump bun version in docker env --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index e9c3b32a..0fd773ad 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM oven/bun:1.2.13 +FROM oven/bun:1.2.21 # Install system dependencies RUN apt-get update && apt-get install -y \ From 69f634830b8c34d9107a4c93ed9845eede17ade3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Muhammed=20Tanr=C4=B1kulu?= Date: Fri, 29 Aug 2025 20:53:01 +0200 Subject: [PATCH 7/7] disable simulation contracts --- alto/alto-config-l1-local.json | 3 ++- alto/alto-config-l1.json | 3 ++- alto/alto-config-l2-local.json | 3 ++- alto/alto-config-l2.json | 3 ++- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/alto/alto-config-l1-local.json b/alto/alto-config-l1-local.json index c2b86ee4..49244056 100644 --- a/alto/alto-config-l1-local.json +++ b/alto/alto-config-l1-local.json @@ -13,5 +13,6 @@ "log-level": "info", "public-client-log-level": "error", "wallet-client-log-level": "error", - "polling-interval": 100 + "polling-interval": 100, + "deploy-simulations-contract": false } \ No newline at end of file diff --git a/alto/alto-config-l1.json b/alto/alto-config-l1.json index 865ea6ec..0443942c 100644 --- a/alto/alto-config-l1.json +++ b/alto/alto-config-l1.json @@ -13,5 +13,6 @@ "log-level": "info", "public-client-log-level": "error", "wallet-client-log-level": "error", - "polling-interval": 100 + "polling-interval": 100, + "deploy-simulations-contract": false } diff --git a/alto/alto-config-l2-local.json b/alto/alto-config-l2-local.json index 417d9232..d7aa7da4 100644 --- a/alto/alto-config-l2-local.json +++ b/alto/alto-config-l2-local.json @@ -13,5 +13,6 @@ "log-level": "info", "public-client-log-level": "error", "wallet-client-log-level": "error", - "polling-interval": 100 + "polling-interval": 100, + "deploy-simulations-contract": false } \ No newline at end of file diff --git a/alto/alto-config-l2.json b/alto/alto-config-l2.json index ab4234b4..00b763d5 100644 --- a/alto/alto-config-l2.json +++ b/alto/alto-config-l2.json @@ -13,5 +13,6 @@ "log-level": "info", "public-client-log-level": "error", "wallet-client-log-level": "error", - "polling-interval": 100 + "polling-interval": 100, + "deploy-simulations-contract": false }