Deploying Contracts on Cronos
You wrote a smart contract in Solidity, tested it on Goerli, but when deploying on Cronos mainnet, the transaction got stuck for half an hour due to an incorrect nonce, and then the contract wouldn't verify — the scanner didn't support the JSON interface. We see these errors regularly, so we've put together a proven configuration that eliminates these scenarios.
Our experience — 5+ years in EVM development, 30+ projects on various blockchains. We offer turnkey solutions: from requirements audit to delivery of documentation and private keys. We guarantee correct verification and gas optimization. If you're unsure about the settings — get a consultation (starting at $100), we'll audit your configuration in 2 days.
Cronos is a blockchain from Crypto.com based on Cosmos SDK with PoA consensus (transitioning to PoS). EVM compatibility is almost complete, but there are nuances: native token CRO, high gasPrice (5000+ gwei), and its own Etherscan instance for verification. More details in the Cronos documentation. According to the official specifications, block finality is 5-6 seconds, sufficient for most dApps.
Gas costs on Cronos are tens of times lower than on Ethereum, which allows significant savings on transactions. For example, deploying an ERC-20 contract on Cronos costs about $0.50, whereas on Ethereum it would cost $50 — a saving of 100x. Cromos is 100 times cheaper in gas fees than Ethereum.
Configuring Hardhat for deployment on Cronos
Network parameters
| Parameter | Mainnet | Testnet |
|---|---|---|
| Chain ID | 25 | 338 |
| RPC | https://evm.cronos.org |
https://evm-t3.cronos.org |
| Explorer | cronoscan.com | testnet.cronoscan.com |
| Native token | CRO | TCRO |
| Block time | ~5.6 seconds | ~5.6 seconds |
Hardhat configuration
// hardhat.config.ts import { HardhatUserConfig } from "hardhat/config"; import "@nomicfoundation/hardhat-toolbox"; import "@nomicfoundation/hardhat-verify"; const config: HardhatUserConfig = { solidity: { version: "0.8.20", settings: { optimizer: { enabled: true, runs: 200 }, }, }, networks: { cronos: { url: process.env.CRONOS_RPC ?? "https://evm.cronos.org", chainId: 25, accounts: [process.env.DEPLOYER_PRIVATE_KEY!], gasPrice: 5000000000000, // 5000 gwei }, "cronos-testnet": { url: "https://evm-t3.cronos.org", chainId: 338, accounts: [process.env.DEPLOYER_PRIVATE_KEY!], }, }, etherscan: { apiKey: { cronos: process.env.CRONOSCAN_API_KEY!, }, customChains: [ { network: "cronos", chainId: 25, urls: { apiURL: "https://api.cronoscan.com/api", browserURL: "https://cronoscan.com", }, }, ], }, }; Note the gasPrice: Cronos uses unusually high numerical values — 5000 gwei in Wei is normal. The actual transaction cost in USD is low due to the price of CRO.
Getting test tokens
For Cronos Testnet (chainId 338), you can get test TCRO via the official faucet: https://cronos.org/faucet. Limit — one request per day per address.
How to deploy and verify?
- Configure Hardhat or Foundry, specifying the network parameters and Cronoscan API key.
- Get test tokens from the faucet for testnet.
- Deploy the contract with
npx hardhat run scripts/deploy.ts --network cronosorforge create. - Verify the contract: for Hardhat —
npx hardhat verify --network cronos DEPLOYED_ADDRESS "Constructor Arg", for Foundry — with the--verifyflag.
# Hardhat npx hardhat run scripts/deploy.ts --network cronos npx hardhat verify --network cronos DEPLOYED_ADDRESS "Constructor Arg" # Foundry forge create src/MyContract.sol:MyContract \ --rpc-url cronos \ --private-key $DEPLOYER_PRIVATE_KEY \ --verify \ --etherscan-api-key $CRONOSCAN_API_KEY Foundry configuration (detailed)
# foundry.toml [profile.default] solc_version = "0.8.20" [rpc_endpoints] cronos = "${CRONOS_RPC}" cronos_testnet = "https://evm-t3.cronos.org" [etherscan] cronos = { key = "${CRONOSCAN_API_KEY}", url = "https://api.cronoscan.com/api" } Problems solved by a proven configuration
Nonce issues
If a previous transaction got stuck, the next deployment fails with a nonce error. Solution: send an empty transaction with the same nonce and a higher gas price to replace it. A standard practice for all EVM networks, but on Cronos due to high gas price, you need to calculate the bump accurately.
RPC instability
The public RPC evm.cronos.org sometimes lags. For production, use paid nodes from Alchemy (supports Cronos) or Ankr. On our projects, we set multiple RPC endpoints in url and implement a fallback — this reduces the chance of failure.
Contract size limit
The contract size limit is 24KB, as on Ethereum. If exceeded, use the Diamond pattern (EIP-2535) or split the logic into multiple contracts.
Comparison of Hardhat and Foundry: which to choose for Cronos deployment?
| Criteria | Hardhat | Foundry |
|---|---|---|
| Deployment speed | Medium (TypeScript compilation) | High (Rust compilation) |
| Verification | Plugin hardhat-verify | Built-in via --verify |
| Configuration flexibility | Wide (plugins) | Smaller ecosystem |
| Fork support | Yes (hardhat node) | Yes (anvil) |
Foundry outperforms Hardhat in speed by 2-3 times, which is especially noticeable with frequent deployments. However, Hardhat remains more flexible due to plugins. Foundry is 2-3 times faster than Hardhat.
Gas cost estimation
| Operation | Gas (approx.) | Comment |
|---|---|---|
| Simple CRO transfer | 21,000 | Standard EVM |
| Deploy ERC-20 contract | ~1,200,000 | Depends on optimization |
| Deploy complex contract with storage | ~3,500,000 | SLOAD/SSTORE |
| Write function call | ~50,000 | Normal call |
Thanks to the low price of CRO, gas costs for deployment are significantly lower than on Ethereum. The cost of our services is calculated individually.
Features of Cronos to consider
- CRO as native token — in EVM contracts, CRO behaves like ETH.
msg.valueandpayablework standardly. Wrapped CRO (WCRO) is analogous to WETH. - Cosmos IBC integration — via Cosmos SDK, you can accept assets from the Cosmos ecosystem. Addresses can be in Bech32 at the Cosmos level, but in the EVM layer they are standard 0x-addresses.
- Finality — blocks are finalized in ~5-6 seconds. For most dApps, 1-2 confirmations are enough.
- Compatibility — OpenZeppelin contracts, Uniswap v2/v3 forks, Chainlink Price Feeds (available on mainnet) — all work without changes.
Deliverables
When ordering smart contract deployment on Cronos, you receive:
- Analysis and audit of the contract (security check)
- Configuration of deployment scripts for Hardhat or Foundry
- Verification configuration on Cronoscan
- Stress testing on testnet
- Delivery of documentation, private keys, and RPC access
- Support for 2 weeks after deployment
Common errors and their solutions
In practice, the most common are nonce error — it is fixed by replacing the stuck transaction with a higher gas price; verification issues — check the apiURL in the configuration; out of gas error — for complex contracts, increase the gas limit to 20-50 million. If you encounter these or other problems — contact us, we'll help figure it out and achieve a successful deployment in 1-2 days. Order turnkey deployment or get a consultation on configuration.
For cronos smart contract development, you need to know cronos chain id, cronos rpc, and cronos testnet faucet. This guide covers deploy smart contracts cronos, including cronos hardhat setup, cronos foundry, and cronos contract verification.







