Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,9 @@ contract GenerateFeeSetterCalldata is Script {
daoSelectors[0] = PufferVaultV5.setExitFeeBasisPoints.selector;
daoSelectors[1] = PufferVaultV5.setTreasuryExitFeeBasisPoints.selector;

calldatas[0] =
abi.encodeWithSelector(AccessManager.setTargetFunctionRole.selector, pufferVault, daoSelectors, ROLE_ID_DAO);
calldatas[0] = abi.encodeWithSelector(
AccessManager.setTargetFunctionRole.selector, pufferVault, daoSelectors, ROLE_ID_DAO
);

bytes memory encodedMulticall = abi.encodeCall(Multicall.multicall, (calldatas));

Expand Down
13 changes: 7 additions & 6 deletions mainnet-contracts/script/CompleteQueuedWithdrawals.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -65,11 +65,12 @@ contract CompleteQueuedWithdrawals is Script {
tokens[0] = t;

vm.startBroadcast();
PufferModuleManager(payable(params.pufferModuleManager)).callCompleteQueuedWithdrawals({
moduleName: params.moduleName,
withdrawals: withdrawals,
tokens: tokens,
receiveAsTokens: params.receiveAsTokens
});
PufferModuleManager(payable(params.pufferModuleManager))
.callCompleteQueuedWithdrawals({
moduleName: params.moduleName,
withdrawals: withdrawals,
tokens: tokens,
receiveAsTokens: params.receiveAsTokens
});
}
}
4 changes: 3 additions & 1 deletion mainnet-contracts/script/DeployCarrotVesting.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,9 @@ contract DeployCarrotVesting is Script {
address carrot, // CARROT token address, for impl constructor
address puffer, // PUFFER token address, for impl constructor
address owner // owner of the contract, for initialize
) public {
)
public
{
vm.startBroadcast();

CarrotVesting impl = new CarrotVesting(carrot, puffer);
Expand Down
18 changes: 7 additions & 11 deletions mainnet-contracts/script/DeployEverything.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,9 @@ import { DeployPufferOracle } from "script/DeployPufferOracle.s.sol";
import { GuardiansDeployment, PufferProtocolDeployment, BridgingDeployment } from "./DeploymentStructs.sol";
import { PufferRevenueDepositor } from "src/PufferRevenueDepositor.sol";
import { ERC1967Proxy } from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol";
import { GenerateRevenueDepositorCalldata } from
"script/AccessManagerMigrations/06_GenerateRevenueDepositorCalldata.s.sol";
import {
GenerateRevenueDepositorCalldata
} from "script/AccessManagerMigrations/06_GenerateRevenueDepositorCalldata.s.sol";
import { MockAeraVault } from "test/mocks/MockAeraVault.sol";

/**
Expand Down Expand Up @@ -47,9 +48,8 @@ contract DeployEverything is BaseScript {
GuardiansDeployment memory guardiansDeployment =
new DeployGuardians().run(AccessManager(puffETHDeployment.accessManager), guardians, threshold);

address pufferOracle = new DeployPufferOracle().run(
puffETHDeployment.accessManager, guardiansDeployment.guardianModule, puffETHDeployment.pufferVault
);
address pufferOracle = new DeployPufferOracle()
.run(puffETHDeployment.accessManager, guardiansDeployment.guardianModule, puffETHDeployment.pufferVault);

PufferProtocolDeployment memory pufferDeployment =
new DeployPuffer().run(guardiansDeployment, puffETHDeployment.pufferVault, pufferOracle);
Expand Down Expand Up @@ -114,14 +114,10 @@ contract DeployEverything is BaseScript {
});

PufferRevenueDepositor revenueDepositor = PufferRevenueDepositor(
(
payable(
new ERC1967Proxy{ salt: bytes32("revenueDepositor") }(
(payable(new ERC1967Proxy{ salt: bytes32("revenueDepositor") }(
address(revenueDepositorImpl),
abi.encodeCall(PufferRevenueDepositor.initialize, (address(puffETHDeployment.accessManager)))
)
)
)
)))
);

bytes memory accessManagerCd =
Expand Down
20 changes: 12 additions & 8 deletions mainnet-contracts/script/DeployPufETH.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -126,13 +126,16 @@ contract DeployPufETH is BaseScript {
}

// Initialize Depositor
NoImplementation(payable(address(depositorProxy))).upgradeToAndCall(
address(pufferDepositorImplementation), abi.encodeCall(PufferDepositor.initialize, (address(accessManager)))
);
NoImplementation(payable(address(depositorProxy)))
.upgradeToAndCall(
address(pufferDepositorImplementation),
abi.encodeCall(PufferDepositor.initialize, (address(accessManager)))
);
// Initialize Vault
NoImplementation(payable(address(vaultProxy))).upgradeToAndCall(
address(pufferVaultImplementation), abi.encodeCall(PufferVaultV5.initialize, (address(accessManager)))
);
NoImplementation(payable(address(vaultProxy)))
.upgradeToAndCall(
address(pufferVaultImplementation), abi.encodeCall(PufferVaultV5.initialize, (address(accessManager)))
);

vm.serializeAddress(obj, "PufferDepositor", address(depositorProxy));
vm.serializeAddress(obj, "PufferDepositorImplementation", address(pufferDepositorImplementation));
Expand Down Expand Up @@ -210,8 +213,9 @@ contract DeployPufETH is BaseScript {
bytes[] memory calldatas = new bytes[](4);

// Setup role members (no delay)
calldatas[0] =
abi.encodeWithSelector(AccessManager.grantRole.selector, ROLE_ID_OPERATIONS_MULTISIG, operationsMultisig, 0);
calldatas[0] = abi.encodeWithSelector(
AccessManager.grantRole.selector, ROLE_ID_OPERATIONS_MULTISIG, operationsMultisig, 0
);
// Grant admin role to timelock
calldatas[1] =
abi.encodeWithSelector(AccessManager.grantRole.selector, accessManager.ADMIN_ROLE(), address(timelock), 0);
Expand Down
24 changes: 13 additions & 11 deletions mainnet-contracts/script/DeployPuffer.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -113,13 +113,14 @@ contract DeployPuffer is BaseScript {
operationsMultisig: operationsMultisig
});

NoImplementation(payable(address(validatorTicketProxy))).upgradeToAndCall(
address(validatorTicketImplementation),
abi.encodeCall(
ValidatorTicket.initialize,
(address(accessManager), 500, 50) //@todo recheck 5% treasury, 0.5% guardians
)
);
NoImplementation(payable(address(validatorTicketProxy)))
.upgradeToAndCall(
address(validatorTicketImplementation),
abi.encodeCall(
ValidatorTicket.initialize,
(address(accessManager), 500, 50) //@todo recheck 5% treasury, 0.5% guardians
)
);

// UUPS proxy for PufferProtocol
proxy = new ERC1967Proxy(address(new NoImplementation()), "");
Expand Down Expand Up @@ -175,9 +176,10 @@ contract DeployPuffer is BaseScript {
pufferProtocol: address(proxy)
});

NoImplementation(payable(address(moduleManagerProxy))).upgradeToAndCall(
address(moduleManager), abi.encodeCall(moduleManager.initialize, (address(accessManager)))
);
NoImplementation(payable(address(moduleManagerProxy)))
.upgradeToAndCall(
address(moduleManager), abi.encodeCall(moduleManager.initialize, (address(accessManager)))
);

// Initialize the Pool
pufferProtocol.initialize({ accessManager: address(accessManager) });
Expand Down Expand Up @@ -215,7 +217,7 @@ contract DeployPuffer is BaseScript {
pufferDepositor: address(0), // overwritten in DeployEverything
weth: address(0), // overwritten in DeployEverything
revenueDepositor: address(0) // overwritten in DeployEverything
});
});
}

function getStakingContract() internal returns (address) {
Expand Down
5 changes: 3 additions & 2 deletions mainnet-contracts/script/DeployPufferOracle.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,9 @@ contract DeployPufferOracle is BaseScript {
broadcast
returns (address)
{
PufferOracleV2 oracle =
new PufferOracleV2(GuardianModule(payable(guardianModule)), payable(pufferVault), accessManager);
PufferOracleV2 oracle = new PufferOracleV2(
GuardianModule(payable(guardianModule)), payable(pufferVault), accessManager
);

return address(oracle);
}
Expand Down
8 changes: 2 additions & 6 deletions mainnet-contracts/script/DeployPufferWithdrawalManager.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -27,14 +27,10 @@ contract DeployPufferWithdrawalManager is DeployerHelper {
((new PufferWithdrawalManager(BATCH_SIZE, PufferVaultV5(payable(_getPufferVault())), IWETH(_getWETH()))));

withdrawalManager = PufferWithdrawalManager(
(
payable(
new ERC1967Proxy{ salt: bytes32("PufferWithdrawalManager") }(
(payable(new ERC1967Proxy{ salt: bytes32("PufferWithdrawalManager") }(
address(withdrawalManagerImpl),
abi.encodeCall(PufferWithdrawalManager.initialize, address(_getAccessManager()))
)
)
)
)))
);

vm.label(address(withdrawalManager), "PufferWithdrawalManagerProxy");
Expand Down
11 changes: 3 additions & 8 deletions mainnet-contracts/script/DeployRevenueDepositor.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -24,22 +24,17 @@ contract DeployRevenueDepositor is DeployerHelper {
new PufferRevenueDepositor({ vault: _getPufferVault(), weth: _getWETH(), aeraVault: _getAeraVault() });

revenueDepositor = PufferRevenueDepositor(
(
payable(
new ERC1967Proxy{ salt: bytes32("RevenueDepositor") }(
(payable(new ERC1967Proxy{ salt: bytes32("RevenueDepositor") }(
address(revenueDepositorImpl),
abi.encodeCall(PufferRevenueDepositor.initialize, (address(_getAccessManager())))
)
)
)
)))
);

vm.label(address(revenueDepositor), "PufferRevenueDepositorProxy");
vm.label(address(revenueDepositorImpl), "PufferRevenueDepositorImplementation");

encodedCalldata = calldataGenerator.run({
revenueDepositorProxy: address(revenueDepositor),
operationsMultisig: _getOPSMultisig()
revenueDepositorProxy: address(revenueDepositor), operationsMultisig: _getOPSMultisig()
});

console.log("Queue from Timelock -> AccessManager", _getAccessManager());
Expand Down
10 changes: 4 additions & 6 deletions mainnet-contracts/script/DeployerHelper.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -60,9 +60,8 @@ abstract contract DeployerHelper is Script {
console.log("Deployed", contractName, "at", implementation);

if (block.chainid == holesky) {
AccessManager(_getAccessManager()).execute(
proxyTarget, abi.encodeCall(UUPSUpgradeable.upgradeToAndCall, (address(implementation), data))
);
AccessManager(_getAccessManager())
.execute(proxyTarget, abi.encodeCall(UUPSUpgradeable.upgradeToAndCall, (address(implementation), data)));
} else {
bytes memory upgradeCallData =
abi.encodeCall(UUPSUpgradeable.upgradeToAndCall, (address(implementation), data));
Expand Down Expand Up @@ -98,9 +97,8 @@ abstract contract DeployerHelper is Script {
console.log("Deployed", contractName, "at", implementation);

if (block.chainid == holesky) {
AccessManager(_getAccessManager()).execute(
proxyTarget, abi.encodeCall(UUPSUpgradeable.upgradeToAndCall, (address(implementation), data))
);
AccessManager(_getAccessManager())
.execute(proxyTarget, abi.encodeCall(UUPSUpgradeable.upgradeToAndCall, (address(implementation), data)));
} else {
bytes memory upgradeCallData =
abi.encodeCall(UUPSUpgradeable.upgradeToAndCall, (address(implementation), data));
Expand Down
1 change: 1 addition & 0 deletions mainnet-contracts/script/Roles.sol
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ uint64 constant ROLE_ID_OPERATIONS_PAYMASTER = 23;
uint64 constant ROLE_ID_OPERATIONS_COORDINATOR = 24;
uint64 constant ROLE_ID_WITHDRAWAL_FINALIZER = 25;
uint64 constant ROLE_ID_REVENUE_DEPOSITOR = 26;
uint64 constant ROLE_ID_VALIDATOR_EXITOR = 27;

// Role assigned to validator ticket price setter
uint64 constant ROLE_ID_VT_PRICER = 25;
Expand Down
10 changes: 6 additions & 4 deletions mainnet-contracts/script/SetupAccess.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,9 @@ import { OperationsCoordinator } from "../src/OperationsCoordinator.sol";
import { ValidatorTicketPricer } from "../src/ValidatorTicketPricer.sol";
import { GenerateAccessManagerCallData } from "../script/GenerateAccessManagerCallData.sol";
import { GenerateAccessManagerCalldata2 } from "../script/AccessManagerMigrations/GenerateAccessManagerCalldata2.s.sol";
import { GenerateRestakingOperatorCalldata } from
"../script/AccessManagerMigrations/07_GenerateRestakingOperatorCalldata.s.sol";
import {
GenerateRestakingOperatorCalldata
} from "../script/AccessManagerMigrations/07_GenerateRestakingOperatorCalldata.s.sol";
import { GenerateFeeSetterCalldata } from "../script/AccessManagerMigrations/08_GenerateFeeSetterCalldata.s.sol";

import {
Expand Down Expand Up @@ -151,8 +152,9 @@ contract SetupAccess is BaseScript {
AccessManager.labelRole.selector, ROLE_ID_OPERATIONS_PAYMASTER, "Operations Paymaster"
);

calldatas[3] =
abi.encodeWithSelector(AccessManager.labelRole.selector, ROLE_ID_OPERATIONS_MULTISIG, "Operations Multisig");
calldatas[3] = abi.encodeWithSelector(
AccessManager.labelRole.selector, ROLE_ID_OPERATIONS_MULTISIG, "Operations Multisig"
);

return calldatas;
}
Expand Down
9 changes: 5 additions & 4 deletions mainnet-contracts/script/UpgradeValidatorTicket.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -50,10 +50,11 @@ contract UpgradeValidatorTicket is DeployerHelper {
// If on testnet, upgrade and execute access control changes directly
if (block.chainid == holesky) {
// upgrade to implementation
AccessManager(_getAccessManager()).execute(
address(validatorTicket),
abi.encodeCall(UUPSUpgradeable.upgradeToAndCall, (address(validatorTicketImpl), ""))
);
AccessManager(_getAccessManager())
.execute(
address(validatorTicket),
abi.encodeCall(UUPSUpgradeable.upgradeToAndCall, (address(validatorTicketImpl), ""))
);

// execute access control changes
(bool success,) = address(_getAccessManager()).call(accessManagerCallData);
Expand Down
16 changes: 12 additions & 4 deletions mainnet-contracts/src/CarrotVesting.sol
Original file line number Diff line number Diff line change
Expand Up @@ -127,9 +127,16 @@ contract CarrotVesting is UUPSUpgradeable, Ownable2StepUpgradeable, PausableUpgr
* @param permitData The permit data
*/
function startVestingWithPermit(Permit calldata permitData) external {
IERC20Permit(address(CARROT)).permit(
msg.sender, address(this), permitData.amount, permitData.deadline, permitData.v, permitData.r, permitData.s
);
IERC20Permit(address(CARROT))
.permit(
msg.sender,
address(this),
permitData.amount,
permitData.deadline,
permitData.v,
permitData.r,
permitData.s
);
_startVesting(permitData.amount);
}

Expand Down Expand Up @@ -291,7 +298,8 @@ contract CarrotVesting is UUPSUpgradeable, Ownable2StepUpgradeable, PausableUpgr
require(!$.isDismantled, AlreadyDismantled());
require($.startTimestamp > 0 && block.timestamp >= $.startTimestamp, NotStarted());
require(amount > 0, InvalidAmount());
$.vestings[msg.sender].push(
$.vestings[msg.sender]
.push(
Vesting({
depositedAmount: uint128(amount),
claimedAmount: 0,
Expand Down
3 changes: 1 addition & 2 deletions mainnet-contracts/src/GuardianModule.sol
Original file line number Diff line number Diff line change
Expand Up @@ -159,8 +159,7 @@ contract GuardianModule is AccessManaged, IGuardianModule {

// Check the signatures
bool validSignatures = validateGuardiansEnclaveSignatures({
enclaveSignatures: enclaveSignatures,
signedMessageHash: signedMessageHash
enclaveSignatures: enclaveSignatures, signedMessageHash: signedMessageHash
});

if (!validSignatures) {
Expand Down
12 changes: 9 additions & 3 deletions mainnet-contracts/src/L1RewardManager.sol
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.8.0 <0.9.0;

import { AccessManagedUpgradeable } from
"@openzeppelin/contracts-upgradeable/access/manager/AccessManagedUpgradeable.sol";
import {
AccessManagedUpgradeable
} from "@openzeppelin/contracts-upgradeable/access/manager/AccessManagedUpgradeable.sol";
import { IL1RewardManager } from "./interface/IL1RewardManager.sol";
import { PufferVaultV5 } from "./PufferVaultV5.sol";
import { UUPSUpgradeable } from "@openzeppelin-contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol";
Expand Down Expand Up @@ -186,7 +187,12 @@ contract L1RewardManager is
bytes calldata message,
address, /* _executor */
bytes calldata /* _extraData */
) external payable override restricted {
)
external
payable
override
restricted
{
// Ensure that only the whitelisted pufETH OFT can call this function
if (oft != address(PUFETH_OFT)) {
revert Unauthorized();
Expand Down
25 changes: 14 additions & 11 deletions mainnet-contracts/src/PufLocker.sol
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,9 @@ pragma solidity >=0.8.0 <0.9.0;

import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import { UUPSUpgradeable } from "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol";
import { AccessManagedUpgradeable } from
"@openzeppelin-contracts-upgradeable/access/manager/AccessManagedUpgradeable.sol";
import {
AccessManagedUpgradeable
} from "@openzeppelin-contracts-upgradeable/access/manager/AccessManagedUpgradeable.sol";
import { PufLockerStorage } from "./PufLockerStorage.sol";
import { IPufLocker } from "./interface/IPufLocker.sol";
import { ERC20Permit } from "@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol";
Expand Down Expand Up @@ -62,15 +63,17 @@ contract PufLocker is IPufLocker, AccessManagedUpgradeable, UUPSUpgradeable, Puf
// To avoid that, we don't want to call the permit function if it is not necessary.
if (permitData.deadline >= block.timestamp) {
// https://docs.openzeppelin.com/contracts/5.x/api/token/erc20#security_considerations
try ERC20Permit(token).permit({
owner: msg.sender,
spender: address(this),
value: permitData.amount,
deadline: permitData.deadline,
v: permitData.v,
s: permitData.s,
r: permitData.r
}) { } catch { }
try ERC20Permit(token)
.permit({
owner: msg.sender,
spender: address(this),
value: permitData.amount,
deadline: permitData.deadline,
v: permitData.v,
s: permitData.s,
r: permitData.r
}) { }
catch { }
}

IERC20(token).safeTransferFrom(msg.sender, address(this), permitData.amount);
Expand Down
Loading