Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
This contract has been verified via Sourcify.
View contract in Sourcify repository
- Contract name:
- FerrumDeployer
- Optimization enabled
- false
- Compiler version
- v0.6.6+commit.6c089d02
- EVM Version
- istanbul
- Verified at
- 2026-04-22T16:12:11.822155Z
/home/naiemk/nk/open-staking/contracts/common/FerrumDeployer.sol
pragma solidity >=0.6.0 <0.8.0;
import "@openzeppelin/contracts/utils/Create2.sol";
contract FerrumDeployer {
uint256 constant EXTERNAL_HASH = 0x0ddafcd8600839ce553cacb17e362c83ea42ccfd1e8c8b3cb4d075124196dfc0;
uint256 constant INTERNAL_HASH = 0x27fd0863a54f729686099446389b11108e6e34e7364d1f8e38a43e1661a07f3a;
event Deployed(address);
function deploy(bytes32 salt, bytes calldata bytecode)
external returns (address) {
bytes32 _data = keccak256(
abi.encodePacked(salt, INTERNAL_HASH, msg.sender)
);
address deployed = Create2.deploy(0, _data, bytecode);
emit Deployed(deployed);
return deployed;
}
/**
* @dev Use this method if you want to incorporate the sender address in the contract address.
*/
function deployFromContract(bytes32 salt, address deployer, bytes calldata bytecode)
external returns (address) {
bytes32 _data = keccak256(
abi.encodePacked(salt, EXTERNAL_HASH, deployer)
);
address deployed = Create2.deploy(0, _data, bytecode);
emit Deployed(deployed);
return deployed;
}
function computeAddressFromContract(bytes32 salt, bytes32 bytecodeHash, address deployer)
external pure returns (address) {
bytes32 _data = keccak256(
abi.encodePacked(salt, EXTERNAL_HASH, deployer)
);
return Create2.computeAddress(_data, bytecodeHash, deployer);
}
function computeAddress(bytes32 salt, bytes32 bytecodeHash, address deployer)
external view returns (address) {
bytes32 _data = keccak256(
abi.encodePacked(salt, INTERNAL_HASH, deployer)
);
return Create2.computeAddress(_data, bytecodeHash);
}
}
/
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.0;
/**
* @dev Helper to make usage of the `CREATE2` EVM opcode easier and safer.
* `CREATE2` can be used to compute in advance the address where a smart
* contract will be deployed, which allows for interesting new mechanisms known
* as 'counterfactual interactions'.
*
* See the https://eips.ethereum.org/EIPS/eip-1014#motivation[EIP] for more
* information.
*/
library Create2 {
/**
* @dev Deploys a contract using `CREATE2`. The address where the contract
* will be deployed can be known in advance via {computeAddress}.
*
* The bytecode for a contract can be obtained from Solidity with
* `type(contractName).creationCode`.
*
* Requirements:
*
* - `bytecode` must not be empty.
* - `salt` must have not been used for `bytecode` already.
* - the factory must have a balance of at least `amount`.
* - if `amount` is non-zero, `bytecode` must have a `payable` constructor.
*/
function deploy(uint256 amount, bytes32 salt, bytes memory bytecode) internal returns (address) {
address addr;
require(address(this).balance >= amount, "Create2: insufficient balance");
require(bytecode.length != 0, "Create2: bytecode length is zero");
// solhint-disable-next-line no-inline-assembly
assembly {
addr := create2(amount, add(bytecode, 0x20), mload(bytecode), salt)
}
require(addr != address(0), "Create2: Failed on deploy");
return addr;
}
/**
* @dev Returns the address where a contract will be stored if deployed via {deploy}. Any change in the
* `bytecodeHash` or `salt` will result in a new destination address.
*/
function computeAddress(bytes32 salt, bytes32 bytecodeHash) internal view returns (address) {
return computeAddress(salt, bytecodeHash, address(this));
}
/**
* @dev Returns the address where a contract will be stored if deployed via {deploy} from a contract located at
* `deployer`. If `deployer` is this contract's address, returns the same value as {computeAddress}.
*/
function computeAddress(bytes32 salt, bytes32 bytecodeHash, address deployer) internal pure returns (address) {
bytes32 _data = keccak256(
abi.encodePacked(bytes1(0xff), deployer, salt, bytecodeHash)
);
return address(uint256(_data));
}
}
Compiler Settings
{"remappings":[],"optimizer":{"runs":200,"enabled":false},"metadata":{"bytecodeHash":"ipfs"},"libraries":{},"evmVersion":"istanbul","compilationTarget":{"/home/naiemk/nk/open-staking/contracts/common/FerrumDeployer.sol":"FerrumDeployer"}}
Contract ABI
[{"type":"event","name":"Deployed","inputs":[{"type":"address","name":"","internalType":"address","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"computeAddress","inputs":[{"type":"bytes32","name":"salt","internalType":"bytes32"},{"type":"bytes32","name":"bytecodeHash","internalType":"bytes32"},{"type":"address","name":"deployer","internalType":"address"}]},{"type":"function","stateMutability":"pure","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"computeAddressFromContract","inputs":[{"type":"bytes32","name":"salt","internalType":"bytes32"},{"type":"bytes32","name":"bytecodeHash","internalType":"bytes32"},{"type":"address","name":"deployer","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"deploy","inputs":[{"type":"bytes32","name":"salt","internalType":"bytes32"},{"type":"bytes","name":"bytecode","internalType":"bytes"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"deployFromContract","inputs":[{"type":"bytes32","name":"salt","internalType":"bytes32"},{"type":"address","name":"deployer","internalType":"address"},{"type":"bytes","name":"bytecode","internalType":"bytes"}]}]
Contract Creation Code
0x608060405234801561001057600080fd5b506109c1806100206000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80633bb2834e1461005157806378065306146101345780639f4ed32c146101cc578063cdcb760a14610264575b600080fd5b6100f26004803603606081101561006757600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156100ae57600080fd5b8201836020820111156100c057600080fd5b803590602001918460018302840111640100000000831117156100e257600080fd5b9091929391929390505050610327565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61018a6004803603606081101561014a57600080fd5b810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610476565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610222600480360360608110156101e257600080fd5b810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610515565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102e56004803603604081101561027a57600080fd5b8101908080359060200190929190803590602001906401000000008111156102a157600080fd5b8201836020820111156102b357600080fd5b803590602001918460018302840111640100000000831117156102d557600080fd5b90919293919293905050506105b5565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b600080857f0ddafcd8600839ce553cacb17e362c83ea42ccfd1e8c8b3cb4d075124196dfc086604051602001808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014019350505050604051602081830303815290604052805190602001209050600061040460008387878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050610703565b90507ff40fcec21964ffb566044d083b4073f29f7f7929110ea19e1b3ebe375d89055e81604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a18092505050949350505050565b600080847f27fd0863a54f729686099446389b11108e6e34e7364d1f8e38a43e1661a07f3a84604051602001808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b8152601401935050505060405160208183030381529060405280519060200120905061050b81856108ad565b9150509392505050565b600080847f0ddafcd8600839ce553cacb17e362c83ea42ccfd1e8c8b3cb4d075124196dfc084604051602001808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140193505050506040516020818303038152906040528051906020012090506105ab8185856108c2565b9150509392505050565b600080847f27fd0863a54f729686099446389b11108e6e34e7364d1f8e38a43e1661a07f3a33604051602001808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014019350505050604051602081830303815290604052805190602001209050600061069260008387878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050610703565b90507ff40fcec21964ffb566044d083b4073f29f7f7929110ea19e1b3ebe375d89055e81604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a180925050509392505050565b6000808447101561077c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f437265617465323a20696e73756666696369656e742062616c616e636500000081525060200191505060405180910390fd5b6000835114156107f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f437265617465323a2062797465636f6465206c656e677468206973207a65726f81525060200191505060405180910390fd5b8383516020850187f59050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156108a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f437265617465323a204661696c6564206f6e206465706c6f790000000000000081525060200191505060405180910390fd5b809150509392505050565b60006108ba8383306108c2565b905092915050565b60008060ff60f81b83868660405160200180857effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526001018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018381526020018281526020019450505050506040516020818303038152906040528051906020012090508060001c915050939250505056fea26469706673582212205a03834e1400bd27644fe388f26287ff9907a4b6a221330c71584780a83b18f164736f6c63430006060033
Deployed ByteCode
0x608060405234801561001057600080fd5b506004361061004c5760003560e01c80633bb2834e1461005157806378065306146101345780639f4ed32c146101cc578063cdcb760a14610264575b600080fd5b6100f26004803603606081101561006757600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156100ae57600080fd5b8201836020820111156100c057600080fd5b803590602001918460018302840111640100000000831117156100e257600080fd5b9091929391929390505050610327565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61018a6004803603606081101561014a57600080fd5b810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610476565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610222600480360360608110156101e257600080fd5b810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610515565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102e56004803603604081101561027a57600080fd5b8101908080359060200190929190803590602001906401000000008111156102a157600080fd5b8201836020820111156102b357600080fd5b803590602001918460018302840111640100000000831117156102d557600080fd5b90919293919293905050506105b5565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b600080857f0ddafcd8600839ce553cacb17e362c83ea42ccfd1e8c8b3cb4d075124196dfc086604051602001808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014019350505050604051602081830303815290604052805190602001209050600061040460008387878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050610703565b90507ff40fcec21964ffb566044d083b4073f29f7f7929110ea19e1b3ebe375d89055e81604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a18092505050949350505050565b600080847f27fd0863a54f729686099446389b11108e6e34e7364d1f8e38a43e1661a07f3a84604051602001808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b8152601401935050505060405160208183030381529060405280519060200120905061050b81856108ad565b9150509392505050565b600080847f0ddafcd8600839ce553cacb17e362c83ea42ccfd1e8c8b3cb4d075124196dfc084604051602001808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140193505050506040516020818303038152906040528051906020012090506105ab8185856108c2565b9150509392505050565b600080847f27fd0863a54f729686099446389b11108e6e34e7364d1f8e38a43e1661a07f3a33604051602001808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014019350505050604051602081830303815290604052805190602001209050600061069260008387878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050610703565b90507ff40fcec21964ffb566044d083b4073f29f7f7929110ea19e1b3ebe375d89055e81604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a180925050509392505050565b6000808447101561077c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f437265617465323a20696e73756666696369656e742062616c616e636500000081525060200191505060405180910390fd5b6000835114156107f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f437265617465323a2062797465636f6465206c656e677468206973207a65726f81525060200191505060405180910390fd5b8383516020850187f59050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156108a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f437265617465323a204661696c6564206f6e206465706c6f790000000000000081525060200191505060405180910390fd5b809150509392505050565b60006108ba8383306108c2565b905092915050565b60008060ff60f81b83868660405160200180857effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526001018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018381526020018281526020019450505050506040516020818303038152906040528051906020012090508060001c915050939250505056fea26469706673582212205a03834e1400bd27644fe388f26287ff9907a4b6a221330c71584780a83b18f164736f6c63430006060033