While testing the contract, a fuzz test was created to test that the address deployed to in newEscrow()
will match the precomputed address with all parameters fuzzed.
function testComputedAddressEqualsDeployedAddress(uint salt, uint price, address buyer, address seller, address arbiter, uint arbiter_fee) public hasTokensApprovedForSending {
if (buyer == address(0)) {
buyer = BUYER;
}
if (seller == address(0)) {
seller = SELLER;
}
if (arbiter == address(0)) {
arbiter = ARBITER;
}
price /= 2;
if (price <= 1) {
price = PRICE;
}
if (arbiter_fee >= price) {
arbiter_fee = price / 2;
}
address computedAddress = escrowFactory.computeEscrowAddress(
type(Escrow).creationCode,
address(escrowFactory),
uint256(salt),
price,
i_tokenContract,
buyer,
seller,
arbiter,
arbiter_fee
);
ERC20Mock(address(i_tokenContract)).mint(computedAddress, price);
vm.startPrank(address(escrowFactory));
Escrow escrow = new Escrow{salt: bytes32(salt)}(
price,
i_tokenContract,
buyer,
seller,
arbiter,
arbiter_fee
);
vm.stopPrank();
assertEq(computedAddress, address(escrow));
}