- build.mjs no longer writes bench.html, journey.html or journey.json; the three files are deleted; /bench -> /evidence and /journey -> /live redirects (permanent: false); nav, footer, sitemap, capture routes and the site-nav-check groups drop them; link-check resolves literal vercel.json redirects and lists every link that leans on one (evidence.html: /bench, another hand) - every testnet card, column, row, notice and link removed from the pages this lane owns; release manifest: the testnet entry gone, network igneum-devnet-4 "Igneum 2.0 devnet", the Devnet 3 genesis, digest, vote domain and floor lines dropped - "Devnet 3" leaves every owned page; the devnet state is one constant in build.mjs (DEVNET_STATE, 'starting' now: the nav pill and the homepage badge read "Igneum 2.0 devnet starting"; 'live' flips both and re-enables the nav's live read) - no 0.x release history: screenshot alt texts say the current build, the miner page's "Current build:" keeps the data-rm spans without the node version; miner-bench.json keeps the current-program rows only, no Counter ASIC names, no versions; /miners drops the earlier-classes table, the history note and the miner-version column - /income keeps the calculator; the testnet-era tier tables (docs/analysis/income-tiers.md) are not served - the positioning line is the first line of the footer partial (every page), the homepage meta description's first sentence and the hero's sub-line; share metas (site/og/pages.mjs) carry no Devnet 3 or zkEVM - ledger-text-check is red on two index.html pins (X2, X31: the testnet sentences), owned by the ledger hand Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
3.9 KiB
Your first contract on the devnet, in five minutes
With Foundry. Tested end to end on a build box; the pass line and the exact output are at the end. Hardhat, ethers and viem work the same way: chain id 4464 and the RPC below.
0. What you need
- Foundry:
curl -L https://foundry.paradigm.xyz | bash && foundryup. About a minute. - The RPC. The devnet's public endpoint is
https://rpc.devnet.igneum.network. A node you run yourself serveshttp://127.0.0.1:26790. - Nothing else. No account, no sign-up.
export RPC=https://rpc.devnet.igneum.network
cast chain-id --rpc-url $RPC # 4464
1. A key, for the devnet only
cast wallet new
It prints an address and a private key. Keep the key for this walkthrough and nothing else: devnet coins have no value and the chain resets without notice.
export PK=0x... # the private key cast printed
export ME=$(cast wallet address $PK)
2. Coins from the faucet
Paste $ME into igneum.network/faucet. It sends 10 IGN and shows the transaction hash. Once per address per day.
cast balance $ME --rpc-url $RPC --ether # 10.000000000000000000
3. Deploy
Foundry's template is a counter. Initialise it and deploy it as it is.
forge init counter && cd counter
forge create src/Counter.sol:Counter --rpc-url $RPC --private-key $PK --broadcast
Expected:
Deployer: 0x...
Deployed to: 0x...
Transaction hash: 0x...
export C=0x... # the Deployed to address
4. Call it
cast send $C "increment()" --rpc-url $RPC --private-key $PK
cast call $C "number()(uint256)" --rpc-url $RPC # 1
cast send $C "setNumber(uint256)" 41 --rpc-url $RPC --private-key $PK
cast call $C "number()(uint256)" --rpc-url $RPC # 41
cast send waits for the receipt. A block takes about a second.
5. See it
Paste the transaction hash into igneum.network/explorer. The receipt is also one call away:
cast receipt 0xTXHASH --rpc-url $RPC
What is different under the hood
- Gas has two dimensions, execution and proving. The node folds the second into the price it quotes, so
forgeandcastestimate and pay as on Ethereum.igneum_estimateGasshows both numbers and whether a call exceeds the proving limit. - Your transaction is in a block within about a second, proven tens of seconds later, and locked by miner signatures in about two minutes.
igneum_getTransactionStatusreports each stage. - A transaction signed for another chain id is refused. EIP-155, EIP-1559 and legacy envelopes are accepted.
The test record
Run on a build box against its own devnet node (the box that also fronts the public RPC and runs the faucet), with Foundry 1.8.5 and a fresh key, through docs/build/first-contract-test.sh. The pass line is appended below by the run.
PASS 10:17:23Z: devnet chain id 4463, faucet drip 0x8620e9d894484e824e4ac33002946a00e2f75823ea6db0da0ad29f1af142e8f2, deployed Counter at 0x6345265C6Db0b3713eb6645d795d0B52FE0a4201 (tx 0xcf77b4822d51f3c60ecdf6d7dbbe67524d42071f06c76e1cf9b0511d64783574), increment then setNumber(41) read back 41, receipt status 1 (success), block 27055, 24 s end to end, Foundry 1.8.5
Through the public endpoints, https://rpc.devnet.igneum.network and https://faucet.igneum.network, from the box: the first faucet drip and the first reader-path deploy on the devnet.
After the class v5 floor moved the chain id to 4464 the same afternoon, from a second box:
PASS 12:38:39Z: devnet chain id 4464, faucet drip 0xa54fdb7e964dab095aaccaab36ea548fc3fa8727acb809b593c2d4d1359c233f, deployed Counter at 0x7de503a4F39feEBCE8c4ABbAcC04282EE75120Fe (tx 0x6ccdbb4f6393fcf09e58ba2f4de1af98c547eeab6f02d93eacfebae883200dc6), increment then setNumber(41) read back 41, receipt status 1 (success), block 29878, 12 s end to end, Foundry 1.8.5