Skip to content

Commit

Permalink
feat: refactor fuzz.ProtocolDeployment
Browse files Browse the repository at this point in the history
  • Loading branch information
sergeyWh1te committed Jan 17, 2025
1 parent c9f78d0 commit 166ef4b
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 49 deletions.
56 changes: 7 additions & 49 deletions test/0.8.25/Accounting.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,9 @@ import {console2} from "forge-std/console2.sol";
import {ReportValues} from "contracts/common/interfaces/ReportValues.sol";

import {BaseProtocolTest} from "./Protocol__Deployment.t.sol";
import {console2} from "../../foundry/lib/forge-std/src/console2.sol";

interface IAccounting {
function initialize(address _admin) external;

function handleOracleReport(ReportValues memory _report) external;

function simulateOracleReport(ReportValues memory _report, uint256 _withdrawalShareRate) external;
Expand Down Expand Up @@ -74,9 +73,11 @@ contract AccountingHandler is CommonBase, StdCheats, StdUtils {
});

vm.prank(accountingOracle);
accounting.handleOracleReport(currentReport);

reports.push(currentReport);
try accounting.handleOracleReport(currentReport) {
reports.push(currentReport);
} catch {
console2.log("Could not store report");
}
}
}

Expand All @@ -88,12 +89,11 @@ contract AccountingTest is BaseProtocolTest {
address private rootAccount = address(0x123);
address private userAccount = address(0x321);

address private depositContract = address(0x4242424242424242424242424242424242424242);
function setUp() public {
BaseProtocolTest.setUpProtocol(protocolStartBalance, rootAccount, userAccount);

ReportValues memory refReport = ReportValues({
timestamp: 1705312150,
timestamp: genesisTimestamp,
timeElapsed: 0,
clValidators: 0,
clBalance: 0,
Expand All @@ -105,55 +105,13 @@ contract AccountingTest is BaseProtocolTest {
netCashFlows: new int256[](0)
});

// Add accounting contract with handler to the protocol
address accountingImpl = deployCode(
"Accounting.sol:Accounting",
abi.encode([address(lidoLocator), lidoLocator.lido()])
);

deployCodeTo(
"OssifiableProxy.sol:OssifiableProxy",
abi.encode(accountingImpl, rootAccount, new bytes(0)),
lidoLocator.accounting()
);

accountingHandler = new AccountingHandler(
lidoLocator.accounting(),
lidoLocator.lido(),
lidoLocator.accountingOracle(),
refReport
);

deployCodeTo(
"AccountingOracle.sol:AccountingOracle",
abi.encode(
address(lidoLocator),
lidoLocator.legacyOracle(),
12, // secondsPerSlot
1695902400 // genesisTime
),
lidoLocator.accountingOracle()
);

IAccounting(lidoLocator.accounting()).initialize(rootAccount);

// Add burner contract to the protocol
deployCodeTo(
"Burner.sol:Burner",
abi.encode(rootAccount, address(lidoLocator), lidoLocator.lido(), 0, 0),
lidoLocator.burner()
);

// Add staking router contract to the protocol
deployCodeTo("StakingRouter.sol:StakingRouter", abi.encode(depositContract), lidoLocator.stakingRouter());

// Add oracle report sanity checker contract to the protocol
deployCodeTo(
"OracleReportSanityChecker.sol:OracleReportSanityChecker",
abi.encode(address(lidoLocator), rootAccount, [1500, 1500, 1000, 2000, 8, 24, 128, 5000000, 1000, 101, 50]),
lidoLocator.oracleReportSanityChecker()
);

// Set target contract to the accounting handler
targetContract(address(accountingHandler));

Expand Down
49 changes: 49 additions & 0 deletions test/0.8.25/Protocol__Deployment.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@ import {console2} from "forge-std/console2.sol";

import {ILidoLocator} from "contracts/common/interfaces/ILidoLocator.sol";

interface IAccounting {
function initialize(address _admin) external;
}

interface ILido {
function getTotalShares() external view returns (uint256);

Expand Down Expand Up @@ -89,6 +93,9 @@ contract BaseProtocolTest is Test {
address public evmScriptRegistryFactory;
address public daoFactoryAdr;

uint256 public genesisTimestamp = 1695902400;
address private depositContract = address(0x4242424242424242424242424242424242424242);

function setUpProtocol(uint256 _startBalance, address _rootAccount, address _userAccount) public {
rootAccount = _rootAccount;
userAccount = _userAccount;
Expand All @@ -112,6 +119,48 @@ contract BaseProtocolTest is Test {
/// @dev deploy lido locator with dummy default values
lidoLocator = _deployLidoLocator(lidoProxyAddress);

// Add accounting contract with handler to the protocol
address accountingImpl = deployCode(
"Accounting.sol:Accounting",
abi.encode([address(lidoLocator), lidoProxyAddress])
);

deployCodeTo(
"OssifiableProxy.sol:OssifiableProxy",
abi.encode(accountingImpl, rootAccount, new bytes(0)),
lidoLocator.accounting()
);

deployCodeTo(
"AccountingOracle.sol:AccountingOracle",
abi.encode(
address(lidoLocator),
lidoLocator.legacyOracle(),
12, // secondsPerSlot
genesisTimestamp
),
lidoLocator.accountingOracle()
);

// Add burner contract to the protocol
deployCodeTo(
"Burner.sol:Burner",
abi.encode(rootAccount, address(lidoLocator), lidoProxyAddress, 0, 0),
lidoLocator.burner()
);

// Add staking router contract to the protocol
deployCodeTo("StakingRouter.sol:StakingRouter", abi.encode(depositContract), lidoLocator.stakingRouter());

// Add oracle report sanity checker contract to the protocol
deployCodeTo(
"OracleReportSanityChecker.sol:OracleReportSanityChecker",
abi.encode(address(lidoLocator), rootAccount, [1500, 1500, 1000, 2000, 8, 24, 128, 5000000, 1000, 101, 50]),
lidoLocator.oracleReportSanityChecker()
);

IAccounting(lidoLocator.accounting()).initialize(rootAccount);

/// @dev deploy eip712steth
address eip712steth = deployCode("EIP712StETH.sol:EIP712StETH", abi.encode(lidoProxyAddress));

Expand Down

0 comments on commit 166ef4b

Please sign in to comment.