deploy_contract

Documentation for eth_defi.deploy.deploy_contract function.

deploy_contract(web3, contract, deployer, *constructor_args, register_for_tracing=True, gas=None, confirm=True, libraries=None)

Deploys a new contract from ABI file.

A generic helper function to deploy any contract.

Example:

token = deploy_contract(web3, deployer, "ERC20Mock.json", name, symbol, supply)
print(f"Deployed ERC-20 token at {token.address}")

For contracts that require Forge library linking:

# Deploy the library first, then link it
lib = deploy_contract(web3, "guard/HypercoreVaultLib.json", deployer)
vault = deploy_contract(
    web3,
    "guard/SimpleVaultV0.json",
    deployer,
    asset_manager,
    libraries={"HypercoreVaultLib": lib.address},
)

# Or link with zero address if the library is never called on this chain
from eth_defi.abi import ZERO_ADDRESS

vault = deploy_contract(
    web3,
    "guard/SimpleVaultV0.json",
    deployer,
    asset_manager,
    libraries={"HypercoreVaultLib": ZERO_ADDRESS},
)

If you need to verify the deployed contract use eth_defi.foundry.forge.deploy_contract_with_forge().

Parameters
  • web3 (web3.main.Web3) – Web3 instance

  • contract (Union[str, web3.contract.contract.Contract]) – Contract file path as string or contract proxy class

  • deployer (str | eth_account.signers.local.LocalAccount | eth_defi.hotwallet.HotWallet) –

    Deployer account.

    Either address (use construct_sign_and_send_raw_middleware) or LocalAccount.

  • constructor_args – Other arguments to pass to the contract’s constructor

  • register_for_tracing

    Make the symbolic contract information available on web3 instance.

    See get_contract_registry()

  • gas (int) –

    Gas limit.

    If not set tries to estimate and probably may hit reverts when doing so.

  • confirm – Confirm the contract deployment.

  • libraries (dict[str, str] | None) – Forge library linking addresses. Mapping of library name to deployed address for resolving __$<hash>$__ placeholders in Forge-compiled bytecode. Use ZERO_ADDRESS for libraries that are never called on the target chain.

Raises

ContractDeploymentFailed – In the case we could not deploy the contract.

Returns

Contract proxy instance or tx_hash if confirm=false.

Return type

web3.contract.contract.Contract | hexbytes.main.HexBytes