deterministic addr & test bugfixes

This commit is contained in:
Tim Olson
2023-10-08 01:11:33 -04:00
parent 52069cfe0b
commit 1fabd95940
9 changed files with 30 additions and 16 deletions

View File

@@ -3,13 +3,14 @@ pragma solidity =0.7.6;
pragma abicoder v2;
import "./Constants.sol";
import "forge-std/console2.sol";
library VaultAddress {
// keccak-256 hash of the Vault's bytecode (not the deployed bytecode but the initialization bytecode)
// can paste into:
// https://emn178.github.io/online-tools/keccak_256.html
bytes32 internal constant VAULT_INIT_CODE_HASH = 0xdc7f6d1305b2c9951dc98f6a745290e4f2b92bf65d346db11dd284dcfcd67aef;
bytes32 internal constant VAULT_INIT_CODE_HASH = 0x40d5f4d1aa2f505a4b156599c452d0e7df5003430246ca5798a932dc031a9127;
// the contract being constructed must not have any constructor arguments or the determinism will be broken. instead, use a callback to
// get construction arguments
@@ -20,13 +21,14 @@ library VaultAddress {
}
function computeAddress(address factory, address owner, uint8 num) internal pure returns (address vault) {
bytes32 salt = keccak256(abi.encodePacked(owner,num));
vault = address(
uint256(
keccak256(
abi.encodePacked(
hex'ff',
factory,
keccak256(abi.encode(owner,num)),
salt,
VAULT_INIT_CODE_HASH
)
)