Pushing Contracts
Pushing contracts is how your Stagenet learns about your smart contracts.
A push does not deploy anything. It uploads your project’s compiled contract information — name, ABI, bytecode, storage layout, and source — so the Stagenet can match your deployed contracts by bytecode and attach the right name and ABI to each one automatically. That fully activates their contract dashboards — decoded calls, events, and storage — without adding ABIs by hand per contract.
How to push
From your Hardhat or Foundry project:
# Compile first
forge build # Foundry
npx hardhat compile # Hardhat
# Then push
contract.dev push-contractsDetected Foundry project
2 contracts pushed:
- Token
- Vault
ABI added to 2 contracts on your Stagenet:
- Token @ 0x5FbDB2315678afecb367f032d93F642f64180aa3
- Vault @ 0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512Re-run after contract changes to keep ABIs in sync — unchanged contracts are no-ops. See the push-contracts reference for path overrides and edge cases.
What gets pushed
| Data | Used for |
|---|---|
| Contract name | Human-readable names instead of raw addresses |
| ABI | Decoding function calls, events, and the interact panel |
| Deployed bytecode | Matching deployments to pushed contracts |
| Storage layout | Decoding storage variables |
| Source code | Linking back to the original Solidity |
Matching deployments
You may deploy the same code more than once — each deployment is matched independently:
- Contracts already deployed on the Stagenet get the pushed name and ABI attached immediately, with their past calls backfilled and decoded.
- Contracts you deploy later are matched the same way at deploy time.
- Every matched address gets its own dashboard.
- Names and ABIs you’ve already set on an address by hand are never overwritten.
Matching is by deployed bytecode, so a whitespace- or comment-only change still matches — push again after logic changes so new deployments match the new bytecode.