Closed SidestreamSweatyPumpkin closed 1 year ago
Keeping the PR as draft until goerli one gets approved.
[X] Office Hours
[X] Exec Hash
description
date in DssSpell.sol
matches exec copy date[X] 30 Days Expiry
[X] lib
dss-exec-lib
dss-exec-lib
is synced as welldss-test
dss-interfaces
forge-std
[X] dss-interfaces
import "dss-interfaces/dss/VatAbstract.sol";
)[X] Static Interfaces
dss-interfaces
cast interfaces <contract_address>
to ensure correctnessLike
suffix (e.g. VatLike
)[X] Rates match
make rates pct=<pct>
(e.g. pct=0.75, for 0.75%)[X] Math matches
WAD = 10**18
RAD = 10**45
MILLION = 10**6
[X] Offboarding (Lerp mat)
[x] RWA Updates (for RWA010, RWA011, RWA012, RWA012, RWA013)
doc
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 Doc (or Forum Post)tau
parameter used is the old tau
valueline
) + Liquidation Oracle Price Bump (val
)bump
RwaLiquidationOracle
with new computed increased price (val
)val
should enable DAI to be drawn over the loan period while taking into
account the configured ink
amount, interest rate and liquidation ratiospotter
to pull in the new price[x] Deployed Contracts
GNU AGPLv3
licensevat
, dai
, dog
, ...)denyProxy
).code --diff etherscan.sol github.sol
)addresses_deployers.sol
(to keep up to date)[X] Onboarding
[X] CUs MKR Transfers
ether
as a unit instead. See archive)
Edited: Fixed by crafter[X] ChainLog
[X] addresses_goerli.sol
matches spell code
[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
and constant
is used instead for static addresses
[X] Spell actions match GovAlpha Spell Content Sheet
[X] Tests PASS
[X] Local Tests and CI PASS
RwaToken
(Token Used as Collateral In Adapter)
RwaTokenFactory
createRwaToken
parameters are correct
name
is in RWA-XXX
formatsymbol
is in RWAXXX
formatrecipient
matches MCD Pause ProxyAuthGemJoin
(Join Adapter)
newAuthGemJoin
parameters are correct
owner
matches MCD Pause Proxyilk
is the bytes32
representation of "RWAXXX-A"cast --to-ascii <bytes32>
matches ASCII Ilkcast --to-bytes32 $(cast --from-ascii "RWAXXX-A")
matches bytes32
gem
matches RwaToken
deployed contractRwaUrn2
0.6.12
solc version is usedvat
jug
gemJoin
daiJoin
outputConduit
matches RwaOutputConduit<2,3>
wards
MCD_PAUSE_PROXY
is reliedRwaJar
0.6.12
solc version is usedchainlog
wards
RwaInputConduit<2,3>
s (both)
0.6.12
solc version is useddai
to
(RwaUrn
, RwaJar
)gov
(v1
)psm
, gem
(v3
)wards
MCD_PAUSE_PROXY
is reliedRwaOutputConduit
0.6.12
solc version is useddai
gov
(v1
)psm
, gem
(v3
)wards
MCD_PAUSE_PROXY
is reliedduty
(stability fee)line
(debt ceiling)mat
(liquidation ratio)val
(oracle price)tau
(pre-agreed remediation period)doc
(IPFS Hash)ilk
matches the format RWAXXX-A
require
condition)oracle.init
vat.init.ilk
vat
rely join
pip
in the spotter
mat
in the spotter
spotter
to pull in the pricejoin
rely urn
hope
(operator, pause proxy)mate
(operator, pause proxy as fallback if required)kiss
(whitelist for urn
destination address who
)quitTo
RWAXXX
PIP_RWAXXX
precomputed via cast compute-address $MIP21_LIQUIDATION_ORACLE
MCD_JOIN_RWA015_A
RWAXXX_A_URN
RWAXXX_A_JAR
RWAXXX_A_INPUT_CONDUIT_URN
RWAXXX_A_INPUT_CONDUIT_JAR
RWAXXX_A_OUTPUT_CONDUIT
x.x.1
IlkRegistry
put
is usedclass
is 3name
matches forum post (e.g. "RWA007-A: Monetalis Clydesdale")DssExecLib
is used for the Onboarding (e.g. DssExecLib.vat
)testNewChainlogValues
testNewIlkRegistryValues
testRWAXXX_INTEGRATION_CONDUITS_SETUP
testRWAXXX_INTEGRATION_BUMP
testRWAXXX_INTEGRATION_TELL
testRWAXXX_INTEGRATION_TELL_CURE_GOOD
testFailRWAXXX_INTEGRATION_CURE_BEFORE_TELL
testRWAXXX_INTEGRATION_TELL_CULL
testRWAXXX_PAUSE_PROXY_OWNS_RWAXXX_TOKEN_BEFORE_SPELL
testRWAXXX_SPELL_LOCK_OPERATOR_DRAW_WIPE_FREE
-> changed to testRWAXXX_SPELL_LOCK_OPERATOR_WIPE_FREE
testFailRWAXXX_DRAW_ABOVE_LINE
testRWAXXX_OPERATOR_LOCK_DRAW_CAGE
-> change to testRWAXXX_SPELL_CAGE
testFailRWAXXX_OUTPUT_CONDUIT_PUSH_ABOVE_BALANCE
testRWAXXX_SPELL_LOCK
-> changed to testRWAXXX_SPELL_EXECUTES_LOCK_DRAW_PUSH
addresses_<mainnet, goerli>.sol
config.sol
delegatecall
checklist point)Spark spell is confirmed as 0x41D7c79aE5Ecba7428283F66998DedFD84451e0e on mainnet Spark proxy: 0x3300f198988e4C9C63F75dF86De36421f06af8c4 ACL Manager: 0xdA135Cd78A086025BcdC87B038a1C462032b510C
Following concerns I have raised regarding the provenance of SubDAO related addresses, Spark Team has confirmed the addresses in #new-spells
.
Many thanks to Spark Team for confirming these addresses in a timely manner. Addresses may be added to exec doc for additional provenance given how they were added to the mainnet spell but this will be done at the discretion of Governance Facilitators.
New copy commit as requested by @The-Arbiter: https://github.com/makerdao/community/blob/c55480785534ee1f75bda65afb9761ffaebe072f/governance/votes/Executive%20vote%20-%20June%2014%2C%202023.md
The current spell team has unanimously voted to remove the line DssExecLib.setChangelogAddress("SUBPROXY_SPARK", SPARK_PROXY);
and relevant tests from the 2023-06-14 spell (this spell).
Reasoning:
This content was not present in the executive sheet.
Nor is it present in the forum posts used as provenance for deriving sheet actions.
This content was also not present in the current executive document.
The executive document contains precedent of ChangeLog / ChainLog changes being listed actions (represented as cells in the exec sheet), see the 2022-11-16 exec doc for reference.
Core spell team is capable of making technical decisions and requesting contextual inclusion in the executive document however this spell team has elected to remove this content as it was not an instruction and the spell team does not want to be construed as having had added content to the spell which would normally be an explicit instruction (action in the doc / cell in the sheet) where no such instruction was requested by Governance Facilitators.
The voting process is no concern of the spell team, however it should be noted that precedent for chainlog instructions that existed as standalone actions in the spell involved a forum post and presumably a vote, so the current spell team cannot add this content without sufficient provenance of Maker Core governance approving these actions, as they affect the Maker Core chainlog.
It should be noted that this represents a bug which occurred for the Goerli spell, as this action was not present in the executive sheet (the source of truth for the Goerli spell) at the time. Primary motivators for this bug include the relevant code snippet being PR'ed by a third party source (SubDAO), the crafter approving the PR to the main spell without noticing the extraneous content inclusion and two reviewer passes missing that this code was not an instruction provided by Governance Facilitators in the executive sheet. A retrospective report may be released on this event at a later date however given the current state of flux in the spellcrafting process, it is my opinion that this mistake is a result of inconsistency of processes and recent significant changes in team structures for both the Governance Facilitator Team and Maker Core Spell Team.
The voting process is no concern of the spell team, however it should be noted that precedent for chainlog instructions that existed as standalone actions in the spell involved a forum post and presumably a vote
On Governance process, in case interested parties read this - there is no requirement for a vote to take place on these items. Core Unit Facilitators (and now Scope Facilitators) are empowered by Governance to insert logic directly into Executive Votes where it falls within their mandate. Consequently, the vast majority of such Chainlog updates simply required a notification from the relevant Facilitator on the forum.
Running 2 tests for src/test/starknet.t.sol:StarknetTests
[PASS] testStarknet() (gas: 7520266)
[PASS] testStarknetSpell() (gas: 2346)
Test result: ok. 2 passed; 0 failed; finished in 109.04s
Running 40 tests for src/DssSpell.t.sol:DssSpellTest
[PASS] testAuth() (gas: 9223371487104564591)
[PASS] testAuthInSources() (gas: 9223371487099024870)
[PASS] testBytecodeMatches() (gas: 4795049)
[PASS] testCastCost() (gas: 7376206)
[PASS] testChainlogValues() (gas: 15974053)
[PASS] testChainlogVersionBump() (gas: 9880876)
[PASS] testContractSize() (gas: 9050)
[PASS] testDeployCost() (gas: 4774011)
[PASS] testFailNotScheduled() (gas: 14361)
[PASS] testFailRWA015_A_DRAW_ABOVE_LINE() (gas: 7810501)
[PASS] testFailRWA015_A_INTEGRATION_CURE_BEFORE_TELL() (gas: 7793208)
[PASS] testFailRWA015_A_OUTPUT_CONDUIT_PUSH_ABOVE_BALANCE() (gas: 7810499)
[PASS] testFailTooEarly() (gas: 417571)
[PASS] testFailTooLate() (gas: 417571)
[PASS] testFailWrongDay() (gas: 417683)
[PASS] testGeneral() (gas: 45132600)
[PASS] testMKRPayments() (gas: 7391161)
[PASS] testNewChainlogValues() (gas: 7495301)
[PASS] testNewIlkRegistryValues() (gas: 7402007)
[PASS] testNextCastTime() (gas: 446365)
[PASS] testOnTime() (gas: 7363865)
[PASS] testPSMs() (gas: 8670008)
[PASS] testRWA010DocChange() (gas: 7444468)
[PASS] testRWA011DocChange() (gas: 7444422)
[PASS] testRWA012DocChange() (gas: 7444400)
[PASS] testRWA013DocChange() (gas: 7444466)
[PASS] testRWA015A_SPELL_EXECUTES_LOCK_DRAW_PUSH() (gas: 7382802)
[PASS] testRWA015_CONTRACT_DEPLOYMENT_SETUP() (gas: 131657)
[PASS] testRWA015_INTEGRATION_BUMP() (gas: 7390795)
[PASS] testRWA015_INTEGRATION_CONDUITS_SETUP() (gas: 7421408)
[PASS] testRWA015_INTEGRATION_TELL() (gas: 7389622)
[PASS] testRWA015_INTEGRATION_TELL_CULL() (gas: 7357731)
[PASS] testRWA015_INTEGRATION_TELL_CURE_GOOD() (gas: 7388183)
[PASS] testRWA015_PAUSE_PROXY_OWNS_RWA015_TOKEN_BEFORE_SPELL() (gas: 16464)
[PASS] testRWA015_SPELL_CAGE() (gas: 7892921)
[PASS] testRWA015_SPELL_LOCK_IGNORE_ART() (gas: 7380543)
[PASS] testRWA015_SPELL_OPERATOR_WIPE_FREE() (gas: 7548145)
[PASS] testSparkSpell() (gas: 7388274)
[PASS] testUseEta() (gas: 352492)
[PASS] test_RWA012_Update() (gas: 7571469)
Test result: ok. 40 passed; 0 failed; finished in 1012.08s
good for deploy
PASS] testStarknet() (gas: 7520898)
[PASS] testStarknetSpell() (gas: 2346)
Test result: ok. 2 passed; 0 failed; finished in 142.06s
Running 40 tests for src/DssSpell.t.sol:DssSpellTest
[PASS] testAuth() (gas: 9223371487104564591)
[PASS] testAuthInSources() (gas: 9223371487099024870)
[PASS] testBytecodeMatches() (gas: 4795049)
[PASS] testCastCost() (gas: 7376838)
[PASS] testChainlogValues() (gas: 15974685)
[PASS] testChainlogVersionBump() (gas: 9881508)
[PASS] testContractSize() (gas: 9050)
[PASS] testDeployCost() (gas: 4774011)
[PASS] testFailNotScheduled() (gas: 14361)
[PASS] testFailRWA015_A_DRAW_ABOVE_LINE() (gas: 7811133)
[PASS] testFailRWA015_A_INTEGRATION_CURE_BEFORE_TELL() (gas: 7793840)
[PASS] testFailRWA015_A_OUTPUT_CONDUIT_PUSH_ABOVE_BALANCE() (gas: 7811131)
[PASS] testFailTooEarly() (gas: 417571)
[PASS] testFailTooLate() (gas: 417571)
[PASS] testFailWrongDay() (gas: 417683)
[PASS] testGeneral() (gas: 45133232)
[PASS] testMKRPayments() (gas: 7391793)
[PASS] testNewChainlogValues() (gas: 7495933)
[PASS] testNewIlkRegistryValues() (gas: 7402639)
[PASS] testNextCastTime() (gas: 446365)
[PASS] testOnTime() (gas: 7364497)
[PASS] testPSMs() (gas: 8670640)
[PASS] testRWA010DocChange() (gas: 7445100)
[PASS] testRWA011DocChange() (gas: 7445054)
[PASS] testRWA012DocChange() (gas: 7445032)
[PASS] testRWA013DocChange() (gas: 7445098)
[PASS] testRWA015A_SPELL_EXECUTES_LOCK_DRAW_PUSH() (gas: 7383434)
[PASS] testRWA015_CONTRACT_DEPLOYMENT_SETUP() (gas: 131657)
[PASS] testRWA015_INTEGRATION_BUMP() (gas: 7391427)
[PASS] testRWA015_INTEGRATION_CONDUITS_SETUP() (gas: 7422040)
[PASS] testRWA015_INTEGRATION_TELL() (gas: 7390254)
[PASS] testRWA015_INTEGRATION_TELL_CULL() (gas: 7358363)
[PASS] testRWA015_INTEGRATION_TELL_CURE_GOOD() (gas: 7388815)
[PASS] testRWA015_PAUSE_PROXY_OWNS_RWA015_TOKEN_BEFORE_SPELL() (gas: 16464)
[PASS] testRWA015_SPELL_CAGE() (gas: 7893553)
[PASS] testRWA015_SPELL_LOCK_IGNORE_ART() (gas: 7381175)
[PASS] testRWA015_SPELL_OPERATOR_WIPE_FREE() (gas: 7548777)
[PASS] testSparkSpell() (gas: 7388906)
[PASS] testUseEta() (gas: 352492)
[PASS] test_RWA012_Update() (gas: 7572216)
Test result: ok. 40 passed; 0 failed; finished in 1341.48s
Good for handover
make diff-deployed-spell
)make check-deployed-spell
DssExecLib.address
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 date)Running 2 tests for src/test/starknet.t.sol:StarknetTests
[PASS] testStarknet() (gas: 7521128)
[PASS] testStarknetSpell() (gas: 2346)
Test result: ok. 2 passed; 0 failed; finished in 140.95s
Running 40 tests for src/DssSpell.t.sol:DssSpellTest
[PASS] testAuth() (gas: 9223371487104564591)
[PASS] testAuthInSources() (gas: 9223371487099024870)
[PASS] testBytecodeMatches() (gas: 4795049)
[PASS] testCastCost() (gas: 7377068)
[PASS] testChainlogValues() (gas: 15974915)
[PASS] testChainlogVersionBump() (gas: 9881738)
[PASS] testContractSize() (gas: 9050)
[PASS] testDeployCost() (gas: 4774011)
[PASS] testFailNotScheduled() (gas: 14361)
[PASS] testFailRWA015_A_DRAW_ABOVE_LINE() (gas: 7811363)
[PASS] testFailRWA015_A_INTEGRATION_CURE_BEFORE_TELL() (gas: 7794070)
[PASS] testFailRWA015_A_OUTPUT_CONDUIT_PUSH_ABOVE_BALANCE() (gas: 7811361)
[PASS] testFailTooEarly() (gas: 417571)
[PASS] testFailTooLate() (gas: 417571)
[PASS] testFailWrongDay() (gas: 417683)
[PASS] testGeneral() (gas: 45135559)
[PASS] testMKRPayments() (gas: 7392023)
[PASS] testNewChainlogValues() (gas: 7496163)
[PASS] testNewIlkRegistryValues() (gas: 7402869)
[PASS] testNextCastTime() (gas: 446365)
[PASS] testOnTime() (gas: 7364727)
[PASS] testPSMs() (gas: 8670870)
[PASS] testRWA010DocChange() (gas: 7445330)
[PASS] testRWA011DocChange() (gas: 7445284)
[PASS] testRWA012DocChange() (gas: 7445262)
[PASS] testRWA013DocChange() (gas: 7445328)
[PASS] testRWA015A_SPELL_EXECUTES_LOCK_DRAW_PUSH() (gas: 7383664)
[PASS] testRWA015_CONTRACT_DEPLOYMENT_SETUP() (gas: 131657)
[PASS] testRWA015_INTEGRATION_BUMP() (gas: 7391657)
[PASS] testRWA015_INTEGRATION_CONDUITS_SETUP() (gas: 7422270)
[PASS] testRWA015_INTEGRATION_TELL() (gas: 7390484)
[PASS] testRWA015_INTEGRATION_TELL_CULL() (gas: 7358593)
[PASS] testRWA015_INTEGRATION_TELL_CURE_GOOD() (gas: 7389045)
[PASS] testRWA015_PAUSE_PROXY_OWNS_RWA015_TOKEN_BEFORE_SPELL() (gas: 16464)
[PASS] testRWA015_SPELL_CAGE() (gas: 7893783)
[PASS] testRWA015_SPELL_LOCK_IGNORE_ART() (gas: 7381405)
[PASS] testRWA015_SPELL_OPERATOR_WIPE_FREE() (gas: 7549007)
[PASS] testSparkSpell() (gas: 7389136)
[PASS] testUseEta() (gas: 352492)
[PASS] test_RWA012_Update() (gas: 7572561)
Test result: ok. 40 passed; 0 failed; finished in 1348.73s
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