Closed 0xp3th1um closed 5 months ago
Spell Actions (Per Exec Doc):
November Delegate Compensation
December Delegate Compensation
Offboarded Delegate Buffer Payments
yank Dai streams
CU MKR payments
Launch Project Funding
Update doc parameter
Spark D3M line increase
Trigger Spark Proxy Spell
block.timestamp + 30 days
)Executive vote - Month DD, YYYY.md
make exec-hash $URL
cast keccak -- "$(curl '$URL' -o - 2>/dev/null)"
Insert your Exec Doc Hash hereTARGET_DATE MakerDAO Executive Spell | Hash: EXEC_DOC_HASH)
description
// Hash: cast keccak -- "$(wget 'EXEC_DOC_URL' -q -O - 2>/dev/null)"
// ----- Section text -----
)// Instruction text
Reasoning URL
and Authority URL
from the Exec Sheet should be present under relevant section or instruction in the spell code (depending on which row the link is present)Reasoning URL
and Authority URL
should 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/
// MIP:
if URL starts with https://mips.makerdao.com/mips/details/
chainlog
version bump), it should have explanation prefixed with // Note:
// Note:
(e.g.: // Note: Payments are skipped on goerli
)foundryup
lib
foldergit 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 '4ad127cf53eeaddfb7b8ad56dd4b13e57d6a0067'
Submodule path 'lib/dss-test/lib/dss-interfaces': checked out '9bfd7afadd1f8c217ef05850b2555691786286cb'
Submodule path 'lib/dss-test/lib/forge-std': checked out 'aea0b2685bebc883c09f5554d7fb481e85d0564d'
Submodule path 'lib/dss-test/lib/forge-std/lib/ds-test': checked out 'cd98eff28324bfac652e63a239a60632a761790b'
dss-exec-lib
dss-exec-lib
is synced as wellgit submodule status
) matches the latest release version or newer (NOTE: dss-exec-lib
as installed locally will use GitHub code more recent than the 0.0.9 release)dss-test
dss-interfaces
dss-test
dss-exec-lib
forge-std
dss-test
:warning: version found from https://github.com/makerdao/dss-test/tree/master/lib is aea0b26
dss-exec-lib
version found from https://github.com/makerdao/dss-exec-lib/tree/master/lib is 0aa99eb
dss-interfaces
import "dss-interfaces/dss/VatAbstract.sol";
)dss-interfaces
(Where there is a mismatch, use cast interface
as the source of truth)cast interface <contract_address>
to ensure correctnessLike
suffix (e.g. VatLike
), with some exceptionsMILLION = 10 ** 6
internal
constant
DIRECT-SPARK-DAI
1200 * MILLION
doc
(Using the _updateDoc
helper or otherwise)init
the RwaLiquidationOracle
to reset the doc
pip
must be set (not the zero address)ilk
follows format "RWAXXX-A"val
price ignored (0
) if init
has already been calleddoc
new legal document (IPFS HASH) matches Exec Doctau
parameter used is the old tau
valueno decimals in the values
Yank
)MCD_VEST_DAI
for DAI yank
MCD_VEST_DAI_LEGACY
for yanking DECO stream (21)addresses_wallets.sol
addresses_deployers.sol
as an entryProxyLike(SUBDAO_PROXY).exec(SUBDAO_SPELL, abi.encodeWithSignature("execute()"));
cast
execution. (Also note that low level call gas estimation is not done by our scripts)DelegateCall
context)addresses_mainnet.sol
matches spell codepublic
/internal
immutable
visibility is only used when fetching addresses from the ChainLog
via DssExecLib.getChangelogAddress
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)testMKRPayments
and testDAIPayments
testYankDAI
and testYankDAILegacy
.base.test
testRWA009DocChange
testSparkSpellIsExecuted
DssExecLib.address
file is not being modified by the spell PRmake test
ETH_RPC_URL
is being used from env (i.e. no match
, block
or similar are active in your env)Using DssExecLib at: 0x8De6DDbCd5053d32292AAA0D2105A32d108484a6
[⠒] Compiling...
[⠔] Compiling 5 files with 0.8.16
[⠔] Solc 0.8.16 finished in 3.93s
Compiler run successful
Running 2 tests for src/test/starknet.t.sol:StarknetTests
[PASS] testStarknet() (gas: 2220979)
[PASS] testStarknetSpell() (gas: 2346)
Test result: ok. 2 passed; 0 failed; finished in 80.74s
Running 23 tests for src/DssSpell.t.sol:DssSpellTest
[PASS] testAuth() (gas: 9223371487106603378)
[PASS] testAuthInSources() (gas: 9223371487099505732)
[PASS] testBytecodeMatches() (gas: 3161381)
[PASS] testCastCost() (gas: 2068872)
[PASS] testChainlogValues() (gas: 11019450)
[PASS] testChainlogVersionBump() (gas: 5731705)
[PASS] testContractSize() (gas: 8940)
[PASS] testDAIPayments() (gas: 2136840)
[PASS] testDeployCost() (gas: 3144884)
[PASS] testFailNotScheduled() (gas: 14398)
[PASS] testFailTooEarly() (gas: 13563)
[PASS] testFailTooLate() (gas: 13562)
[PASS] testFailWrongDay() (gas: 13563)
[PASS] testGeneral() (gas: 38336203)
[PASS] testMKRPayments() (gas: 2196142)
[PASS] testNextCastTime() (gas: 353681)
[PASS] testOnTime() (gas: 2064556)
[PASS] testPSMs() (gas: 3412401)
[PASS] testRWA009DocChange() (gas: 2131319)
[PASS] testSparkSpellIsExecuted() (gas: 2068092)
[PASS] testUseEta() (gas: 352302)
[PASS] testYankDAI() (gas: 2081989)
[PASS] testYankDAILegacy() (gas: 2081956)
Test result: ok. 23 passed; 0 failed; finished in 1043.40s
TLDR: good to deploy
Spell Actions (Per Exec Doc):
Read spell actions and instructions from the Exec Doc
List the actions being performed in this spell
Execute the SparkLend Proxy Spell at 0x2f2c514137173bc98B3699A0d291f7593637c596
Increase the SparkLend D3M Maximum Debt Ceiling (line) by 400 million from 800 million to 1.2 billion DAI
November and December Aligned Delegate Compensation will be distributed to 10 delegates
Two Derecognized Aligned Delegates will receive their remaining AD buffer, with Navigator receiving 20.84 MKR and PALC 6.95 MKR
The DAI Token Streams for DECO and SES will be halted (yank)
BA Labs and SES will receive 175.00 and 508.55 MKR respectively
The Launch Project will receive 4.5 million DAI and 820.00 MKR
The HVBank (RWA009-A) RWA Agreement (doc) parameter will be updated to QmfEgZuiw6wsTRUYerdPZNUrqDXSGM6Nm4fM3nG7nNbEjT
block.timestamp + 30 days
)Executive vote - Month DD, YYYY.md
make exec-hash $URL
⚠️ Script doesn't work for me with date: illegal option -- d
, but it's a known problemcast keccak -- "$(curl '$URL' -o - 2>/dev/null)"
Insert your Exec Doc Hash here
0xfa3538c5fd4e722c95a20215ecc483a80d9cb86dee89ae7df2c553bed2029882TARGET_DATE MakerDAO Executive Spell | Hash: EXEC_DOC_HASH)
description
// Hash: cast keccak -- "$(wget 'EXEC_DOC_URL' -q -O - 2>/dev/null)"
// ----- Section text -----
)// Instruction text
Reasoning URL
and Authority URL
from the Exec Sheet should be present under relevant section or instruction in the spell code (depending on which row the link is present)Reasoning URL
and Authority URL
should 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/
chainlog
version bump), it should have explanation prefixed with // Note:
// Note:
(e.g.: // Note: Payments are skipped on goerli
)foundryup
lib
foldergit 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 '4ad127cf53eeaddfb7b8ad56dd4b13e57d6a0067'
dss-exec-lib
dss-exec-lib
is synced as wellgit submodule status
) matches the latest release version or newer (NOTE: dss-exec-lib
as installed locally will use GitHub code more recent than the 0.0.9 release)
⚠️ Git submodule hash of the dss-exec-lib 69b658f35d8618272cd139dfc18c5713caf6b96b
matches latest commit on the repo (from 2 years ago) not latest release. It's a known situation. Here is the diff between the latest release and the submodule hash: https://github.com/makerdao/dss-exec-lib/compare/v0.0.9...69b658f35d8618272cd139dfc18c5713caf6b96bdss-test
dss-interfaces
dss-test
(Non-critical)forge-std
dss-test
(Non-critical)dss-interfaces
import "dss-interfaces/dss/VatAbstract.sol";
)dss-interfaces
(Where there is a mismatch, use cast interface
as the source of truth)cast interface <contract_address>
to ensure correctnessLike
suffix (e.g. VatLike
), with some exceptionsmake 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
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
UTC
timezoneUTC
timezone is usedMONTH_DD_YYYY
(e.g. MAY_01_2023
for 2023-05-01)23:59:59 UTC
for the final day of something, 00:00:00 UTC
for the first day of something) in the context of timestamp usageinternal
constant
GNU AGPLv3
licensevat
, dai
, dog
, ...)MCD_ESM
is already relied / being relied in this spell (as approved by Governance Facilitators) in order to allow de-authing the pause proxy during Emergency Shutdown, via denyProxy
.code --diff etherscan.sol github.sol
)addresses_deployers.sol
(to keep up to date)jug.ilk.duty
(setIlkStabilityFee)// Increase ILK-A Stability Fee by X.XX% from X.XX% to X.XX%.
pot.dsr
(setDSR
)PCT_RATE
is correctmake rates pct=<pct>
(e.g. pct=0.75, for 0.75%)spotter.ilk.mat
(liquidationRatio)dog.ilk.hole
(setIlkMaxLiquidationAmount)vat.ilk.dust
(setIlkMinVaultAmount)dog.ilk.chop
(liquidationPenalty)clip.buf
(startingPriceFactor)clipperMom.clip.tolerance
(setLiquidationBreakerPriceTolerance)clip.tail
(auctionDuration)clip.cusp
(permittedDrop)clip.chip
(kprPctReward)clip.tip
(kprFlatReward)calc.tau
(setLinearDecrease)calc.cut
calc.step
vat.ilk.line
changes (per ilk)setIlkDebtCeiling
ilk
line
increaseIlkDebtCeiling
ilk
amount
global
decreaseIlkDebtCeiling
ilk
amount
global
vat.Line
changes (Global Line)setGlobalDebtCeiling
amount
increaseGlobalDebtCeiling
amount
decreaseGlobalDebtCeiling
amount
ilk
line
ilk
line
gap
ttl
mat
)0
line
to Reduce in the Global Debt Ceilingline
Cachedchop
to 0
tip
to 0
chip
is required to be adjusted as wellDssExecLib.linearInterpolation
name
Format matches "XXX-A Offboarding"target
matches spotter
ilk
Format matches "XXX-A"what
matches mat
startTime
matches block.timestamp
start
matches Var CURRENT_XXX_A_MAT
end
matches Var TARGET_XXX_A_MAT
(Match Exec Doc & Risk Computations)mat
Covers All Remaining Vaults CR times Risk Multiplier Factorduration
matches Exec Docdoc
(Using the _updateDoc
helper or otherwise)init
the RwaLiquidationOracle
to reset the doc
pip
must be set (not the zero address)ilk
follows format "RWAXXX-A"val
price ignored (0
) if init
has already been calleddoc
new legal document (IPFS HASH) matches Exec Doctau
parameter used is the old tau
valueline
)line
) + Liquidation Oracle Price Bump (val
)ilk
follows format "RWAXXX-A"line
(max debt ceiling)gap
ttl
line
) + Liquidation Oracle Price Bump (val
)bump
RwaLiquidationOracle
with new computed increased price (val
)val
is set accordingly with autoline max debt ceiling (line
)val
should enable DAI to be drawn over the loan period while taking into account the configured ink
amount, interest rate and liquidation ratio (see below)val
is calculated with line * [(1 + duty) ** years] * mat
- rounded up - and makes sense in context of the rate mechanism. Minimum duration is usually in the Exec Doc of the spell with the RWAXXX ilk onboarding.val
formula (Debt ceiling * [ (1 + RWA stability fee ) ^ (minimum deal duration in years) ] * liquidation ratio
) is presentbump
line in format // XXM * 1.XX^X * X.XX as a WAD
corresponding to the val
calculation formula (e.g. // 15M * 1.03^2 * 1.00 as a WAD
) is present along with the calculation formula on the line aboveval
of multiple RWA ilks being combined, val
calculation is done once per ilk and added to make the total, with workings provided in code comments. The existing val
value can be retrieved by calling read()
on PIP_RWAXX
and converting the result into decimal.spotter
to pull in the new pricetell
)RwaLiquidationOracle.tell(ilk)
RWAXX_A_INPUT_CONDUIT
is an instance of TinlakeMgr
(it is a Centrifuge integration)TinlakeMgr.tell()
to prevent further TIN
redemptions in the Centrifuge pool.DssVest
)DssVestLike
interface is correctrestrict
is used for each stream unless otherwise stated in the Exec Docusr
(Vest recipient address) matches Exec Doctot
(Total stream amount) matches Exec Docether
to express decimal (non-integer) values of tot
bgn
(Vest start timestamp) matches Exec Doctau
(Vest total duration) matches Exec Doctau
is expressed as 'bgn
- fin
' (i.e. MONTH_DD_YYYY - MONTH_DD_YYYY
)fin
(Vest end timestamp) matches Exec Doceta
(Vest cliff duration) matches Exec Docclf
), eta
is 0clf
(Cliff end timestamp) matches Exec Docclf <= bgn
, eta
is 0clf > bgn
eta
is expressed as 'clf
- bgn
' (i.e. MONTH_DD_YYYY - MONTH_DD_YYYY
)mgr
(Vest manager address) matches Exec Docmgr
is address(0)
cap
) check (MKR, DAI)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 ratecap
up with 2 significant figure precision (i.e. 2446 becomes 2500)cap
change is noted in the Exec Doccap
value matches Exec Doctot
(total of new MKR vest amounts)Yank
)MCD_VEST_MKR_TREASURY
for MKR yank
MCD_VEST_DAI
for DAI yank
⚠️ MCD_VEST_DAI_LEGACY
used for one of the streams, but it's known and expected from governance as welladdresses_wallets.sol
addresses_deployers.sol
as an entryProxyLike(SUBDAO_PROXY).exec(SUBDAO_SPELL, abi.encodeWithSignature("execute()"));
cast
execution. (Also note that low level call gas estimation is not done by our scripts)DelegateCall
context)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)CREATE2
(e.g. if it looks like a vanity address) do not have selfdestruct
in their codeaddresses_mainnet.sol
matches spell codepublic
/internal
immutable
visibility is only used when fetching addresses from the ChainLog
via DssExecLib.getChangelogAddress
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)testMKRPayments
testMKRPayments
testYankDAI
and testYankDAILegacy
testMKRPayments
testMKRPayments
and testDAIPayments
testRWA009DocChange
testGeneral
testSparkSpellIsExecuted
DssExecLib.address
file is not being modified by the spell PRmake test
ETH_RPC_URL
is being used from env (i.e. no match
, block
or similar are active in your env)_Insert your passing local tests here_
./scripts/test-dssspell-forge.sh no-match="" match="" block=""
Using DssExecLib at: 0x8De6DDbCd5053d32292AAA0D2105A32d108484a6
[⠒] Compiling...No files changed, compilation skipped
[⠑] Compiling...
Running 2 tests for src/test/starknet.t.sol:StarknetTests
[PASS] testStarknet() (gas: 2307078)
[PASS] testStarknetSpell() (gas: 2346)
Test result: ok. 2 passed; 0 failed; 0 skipped; finished in 1123.99s
Running 23 tests for src/DssSpell.t.sol:DssSpellTest
[PASS] testAuth() (gas: 9223371487106563578)
[PASS] testAuthInSources() (gas: 9223371487099465932)
[PASS] testBytecodeMatches() (gas: 3173863)
[PASS] testCastCost() (gas: 2154971)
[PASS] testChainlogValues() (gas: 11105549)
[PASS] testChainlogVersionBump() (gas: 5817804)
[PASS] testContractSize() (gas: 8940)
[PASS] testDAIPayments() (gas: 2223169)
[PASS] testDeployCost() (gas: 3157330)
[PASS] testFailNotScheduled() (gas: 14398)
[PASS] testFailTooEarly() (gas: 13563)
[PASS] testFailTooLate() (gas: 13562)
[PASS] testFailWrongDay() (gas: 13563)
[PASS] testGeneral() (gas: 38436619)
[PASS] testMKRPayments() (gas: 2282241)
[PASS] testNextCastTime() (gas: 353681)
[PASS] testOnTime() (gas: 2150655)
[PASS] testPSMs() (gas: 3498500)
[PASS] testRWA009DocChange() (gas: 2217418)
[PASS] testSparkSpellIsExecuted() (gas: 2154191)
[PASS] testUseEta() (gas: 352302)
[PASS] testYankDAI() (gas: 2168088)
[PASS] testYankDAILegacy() (gas: 2168055)
Test result: ok. 23 passed; 0 failed; 0 skipped; finished in 2211.97s
Ran 2 test suites: 25 tests passed, 0 failed, 0 skipped (25 total tests)
Good to deploy
Good to handover
make diff-deployed-spell
)make check-deployed-spell
DssExecLib.address
file
DssExecLib.address
file (e.g. look under the 'Files Changed' PR tab, etc.)deployed_spell_created
matches deployment timestampdeployed_spell_block
matches deployment block numbermake deploy-info tx=<tx>
matches configdeployed_spell_created
timestampdeployed_spell_block
block numberLibraries Used
matches DssExecLib Latest Releasesrc
make diff-archive-spell
for current date or or date="YYYY-MM-DD" make diff-archive-spell
(date as per target Exec Doc date)DssExecLib.address
file is not being modified by the spell PRmake test
ETH_RPC_URL
is being used from env (i.e. no match
, block
or similar are active in your env)Running 2 tests for src/test/starknet.t.sol:StarknetTests
[PASS] testStarknet() (gas: 2307078)
[PASS] testStarknetSpell() (gas: 2346)
Test result: ok. 2 passed; 0 failed; finished in 81.21s
Running 23 tests for src/DssSpell.t.sol:DssSpellTest
[PASS] testAuth() (gas: 9223371487106563578)
[PASS] testAuthInSources() (gas: 9223371487099465932)
[PASS] testBytecodeMatches() (gas: 3173863)
[PASS] testCastCost() (gas: 2154971)
[PASS] testChainlogValues() (gas: 11105549)
[PASS] testChainlogVersionBump() (gas: 5817804)
[PASS] testContractSize() (gas: 8940)
[PASS] testDAIPayments() (gas: 2222939)
[PASS] testDeployCost() (gas: 3157330)
[PASS] testFailNotScheduled() (gas: 14398)
[PASS] testFailTooEarly() (gas: 13563)
[PASS] testFailTooLate() (gas: 13562)
[PASS] testFailWrongDay() (gas: 13563)
[PASS] testGeneral() (gas: 38438716)
[PASS] testMKRPayments() (gas: 2282241)
[PASS] testNextCastTime() (gas: 353681)
[PASS] testOnTime() (gas: 2150655)
[PASS] testPSMs() (gas: 3498500)
[PASS] testRWA009DocChange() (gas: 2217418)
[PASS] testSparkSpellIsExecuted() (gas: 2154191)
[PASS] testUseEta() (gas: 352302)
[PASS] testYankDAI() (gas: 2168088)
[PASS] testYankDAILegacy() (gas: 2168055)
Test result: ok. 23 passed; 0 failed; finished in 1019.07s
TLDR: good to handover
make diff-deployed-spell
)
⚠️ The command doesn't work for me, but manual check confirms the code matchesmake check-deployed-spell
DssExecLib.address
file
DssExecLib.address
file (e.g. look under the 'Files Changed' PR tab, etc.)deployed_spell_created
matches deployment timestamp
⚠️ The output says DssSpell deployment timestamp does not match
but manual check confirms that timestamp is correctdeployed_spell_block
matches deployment block number
⚠️ The output says DssSpell deployment block number does not match
but manual check confirms that block number is correctmake deploy-info tx=<tx>
matches configdeployed_spell_created
timestampdeployed_spell_block
block numberLibraries Used
matches DssExecLib Latest Release69b658f35d8618272cd139dfc18c5713caf6b96b
matches latest commit on the repo (from 2 years ago) not latest release. It's a known situation. Here is the diff between the latest release and the submodule hash: https://github.com/makerdao/dss-exec-lib/compare/v0.0.9...69b658f35d8618272cd139dfc18c5713caf6b96bsrc
make diff-archive-spell
for current date or or date="YYYY-MM-DD" make diff-archive-spell
(date as per target Exec Doc date)DssExecLib.address
file is not being modified by the spell PRmake test
ETH_RPC_URL
is being used from env (i.e. no match
, block
or similar are active in your env)_Insert your passing local tests here_
./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.03sCompiler run successful!
[⠆] Solc 0.8.16 finished in 2.03s
Running 2 tests for src/test/starknet.t.sol:StarknetTests
[PASS] testStarknet() (gas: 2307078)
[PASS] testStarknetSpell() (gas: 2346)
Test result: ok. 2 passed; 0 failed; 0 skipped; finished in 163.61s
Running 23 tests for src/DssSpell.t.sol:DssSpellTest
[PASS] testAuth() (gas: 9223371487106563578)
[PASS] testAuthInSources() (gas: 9223371487099465932)
[PASS] testBytecodeMatches() (gas: 3173863)
[PASS] testCastCost() (gas: 2154971)
[PASS] testChainlogValues() (gas: 11105549)
[PASS] testChainlogVersionBump() (gas: 5817804)
[PASS] testContractSize() (gas: 8940)
[PASS] testDAIPayments() (gas: 2223054)
[PASS] testDeployCost() (gas: 3157330)
[PASS] testFailNotScheduled() (gas: 14398)
[PASS] testFailTooEarly() (gas: 13563)
[PASS] testFailTooLate() (gas: 13562)
[PASS] testFailWrongDay() (gas: 13563)
[PASS] testGeneral() (gas: 38438716)
[PASS] testMKRPayments() (gas: 2282241)
[PASS] testNextCastTime() (gas: 353681)
[PASS] testOnTime() (gas: 2150655)
[PASS] testPSMs() (gas: 3498500)
[PASS] testRWA009DocChange() (gas: 2217418)
[PASS] testSparkSpellIsExecuted() (gas: 2154191)
[PASS] testUseEta() (gas: 352302)
[PASS] testYankDAI() (gas: 2168088)
[PASS] testYankDAILegacy() (gas: 2168055)
Test result: ok. 23 passed; 0 failed; 0 skipped; finished in 1755.11s
Ran 2 test suites: 25 tests passed, 0 failed, 0 skipped (25 total tests)
new-spells
is correct
new-spells
(via a thumbs up message reaction, )FYI: execution of the spell on a tenderly fork (via cast-on-tenderly
script): https://dashboard.tenderly.co/shared/fork/simulation/7f8c7f06-fcd2-4bfc-a5fc-c51228feccbf
Description
This PR implements upcoming 2023-11-29 mainnet spell based on the executive sheet provided by governance facilitators
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