Closed 0xdecr1pto closed 7 months ago
Good to deploy
Spell Actions (Per Exec Doc):
block.timestamp + 30 days
)Executive vote - Month DD, YYYY.md
make exec-hash $URL
cast keccak -- "$(curl '$URL' -o - 2>/dev/null)"
0x5831e082f6599a8bdd8c772f43836bce1170f121e2d47218069a03feb3638ccc
TARGET_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
Submodule path 'lib/dss-exec-lib': checked out '69b658f35d8618272cd139dfc18c5713caf6b96b'
Submodule path 'lib/dss-exec-lib/lib/dss-interfaces': checked out '9bfd7afadd1f8c217ef05850b25556917
86286cb'
Submodule path 'lib/dss-exec-lib/lib/forge-std': checked out '0aa99eb8456693c015350c5e6c4f442ebe912f
77'
Submodule path 'lib/dss-exec-lib/lib/forge-std/lib/ds-test': checked out 'cd98eff28324bfac652e63a239
a60632a761790b'
Submodule path 'lib/dss-test': checked out '4ad127cf53eeaddfb7b8ad56dd4b13e57d6a0067'
Submodule path 'lib/dss-test/lib/dss-interfaces': checked out '9bfd7afadd1f8c217ef05850b255569178628
6cb'
Submodule path 'lib/dss-test/lib/forge-std': checked out 'aea0b2685bebc883c09f5554d7fb481e85d0564d'
Submodule path 'lib/dss-test/lib/forge-std/lib/ds-test': checked out 'cd98eff28324bfac652e63a239a606
32a761790b'
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
(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
MONTH_DD_YYYY
(e.g. MAY_01_2023
for 2023-05-01)23:59:59
for the final day of something, 00:00:00
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
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)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)testSparkSpellIsExecuted
config.sol
testPayments
testMKRPayments
testMKRPayments
testMKRPayments
testMKRPayments
testMKRPayments
testMKRPayments
testMKRPayments
testMKRPayments
testMKRPayments
testMKRPayments
testMKRPayments
testMKRPayments
testMKRPayments
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)``./scripts/test-dssspell-forge.sh no-match="" match="" block=""
Using DssExecLib at: 0x8De6DDbCd5053d32292AAA0D2105A32d108484a6
[⠃] Compiling...
[⠘] Compiling 7 files with 0.8.16
[⠒] Solc 0.8.16 finished in 1.89s
Compiler run successful!
Running 2 tests for src/test/starknet.t.sol:StarknetTests
[PASS] testStarknet() (gas: 2741262)
[PASS] testStarknetSpell() (gas: 2346)
Test result: ok. 2 passed; 0 failed; 0 skipped; finished in 84.14s
Running 20 tests for src/DssSpell.t.sol:DssSpellTest
[PASS] testAuth() (gas: 9223371487106296465)
[PASS] testAuthInSources() (gas: 9223371487099537782)
[PASS] testBytecodeMatches() (gas: 2354824)
[PASS] testCastCost() (gas: 2589111)
[PASS] testChainlogValues() (gas: 11539777)
[PASS] testChainlogVersionBump() (gas: 6251944)
[PASS] testContractSize() (gas: 9028)
[PASS] testDeployCost() (gas: 2340536)
[PASS] testFailNotScheduled() (gas: 14375)
[PASS] testFailTooEarly() (gas: 13519)
[PASS] testFailTooLate() (gas: 13584)
[PASS] testFailWrongDay() (gas: 13629)
[PASS] testGeneral() (gas: 38087524)
[PASS] testMKRPayments() (gas: 2700698)
[PASS] testNextCastTime() (gas: 353614)
[PASS] testOnTime() (gas: 2584838)
[PASS] testPSMs() (gas: 3933390)
[PASS] testPayments() (gas: 2657396)
[PASS] testSparkSpellIsExecuted() (gas: 2588374)
[PASS] testUseEta() (gas: 352346)
Test result: ok. 20 passed; 0 failed; 0 skipped; finished in 945.01s
Ran 2 test suites: 22 tests passed, 0 failed, 0 skipped (22 total tests)
Spell Actions (Per Exec Doc):
block.timestamp + 30 days
)Executive vote - Month DD, YYYY.md
make exec-hash $URL
⚠️ Script is not working on Maccast keccak -- "$(curl '$URL' -o - 2>/dev/null)"
0x5831e082f6599a8bdd8c772f43836bce1170f121e2d47218069a03feb3638cccTARGET_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
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 'lib/dss-interfaces' (https://github.com/makerdao/dss-interfaces) registered for path 'lib/dss-test/lib/dss-interfaces'
Submodule 'lib/forge-std' (https://github.com/foundry-rs/forge-std) registered for path 'lib/dss-test/lib/forge-std'
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
(Non-critical)forge-std
dss-test
(Non-critical)
⚠️ Doesn't match like in previous spells.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
MONTH_DD_YYYY
(e.g. MAY_01_2023
for 2023-05-01)23:59:59
for the final day of something, 00:00:00
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
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)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)[x] Tests
[x] Ensure each spell action has sufficient test coverage
[x] Spark Proxy-Spell
✅ testSparkSpellIsExecuted()
[x] Adjust Spark Protocol D3M Maximum Debt Ceiling
✅ testGeneral()
[x] Launch Project Funds Transfer
✅ testPayments()
✅ testMKRPayments()
[ ] Pass HVB Resolutions
[x] Whistleblower Bounty
✅ testMKRPayments()
[x] October Delegate Compensation
✅ testMKRPayments()
[x] Checksums
✅ testMKRPayments()
✅ testPayments()
[x] Ensure every test function is declared as public if enabled or private if disabled
[x] Ensure that the DssExecLib.address
file is not being modified by the spell PR
[x] Check all CI tests are passing as at the latest commit https://github.com/makerdao/spells-mainnet/commit/eac7218b2ee0361eab4593e493089d4638920cc8
[x] Check all tests are passing locally using make test
[x] Ensure that only ETH_RPC_URL
is being used from env (i.e. no match
, block
or similar are active in your env)
./scripts/test-dssspell-forge.sh no-match="" match="" block=""
Using DssExecLib at: 0x8De6DDbCd5053d32292AAA0D2105A32d108484a6
[⠆] Compiling...
[⠔] Compiling 104 files with 0.8.16
[⠃] Solc 0.8.16 finished in 8.35s
Compiler run successful!
Running 2 tests for src/test/starknet.t.sol:StarknetTests
[PASS] testStarknet() (gas: 2741262)
[PASS] testStarknetSpell() (gas: 2346)
Test result: ok. 2 passed; 0 failed; 0 skipped; finished in 898.56s
Running 20 tests for src/DssSpell.t.sol:DssSpellTest
[PASS] testAuth() (gas: 9223371487106296465)
[PASS] testAuthInSources() (gas: 9223371487099537782)
[PASS] testBytecodeMatches() (gas: 2354824)
[PASS] testCastCost() (gas: 2589111)
[PASS] testChainlogValues() (gas: 11539777)
[PASS] testChainlogVersionBump() (gas: 6251944)
[PASS] testContractSize() (gas: 9028)
[PASS] testDeployCost() (gas: 2340536)
[PASS] testFailNotScheduled() (gas: 14375)
[PASS] testFailTooEarly() (gas: 13519)
[PASS] testFailTooLate() (gas: 13584)
[PASS] testFailWrongDay() (gas: 13629)
[PASS] testGeneral() (gas: 38087524)
[PASS] testMKRPayments() (gas: 2700698)
[PASS] testNextCastTime() (gas: 353614)
[PASS] testOnTime() (gas: 2584838)
[PASS] testPSMs() (gas: 3933390)
[PASS] testPayments() (gas: 2657626)
[PASS] testSparkSpellIsExecuted() (gas: 2588374)
[PASS] testUseEta() (gas: 352346)
Test result: ok. 20 passed; 0 failed; 0 skipped; finished in 2538.88s
Ran 2 test suites: 22 tests passed, 0 failed, 0 skipped (22 total tests)
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)./scripts/test-dssspell-forge.sh no-match="" match="" block=""
Using DssExecLib at: 0x8De6DDbCd5053d32292AAA0D2105A32d108484a6
[⠔] Compiling...
[⠆] Compiling 4 files with 0.8.16
[⠊] Solc 0.8.16 finished in 1.77s
Compiler run successful!
Running 2 tests for src/test/starknet.t.sol:StarknetTests
[PASS] testStarknet() (gas: 2741262)
[PASS] testStarknetSpell() (gas: 2346)
Test result: ok. 2 passed; 0 failed; 0 skipped; finished in 90.68s
Running 20 tests for src/DssSpell.t.sol:DssSpellTest
[PASS] testAuth() (gas: 9223371487106296465)
[PASS] testAuthInSources() (gas: 9223371487099537782)
[PASS] testBytecodeMatches() (gas: 2354824)
[PASS] testCastCost() (gas: 2589111)
[PASS] testChainlogValues() (gas: 11539777)
[PASS] testChainlogVersionBump() (gas: 6251944)
[PASS] testContractSize() (gas: 9028)
[PASS] testDeployCost() (gas: 2340536)
[PASS] testFailNotScheduled() (gas: 14375)
[PASS] testFailTooEarly() (gas: 13519)
[PASS] testFailTooLate() (gas: 13584)
[PASS] testFailWrongDay() (gas: 13629)
[PASS] testGeneral() (gas: 38089621)
[PASS] testMKRPayments() (gas: 2700698)
[PASS] testNextCastTime() (gas: 353614)
[PASS] testOnTime() (gas: 2584838)
[PASS] testPSMs() (gas: 3933390)
[PASS] testPayments() (gas: 2657396)
[PASS] testSparkSpellIsExecuted() (gas: 2588374)
[PASS] testUseEta() (gas: 352346)
Test result: ok. 20 passed; 0 failed; 0 skipped; finished in 976.66s
Ran 2 test suites: 22 tests passed, 0 failed, 0 skipped (22 total tests)`
make diff-deployed-spell
)DssExecLib
code is replacedmake 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
deployed_spell_block
matches deployment block number
make deploy-info tx=<tx>
matches config
deployed_spell_created
timestamptimestamp: 1700149271
deployed_spell_block
block numberblock: 18585407
Libraries 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)./scripts/test-dssspell-forge.sh no-match="" match="" block=""
Using DssExecLib at: 0x8De6DDbCd5053d32292AAA0D2105A32d108484a6
[⠘] Compiling...
[⠒] Compiling 4 files with 0.8.16
[⠢] Solc 0.8.16 finished in 5.29s
Compiler run successful!
Running 2 tests for src/test/starknet.t.sol:StarknetTests
[PASS] testStarknet() (gas: 2741262)
[PASS] testStarknetSpell() (gas: 2346)
Test result: ok. 2 passed; 0 failed; 0 skipped; finished in 78.14s
Running 20 tests for src/DssSpell.t.sol:DssSpellTest
[PASS] testAuth() (gas: 9223371487106296465)
[PASS] testAuthInSources() (gas: 9223371487099537782)
[PASS] testBytecodeMatches() (gas: 2354824)
[PASS] testCastCost() (gas: 2589111)
[PASS] testChainlogValues() (gas: 11539777)
[PASS] testChainlogVersionBump() (gas: 6251944)
[PASS] testContractSize() (gas: 9028)
[PASS] testDeployCost() (gas: 2340536)
[PASS] testFailNotScheduled() (gas: 14375)
[PASS] testFailTooEarly() (gas: 13519)
[PASS] testFailTooLate() (gas: 13584)
[PASS] testFailWrongDay() (gas: 13629)
[PASS] testGeneral() (gas: 38089621)
[PASS] testMKRPayments() (gas: 2700698)
[PASS] testNextCastTime() (gas: 353614)
[PASS] testOnTime() (gas: 2584838)
[PASS] testPSMs() (gas: 3933390)
[PASS] testPayments() (gas: 2656936)
[PASS] testSparkSpellIsExecuted() (gas: 2588374)
[PASS] testUseEta() (gas: 352346)
Test result: ok. 20 passed; 0 failed; 0 skipped; finished in 1297.57s
Ran 2 test suites: 22 tests passed, 0 failed, 0 skipped (22 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