Learn
Guides and gotchas for PulseChain smart contract development.
Developing on PulseChain
PulseChain is an EVM-compatible Layer 1. Most Ethereum tooling works with small configuration changes.
Network configuration
# foundry.toml
[rpc_endpoints]
pulsechain = "https://rpc-pulsechain.g4mm4.io"
pulsechain_testnet = "https://rpc-testnet-pulsechain.g4mm4.io"
[profile.default]
solc = "0.8.24"
evm_version = "shanghai" # PulseChain supports Shanghai, not Cancun
optimizer = true
optimizer_runs = 200
Hardhat configuration
// hardhat.config.js
module.exports = {
solidity: {
version: "0.8.24",
settings: {
evmVersion: "shanghai",
optimizer: { enabled: true, runs: 200 },
},
},
networks: {
pulsechain: {
url: "https://rpc-pulsechain.g4mm4.io",
chainId: 369,
},
pulsechainTestnet: {
url: "https://rpc-testnet-pulsechain.g4mm4.io",
chainId: 943,
},
},
};
Why Shanghai matters
PulseChain currently supports the Shanghai hardfork. Compiling with a
newer EVM target (for example, cancun) can produce
bytecode that does not match what is deployed, causing verification to
fail. It can also introduce opcodes or behaviors that are not yet
active on PulseChain. Always set
evm_version = "shanghai" when targeting PulseChain
mainnet or testnet.
How to verify a contract on PulseChain
- Deploy your contract on PulseChain mainnet (chain 369) or testnet v4 (chain 943).
- Copy the deployed contract address.
- Go to Verify Contract and select your verification method.
- Match the compiler version and EVM version used during compilation. PulseChain currently uses shanghai.
- Submit and wait for Sourcify to confirm the match.
How to read a verified contract
Use the Verified Contracts page or search for an address. The contract page shows source code, ABI, and read/write functions.
Proxy patterns
ContractLab detects common proxy standards automatically: EIP-1167 minimal proxies, EIP-1967 transparent proxies, and EIP-1822 UUPS proxies.
PulseChain-specific gotchas
- Chain IDs: mainnet 369, testnet v4 943.
-
EVM version:
shanghai. Compiling forcancunwill produce non-matching bytecode. - Gas token: PLS.
- Fork block for post-fork contracts: ~17,233,000.