Closed amusingaxl closed 2 months ago
TLDR: Good to deploy
0.8.16
true
IF spell introduces a major change that can affect external parties (e.g.: keepers are affected in case of collateral offboarding) OTHERWISE explicitly set to false
ℹ️ Although the spell introduces major changes, instead of using office hours it redefines schedule()
method to set "earliest execution date" (per Executive Doc). This ensures affected parties are aware of the execution timeblock.timestamp + 30 days
)TARGET_DATE MakerDAO Executive Spell | Hash: EXEC_DOC_HASH
TARGET_DATE
in the description matches the target date// Hash: cast keccak -- "$(wget 'EXEC_DOC_URL' -q -O - 2>/dev/null)"
// ----- Section text -----
)// Instruction text
// Note:
(e.g.: // Note: Payments are skipped on goerli
)chainlog
version bump), the necessity of it is explained in the comment above prefixed with // Note:
Reasoning URL
and Authority URL
is present in the spell code under relevant section or instruction (depending on which row the url is present)Reasoning URL
and Authority URL
have prefix derived from the url itself
// Executive Vote:
if URL starts with https://vote.makerdao.com/executive/
// Poll:
if URL starts with https://vote.makerdao.com/polling/
// Forum:
if URL starts with https://forum.makerdao.com/t/
// MIP:
if URL starts with https://mips.makerdao.com/mips/details/
foundryup
ℹ️ Updated versions
foundryup: installed - forge 0.2.0 (be451fb 2024-09-11T00:20:08.082212000Z)
foundryup: installed - cast 0.2.0 (be451fb 2024-09-11T00:20:08.053769000Z)
foundryup: installed - anvil 0.2.0 (be451fb 2024-09-11T00:20:08.111672000Z)
foundryup: installed - chisel 0.2.0 (be451fb 2024-09-11T00:20:08.098655000Z)
rm -rf ./lib && git submodule update --init --recursive
Insert checked out submodule paths here
Submodule path 'lib/dss-exec-lib': checked out '69b658f35d8618272cd139dfc18c5713caf6b96b'
Submodule path 'lib/dss-test': checked out '36ff4adbcb35760614e0d2df864026991c23d028'
dss-exec-lib
is synced as welldss-exec-lib
(run git submodule status
) matches the latest release version or newerdss-interfaces
library used inside lib/dss-exec-lib
matches submodule used inside lib/dss-test
dss-interfaces
dss-interfaces
import "dss-interfaces/dss/VatAbstract.sol";
)dss-interfaces
, OTHERWISE should be imported from there
:warning: DSPauseAbstract and ChainlogAbstract are present in dss-interfaces
, but they contain unused methods. Therefore it's acceptable to statically redeclare themcast interface <contract_address>
commandLike
suffix (e.g. VatLike
)
WAD = 10 ** 18
RAY = 10 ** 27
RAD = 10 ** 45
internal
constant
HUNDRED = 10 ** 2
THOUSAND = 10 ** 3
MILLION = 10 ** 6
BILLION = 10 ** 9
internal
constant
make rates pct=<pct>
(e.g. pct=0.75, for 0.75%)X_PT_Y_Z_PCT_RATE
(e.g. ZERO_PT_SEVEN_FIVE_PCT_RATE
for 0.75%)internal
constant
UTC
timezoneUTC
timezoneMMM_DD_YYYY
(e.g. JAN_01_2023
for 2023-01-01)
ℹ️ Variable name also contains time and timezone23:59:59 UTC
for the final day of something, 00:00:00 UTC
for the first day of something)internal
constant
USDS
in the spell1e91268374d2796abcbb1af2b75473b2af488265
GNU AGPLv3
license
:warning: The contracts are ERC1967 implementation developed by Openzeppelin, so we have no contol over the license. This is expected / not a blockervat
, dai
, dog
, ...)
ℹ️ Constructor arguments:
implementation
(address): 0x1923DfeE706A8E78157416C29cBCCFDe7cdF4102
USDS_IMP
address below_data
(bytes): 0x8129fc1c
initialize()
function signature found in USDS_IMP
wards
or access control
ℹ️ While the contract itself have no wards, it keeps state for the implementation contract (called via delegatecall
, as per EIP1967 spec). Upgradability is also being controlled by the implementation contract (see _authorizeUpgrade)
PAUSE_PROXY
address was relied
(wards(PAUSE_PROXY)
is 1
)denied
(wards(deployer)
is 0
)MCD_ESM
address is already relied OR being relied
(wards(MCD_ESM)
is 1
) in this spell (as approved by Governance Facilitators, in order to allow de-authing the pause proxy during Emergency Shutdown, via denyProxy
)
:warning: This is overwritten by the specific instruction Do not authorize ESM in any new contracts
Rely
events except for PAUSE_PROXY
and MCD_ESM
(using a block explorer like etherscan)code --diff etherscan.sol github.sol
)addresses_deployers.sol
USDS_IMP
in the spell1e91268374d2796abcbb1af2b75473b2af488265
GNU AGPLv3
licensevat
, dai
, dog
, ...)wards
or access control
ℹ️ It technically has wards, but sice it's implementation contract and only called via delegatecall
, its state is stored in the parent proxy contract, therefore its own state is irrelevant
PAUSE_PROXY
address was relied
(wards(PAUSE_PROXY)
is 1
)denied
(wards(deployer)
is 0
)MCD_ESM
address is already relied OR being relied
(wards(MCD_ESM)
is 1
) in this spell (as approved by Governance Facilitators, in order to allow de-authing the pause proxy during Emergency Shutdown, via denyProxy
)Rely
events except for PAUSE_PROXY
and MCD_ESM
(using a block explorer like etherscan)code --diff etherscan.sol github.sol
)addresses_deployers.sol
USDS_JOIN
in the spell1e91268374d2796abcbb1af2b75473b2af488265
GNU AGPLv3
licensevat
, dai
, dog
, ...)
ℹ️ Constructor arguments
vat_
(address): 0x35D1b3F3D7966A1DFe207aa4514C12a259A0492B
MCD_VAT
found in chainlogusds_
(address): 0xdC035D45d973E3EC169d2276DDab16f1e407384F
USDS
address checked abovewards
or access control
PAUSE_PROXY
address was relied
(wards(PAUSE_PROXY)
is 1
)denied
(wards(deployer)
is 0
)MCD_ESM
address is already relied OR being relied
(wards(MCD_ESM)
is 1
) in this spell (as approved by Governance Facilitators, in order to allow de-authing the pause proxy during Emergency Shutdown, via denyProxy
)Rely
events except for PAUSE_PROXY
and MCD_ESM
(using a block explorer like etherscan)code --diff etherscan.sol github.sol
)addresses_deployers.sol
DAI_USDS
in the spell1e91268374d2796abcbb1af2b75473b2af488265
GNU AGPLv3
licensevat
, dai
, dog
, ...)
ℹ️ Constructor arguments
daiJoin_
(address): 0x9759A6Ac90977b93B58547b4A71c78317f391A28
MCD_JOIN_DAI
found in chainlogusdsJoin_
(address): 0x3C0f895007CA717Aa01c8693e59DF1e8C3777FEB
USDS_JOIN
address checked abovewards
or access control
PAUSE_PROXY
address was relied
(wards(PAUSE_PROXY)
is 1
)denied
(wards(deployer)
is 0
)MCD_ESM
address is already relied OR being relied
(wards(MCD_ESM)
is 1
) in this spell (as approved by Governance Facilitators, in order to allow de-authing the pause proxy during Emergency Shutdown, via denyProxy
)Rely
events except for PAUSE_PROXY
and MCD_ESM
(using a block explorer like etherscan)code --diff etherscan.sol github.sol
)addresses_deployers.sol
SUSDS
in the spelle5660deac9434c79d48ecde879c29f37fb89f2dc
GNU AGPLv3
license
:warning: The contracts are Openzeppelin-authored ERC1967 implementation, so we have no contol over the licence. This is expected / not a blockervat
, dai
, dog
, ...)
ℹ️ Constructor arguments
implementation
(address): 0x4e7991e5C547ce825BdEb665EE14a3274f9F61e0
SUSDS_IMP
address checked below_data
(bytes): 0x8129fc1c
initialize()
function signature found in SUSDS_IMP
wards
or access control
ℹ️ While the contract itself have no wards, it keeps state for the implementation contract (called via delegatecall
, as per EIP1967 spec). Upgradability is also being controlled by the implementation contract (see _authorizeUpgrade)
PAUSE_PROXY
address was relied
(wards(PAUSE_PROXY)
is 1
)denied
(wards(deployer)
is 0
)MCD_ESM
address is already relied OR being relied
(wards(MCD_ESM)
is 1
) in this spell (as approved by Governance Facilitators, in order to allow de-authing the pause proxy during Emergency Shutdown, via denyProxy
)
:warning: This is overwritten by the specific instruction Do not authorize ESM in any new contracts
Rely
events except for PAUSE_PROXY
and MCD_ESM
(using a block explorer like etherscan)code --diff etherscan.sol github.sol
)addresses_deployers.sol
SUSDS_IMP
in the spelle5660deac9434c79d48ecde879c29f37fb89f2dc
GNU AGPLv3
licensevat
, dai
, dog
, ...)
ℹ️ Constructor arguments
usdsJoin_
(address): 0x3C0f895007CA717Aa01c8693e59DF1e8C3777FEB
USDS_JOIN
address checked abovevow_
(address): 0xA950524441892A31ebddF91d3cEEFa04Bf454466
MCD_VOW
found in chainlogwards
or access control
ℹ️ It technically has wards, but sice it's implementation contract and only called via delegatecall
, its state is stored in the parent proxy contract, therefore its own state is irrelevant
PAUSE_PROXY
address was relied
(wards(PAUSE_PROXY)
is 1
)denied
(wards(deployer)
is 0
)MCD_ESM
address is already relied OR being relied
(wards(MCD_ESM)
is 1
) in this spell (as approved by Governance Facilitators, in order to allow de-authing the pause proxy during Emergency Shutdown, via denyProxy
)Rely
events except for PAUSE_PROXY
and MCD_ESM
(using a block explorer like etherscan)code --diff etherscan.sol github.sol
)addresses_deployers.sol
SKY
in the spell3ddfa5ee55d10b8192f239235bf83e46744314b8
GNU AGPLv3
licensevat
, dai
, dog
, ...)wards
or access control
PAUSE_PROXY
address was relied
(wards(PAUSE_PROXY)
is 1
)denied
(wards(deployer)
is 0
)MCD_ESM
address is already relied OR being relied
(wards(MCD_ESM)
is 1
) in this spell (as approved by Governance Facilitators, in order to allow de-authing the pause proxy during Emergency Shutdown, via denyProxy
)
:warning: This is overwritten by the specific instruction Do not authorize ESM in any new contracts
Rely
events except for PAUSE_PROXY
and MCD_ESM
(using a block explorer like etherscan)code --diff etherscan.sol github.sol
)addresses_deployers.sol
MKR_SKY
in the spell3ddfa5ee55d10b8192f239235bf83e46744314b8
GNU AGPLv3
licensevat
, dai
, dog
, ...)
ℹ️ Constructor arguments
mkr_
(address): 0x9f8F72aA9304c8B593d555F12eF6589cC3A579A2
MCD_GOV
found in chainlog (MKR token)sky_
(address): 0x56072C95FAA701256059aa122697B133aDEd9279
SKY
address checked aboverate_
(uint256): 24000
Init SKY with rate parameter being 24,000
instructionwards
or access control
PAUSE_PROXY
address was relied
(wards(PAUSE_PROXY)
is 1
)denied
(wards(deployer)
is 0
)MCD_ESM
address is already relied OR being relied
(wards(MCD_ESM)
is 1
) in this spell (as approved by Governance Facilitators, in order to allow de-authing the pause proxy during Emergency Shutdown, via denyProxy
)Rely
events except for PAUSE_PROXY
and MCD_ESM
(using a block explorer like etherscan)code --diff etherscan.sol github.sol
)addresses_deployers.sol
UNIV2DAIMKR
in the spell
ℹ️ The contract is a Uniswap V2 pair retrievable from the official Uniswap V2 Factory on mainnet using getPair method with MCD_DAI
and MCD_GOV
addresses from chainlog as parameters. As the contract is deployed by the official Uniswap V2 Factory, maker-specific checks do not apply hereGNU AGPLv3
licensevat
, dai
, dog
, ...)wards
or access controlPAUSE_PROXY
address was relied
(wards(PAUSE_PROXY)
is 1
)denied
(wards(deployer)
is 0
)MCD_ESM
address is already relied OR being relied
(wards(MCD_ESM)
is 1
) in this spell (as approved by Governance Facilitators, in order to allow de-authing the pause proxy during Emergency Shutdown, via denyProxy
)Rely
events except for PAUSE_PROXY
and MCD_ESM
(using a block explorer like etherscan)code --diff etherscan.sol github.sol
)addresses_deployers.sol
UNIV2USDSSKY
in the spell
ℹ️ Same as above. The contract is a Uniswap V2 pair retrievable from the official Uniswap V2 Factory on mainnet using getPair method with USDS
and SKY
addresses as parameters. As the contract is deployed by the official Uniswap V2 Factory, maker-specific checks do not apply hereGNU AGPLv3
licensevat
, dai
, dog
, ...)wards
or access controlPAUSE_PROXY
address was relied
(wards(PAUSE_PROXY)
is 1
)denied
(wards(deployer)
is 0
)MCD_ESM
address is already relied OR being relied
(wards(MCD_ESM)
is 1
) in this spell (as approved by Governance Facilitators, in order to allow de-authing the pause proxy during Emergency Shutdown, via denyProxy
)Rely
events except for PAUSE_PROXY
and MCD_ESM
(using a block explorer like etherscan)code --diff etherscan.sol github.sol
)addresses_deployers.sol
MCD_SPLIT
in the spell95431f3d4da66babf81c6e1138bd05f5ddc5e516
GNU AGPLv3
licensevat
, dai
, dog
, ...)
ℹ️ Constructor arguments
_usdsJoin
(address): 0x3C0f895007CA717Aa01c8693e59DF1e8C3777FEB
USDS_JOIN
address checked abovewards
or access control
PAUSE_PROXY
address was relied
(wards(PAUSE_PROXY)
is 1
)denied
(wards(deployer)
is 0
)MCD_ESM
address is already relied OR being relied
(wards(MCD_ESM)
is 1
) in this spell (as approved by Governance Facilitators, in order to allow de-authing the pause proxy during Emergency Shutdown, via denyProxy
)
:warning: This is overwritten by the specific instruction Do not authorize ESM in any new contracts
Rely
events except for PAUSE_PROXY
and MCD_ESM
(using a block explorer like etherscan)code --diff etherscan.sol github.sol
)addresses_deployers.sol
SPLITTER_MOM
in the spell95431f3d4da66babf81c6e1138bd05f5ddc5e516
GNU AGPLv3
licensevat
, dai
, dog
, ...)
ℹ️ Constructor arguments
_splitter
(address): 0xBF7111F13386d23cb2Fba5A538107A73f6872bCF
MCD_SPLIT
address checked abovewards
or access control
PAUSE_PROXY
address was relied
(wards(PAUSE_PROXY)
is 1
)
ℹ️ MCD_PAUSE_PROXY
is the only owner
denied
(wards(deployer)
is 0
)MCD_ESM
address is already relied OR being relied
(wards(MCD_ESM)
is 1
) in this spell (as approved by Governance Facilitators, in order to allow de-authing the pause proxy during Emergency Shutdown, via denyProxy
)Rely
events except for PAUSE_PROXY
and MCD_ESM
(using a block explorer like etherscan)code --diff etherscan.sol github.sol
)addresses_deployers.sol
MCD_FLAP
in the spell95431f3d4da66babf81c6e1138bd05f5ddc5e516
GNU AGPLv3
licensevat
, dai
, dog
, ...)
ℹ️ Constructor arguments
_spotter
(address): 0x65C79fcB50Ca1594B025960e539eD7A9a6D434A3
MCD_SPOT
found in chainlog_usds
(address): 0xdC035D45d973E3EC169d2276DDab16f1e407384F
USDS
address checked above_gem
(address): 0x56072C95FAA701256059aa122697B133aDEd9279
SKY
address checked above_pair
(address): 0x2621CC0B3F3c079c1Db0E80794AA24976F0b9e3c
UNIV2USDSSKY
address checked above_receiver
(address): 0xBE8E3e3618f7474F8cB1d074A26afFef007E98FB
MCD_PAUSE_PROXY
found in chainlogwards
or access control
PAUSE_PROXY
address was relied
(wards(PAUSE_PROXY)
is 1
)denied
(wards(deployer)
is 0
)MCD_ESM
address is already relied OR being relied
(wards(MCD_ESM)
is 1
) in this spell (as approved by Governance Facilitators, in order to allow de-authing the pause proxy during Emergency Shutdown, via denyProxy
)
:warning: This is overwritten by the specific instruction Do not authorize ESM in any new contracts
Rely
events except for PAUSE_PROXY
and MCD_ESM
(using a block explorer like etherscan)code --diff etherscan.sol github.sol
)addresses_deployers.sol
FLAP_SKY_ORACLE
in the spell95431f3d4da66babf81c6e1138bd05f5ddc5e516
GNU AGPLv3
licensevat
, dai
, dog
, ...)
ℹ️ Constructor arguments
_pip
(address): 0xdbBe5e9B1dAa91430cF0772fCEbe53F6c6f137DF
PIP_MKR
found in chainlog_flapper
(address): 0xc5A9CaeBA70D6974cBDFb28120C3611Dd9910355
MCD_FLAP
address checked above_divisor
(uint256): 24000
Init new Oracle with divisor parameter being 24,000
instructionwards
or access control
PAUSE_PROXY
address was relied
(wards(PAUSE_PROXY)
is 1
)denied
(wards(deployer)
is 0
)MCD_ESM
address is already relied OR being relied
(wards(MCD_ESM)
is 1
) in this spell (as approved by Governance Facilitators, in order to allow de-authing the pause proxy during Emergency Shutdown, via denyProxy
)Rely
events except for PAUSE_PROXY
and MCD_ESM
(using a block explorer like etherscan)code --diff etherscan.sol github.sol
)addresses_deployers.sol
MCD_VEST_SKY
in the spellDssVestMintable
)GNU AGPLv3
licensevat
, dai
, dog
, ...)
ℹ️ Constructor arguments
_gem
(address): 0x56072C95FAA701256059aa122697B133aDEd9279
SKY
address checked abovewards
or access control
PAUSE_PROXY
address was relied
(wards(PAUSE_PROXY)
is 1
)denied
(wards(deployer)
is 0
)MCD_ESM
address is already relied OR being relied
(wards(MCD_ESM)
is 1
) in this spell (as approved by Governance Facilitators, in order to allow de-authing the pause proxy during Emergency Shutdown, via denyProxy
)
:warning: This is overwritten by the specific instruction Do not authorize ESM in any new contracts
Rely
events except for PAUSE_PROXY
and MCD_ESM
(using a block explorer like etherscan)code --diff etherscan.sol github.sol
)
:warning: There are differences between verified code and the one found on github, but they are minor / have no implications on the actual execution of the contractaddresses_deployers.sol
REWARDS_USDS_SKY
in the spell14268515aa729a588096f0d579ea38bde3e9ba2f
GNU AGPLv3
license
:warning: This contract was developed by Synthetix and therefore we have no control over its license. This is expected / not a blockervat
, dai
, dog
, ...)
ℹ️ Constructor arguments
_owner
(address): 0xBE8E3e3618f7474F8cB1d074A26afFef007E98FB
MCD_PAUSE_PROXY
found in chainlog_rewardsDistribution
(address): 0x0000000000000000000000000000000000000000
UsdsSkyFarmingInit.init
call_rewardsToken
(address): 0x56072C95FAA701256059aa122697B133aDEd9279
SKY
address checked above_stakingToken
(address): 0xdC035D45d973E3EC169d2276DDab16f1e407384F
USDS
address checked abovewards
or access control
PAUSE_PROXY
address was relied
(wards(PAUSE_PROXY)
is 1
)
ℹ️ MCD_PAUSE_PROXY
is the only owner
denied
(wards(deployer)
is 0
)MCD_ESM
address is already relied OR being relied
(wards(MCD_ESM)
is 1
) in this spell (as approved by Governance Facilitators, in order to allow de-authing the pause proxy during Emergency Shutdown, via denyProxy
)Rely
events except for PAUSE_PROXY
and MCD_ESM
(using a block explorer like etherscan)code --diff etherscan.sol github.sol
)addresses_deployers.sol
REWARDS_DIST_USDS_SKY
in the spell14268515aa729a588096f0d579ea38bde3e9ba2f
GNU AGPLv3
licensevat
, dai
, dog
, ...)
ℹ️ Constructor arguments
_dssVest
(address): 0xB313Eab3FdE99B2bB4bA9750C2DDFBe2729d1cE9
MCD_VEST_SKY
address checked above_stakingRewards
(address): 0x0650CAF159C5A49f711e8169D4336ECB9b950275
REWARDS_USDS_SKY
address checked abovewards
or access control
PAUSE_PROXY
address was relied
(wards(PAUSE_PROXY)
is 1
)denied
(wards(deployer)
is 0
)MCD_ESM
address is already relied OR being relied
(wards(MCD_ESM)
is 1
) in this spell (as approved by Governance Facilitators, in order to allow de-authing the pause proxy during Emergency Shutdown, via denyProxy
)
:warning: This is overwritten by the specific instruction Do not authorize ESM in any new contracts
Rely
events except for PAUSE_PROXY
and MCD_ESM
(using a block explorer like etherscan)code --diff etherscan.sol github.sol
)addresses_deployers.sol
REWARDS_USDS_01
in the spell14268515aa729a588096f0d579ea38bde3e9ba2f
GNU AGPLv3
license
:warning: This contract was developed by Synthetix and therefore we have no control over its license. This is expected / not a blockervat
, dai
, dog
, ...)
ℹ️ Constructor arguments
_owner
(address): 0xBE8E3e3618f7474F8cB1d074A26afFef007E98FB
MCD_PAUSE_PROXY
found in chainlog_rewardsDistribution
(address): 0x0000000000000000000000000000000000000000
_rewardsToken
(address): 0x0000000000000000000000000000000000000000
_stakingToken
(address): 0xdC035D45d973E3EC169d2276DDab16f1e407384F
USDS
address checked abovewards
or access control
PAUSE_PROXY
address was relied
(wards(PAUSE_PROXY)
is 1
)
ℹ️ MCD_PAUSE_PROXY
is the only owner
denied
(wards(deployer)
is 0
)MCD_ESM
address is already relied OR being relied
(wards(MCD_ESM)
is 1
) in this spell (as approved by Governance Facilitators, in order to allow de-authing the pause proxy during Emergency Shutdown, via denyProxy
)Rely
events except for PAUSE_PROXY
and MCD_ESM
(using a block explorer like etherscan)code --diff etherscan.sol github.sol
)addresses_deployers.sol
CRON_REWARDS_DIST_JOB
in the spellYes with 200 runs
)GNU AGPLv3
licensevat
, dai
, dog
, ...)
ℹ️ Constructor arguments
_sequencer
(address): 0x238b4E35dAed6100C6162fAE4510261f88996EC9
CRON_SEQUENCER
found in chainlogwards
or access control
PAUSE_PROXY
address was relied
(wards(PAUSE_PROXY)
is 1
)denied
(wards(deployer)
is 0
)MCD_ESM
address is already relied OR being relied
(wards(MCD_ESM)
is 1
) in this spell (as approved by Governance Facilitators, in order to allow de-authing the pause proxy during Emergency Shutdown, via denyProxy
)
:warning: This is overwritten by the specific instruction Do not authorize ESM in any new contracts
Rely
events except for PAUSE_PROXY
and MCD_ESM
(using a block explorer like etherscan)code --diff etherscan.sol github.sol
)addresses_deployers.sol
WRAPPER_USDS_LITE_PSM_USDC_A
in the spelle57d0c43c397d69596cbb6a1580cc450988f2d04
GNU AGPLv3
licensevat
, dai
, dog
, ...)
ℹ️ Constructor arguments
psm_
(address): 0xf6e72Db5454dd049d0788e411b06CfAF16853042
MCD_LITE_PSM_USDC_A
found in chainlogusdsJoin_
(address): 0x3C0f895007CA717Aa01c8693e59DF1e8C3777FEB
USDS_JOIN
address checked abovewards
or access control
PAUSE_PROXY
address was relied
(wards(PAUSE_PROXY)
is 1
)denied
(wards(deployer)
is 0
)MCD_ESM
address is already relied OR being relied
(wards(MCD_ESM)
is 1
) in this spell (as approved by Governance Facilitators, in order to allow de-authing the pause proxy during Emergency Shutdown, via denyProxy
)Rely
events except for PAUSE_PROXY
and MCD_ESM
(using a block explorer like etherscan)code --diff etherscan.sol github.sol
)addresses_deployers.sol
MCD_PAUSE.delay
is changed within the spell via low level .setDelay(uint256)
call, matches the archive pattern
jug.ilk.duty
) is updatedDssExecLib.setIlkStabilityFee(ilk, rate, doDrip)
) is used// Increase ILK-A Stability Fee by X.XX% from X.XX% to X.XX%
pot.dsr
) is updatedDssExecLib.setDSR(rate, doDrip)
) is used// Increase DSR by X.XX% from X.XX% to X.XX%
make rates pct=<pct>
(e.g. pct=0.75, for 0.75%)spotter.ilk.mat
is updated, (DssExecLib.setIlkLiquidationRatio(ilk, pct_bps)
) is useddog.ilk.hole
is updated, (DssExecLib.setIlkMaxLiquidationAmount(ilk, amount)
) is usedvat.ilk.dust
is updated, (DssExecLib.setIlkMinVaultAmount(ilk, amount)
) is useddog.ilk.chop
is updated, (DssExecLib.setIlkLiquidationPenalty(ilk, pct_bps)
) is usedclip.buf
is updated, (DssExecLib.setStartingPriceMultiplicativeFactor(ilk, pct_bps)
) is usedclipperMom.clip.tolerance
is updated, (DssExecLib.setLiquidationBreakerPriceTolerance(clip, pct_bps)
) is usedclip.tail
is updated, (DssExecLib.setAuctionTimeBeforeReset(ilk, duration)
) is usedclip.cusp
is updated, (DssExecLib.setAuctionPermittedDrop(ilk, pct_bps)
) is usedclip.chip
is updated, (DssExecLib.setKeeperIncentivePercent(ilk, pct_bps)
) is usedclip.tip
is updated, (DssExecLib.setKeeperIncentiveFlatRate(ilk, amount)
) is usedcalc.tau
is updated, (DssExecLib.setLinearDecrease(calc, duration)
) is usedcalc.cut
or calc.step
are updated, DssExecLib.setStairstepExponentialDecrease(calc, duration, pct_bps)
is usedilk
) have AutoLine enabled (MCD_IAM_AUTO_LINE
)0
MCD_IAM_AUTO_LINE
) via DssExecLib.removeIlkFromAutoLine(ilk)
MCD_IAM_AUTO_LINE
) is present in the Exec Sheet0
via DssExecLib.setIlkDebtCeiling(ilk, amount)
vat.Line
) is updated accordingly, UNLESS specifically instructed not toAutoLine
parameters are updatedDssExecLib.setIlkAutoLineDebtCeiling(ilk, amount)
DssExecLib.setIlkAutoLineParameters(ilk, amount, gap, ttl)
vat.ilk.line
) is updatedilk
) have AutoLine
disabled previously or in the spellvat.Line
) is updated accordingly, UNLESS specifically instructed not to, via EITHER:global
set to true
in increaseIlkDebtCeiling
/decreaseIlkDebtCeiling
DssExecLib.setGlobalDebtCeiling(amount)
DssExecLib.increaseGlobalDebtCeiling(amount)
DssExecLib.decreaseGlobalDebtCeiling(amount)
./src/dependencies/
directory) are present:
01-usds/*
1e91268374d2796abcbb1af2b75473b2af488265
01-usds/UsdsInit.sol
exactly matches audited original01-usds/UsdsInstance.sol
exactly matches audited original02-susds/*
e5660deac9434c79d48ecde879c29f37fb89f2dc
02-susds/SUsdsInit.sol
exactly matches audited original02-susds/SUsdsInstance.sol
exactly matches audited original03-sky/*
3ddfa5ee55d10b8192f239235bf83e46744314b8
03-sky/SkyInit.sol
exactly matches audited original03-sky/SkyInstance.sol
exactly matches audited original04-univ2-pool-migrator/*
d93a4f3136e721f54e594ba086bd8e6591160335
04-univ2-pool-migrator/UniV2PoolMigratorInit.sol
exactly matches audited original05-flapper/*
95431f3d4da66babf81c6e1138bd05f5ddc5e516
05-flapper/FlapperInit.sol
exactly matches audited original05-flapper/SplitterInstance.sol
exactly matches audited original06-farm/*
14268515aa729a588096f0d579ea38bde3e9ba2f
06-farm/StakingRewardsInit.sol
exactly matches audited original06-farm/VestedRewardsDistributionInit.sol
exactly matches audited original06-farm/VestInit.sol
exactly matches audited original06-farm/phase-1b/UsdsSkyFarmingInit.sol
exactly matches audited original06-farm/phase-1b/Usds01PreFarmingInit.sol
exactly matches audited original07-cron/*
07-cron/VestedRewardsDistributionJobInit.sol
almost matches source code. The difference is only affecting solidity version number (0.8.13
-> ^0.8.13
). The change is required to make contract compilable with the 0.8.16
version set in the spell. As version change is minor, this difference is neglectable. Both functions used in the spell (init
and setDist
) are reviewed as if they are part of the spell itselfLITE_PSM_USDC_A
is added in this spell, no new PSM
ilk
) is removed from AutoLine (MCD_IAM_AUTO_LINE
) IF currently enabledvat.ilk.line
) is set to 0
vat.Line
) decreased by the total amount of offboarded ilkschop
) is set to 0
IF requested by governancetip
) is set to 0
IF requested by governancechip
) is set to 0
IF requested by governancehole
) is adjusted via DssExecLib.setIlkMaxLiquidationAmount(ilk, amount)
IF requested by governanceMCD_CLIP_
) is active (i.e. stopped
is 0
)spotter.ilk.mat
) being set very high in the spell (using DssExecLib.setValue(DssExecLib.spotter(), ilk, "mat", ratio)
)DssExecLib.linearInterpolation(name, target, ilk, what, startTime, start, end, duration)
)name
format matches "XXX-X Offboarding"target
matches DssExecLib.spotter()
addressilk
format matches collateral type (ilk
) name ("XXX-X"
)what
matches string "mat"
startTime
matches block.timestamp
start
uses variable CURRENT_XXX_A_MAT
start
matches current spotter.ilk.mat
valueend
uses variable TARGET_XXX_A_MAT
end
value matches the instructionend
allows liquidation of all remaining vaults (end
is bigger than collateral_type_collateralization_ratio * risk_multiplier_factor
)duration
matches the instructionDssExecLib.updateCollateralPrice(ilk)
IF collateral have no running oracle (i.e. relevant PIP_
contract have outdated zzz
value)_checkIlkClipper
helperdoc
is updated_updateDoc
helper is copied one-to-one from the archive and defined above actions
_updateDoc(ilk, doc)
is called in the spellDssExecLib.setIlkAutoLineParameters(ilk, amount, gap, ttl)
or DssExecLib.setIlkAutoLineDebtCeiling(ilk, amount)
vat.ilk.line
) update is requested by the Exec Sheetilk
) have AutoLine
disabled previously or in the spellvat.ilk.line
) is updated, via EITHER:vat.Line
) is updated accordingly, UNLESS specifically instructed not to, via EITHER:global
set to true
in increaseIlkDebtCeiling
/decreaseIlkDebtCeiling
DssExecLib.setGlobalDebtCeiling(amount)
DssExecLib.increaseGlobalDebtCeiling(amount)
DssExecLib.decreaseGlobalDebtCeiling(amount)
RwaLiquidationOracleLike(MIP21_LIQUIDATION_ORACLE).bump(ilk, val)
patternbump
explains val
computation via // Note: the formula is: "debt_ceiling * [ (1 + rwa_stability_fee ) ^ (minimum_deal_duration_in_years) ] * liquidation_ratio"
bump
provides locally executable formula (e.g. // bc -l <<< 'scale=18; 50000000 * e(l(1.07) * (3342/365)) * 1.00' | cast --to-wei
)debt_ceiling
in the executable formula matches new debt ceiling set in the spell or the maximum possible debt ceiling in case of the enabled AutoLinerwa_stability_fee
in the executable formula matches stability fee of the specified RWA found on chainminimum_deal_duration_in_years
in the executable formula matches number found in the Exec Sheet of the spell containing relevant RWA onboardingliquidation_ratio
in the executable formula matches liquidation ratio of the specified RWA found on chainval
in the spellval
makes sense in context of the rate mechanismval
calculation is done once per ilk and added to make the total, with separate executable formulas provided in comments. The existing val
value can be retrieved by calling read()
on PIP_RWAXX
and converting the result into decimalDssExecLib.updateCollateralPrice(ilk)
.tell(ilk)
) AND debt ceiling is 0
(OR is being set to 0
in the current spell)RwaLiquidationOracle.tell(ilk)
call is presentRWAXX_A_INPUT_CONDUIT
is an instance of TinlakeMgr
(it is a Centrifuge integration), additional TinlakeMgr.tell()
call is present (in order to prevent further TIN
redemptions in the Centrifuge pool)MKR
transfers are presentaddresses_wallets.sol
ether
keywordether
keyword is used, comment is present on the same line // Note: ether is a keyword helper, only MKR is transferred here
testMKRPayments
testtestMKRPayments
matches number in the Exec SheetDAI
surplus buffer transfers are presentaddresses_wallets.sol
testDAIPayments
testtestDAIPayments
matches number in the Exec SheetMKR
or DAI
streams (DssVest
) are created
ℹ️ New SKY
stream is created in the spell via audited UsdsSkyFarmingInit.init
callVestAbstract
interface is imported from dss-interfaces/dss/VestAbstract.sol
:warning: DssVestLike
is defined statically inside dependencies/06-farm/VestInit.sol
, but matches interface of the vault (acceptable since only few methods are being used)restrict
is used for each stream, UNLESS otherwise explicitly stated in the Exec Sheetusr
(Vest recipient address) matches Exec Sheetusr
address in the instruction is in the checksummed formatusr
address variable name match one found in addresses_wallets.sol
:warning: The address is not present in the file with wallets since it's not a wallet, but a REWARDS_DIST_USDS_SKY
contract added to chainlog via this spelltot
(Total stream amount) matches Exec Sheetether
keyword is used, comment is present on the same line // Note: ether is a keyword helper, only MKR is transferred here
bgn
(Vest start timestamp) matches Exec Sheettau
is expressed as bgn - fin
(i.e. MONTH_DD_YYYY - MONTH_DD_YYYY
)
:warning: It's expressed as duration. As start date is based on the timestamp this rule is impossible to fulfill (which is not a problem)fin
(Vest end timestamp) matches Exec Sheeteta
(Vest cliff duration) matches the following logiceta
is explicitly specified in the Exec Sheet, then the values matcheta
and clf
(Cliff end timestamp) are not specified in the Exec Sheet, then eta
is 0
clf
is specified, but clf <= bgn
, then eta
is 0
clf
is specified and clf > bgn
, eta
is expressed as clf - bgn
(i.e. MONTH_DD_YYYY - MONTH_DD_YYYY
)mgr
(Vest manager address) is specified in the Exec Sheet, matches the value, OTHERWISE matches address(0)
cap
) is enough for the new streams
tot
divided by tau
) <=
the maximum vest streaming rate (cap
)tot
divided by tau
) >
the maximum vest streaming rate (cap
)cap
value equal to 10% greater than the new maximum vesting rate, then round new cap
up with 2 significant figure precision (i.e. 2446 becomes 2500)cap
) is changed in the spell
total
(the sum of all tot
values)testVestDAI
or testVestMKR
ℹ️ Tested via new testVestSKY
testMKR
or DAI
vest termination (Yank
) is presentMCD_VEST_MKR_TREASURY
chainlog address is used for MKR stream yank
MCD_VEST_DAI
chainlog address is used for DAI stream yank
testYankDAI
or testYankMKR
ProxyLike(SUBDAO_PROXY).exec(SUBDAO_SPELL, abi.encodeWithSignature("execute()"));
addresses_deployers.sol
as an entryDelegateCall
context)vat
, etc. (Check comprehensively where the risk is high)PAUSE_PROXY
as their admin
(i.e. the party that can upgrade)admin
that is not PAUSE_PROXY
are not authed on any core contracts (Blocking)delegatecall
CREATE2
(e.g. if it looks like a vanity address) do not have selfdestruct
in their codeaddresses_mainnet.sol
testChainlogIntegrity
and testChainlogValues
public
/internal
immutable
visibility is only used when fetching addresses from the ChainLog
via DssExecLib.getChangelogAddress(key)
and constant
is used instead for static addresses
address
and wrap with Like
suffix interfaces inline (when making calls), UNLESS archive patterns permit otherwise (Such as MKR
)DssExecLib.vat()
)ChainLog
, the variable name must match the value of the ChainLog key for that address (e.g. MCD_VAT
rather than vat
), except where the archive pattern differs from this pattern (e.g. MKR)DssExecLib.address
file is not being modified by the spell PRpublic
skipped
modifier; OTHERWISE, it MUST have the skipped
modifiertestNextCastTimeMinEta
testSystemTokens
UsdsLike(instance.usds).rely(instance.usdsJoin);
testNewAuthorizations
dss.chainlog.setAddress("USDS", instance.usds);
testChainlogIntegrity
and testChainlogValues
dss.chainlog.setAddress("USDS_IMP", instance.usdsImp);
testChainlogIntegrity
and testChainlogValues
dss.chainlog.setAddress("USDS_JOIN", instance.usdsJoin);
testChainlogIntegrity
and testChainlogValues
dss.chainlog.setAddress("DAI_USDS", instance.daiUsds);
testChainlogIntegrity
and testChainlogValues
testSystemTokens
dss.vat.rely(instance.sUsds);
testNewAuthorizations
SUsdsLike(instance.sUsds).drip();
ssr
is set to 0% atm, and there are no token holdersSUsdsLike(instance.sUsds).file("ssr", cfg.ssr);
testGeneral
(using susds_ssr
in _checkSystemValues
base test)dss.chainlog.setAddress("SUSDS", instance.sUsds);
testChainlogIntegrity
and testChainlogValues
dss.chainlog.setAddress("SUSDS_IMP", instance.sUsdsImp);
testChainlogIntegrity
and testChainlogValues
testSystemTokens
SkyLike(instance.sky).rely(instance.mkrSky);
testNewAuthorizations
MkrAuthorityLike(MkrLike(mkr).authority()).rely(instance.mkrSky);
testNewAuthorizations
dss.chainlog.setAddress("SKY", instance.sky);
testChainlogIntegrity
and testChainlogValues
dss.chainlog.setAddress("MKR_SKY", instance.mkrSky);
testChainlogIntegrity
and testChainlogValues
daiUsds.daiToUsds(pairUsdsSky, daiAmt);
testUniV2PoolMigration
and testSystemTokens
mkrSky.mkrToSky(pairUsdsSky, mkrAmt);
testUniV2PoolMigration
and testSystemTokens
PoolLike(pairUsdsSky).mint(pProxy);
testUniV2PoolMigration
splitter.file("hop", cfg.hop);
testGeneral
(using split_hop
in _checkSystemValues
base test)splitter.file("burn", cfg.burn);
testGeneral
(using split_burn
in _checkSystemValues
base test)splitter.rely(address(mom));
testSplitter
and testNewAuthorizations
splitter.rely(address(dss.vow));
testSplitter
and testNewAuthorizations
dss.vow.file("flapper", splitterInstance.splitter);
testSplitter
dss.vow.file("hump", cfg.hump);
testGeneral
(using vow_hump_*
in _checkSystemValues
base test)dss.vow.file("bump", cfg.bump);
testGeneral
(using vow_bump
in _checkSystemValues
base test)mom.setAuthority(dss.chainlog.getAddress("MCD_ADM"));
testGeneral
(using splitter_mom_authority
in _checkSystemValues
base test)dss.chainlog.setAddress(cfg.splitterChainlogKey, splitterInstance.splitter);
testChainlogIntegrity
and testChainlogValues
if (cfg.prevMomChainlogKey != bytes32(0)) dss.chainlog.removeAddress(cfg.prevMomChainlogKey);
testRemoveChainlogValues
(removal of FLAPPER_MOM
)dss.chainlog.setAddress(cfg.momChainlogKey, address(mom));
testChainlogIntegrity
and testChainlogValues
flapper.file("want", cfg.want);
testGeneral
(using flap_want
in _checkSystemValues
base test)flapper.file("pip", cfg.pip);
testSplitter
flapper.rely(cfg.splitter);
testSplitter
and testNewAuthorizations
SplitterLike(cfg.splitter).file("flapper", flapper_);
testSplitter
if (cfg.prevChainlogKey != bytes32(0)) dss.chainlog.removeAddress(cfg.prevChainlogKey);
dss.chainlog.setAddress(cfg.chainlogKey, flapper_);
PipLike(wrapper.pip()).kiss(wrapper_);
testSplitter
dss.chainlog.setAddress(clKey, wrapper_);
testChainlogIntegrity
and testChainlogValues
DssExecLib.authorize(SKY, MCD_VEST_SKY);
testNewAuthorizations
DssExecLib.setValue(MCD_VEST_SKY, "cap", 800 * MILLION * WAD / 365 days);
testGeneral
(using vest_sky_cap
in _checkSystemValues
base test)DssExecLib.setChangelogAddress("MCD_VEST_SKY", MCD_VEST_SKY);
testChainlogIntegrity
and testChainlogValues
testUsdsSkyRewards
StakingRewardsLike(rewards).setRewardsDistribution(p.dist);
testUsdsSkyRewards
DssVestLike(vest).create(p.usr, p.tot, p.bgn, p.tau, p.eta, address(0));
testVestSKY
DssVestLike(vest).restrict(vestId);
testVestSKY
VestedRewardsDistributionLike(dist).file("vestId", p.vestId);
testUsdsSkyRewards
chainlog.setAddress(p.rewardsKey, p.rewards);
testChainlogIntegrity
and testChainlogValues
chainlog.setAddress(p.distKey, p.dist);
testChainlogIntegrity
and testChainlogValues
VestedRewardsDistributionLike(REWARDS_DIST_USDS_SKY).distribute();
testUsdsSkyRewards
(by checking lastDistributedAt
)sequencer.addJob(job);
testNewCronJobs
chainlog.setAddress(cfg.jobKey, job);
testChainlogIntegrity
and testChainlogValues
VestedRewardsDistributionJobLike(job).set(cfg.dist, cfg.interval);
testVestedRewardsDistributionJob
testUsds01Rewards
chainlog.setAddress(p.rewardsKey, p.rewards);
testChainlogIntegrity
and testChainlogValues
testUsdsPsmWrapper
DssExecLib.setChangelogAddress("WRAPPER_USDS_LITE_PSM_USDC_A", WRAPPER_USDS_LITE_PSM_USDC_A);
testChainlogIntegrity
and testChainlogValues
PauseLike(MCD_PAUSE).setDelay(16 hours);
testGeneral
(using pause_delay
in _checkSystemValues
base test)DssExecLib.setChangelogVersion("1.18.0");
testChainlogValues
(using chainlog_version
in _testChainlogValues
base test)printenv | grep "FOUNDRY_\|DAPP_"
)make test
[PASS]
prefix.
ℹ️ Unique test functions listed in the coverage item above:
testNextCastTimeMinEta
testSystemTokens
testNewAuthorizations
testChainlogIntegrity
testChainlogValues
testGeneral
testUniV2PoolMigration
testSplitter
testRemoveChainlogValues
testUsdsSkyRewards
testVestSKY
testNewCronJobs
testVestedRewardsDistributionJob
testUsds01Rewards
testUsdsPsmWrapper
_Insert your local test logs here_
./scripts/test-dssspell-forge.sh no-match="" match="" block=""
Using DssExecLib at: 0x8De6DDbCd5053d32292AAA0D2105A32d108484a6
[⠊] Compiling...
[⠒] Compiling 4 files with Solc 0.8.16
[⠆] Solc 0.8.16 finished in 12.54s
Compiler run successful!
Ran 2 tests for src/test/starknet.t.sol:StarknetTests
[PASS] testStarknet() (gas: 3272751)
[PASS] testStarknetSpell() (gas: 2309)
Suite result: ok. 2 passed; 0 failed; 0 skipped; finished in 12.99s (12.03s CPU time)
Ran 45 tests for src/DssSpell.t.sol:DssSpellTest
[SKIP] testBytecodeMatches() (gas: 0)
[PASS] testCastCost() (gas: 3149889)
[PASS] testCastOnTime() (gas: 3146919)
[PASS] testChainlogIntegrity() (gas: 8821248)
[PASS] testChainlogValues() (gas: 10398867)
[SKIP] testCollateralIntegrations() (gas: 0)
[PASS] testContractSize() (gas: 10909)
[SKIP] testDAIPayments() (gas: 0)
[SKIP] testDaoResolutions() (gas: 0)
[PASS] testDeployCost() (gas: 5315800)
[SKIP] testEsmAuth() (gas: 0)
[PASS] testGeneral() (gas: 28883707)
[SKIP] testIlkClipper() (gas: 0)
[SKIP] testL2ArbitrumSpell() (gas: 0)
[SKIP] testL2OptimismSpell() (gas: 0)
[SKIP] testLerpSurplusBuffer() (gas: 0)
[PASS] testLitePSMs() (gas: 4023792)
[SKIP] testMKRPayments() (gas: 0)
[SKIP] testMedianizers() (gas: 0)
[PASS] testNewAuthorizations() (gas: 3208391)
[PASS] testNewCronJobs() (gas: 3155704)
[SKIP] testNewIlkRegistryValues() (gas: 0)
[SKIP] testNextCastTime() (gas: 0)
[PASS] testNextCastTimeMinEta() (gas: 684024)
[SKIP] testOSMs() (gas: 0)
[SKIP] testOffboardings() (gas: 0)
[PASS] testOfficeHours() (gas: 12233)
[SKIP] testOracleList() (gas: 0)
[PASS] testPSMs() (gas: 4334093)
[PASS] testRemoveChainlogValues() (gas: 3153480)
[PASS] testRevertIfNotScheduled() (gas: 16808)
[SKIP] testSparkSpellIsExecuted() (gas: 0)
[PASS] testSplitter() (gas: 3498496)
[PASS] testSystemTokens() (gas: 3862547)
[PASS] testUniV2PoolMigration() (gas: 3172918)
[PASS] testUsds01Rewards() (gas: 3255353)
[PASS] testUsdsPsmWrapper() (gas: 3516106)
[PASS] testUsdsSkyRewards() (gas: 3359247)
[PASS] testUseEta() (gas: 341839)
[SKIP] testVestDAI() (gas: 0)
[SKIP] testVestMKR() (gas: 0)
[PASS] testVestSKY() (gas: 3553767)
[PASS] testVestedRewardsDistributionJob() (gas: 3294637)
[SKIP] testYankDAI() (gas: 0)
[SKIP] testYankMKR() (gas: 0)
Suite result: ok. 24 passed; 0 failed; 21 skipped; finished in 104.01s (231.92s CPU time)
Ran 2 test suites in 104.50s (117.00s CPU time): 26 tests passed, 0 failed, 21 skipped (47 total tests)
makerdao/community
GitHub repo
ℹ️ https://github.com/makerdao/community/blob/master/governance/votes/Executive%20vote%20-%20September%2013%2C%202024.mdExecutive vote - Month DD, YYYY.md
makerdao/community
GitHub repo), run:git clone https://github.com/makerdao/community
git switch master && git pull origin master
git log --pretty=oneline -1 -- "governance/votes/Executive vote - September 13, 2024.md"
TARGET_DATE
, generate Exec Doc Hash via make exec-hash date=$TARGET_DATE $URL
Insert your Exec Doc Hash here
:warning: The script doesn't work as in many previous spells. There is a PR waiting to be merged after this spell that fixes it. The hash is checked manually belowcast keccak -- "$(curl '$URL' -o - 2>/dev/null)"
Insert your Exec Doc Hash here
0xdf8af8066b5e0a90668ab343a1244624c58a30b568ff9113dbc82a22a77d0cf6keccak
hash of the empty string (0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470
)No
in the Exec SheetGood to deploy!
Preparation
Base checks
0.8.16
true
IF spell introduces a major change that can affect external parties (e.g.: keepers are affected in case of collateral offboarding) OTHERWISE explicitly set to false
block.timestamp + 30 days
)Spell description
TARGET_DATE MakerDAO Executive Spell | Hash: EXEC_DOC_HASH
TARGET_DATE
in the description matches the target date// Hash: cast keccak -- "$(wget 'EXEC_DOC_URL' -q -O - 2>/dev/null)"
Comments inside the spell
// ----- Section text -----
)// Instruction text
// Note:
(e.g.: // Note: Payments are skipped on goerli
)chainlog
version bump), the necessity of it is explained in the comment above prefixed with // Note:
Reasoning URL
and Authority URL
is present in the spell code under relevant section or instruction (depending on which row the url is present)Reasoning URL
and Authority URL
have prefix derived from the url itself
// Poll:
if URL starts with https://vote.makerdao.com/polling/
// Forum:
if URL starts with https://forum.makerdao.com/t/
Dependency checks
foundryup
rm -rf ./lib && git submodule update --init --recursive
Submodule path 'lib/dss-exec-lib': checked out '69b658f35d8618272cd139dfc18c5713caf6b96b'
Submodule path 'lib/dss-exec-lib/lib/dss-interfaces': checked out '9bfd7afadd1f8c217ef05850b2555691786286cb'
Submodule path 'lib/dss-exec-lib/lib/forge-std': checked out '0aa99eb8456693c015350c5e6c4f442ebe912f77'
Submodule path 'lib/dss-exec-lib/lib/forge-std/lib/ds-test': checked out 'cd98eff28324bfac652e63a239a60632a761790b'
Submodule path 'lib/dss-test': checked out '36ff4adbcb35760614e0d2df864026991c23d028'
Submodule path 'lib/dss-test/lib/dss-interfaces': checked out '9bfd7afadd1f8c217ef05850b2555691786286cb'
Submodule path 'lib/dss-test/lib/forge-std': checked out '155d547c449afa8715f538d69454b83944117811'
Submodule path 'lib/dss-test/lib/forge-std/lib/ds-test': checked out 'e282159d5170298eb2455a6c05280ab5a73a4ef0'
dss-exec-lib
(run git submodule status
) matches the latest release version or newerdss-interfaces
library used inside lib/dss-exec-lib
matches submodule used inside lib/dss-test
IF interfaces are present in the spell
dss-interfaces
, OTHERWISE should be imported from there
Some of interfaces from dss-interfaces declared because of unused functionscast interface <contract_address>
commandLike
suffix (e.g. VatLike
)
IF variable declarations are present in the spell
WAD = 10 ** 18
RAD = 10 ** 45
internal
constant
THOUSAND = 10 ** 3
MILLION = 10 ** 6
internal
constant
make rates pct=<pct>
(e.g. pct=0.75, for 0.75%)X_PT_Y_Z_PCT_RATE
(e.g. ZERO_PT_SEVEN_FIVE_PCT_RATE
for 0.75%)internal
constant
UTC
timezoneUTC
timezoneMMM_DD_YYYY
(e.g. JAN_01_2023
for 2023-01-01)
SEP_17_2024_NOON_UTC
variable also contain time & timezone23:59:59 UTC
for the final day of something, 00:00:00 UTC
for the first day of something)internal
MIN_ETA declared as public
constant
IF new contract is present in the spell (not yet on chainlog or new to chainlog) All contracts source code checked against audited commit source
[x] Source code is verified on etherscan
[x] Compilation optimizations match deployment settings defined in the source code rep
[ ] GNU AGPLv3
license
Expected and not a blocker
[x] Every maker-related constructor argument matches chainlog (e.g. vat
, dai
, dog
, ...)
IF new contract have concept of wards
or access control
PAUSE_PROXY
address was relied
(wards(PAUSE_PROXY)
is 1
)denied
(wards(deployer)
is 0
)MCD_ESM
address is already relied OR being relied
(wards(MCD_ESM)
is 1
) in this spell (as approved by Governance Facilitators, in order to allow de-authing the pause proxy during Emergency Shutdown, via denyProxy
)
Forced by Do not authorize ESM in any new contracts
actionRely
events except for PAUSE_PROXY
and MCD_ESM
(using a block explorer like etherscan)[x] Source code matches corresponding github source code (e.g. diffcheck via vscode code --diff etherscan.sol github.sol
)
[x] Deployer address is included into addresses_deployers.sol
[x] Source code is verified on etherscan
[x] Compilation optimizations match deployment settings defined in the source code repo
[x] GNU AGPLv3
license
[x] Every maker-related constructor argument matches chainlog (e.g. vat
, dai
, dog
, ...)
No constructor args
IF new contract have concept of wards
or access control
It's implementaion contract which don't have any state, all wards defined in proxy contract (USDS
)
[x] Source code matches corresponding github source code (e.g. diffcheck via vscode code --diff etherscan.sol github.sol
)
[x] Deployer address is included into addresses_deployers.sol
[x] Source code is verified on etherscan
[x] Compilation optimizations match deployment settings defined in the source code repo
[x] GNU AGPLv3
license
[x] Every maker-related constructor argument matches chainlog (e.g. vat
, dai
, dog
, ...)
IF new contract have concept of wards
or access control
No wards
[x] Source code matches corresponding github source code (e.g. diffcheck via vscode code --diff etherscan.sol github.sol
)
[x] Deployer address is included into addresses_deployers.sol
[x] Source code is verified on etherscan
[x] Compilation optimizations match deployment settings defined in the source code repo
[x] GNU AGPLv3
license
[x] Every maker-related constructor argument matches chainlog (e.g. vat
, dai
, dog
, ...)
IF new contract have concept of wards
or access control
No wards
[x] Source code matches corresponding github source code (e.g. diffcheck via vscode code --diff etherscan.sol github.sol
)
[x] Deployer address is included into addresses_deployers.sol
[x] Source code is verified on etherscan
[x] Compilation optimizations match deployment settings defined in the source code repo
[ ] GNU AGPLv3
license
Expected and not a blocker
[x] Every maker-related constructor argument matches chainlog (e.g. vat
, dai
, dog
, ...)
IF new contract have concept of wards
or access control
PAUSE_PROXY
address was relied
(wards(PAUSE_PROXY)
is 1
)denied
(wards(deployer)
is 0
)MCD_ESM
address is already relied OR being relied
(wards(MCD_ESM)
is 1
) in this spell (as approved by Governance Facilitators, in order to allow de-authing the pause proxy during Emergency Shutdown, via denyProxy
)
Forced by Do not authorize ESM in any new contracts
actionRely
events except for PAUSE_PROXY
and MCD_ESM
(using a block explorer like etherscan)[x] Source code matches corresponding github source code (e.g. diffcheck via vscode code --diff etherscan.sol github.sol
)
[x] Deployer address is included into addresses_deployers.sol
[x] Source code is verified on etherscan
[x] Compilation optimizations match deployment settings defined in the source code repo
[x] GNU AGPLv3
license
[x] Every maker-related constructor argument matches chainlog (e.g. vat
, dai
, dog
, ...)
IF new contract have concept of wards
or access control
It's implementaion contract which don't have any state, all wards defined in proxy contract (SUSDS
)
[x] Source code matches corresponding github source code (e.g. diffcheck via vscode code --diff etherscan.sol github.sol
)
[x] Deployer address is included into addresses_deployers.sol
[x] Source code is verified on etherscan
[x] Compilation optimizations match deployment settings defined in the source code repo
[x] GNU AGPLv3
license
[x] Every maker-related constructor argument matches chainlog (e.g. vat
, dai
, dog
, ...)
Don't have constructor args
IF new contract have concept of wards
or access control
PAUSE_PROXY
address was relied
(wards(PAUSE_PROXY)
is 1
)denied
(wards(deployer)
is 0
)MCD_ESM
address is already relied OR being relied
(wards(MCD_ESM)
is 1
) in this spell (as approved by Governance Facilitators, in order to allow de-authing the pause proxy during Emergency Shutdown, via denyProxy
)
Forced by Do not authorize ESM in any new contracts
actionRely
events except for PAUSE_PROXY
and MCD_ESM
(using a block explorer like etherscan)[x] Source code matches corresponding github source code (e.g. diffcheck via vscode code --diff etherscan.sol github.sol
)
[x] Deployer address is included into addresses_deployers.sol
[x] Source code is verified on etherscan
[x] Compilation optimizations match deployment settings defined in the source code repo
[x] GNU AGPLv3
license
[x] Every maker-related constructor argument matches chainlog (e.g. vat
, dai
, dog
, ...)
IF new contract have concept of wards
or access control
No wards
[x] Source code matches corresponding github source code (e.g. diffcheck via vscode code --diff etherscan.sol github.sol
)
[x] Deployer address is included into addresses_deployers.sol
UNIV2DAIMKR
0x517F9dD285e75b599234F7221227339478d0FcC8
This is a Uniswap V2 pair contract retrieved from UniV2 Factory, checks are not applicable
[x] Source code is verified on etherscan
UNIV2USDSSKY
0x2621CC0B3F3c079c1Db0E80794AA24976F0b9e3c named as in the spell
This is a Uniswap V2 pair contract retrieved from UniV2 Factory, checks are not applicable
[x] Source code is verified on etherscan
MCD_SPLIT
0xBF7111F13386d23cb2Fba5A538107A73f6872bCF named as in the spell
[x] Source code is verified on etherscan
[x] Compilation optimizations match deployment settings defined in the source code repo
[x] GNU AGPLv3
license
[x] Every maker-related constructor argument matches chainlog (e.g. vat
, dai
, dog
, ...)
IF new contract have concept of wards
or access control
PAUSE_PROXY
address was relied
(wards(PAUSE_PROXY)
is 1
)denied
(wards(deployer)
is 0
)MCD_ESM
address is already relied OR being relied
(wards(MCD_ESM)
is 1
) in this spell (as approved by Governance Facilitators, in order to allow de-authing the pause proxy during Emergency Shutdown, via denyProxy
)
Force by Do not authorize ESM in any new contracts
actionRely
events except for PAUSE_PROXY
and MCD_ESM
(using a block explorer like etherscan)[x] Source code matches corresponding github source code (e.g. diffcheck via vscode code --diff etherscan.sol github.sol
)
[x] Deployer address is included into addresses_deployers.sol
SPLITTER_MOM
0xF51a075d468dE7dE3599C1Dc47F5C42d02C9230e
[x] Source code is verified on etherscan
[x] Compilation optimizations match deployment settings defined in the source code repo
[x] GNU AGPLv3
license
[x] Every maker-related constructor argument matches chainlog (e.g. vat
, dai
, dog
, ...)
IF new contract have concept of wards
or access control
PAUSE_PROXY
address was relied
(wards(PAUSE_PROXY)
is 1
)denied
(wards(deployer)
is 0
)[x] Source code matches corresponding github source code (e.g. diffcheck via vscode code --diff etherscan.sol github.sol
)
[x] Deployer address is included into addresses_deployers.sol
MCD_FLAP
0xc5A9CaeBA70D6974cBDFb28120C3611Dd9910355 named as in the spell
[x] Source code is verified on etherscan
[x] Compilation optimizations match deployment settings defined in the source code repo
[x] GNU AGPLv3
license
[x] Every maker-related constructor argument matches chainlog (e.g. vat
, dai
, dog
, ...)
IF new contract have concept of wards
or access control
PAUSE_PROXY
address was relied
(wards(PAUSE_PROXY)
is 1
)denied
(wards(deployer)
is 0
)MCD_ESM
address is already relied OR being relied
(wards(MCD_ESM)
is 1
) in this spell (as approved by Governance Facilitators, in order to allow de-authing the pause proxy during Emergency Shutdown, via denyProxy
)
Forced by Do not authorize ESM in any new contracts
actionRely
events except for PAUSE_PROXY
and MCD_ESM
(using a block explorer like etherscan)[x] Source code matches corresponding github source code (e.g. diffcheck via vscode code --diff etherscan.sol github.sol
)
[x] Deployer address is included into addresses_deployers.sol
FLAP_SKY_ORACLE
0x38e8c1D443f546Dc014D7756ec63116161CB7B25 named as in the spell
[x] Source code is verified on etherscan
[x] Compilation optimizations match deployment settings defined in the source code repo
[x] GNU AGPLv3
license
[x] Every maker-related constructor argument matches chainlog (e.g. vat
, dai
, dog
, ...)
IF new contract have concept of wards
or access control
No wards
[x] Source code matches corresponding github source code (e.g. diffcheck via vscode code --diff etherscan.sol github.sol
)
[x] Deployer address is included into addresses_deployers.sol
MCD_VEST_SKY
0xB313Eab3FdE99B2bB4bA9750C2DDFBe2729d1cE9
[x] Source code is verified on etherscan
[x] Compilation optimizations match deployment settings defined in the source code repo
[x] GNU AGPLv3
license
[x] Every maker-related constructor argument matches chainlog (e.g. vat
, dai
, dog
, ...)
IF new contract have concept of wards
or access control
PAUSE_PROXY
address was relied
(wards(PAUSE_PROXY)
is 1
)denied
(wards(deployer)
is 0
)MCD_ESM
address is already relied OR being relied
(wards(MCD_ESM)
is 1
) in this spell (as approved by Governance Facilitators, in order to allow de-authing the pause proxy during Emergency Shutdown, via denyProxy
)
Forced by Do not authorize ESM in any new contracts
actionRely
events except for PAUSE_PROXY
and MCD_ESM
(using a block explorer like etherscan)[ ] Source code matches corresponding github source code (e.g. diffcheck via vscode code --diff etherscan.sol github.sol
)
There are some minor diffs like new line and etherescan verification metadata, nothing major
[x] Deployer address is included into addresses_deployers.sol
REWARDS_USDS_SKY
0x0650CAF159C5A49f711e8169D4336ECB9b950275
[x] Source code is verified on etherscan
[x] Compilation optimizations match deployment settings defined in the source code repo
[ ] GNU AGPLv3
license
Not a blocker as contract was not developed by us
[x] Every maker-related constructor argument matches chainlog (e.g. vat
, dai
, dog
, ...)
IF new contract have concept of wards
or access control
PAUSE_PROXY
address was relied
(wards(PAUSE_PROXY)
is 1
)[x] Source code matches corresponding github source code (e.g. diffcheck via vscode code --diff etherscan.sol github.sol
)
[x] Deployer address is included into addresses_deployers.sol
REWARDS_DIST_USDS_SKY
0x2F0C88e935Db5A60DDA73b0B4EAEef55883896d9
[x] Source code is verified on etherscan
[x] Compilation optimizations match deployment settings defined in the source code repo
[x] GNU AGPLv3
license
[x] Every maker-related constructor argument matches chainlog (e.g. vat
, dai
, dog
, ...)
IF new contract have concept of wards
or access control
PAUSE_PROXY
address was relied
(wards(PAUSE_PROXY)
is 1
)denied
(wards(deployer)
is 0
)MCD_ESM
address is already relied OR being relied
(wards(MCD_ESM)
is 1
) in this spell (as approved by Governance Facilitators, in order to allow de-authing the pause proxy during Emergency Shutdown, via denyProxy
)
Forced by Do not authorize ESM in any new contracts
actionRely
events except for PAUSE_PROXY
and MCD_ESM
(using a block explorer like etherscan)[x] Source code matches corresponding github source code (e.g. diffcheck via vscode code --diff etherscan.sol github.sol
)
[x] Deployer address is included into addresses_deployers.sol
REWARDS_USDS_01
0x10ab606B067C9C461d8893c47C7512472E19e2Ce
[x] Source code is verified on etherscan
[x] Compilation optimizations match deployment settings defined in the source code repo
[ ] GNU AGPLv3
license
Not a blocker as contract was not developed by us
[x] Every maker-related constructor argument matches chainlog (e.g. vat
, dai
, dog
, ...)
IF new contract have concept of wards
or access control
PAUSE_PROXY
address was relied
(wards(PAUSE_PROXY)
is 1
)[x] Source code matches corresponding github source code (e.g. diffcheck via vscode code --diff etherscan.sol github.sol
)
[x] Deployer address is included into addresses_deployers.sol
CRON_REWARDS_DIST_JOB
0x6464C34A02DD155dd0c630CE233DD6e21C24F9A5
[x] Source code is verified on etherscan
[x] Compilation optimizations match deployment settings defined in the source code repo
[x] GNU AGPLv3
license
[x] Every maker-related constructor argument matches chainlog (e.g. vat
, dai
, dog
, ...)
IF new contract have concept of wards
or access control
PAUSE_PROXY
address was relied
(wards(PAUSE_PROXY)
is 1
)denied
(wards(deployer)
is 0
)MCD_ESM
address is already relied OR being relied
(wards(MCD_ESM)
is 1
) in this spell (as approved by Governance Facilitators, in order to allow de-authing the pause proxy during Emergency Shutdown, via denyProxy
)
Forced by Do not authorize ESM in any new contracts
actionRely
events except for PAUSE_PROXY
and MCD_ESM
(using a block explorer like etherscan)[x] Source code matches corresponding github source code (e.g. diffcheck via vscode code --diff etherscan.sol github.sol
)
[x] Deployer address is included into addresses_deployers.sol
WRAPPER_USDS_LITE_PSM_USDC_A
0xA188EEC8F81263234dA3622A406892F3D630f98c
[x] Source code is verified on etherscan
[x] Compilation optimizations match deployment settings defined in the source code repo
[x] GNU AGPLv3
license
[x] Every maker-related constructor argument matches chainlog (e.g. vat
, dai
, dog
, ...)
IF new contract have concept of wards
or access control
No wards
[x] Source code matches corresponding github source code (e.g. diffcheck via vscode code --diff etherscan.sol github.sol
)
[x] Deployer address is included into addresses_deployers.sol
IF core system parameter changes are present in the instructions
MCD_PAUSE.delay
was changed using PauseLike(MCD_PAUSE).setDelay(16 hours)
IF additional dependencies (i.e. ./src/dependencies/
directory) are present:
01-usds/UsdsInit.sol
[x] IF the dependencies contracts/libraries have been audited
01-usds/UsdsInstance.sol
[x] IF the dependencies contracts/libraries have been audited
02-susds/SUsdsInit.sol
[x] IF the dependencies contracts/libraries have been audited
02-susds/SUsdsInstance.sol
[x] IF the dependencies contracts/libraries have been audited
03-sky/SkyInit.sol
[x] IF the dependencies contracts/libraries have been audited
03-sky/SkyInstance.sol
[x] IF the dependencies contracts/libraries have been audited
04-univ2-pool-migrator/UniV2PoolMigratorInit.sol
[x] IF the dependencies contracts/libraries have been audited
05-flapper/FlapperInit.sol
[x] IF the dependencies contracts/libraries have been audited
05-flapper/SplitterInstance.sol
[x] IF the dependencies contracts/libraries have been audited
06-farm/StakingRewardsInit.sol
[x] IF the dependencies contracts/libraries have been audited
06-farm/VestedRewardsDistributionInit.sol
[x] IF the dependencies contracts/libraries have been audited
06-farm/VestInit.sol
[x] IF the dependencies contracts/libraries have been audited
06-farm/UsdsSkyFarmingInit.sol
[x] IF the dependencies contracts/libraries have been audited
06-farm/Usds01PreFarmingInit.sol
[x] IF the dependencies contracts/libraries have been audited
07-cron/VestedRewardsDistributionJobInit.sol
[x] OTHERWISE obtain the permalink to the relevant repository from a trusted party (i.e. Gov Facilitators) Source code: makerdao/dss-cron repo
IF MKR
or DAI
streams (DssVest
) are created
New SKY
stream is created using UsdsSkyFarmingInit.init
call
[ ] VestAbstract
interface is imported from dss-interfaces/dss/VestAbstract.sol
DssVestLike
is defined inside dependencies/06-farm/VestInit.sol
[x] restrict
is used for each stream, UNLESS otherwise explicitly stated in the Exec Sheet
[x] usr
(Vest recipient address) matches Exec Sheet
[x] usr
address in the instruction is in the checksummed format
[ ] usr
address variable name match one found in addresses_wallets.sol
REWARDS_DIST_USDS_SKY
is used and added to CHAINLOG
[x] tot
(Total stream amount) matches Exec Sheet
[x] bgn
(Vest start timestamp) matches Exec Sheet
[ ] tau
is expressed as bgn - fin
(i.e. MONTH_DD_YYYY - MONTH_DD_YYYY
)
Start date based on the timestamp, not a blocker
[x] IF mgr
(Vest manager address) is specified in the Exec Sheet, matches the value, OTHERWISE matches address(0)
[x] Ensure that max vesting rate (cap
) is enough for the new streams
tot
divided by tau
) <=
the maximum vest streaming rate (cap
)tot
divided by tau
) >
the maximum vest streaming rate (cap
)cap
value equal to 10% greater than the new maximum vesting rate, then round new cap
up with 2 significant figure precision (i.e. 2446 becomes 2500)IF max vesting rate (cap
) is changed in the spell
[x] Tested via testVestDAI
or testVestMKR
Tested by testVestSKY
as we have stream for a new token
IF spell interacts with ChainLog
addresses_mainnet.sol
testChainlogIntegrity
and testChainlogValues
[x] Ensure every spell variable is declared as public
/internal
[x] Ensure immutable
visibility is only used when fetching addresses from the ChainLog
via DssExecLib.getChangelogAddress(key)
and constant
is used instead for static addresses
address
and wrap with Like
suffix interfaces inline (when making calls), UNLESS archive patterns permit otherwise (Such as MKR
)ChainLog
, the variable name must match the value of the ChainLog key for that address (e.g. MCD_VAT
rather than vat
), except where the archive pattern differs from this pattern (e.g. MKR)Tests
DssExecLib.address
file is not being modified by the spell PRpublic
skipped
modifier; OTHERWISE, it MUST have the skipped
modifiertestNextCastTimeMinEta
testSystemTokens
testNewAuthorizations
testChainlogIntegrity
& testChainlogValues
testSystemTokens
testNewAuthorizations
testChainlogIntegrity
& testChainlogValues
SUsdsLike(instance.sUsds).file("ssr", cfg.ssr);
tested by testGeneral
testSystemTokens
testNewAuthorizations
testChainlogIntegrity
& testChainlogValues
testSystemTokens
& testUniV2PoolMigration
testGeneral
& testSplitter
testChainlogIntegrity
& testChainlogValues
testGeneral
& testSplitter
testSplitter
testChainlogIntegrity
& testChainlogValues
testGeneral
testNewAuthorizations
testChainlogIntegrity
& testChainlogValues
testChainlogIntegrity
& testChainlogValues
testUsdsSkyRewards
&& testVestSKY
testUsdsSkyRewards
testNewCronJobs
testChainlogIntegrity
& testChainlogValues
testVestedRewardsDistributionJob
testUsds01Rewards
testChainlogIntegrity
& testChainlogValues
testUsdsPsmWrapper
testChainlogIntegrity
& testChainlogValues
testGeneral
testChainlogValues
printenv | grep "FOUNDRY_\|DAPP_"
)make test
[PASS]
prefix.Ran 2 tests for src/test/starknet.t.sol:StarknetTests
[PASS] testStarknet() (gas: 3272751)
[PASS] testStarknetSpell() (gas: 2309)
Suite result: ok. 2 passed; 0 failed; 0 skipped; finished in 55.15s (51.58s CPU time)
Ran 45 tests for src/DssSpell.t.sol:DssSpellTest
[SKIP] testBytecodeMatches() (gas: 0)
[PASS] testCastCost() (gas: 3149889)
[PASS] testCastOnTime() (gas: 3146919)
[PASS] testChainlogIntegrity() (gas: 8821248)
[PASS] testChainlogValues() (gas: 10398867)
[SKIP] testCollateralIntegrations() (gas: 0)
[PASS] testContractSize() (gas: 10909)
[SKIP] testDAIPayments() (gas: 0)
[SKIP] testDaoResolutions() (gas: 0)
[PASS] testDeployCost() (gas: 5315800)
[SKIP] testEsmAuth() (gas: 0)
[PASS] testGeneral() (gas: 28883707)
[SKIP] testIlkClipper() (gas: 0)
[SKIP] testL2ArbitrumSpell() (gas: 0)
[SKIP] testL2OptimismSpell() (gas: 0)
[SKIP] testLerpSurplusBuffer() (gas: 0)
[PASS] testLitePSMs() (gas: 4023792)
[SKIP] testMKRPayments() (gas: 0)
[SKIP] testMedianizers() (gas: 0)
[PASS] testNewAuthorizations() (gas: 3208391)
[PASS] testNewCronJobs() (gas: 3155704)
[SKIP] testNewIlkRegistryValues() (gas: 0)
[SKIP] testNextCastTime() (gas: 0)
[PASS] testNextCastTimeMinEta() (gas: 684024)
[SKIP] testOSMs() (gas: 0)
[SKIP] testOffboardings() (gas: 0)
[PASS] testOfficeHours() (gas: 12233)
[SKIP] testOracleList() (gas: 0)
[PASS] testPSMs() (gas: 4334093)
[PASS] testRemoveChainlogValues() (gas: 3153480)
[PASS] testRevertIfNotScheduled() (gas: 16808)
[SKIP] testSparkSpellIsExecuted() (gas: 0)
[PASS] testSplitter() (gas: 3498506)
[PASS] testSystemTokens() (gas: 3862547)
[PASS] testUniV2PoolMigration() (gas: 3172918)
[PASS] testUsds01Rewards() (gas: 3255353)
[PASS] testUsdsPsmWrapper() (gas: 3516106)
[PASS] testUsdsSkyRewards() (gas: 3359247)
[PASS] testUseEta() (gas: 341839)
[SKIP] testVestDAI() (gas: 0)
[SKIP] testVestMKR() (gas: 0)
[PASS] testVestSKY() (gas: 3553767)
[PASS] testVestedRewardsDistributionJob() (gas: 3315673)
[SKIP] testYankDAI() (gas: 0)
[SKIP] testYankMKR() (gas: 0)
Suite result: ok. 24 passed; 0 failed; 21 skipped; finished in 427.67s (1410.32s CPU time)
Ran 2 test suites in 428.60s (482.82s CPU time): 26 tests passed, 0 failed, 21 skipped (47 total tests)
makerdao/community
GitHub repo
https://github.com/makerdao/community/blob/master/governance/votes/Executive%20vote%20-%20September%2013%2C%202024.mdExecutive vote - Month DD, YYYY.md
git switch master && git pull origin master
git log --pretty=oneline -1 -- "governance/votes/Executive vote - September 13, 2024.md"
TARGET_DATE
, generate Exec Doc Hash via make exec-hash date=$TARGET_DATE $URL
Insert your Exec Doc Hash here
Script is broken, checked manually by next rulecast keccak -- "$(curl '$URL' -o - 2>/dev/null)"
Insert your Exec Doc Hash here
0xdf8af8066b5e0a90668ab343a1244624c58a30b568ff9113dbc82a22a77d0cf6keccak
hash of the empty string (0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470
)NO
in Exec SheetSpell is deployed: 0x70254BD530684CF4a6323F51098FA39AAE6130b6
.
Spell is cast on the Tenderly Virtual Testnet: https://dashboard.tenderly.co/explorer/vnet/8c4daeff-45a3-489d-8e60-c607179dca99
TLDR: Good to handover
false
UNLESS the contract size is too big AND all mitigation strategies (i.e.: removing revert strings) have failed
ℹ️ Optimization Enabled: Yes with 1 runsmake diff-deployed-spell
or manually)FOUNDRY_OPTIMIZER_RUNS
env variable was different from DAPP_BUILD_OPTIMIZE_RUNS
which prevented testBytecodeMatches
to validate deployed bytecode)make check-deployed-spell
DssExecLib.address
filedeployed_spell_created
matches deployment timestampdeployed_spell_block
matches deployment block numbermake deploy-info tx=<tx>
matches config
deployed_spell_created
timestampdeployed_spell_block
block numberDssExecLib.address
file (e.g. look under the 'Files Changed' PR tab, etc.)Libraries Used
matches DssExecLib Latest Releasec0d3c6c
made on Feb 1, 2022, while git submodule lib/dss-exec-lib
is set to track the latest commit 69b658f
made on Jan 23, 2023. Here is the diff between the latest release and the submodule: https://github.com/makerdao/dss-exec-lib/compare/v0.0.9...69b658f35d8618272cd139dfc18c5713caf6b96b#diff-72201ff20380f5c7fc89281be3ad2dd6bd5a992f246d41d6d9d97f71e078d40d. The only major difference between deployed and the imported library is the new setRWAIlkDebtCeiling
, which is not used in this particular spellmake diff-archive-spell
for current date or make diff-archive-spell date="YYYY-MM-DD"
DssExecLib.address
file is not being modified by the spell PRprintenv | grep "FOUNDRY_\|DAPP_"
)make test
_Insert your local test logs here_
./scripts/test-dssspell-forge.sh no-match="" match="" block=""
Using DssExecLib at: 0x8De6DDbCd5053d32292AAA0D2105A32d108484a6
[⠊] Compiling...
[⠒] Compiling 4 files with Solc 0.8.16
[⠢] Solc 0.8.16 finished in 12.49s
Compiler run successful!
Ran 2 tests for src/test/starknet.t.sol:StarknetTests
[PASS] testStarknet() (gas: 3276947)
[PASS] testStarknetSpell() (gas: 2352)
Suite result: ok. 2 passed; 0 failed; 0 skipped; finished in 19.24s (18.19s CPU time)
Ran 45 tests for src/DssSpell.t.sol:DssSpellTest
[PASS] testBytecodeMatches() (gas: 5295245)
[PASS] testCastCost() (gas: 3154005)
[PASS] testCastOnTime() (gas: 3150637)
[PASS] testChainlogIntegrity() (gas: 8836919)
[PASS] testChainlogValues() (gas: 10402983)
[SKIP] testCollateralIntegrations() (gas: 0)
[SKIP] testContractSize() (gas: 0)
[SKIP] testDAIPayments() (gas: 0)
[SKIP] testDaoResolutions() (gas: 0)
[SKIP] testDeployCost() (gas: 0)
[SKIP] testEsmAuth() (gas: 0)
[PASS] testGeneral() (gas: 28862826)
[SKIP] testIlkClipper() (gas: 0)
[SKIP] testL2ArbitrumSpell() (gas: 0)
[SKIP] testL2OptimismSpell() (gas: 0)
[SKIP] testLerpSurplusBuffer() (gas: 0)
[PASS] testLitePSMs() (gas: 4035008)
[SKIP] testMKRPayments() (gas: 0)
[SKIP] testMedianizers() (gas: 0)
[PASS] testNewAuthorizations() (gas: 3212238)
[PASS] testNewCronJobs() (gas: 3158943)
[SKIP] testNewIlkRegistryValues() (gas: 0)
[SKIP] testNextCastTime() (gas: 0)
[PASS] testNextCastTimeMinEta() (gas: 686496)
[SKIP] testOSMs() (gas: 0)
[SKIP] testOffboardings() (gas: 0)
[PASS] testOfficeHours() (gas: 12977)
[SKIP] testOracleList() (gas: 0)
[PASS] testPSMs() (gas: 4343733)
[PASS] testRemoveChainlogValues() (gas: 3157779)
[PASS] testRevertIfNotScheduled() (gas: 17047)
[SKIP] testSparkSpellIsExecuted() (gas: 0)
[PASS] testSplitter() (gas: 3504582)
[PASS] testSystemTokens() (gas: 3868451)
[PASS] testUniV2PoolMigration() (gas: 3177033)
[PASS] testUsds01Rewards() (gas: 3259955)
[PASS] testUsdsPsmWrapper() (gas: 3523367)
[PASS] testUsdsSkyRewards() (gas: 3363535)
[PASS] testUseEta() (gas: 343977)
[SKIP] testVestDAI() (gas: 0)
[SKIP] testVestMKR() (gas: 0)
[PASS] testVestSKY() (gas: 3558659)
[PASS] testVestedRewardsDistributionJob() (gas: 3340142)
[SKIP] testYankDAI() (gas: 0)
[SKIP] testYankMKR() (gas: 0)
Suite result: ok. 23 passed; 0 failed; 22 skipped; finished in 145.99s (336.97s CPU time)
Ran 2 test suites in 146.56s (165.23s CPU time): 25 tests passed, 0 failed, 22 skipped (47 total tests)
testBytecodeMatches
passdelegatecall
code inside verified codeselfdestruct
code inside verified codeGood to handover
false
UNLESS the contract size is too big AND all mitigation strategies (i.e.: removing revert strings) have failed
Enabled with 1 runsmake diff-deployed-spell
or manually)make check-deployed-spell
DssExecLib.address
filedeployed_spell_created
matches deployment timestampdeployed_spell_block
matches deployment block numbermake deploy-info tx=<tx>
matches config
deployed_spell_created
timestampdeployed_spell_block
block numberDssExecLib.address
file (e.g. look under the 'Files Changed' PR tab, etc.)Libraries Used
matches DssExecLib Latest Releasemake diff-archive-spell
for current date or make diff-archive-spell date="YYYY-MM-DD"
DssExecLib.address
file is not being modified by the spell PRprintenv | grep "FOUNDRY_\|DAPP_"
)make test
Ran 2 tests for src/test/starknet.t.sol:StarknetTests
[PASS] testStarknet() (gas: 3276947)
[PASS] testStarknetSpell() (gas: 2352)
Suite result: ok. 2 passed; 0 failed; 0 skipped; finished in 54.05s (51.05s CPU time)
Ran 45 tests for src/DssSpell.t.sol:DssSpellTest
[PASS] testBytecodeMatches() (gas: 5295245)
[PASS] testCastCost() (gas: 3154005)
[PASS] testCastOnTime() (gas: 3150637)
[PASS] testChainlogIntegrity() (gas: 8836919)
[PASS] testChainlogValues() (gas: 10402983)
[SKIP] testCollateralIntegrations() (gas: 0)
[SKIP] testContractSize() (gas: 0)
[SKIP] testDAIPayments() (gas: 0)
[SKIP] testDaoResolutions() (gas: 0)
[SKIP] testDeployCost() (gas: 0)
[SKIP] testEsmAuth() (gas: 0)
[PASS] testGeneral() (gas: 28862826)
[SKIP] testIlkClipper() (gas: 0)
[SKIP] testL2ArbitrumSpell() (gas: 0)
[SKIP] testL2OptimismSpell() (gas: 0)
[SKIP] testLerpSurplusBuffer() (gas: 0)
[PASS] testLitePSMs() (gas: 4035008)
[SKIP] testMKRPayments() (gas: 0)
[SKIP] testMedianizers() (gas: 0)
[PASS] testNewAuthorizations() (gas: 3212238)
[PASS] testNewCronJobs() (gas: 3158943)
[SKIP] testNewIlkRegistryValues() (gas: 0)
[SKIP] testNextCastTime() (gas: 0)
[PASS] testNextCastTimeMinEta() (gas: 686496)
[SKIP] testOSMs() (gas: 0)
[SKIP] testOffboardings() (gas: 0)
[PASS] testOfficeHours() (gas: 12977)
[SKIP] testOracleList() (gas: 0)
[PASS] testPSMs() (gas: 4343733)
[PASS] testRemoveChainlogValues() (gas: 3157779)
[PASS] testRevertIfNotScheduled() (gas: 17047)
[SKIP] testSparkSpellIsExecuted() (gas: 0)
[PASS] testSplitter() (gas: 3504582)
[PASS] testSystemTokens() (gas: 3868451)
[PASS] testUniV2PoolMigration() (gas: 3177033)
[PASS] testUsds01Rewards() (gas: 3259955)
[PASS] testUsdsPsmWrapper() (gas: 3523367)
[PASS] testUsdsSkyRewards() (gas: 3363535)
[PASS] testUseEta() (gas: 343977)
[SKIP] testVestDAI() (gas: 0)
[SKIP] testVestMKR() (gas: 0)
[PASS] testVestSKY() (gas: 3558659)
[PASS] testVestedRewardsDistributionJob() (gas: 3277034)
[SKIP] testYankDAI() (gas: 0)
[SKIP] testYankMKR() (gas: 0)
Suite result: ok. 23 passed; 0 failed; 22 skipped; finished in 442.37s (1436.17s CPU time)
Ran 2 test suites in 443.20s (496.42s CPU time): 25 tests passed, 0 failed, 22 skipped (47 total tests)
Description
Contribution Checklist
(PE-<TICKET_NUMBER>)
Checklist
officeHours
modifier override30 days
unless otherwise specified)ETH_GAS_LIMIT="XXX" ETH_GAS_PRICE="YYY" make deploy
mainnet
contract on etherscanmake archive-spell
ormake date="YYYY-MM-DD" archive-spell
to make an archive directory and copyDssSpell.sol
,DssSpell.t.sol
,DssSpell.t.base.sol
, andDssSpellCollateralOnboarding.sol
squash and merge
this PR