Overview
TheSmartContractManager
is a high-level manager for deploying contracts using CREATE2, executing contract calls, and orchestrating contract state for tests. It handles the complexity of contract deployment and interaction, allowing you to focus on test logic rather than blockchain plumbing.
Constructor
Path to the root of the project (used to locate contract artifacts)
Properties
Root directory for artifact lookup
viem public client (initialized in
initialize
)viem wallet client (initialized in
initialize
)Map of deployed contract addresses to their ABIs
Instance of ProxyDeployer for managing the deployment proxy
Methods
initialize()
The local node manager instance
deployContract()
Contract deployment configuration
executeCall()
Contract call configuration
setContractState()
Setup configuration with deployments and calls
The local node manager instance
predictContractAddress()
32-byte salt for CREATE2
Contract bytecode
Constructor arguments
Contract Artifacts
The SmartContractManager loads contract artifacts from your project’s build directory. It supports:- Foundry: Looks for artifacts in
out/
directory - Hardhat: Looks for artifacts in
artifacts/
directory
Artifact Structure
Artifacts should contain:Complete Examples
Basic Token Deployment
Best Practices
1
Initialize before use
Always call
initialize()
before using other methods2
Use deterministic salts
Generate salts based on test names or contract purposes for reproducibility
3
Handle deployment errors
Wrap deployments in try-catch blocks to handle failures gracefully
4
Clean up resources
Always stop the node after tests complete
Tips and Tricks
Use the
predictContractAddress
method to get addresses before deployment. This is useful for setting up circular dependencies.The SmartContractManager keeps track of deployed contracts’ ABIs, making it easier to interact with them later.
Contract addresses depend on bytecode. Changing compiler settings or contract code will result in different addresses.
See Also
- ProxyDeployer - Lower-level proxy management