Closed SidestreamColdMelon closed 8 months ago
Good to deploy
DSR Change
Stability Fee Changes
GSM Change
USDC PSM ttl Change
Trigger Spark Proxy Spell
// Decrease the GSM Delay by 32 hours from 48 hours to 16 hours
makerdao/community
GitHub repoExecutive vote - Month DD, YYYY.md
TARGET_DATE
, generate Exec Doc Hash via make exec-hash date=$TARGET_DATE $URL
0x94608a6337c99fc128873534fb5e2dbced316e9212500dfc53b989d08ad3dbddcast keccak -- "$(curl '$URL' -o - 2>/dev/null)"
0x94608a6337c99fc128873534fb5e2dbced316e9212500dfc53b989d08ad3dbdd0.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
)TARGET_DATE MakerDAO Executive Spell | Hash: EXEC_DOC_HASH
TARGET_DATE
in the description matches the Exec Doc target date// Hash: cast keccak -- "$(wget 'EXEC_DOC_URL' -q -O - 2>/dev/null)"
// ----- Section text -----
)// Instruction text
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
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
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
, OTHERWISE should be imported from therecast interface <contract_address>
command
ProxyLike.exec
have slightly different interface when calling cast interface 0x3300f198988e4C9C63F75dF86De36421f06af8c4 (which returns function exec(address target, bytes memory args) external payable returns (bytes memory out)), but it's a known situation that cast/etherscan can't distinguish between calldata and memory.Like
suffix (e.g. VatLike
)
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
jug.ilk.duty
) is updatedDssExecLib.setIlkStabilityFee(ilk, rate, doDrip)
) is used
ETH-A - 15.25%
ETH-B - 15.75%
ETH-C - 15%
WSTETH-A - 16.25%
WSTETH-B - 16%
BTC-A - 16.75%
BTC-B - 17.25%
BTC-C - 16.5%
// Increase ILK-A Stability Fee by X.XX% from X.XX% to X.XX%
Increase the ETH-A Stability Fee by 8.84% from 6.41% to 15.25%
Increase the ETH-B Stability Fee by 8.84% from 6.91% to 15.75%
Increase the ETH-C Stability Fee by 8.84% from 6.16% to 15%
Increase the WSTETH-A Stability Fee by 9.6% from 6.65% to 16.25%
Increase the WSTETH-B Stability Fee by 9.6% from 6.4% to 16%
Increase the WBTC-A Stability Fee by 10.07% from 6.68% to 16.75%
Increase the WBTC-B Stability Fee by 10.07% from 7.18% to 17.25%
Increase the WBTC-C Stability Fee by 10.07% from 6.43% to 16.5%
pot.dsr
) is updatedDssExecLib.setDSR(rate, doDrip)
) is used// Increase DSR by X.XX% from X.XX% to X.XX%
// Increase the DSR by 10% from 5% to 15%
make rates pct=<pct>
(e.g. pct=0.75, for 0.75%)ProxyLike(SUBDAO_PROXY).exec(SUBDAO_SPELL, abi.encodeWithSignature("execute()"));
addresses_deployers.sol
as an entrypublic
/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
modifierconfig
config
config
config
testSparkSpellIsExecuted
printenv | grep "FOUNDRY_\|DAPP_"
)make test
[PASS]
prefix.Ran 2 tests for src/test/starknet.t.sol:StarknetTests
[PASS] testStarknet() (gas: 1143371)
[PASS] testStarknetSpell() (gas: 2324)
Suite result: ok. 2 passed; 0 failed; 0 skipped; finished in 227.42s (21.29s CPU time)
Ran 33 tests for src/DssSpell.t.sol:DssSpellTest
[SKIP] testBytecodeMatches() (gas: 0)
[PASS] testCastCost() (gas: 998025)
[PASS] testCastOnTime() (gas: 994943)
[SKIP] testChainlogIntegrity() (gas: 0)
[PASS] testChainlogValues() (gas: 9283155)
[SKIP] testCollateralIntegrations() (gas: 0)
[PASS] testContractSize() (gas: 11139)
[SKIP] testDAIPayments() (gas: 0)
[SKIP] testDaoResolutions() (gas: 0)
[PASS] testDeployCost() (gas: 2024276)
[SKIP] testEsmAuth() (gas: 0)
[PASS] testGeneral() (gas: 26761453)
[SKIP] testIlkClipper() (gas: 0)
[SKIP] testL2ArbitrumSpell() (gas: 0)
[SKIP] testL2OptimismSpell() (gas: 0)
[SKIP] testLerpSurplusBuffer() (gas: 0)
[SKIP] testMKRPayments() (gas: 0)
[SKIP] testMedianizers() (gas: 0)
[SKIP] testNewIlkRegistryValues() (gas: 0)
[PASS] testNextCastTime() (gas: 353818)
[SKIP] testOSMs() (gas: 0)
[SKIP] testOffboardings() (gas: 0)
[PASS] testOfficeHours() (gas: 13444)
[SKIP] testOracleList() (gas: 0)
[PASS] testPSMs() (gas: 2305085)
[SKIP] testRemoveChainlogValues() (gas: 0)
[PASS] testRevertIfNotScheduled() (gas: 17499)
[PASS] testSparkSpellIsExecuted() (gas: 1000860)
[PASS] testUseEta() (gas: 352484)
[SKIP] testVestDAI() (gas: 0)
[SKIP] testVestMKR() (gas: 0)
[SKIP] testYankDAI() (gas: 0)
[SKIP] testYankMKR() (gas: 0)
Suite result: ok. 12 passed; 0 failed; 21 skipped; finished in 394.72s (1006.28s CPU time)
The spell is deployed to: https://etherscan.io/address/0xdD0AB42848b5609ded083459110d2e38483E0859#code Tenderly Testnet: https://dashboard.tenderly.co/explorer/vnet/6d2ff3f2-12cd-4fbc-a782-bcc420173bc8
Good to handover:
false
UNLESS the contract size is too big AND all mitigation strategies (i.e.: removing revert strings) have failedmake diff-deployed-spell
or manually)make check-deployed-spell
DssExecLib.address
filedeployed_spell_created
matches deployment timestampdeployed_spell_block
matches deployment block number
make 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: 1144061)
[PASS] testStarknetSpell() (gas: 2324)
Suite result: ok. 2 passed; 0 failed; 0 skipped; finished in 24.06s (21.96s CPU time)
Ran 33 tests for src/DssSpell.t.sol:DssSpellTest
[PASS] testBytecodeMatches() (gas: 2037971)
[PASS] testCastCost() (gas: 998715)
[PASS] testCastOnTime() (gas: 995633)
[SKIP] testChainlogIntegrity() (gas: 0)
[PASS] testChainlogValues() (gas: 9283845)
[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: 26764240)
[SKIP] testIlkClipper() (gas: 0)
[SKIP] testL2ArbitrumSpell() (gas: 0)
[SKIP] testL2OptimismSpell() (gas: 0)
[SKIP] testLerpSurplusBuffer() (gas: 0)
[SKIP] testMKRPayments() (gas: 0)
[SKIP] testMedianizers() (gas: 0)
[SKIP] testNewIlkRegistryValues() (gas: 0)
[PASS] testNextCastTime() (gas: 353818)
[SKIP] testOSMs() (gas: 0)
[SKIP] testOffboardings() (gas: 0)
[PASS] testOfficeHours() (gas: 13444)
[SKIP] testOracleList() (gas: 0)
[PASS] testPSMs() (gas: 2305775)
[SKIP] testRemoveChainlogValues() (gas: 0)
[PASS] testRevertIfNotScheduled() (gas: 17499)
[PASS] testSparkSpellIsExecuted() (gas: 1001550)
[PASS] testUseEta() (gas: 352484)
[SKIP] testVestDAI() (gas: 0)
[SKIP] testVestMKR() (gas: 0)
[SKIP] testYankDAI() (gas: 0)
[SKIP] testYankMKR() (gas: 0)
Suite result: ok. 11 passed; 0 failed; 22 skipped; finished in 399.38s (1022.47s CPU time)
good to handover :)
false
UNLESS the contract size is too big AND all mitigation strategies (i.e.: removing revert strings) have failedmake 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"
Tests
DssExecLib.address
file is not being modified by the spell PRprintenv | grep "FOUNDRY_\|DAPP_"
)make test
./scripts/test-dssspell-forge.sh no-match="" match="" block=""
Using DssExecLib at: 0x8De6DDbCd5053d32292AAA0D2105A32d108484a6
[⠢] Compiling...
[⠰] Compiling 5 files with 0.8.16
[⠔] Solc 0.8.16 finished in 2.17s
Compiler run successful!
Ran 2 tests for src/test/starknet.t.sol:StarknetTests [PASS] testStarknet() (gas: 1143486) [PASS] testStarknetSpell() (gas: 2324) Suite result: ok. 2 passed; 0 failed; 0 skipped; finished in 43.47s (39.84s CPU time)
Ran 33 tests for src/DssSpell.t.sol:DssSpellTest [PASS] testBytecodeMatches() (gas: 2037971) [PASS] testCastCost() (gas: 998140) [PASS] testCastOnTime() (gas: 995058) [SKIP] testChainlogIntegrity() (gas: 0) [PASS] testChainlogValues() (gas: 9283270) [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: 26763665) [SKIP] testIlkClipper() (gas: 0) [SKIP] testL2ArbitrumSpell() (gas: 0) [SKIP] testL2OptimismSpell() (gas: 0) [SKIP] testLerpSurplusBuffer() (gas: 0) [SKIP] testMKRPayments() (gas: 0) [SKIP] testMedianizers() (gas: 0) [SKIP] testNewIlkRegistryValues() (gas: 0) [PASS] testNextCastTime() (gas: 353818) [SKIP] testOSMs() (gas: 0) [SKIP] testOffboardings() (gas: 0) [PASS] testOfficeHours() (gas: 13444) [SKIP] testOracleList() (gas: 0) [PASS] testPSMs() (gas: 2305200) [SKIP] testRemoveChainlogValues() (gas: 0) [PASS] testRevertIfNotScheduled() (gas: 17499) [PASS] testSparkSpellIsExecuted() (gas: 1000975) [PASS] testUseEta() (gas: 352484) [SKIP] testVestDAI() (gas: 0) [SKIP] testVestMKR() (gas: 0) [SKIP] testYankDAI() (gas: 0) [SKIP] testYankMKR() (gas: 0) Suite result: ok. 11 passed; 0 failed; 22 skipped; finished in 378.06s (859.02s CPU time)
Ran 2 test suites in 378.67s (421.54s CPU time): 13 tests passed, 0 failed, 22 skipped (35 total tests)
new-spells
is correctnew-spells
channel (via a separate "reply to" message, restating the address to avoid edits)
new-spells
Description
This spell is crafted in accordance with this exec doc: https://github.com/makerdao/community/pull/2584
Contribution Checklist
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