-
Notifications
You must be signed in to change notification settings - Fork 54
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
2023-08-30 Spell #363
2023-08-30 Spell #363
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Development Stage
- Office Hours
- ON
- OFF
- Matches Exec Doc
- 30 days spell expiry in constructor (
block.timestamp + 30 days
) - Exec Doc Hash
- Search the 'Community' GitHub repo for the corresponding Exec Doc
- Click 'History' for the corresponding Exec Doc
- Ensure Exec Doc file name follows the format
Executive vote - Month DD, YYYY.md
- Click 'View at this point in the history' (the file icon with
< >
) for the latest commit - Click 'Raw' and copy the resulting URL
https://raw.githubusercontent.com/makerdao/community/61cd85d98bf6a18f5ab51c140dc08f43b4c720b1/governance/votes/Executive%20vote%20-%20August%2030%2C%202023.md
different from the spell one, but the spell one contains the later hash with modifications not from the file - so it's fine. - Generate Exec Doc Hash using this URL
- Automatically: using
make exec-hash $URL
- Manually: using
cast keccak -- "$(curl '$URL' -o - 2>/dev/nulli)"
0xd4f061429b564e422f18f0289a0f956f0229edbeead40b51ad69d52b27f7e591
- Automatically: using
- Spell Description
- Description follows the format
TARGET_DATE MakerDAO Executive Spell | Hash: EXEC_DOC_HASH)
- Target date in description matches the Exec Doc target date
- Exec Doc Hash in description matches your locally generated Exec Doc Hash
- Accompanying comment above spell
description
- Comment follows the format
// Hash: cast keccak -- "$(wget 'EXEC_DOC_URL' -q -O - 2>/dev/null)"
- Exec Doc URL in comment matches your Raw Exec Doc URL
does not match but is ok due to the reason listed above. - Exec Doc URL in comment refers to the 'Community' GitHub repo
- Comment follows the format
- Description follows the format
- Local Environment Actions
- Update Foundry by running
foundryup
- Reinstall libraries
- Remove libraries by deleting the
lib
folder - Install libraries using
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 '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'
- Remove libraries by deleting the
- Dependency checks
-
dss-exec-lib
- if submodule upgrades are present make sure
dss-exec-lib
is synced as well
not present - git submodule hash (run
git 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)
newer
- if submodule upgrades are present make sure
-
dss-test
-
dss-interfaces
- git submodule hash matches version used by
dss-test
(Non-critical)
9bfd7afadd1f8c217ef05850b2555691786286cb
- git submodule hash matches version used by
-
forge-std
- git submodule hash matches version used by
dss-test
(Non-critical)
4ad127cf53eeaddfb7b8ad56dd4b13e57d6a0067 lib/dss-test (4ad127c)
does not match - not critical
- git submodule hash matches version used by
-
-
- Update Foundry by running
- Interface Checks
-
dss-interfaces
- used in the current spell
- cleanup previous ones
- ensure only single import layout is used (e.g.
import "dss-interfaces/dss/VatAbstract.sol";
)
- Static Interfaces
- ensure they match
dss-interfaces
(Where there is a mismatch, usecast interface
as the source of truth) - check on-chain interface of deployed contract via
cast interface <contract_address>
to ensure correctness - interface naming style should match with
Like
suffix (e.g.VatLike
), with some exceptions - ensure they only list used functions in spell code
- ensure they match
-
- Rate constants used are correct
no rates in the spell - Constants Match
- Precision unit constants used match their defined values
-
WAD = 10 ** 18
not used -
RAY = 10 ** 27
not used -
RAD = 10 ** 45
not used - Variable visibility declared as
internal
- State mutability declared as
constant
- Ensure they match with ds-math and the Numerical Ranges
-
- Math unit constants used match their defined values
-
HUNDRED = 10 ** 2
not used -
THOUSAND = 10 ** 3
not used -
MILLION = 10 ** 6
not used -
BILLION = 10 ** 9
not used - Variable visibility declared as
internal
- State mutability declared as
constant
- Ensure they match with config
-
- Timestamp constants used are correct
not used- Ensure the timestamp converts to the correct date
- Variable naming matches
MONTH_DD_YYYY
(e.g.MAY_01_2023
for 2023-05-01) - Time of day makes logical sense (i.e.
11:59:59
for the final day of something,00:00:00
for the first day of something) in the context of timestamp usage - Variable visibility declared as
internal
- State mutability declared as
constant
- Precision unit constants used match their defined values
- Deployed Contracts (not yet on chainlog or new to chainlog)
- Verified on etherscan
- Optimizations match Repo
-
GNU AGPLv3
license - Constructor args ok (e.g.
vat
,dai
,dog
, ...)- Match ChainLog
- Wards ok (pause proxy relied, deployer denied)
-
MCD_ESM
is already relied / being relied in this spell (as approved by GovAlpha) in order to allow de-authing the pause proxy during Emergency Shutdown, viadenyProxy
.
-
- Matches corresponding github source code (i.e. diffcheck via vscode
code --diff etherscan.sol github.sol
) - Ensure deployer address is included into
addresses_deployers.sol
(to keep up to date)
- RWA
-
RwaInputConduit<2,3>
- contract is verified on etherscan
- ensure
0.6.12
solc version is used - ensure optimization are off
- ensure license is specified (SPDX in code or otherwise)
- ensure source matches GitHub code and it's consistent with previous RWA onboarding
- ensure
- constructor args are correct and match chainlog
-
dai
-
to
(RwaUrn
,RwaJar
) -
gov
(v1
) -
psm
,gem
(v3
)
-
- check
wards
-
MCD_PAUSE_PROXY
is relied -
MCD_ESM
is being relied in the spell (as approved by GovAlpha) - deployer is denied
- no other address has been relied
-
- contract is verified on etherscan
- Filable (
RwaOutputConduit
andRwaInputConduit
)
* [x]quitTo
(file
the appropriate address for conduits per technical assessment)
same as the existing one
* [x]mate
same as the existing one
-
- Payments
- MKR transfers
- Recipient addresses match Exec Doc
- Transfer values match Exec Doc
- Follows archive patterns
- DAI Surplus Buffer transfers
- Recipient Addresses match Exec Doc
- Payment Amounts match Exec Doc
- Follows previous patterns
- Terminate Existing MKR/DAI Streams (
Yank
)- Yanked stream ID matches Exec Doc
- Use
MCD_VEST_MKR_TREASURY
for MKRyank
- Use
MCD_VEST_DAI
for DAIyank
- Ensure Recipient Addresses match
addresses_wallets.sol
- MKR transfers
- SubDAO Content
- SubDAO SubProxy spell execution
- SubDAO spell address matches Exec Doc
- SubDAO spell deployer is purely an EOA
- Ensure the deployer address is in
addresses_deployers.sol
as a comment
- Ensure the deployer address is in
- Executed using
ProxyLike(SUBDAO_PROXY).exec(SUBDAO_SPELL, abi.encodeWithSignature("execute()"));
- Execution is NOT delegate call
- Maker Core (main spell) SubDAO actions (i.e. operate in Pause Proxy
DelegateCall
context)- No SubDAO contract being interacted with is authed on a core contract like vat, etc. (Check comprehensively where the risk is high)
- SubDAO contract licensing and optimizations generally do not matter (except where they pose a security risk)
- SubDAO contracts and all libraries / dependencies are verified (Blocking if not true)
- Upgradable SubDAO contracts
- Any upgradable contracts have the
PAUSE_PROXY
as theiradmin
(i.e. the party that can upgrade)- Any upgradable SubDAO contracts with an
admin
that is notPAUSE_PROXY
are not authed on any core contracts (Blocking)
- Any upgradable SubDAO contracts with an
- Any upgradable contracts have the
- All SubDAO content addresses (i.e. provided contract addresses or EOAs) present in the Maker Core spell are present in the Exec Doc and are correct. SubDAO addresses being authed or given any permissions MUST be in the Exec Doc. SubDAO addresses being called must be confirmed by the SubDAO spell team.
- IF addresses not PR'ed in by the SubDAO team (use git blame for example), SubDAO content addresses all have inline comment for provenance or source being OKed by SubDAO
- SubDAO actions match Exec Doc (only where inline with main spell code) and do not affect core contracts
- did not find evidence of affecting core contracts.
- Core contract knock-on actions (such as offboarding or setting DC to 0) are present in the exec and match the code
- External calls for SubDAO content are NOT delegate call
- Code does not have untoward behavior within the scope of Maker Core Contracts (e.g. up to the SubDAO proxy)
- SubDAO SubProxy spell execution
- ChainLog
- Increment ChainLog version based on update type
- Major -> New Vat (++.0.0)
- Minor -> Core Module (DSS) Update (e.g. Flapper) (0.++.0)
- Patch -> Collateral addition or addition/modification (0.0.++)
- Increment ChainLog version based on update type
-
addresses_mainnet.sol
matches spell code - Ensure every spell variable is declared as public/internal
- Ensure
immutable
visibility is only used when fetching addresses from theChainLog
viaDssExecLib.getChangelogAddress
andconstant
is used instead for static addresses- Fetch addresses as type
address
and wrap withLike
suffix interfaces inline (when making calls) unless archive patterns permit otherwise (Such asMKR
) - Use the DssExecLib Core Address Helpers where possible (e.g.
DssExecLib.vat()
) - Where addresses are fetched from the
ChainLog
, the variable name must match the value of the ChainLog key for that address (e.g.MCD_VAT
rather thanvat
), except where the archive pattern differs from this pattern (e.g. MKR)
- Fetch addresses as type
- Spell actions match the corresponding Exec Doc
- Tests
- Ensure each spell action has sufficient test coverage
- flipper mom removed
- flip_fab removed
- input_conduit_urn for rwa 015 removed (to be copied over into the other key)
- input_conduit_jar for rwa 015 removed (to be copied over into the other key)
- input_conduit is set for
_pax
,_usdc
,_gusd
- chainlog version updated
- payment of dai successful to launch project funding
- stream id 17 yanked (dai)
- stream id 34 yanked (mkr)
- mkr vested (210.83) to launch project funding
- spark spell executed
- esm relied in vow
- flipper mom is deauthed (no authority, no owner)
- rwa 015 input conduit has the constructor params set properly for pax, gusd
- rwa 015 input conduit has proper auth:
- pauseProxy has auth (ward)
- esm has auth (ward)
- pause proxy is not mate
- operator wallet is mate
- quits to custody
- rwa 015 input conduit can
push
- rwa003 has a valid state (
good
) aftertell
is being called in the spell
- Ensure every test function is declared as public if enabled or private if disabled
- Ensure that the
DssExecLib.address
file is not being modified by the spell PR - Check all CI tests are passing as at the latest commit
commit link - Check all tests are passing locally using
make test
- Ensure that only
ETH_RPC_URL
is being used from env (i.e. nomatch
,block
or similar are active in your env)
- Ensure that only
- Ensure each spell action has sufficient test coverage
./scripts/test-dssspell-forge.sh no-match="" match="" block=""
Using DssExecLib at: 0x8De6DDbCd5053d32292AAA0D2105A32d108484a6
[⠘] Compiling...
No files changed, compilation skipped
Running 2 tests for src/test/starknet.t.sol:StarknetTests
[PASS] testStarknet() (gas: 2312546)
[PASS] testStarknetSpell() (gas: 2346)
Test result: ok. 2 passed; 0 failed; 0 skipped; finished in 92.69s
Running 30 tests for src/DssSpell.t.sol:DssSpellTest
[PASS] testAuth() (gas: 9223371487105898164)
[PASS] testAuthInSources() (gas: 9223371487099324820)
[PASS] testBytecodeMatches() (gas: 2777538)
[PASS] testCastCost() (gas: 2160461)
[PASS] testChainlogValues() (gas: 11018150)
[PASS] testChainlogVersionBump() (gas: 4772012)
[PASS] testContractSize() (gas: 9006)
[PASS] testDeployCost() (gas: 2762152)
[PASS] testFailNotScheduled() (gas: 14420)
[PASS] testFailTooEarly() (gas: 13629)
[PASS] testFailTooLate() (gas: 13562)
[PASS] testFailWrongDay() (gas: 13585)
[PASS] testFlliperMomDeauth() (gas: 2161653)
[PASS] testGeneral() (gas: 38036406)
[PASS] testMKRPayments() (gas: 2175548)
[PASS] testNewChainlogValues() (gas: 2256556)
[PASS] testNextCastTime() (gas: 353681)
[PASS] testOnTime() (gas: 2156145)
[PASS] testPSMs() (gas: 3517709)
[PASS] testPayments() (gas: 2226444)
[PASS] testRWA003OracleTell() (gas: 2172951)
[PASS] testRWA015_CONTRACT_DEPLOYMENT_SETUP() (gas: 90883)
[PASS] testRWA015_INPUT_CONDUITS() (gas: 2778029)
[PASS] testRWA015_INTEGRATION_CONDUITS_SETUP() (gas: 2213009)
[PASS] testRemoveChainlogValues() (gas: 2170652)
[PASS] testSparkSpellIsExecuted() (gas: 2159659)
[PASS] testUseEta() (gas: 352302)
[PASS] testVowEsmRely() (gas: 2162930)
[PASS] testYankDAI() (gas: 2172795)
[PASS] testYankMKR() (gas: 2210407)
Test result: ok. 30 passed; 0 failed; 0 skipped; finished in 907.97s
Ran 2 test suites: 32 tests passed, 0 failed, 0 skipped (32 total tests)
Note: this does not seem to be addressed in this PR. Do you want to adjust it or do we leave it out because there was no corresponding instruction in the exec sheet? |
This is nothing to do with the exec sheet since it is not a governance action item. It's fixing what appears to be an error that was made in the config file, nothing to do with the exec contents. Remember Governance participants also reference that sheet so including stuff there that is not in the code might lead to confusion for voters. Whether or not it needs to be fixed has nothing to do with GovAlpha. |
Ok, then we should adjust the config there for sure @0xdecr1pto |
We have an issue there, here is the discussion: #362 I prefer to keep it as it is until we reach a consensus on how to dealt with it |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Mainnet Executive Spell Review Checklist
Mainnet 2023-08-30
Spell Actions (Per Exec Doc):
- Management of ConsolFreight (
RWA003-A
) Default (Urgent Inclusion)- Reduce
RWA003-A
DC by 2 million DAI from 2 million DAI to 0 DAI (Don't reduce Line similar toRWA004-A
process) - Call tell on the
RwaLiquidationOracle
forRWA003-A
- Reduce
- Auth
ESM
on theVow
- Auth
ESM
on theVow
- Auth
- BlockTower Andromeda Input Conduit Chainlog Additions
- Remove
RWA015_A_INPUT_CONDUIT_JAR
from the chainlog - Remove
RWA015_A_INPUT_CONDUIT_URN
from the chainlog - Add
0xb9373c557f3ae8cddd068c1644ed226cfb18a997
asRWA015_A_INPUT_CONDUIT_JAR_USDC
- Add
0xe08cb5e24862ea86328295d5e5c08972203c20d8
asRWA015_A_INPUT_CONDUIT_URN_USDC
- Add
0x13C31b41E671401c7BC2bbd44eF33B6E9eaa1E7F
asRWA015_A_INPUT_CONDUIT_JAR_GUSD
- Add
0xAB80C37cB5b21238D975c2Cea46e0F12b3d84B06
asRWA015_A_INPUT_CONDUIT_URN_GUSD
- Add
0x79Fc3810735959db3C6D4fc64F7F7b5Ce48d1CEc
asRWA015_A_INPUT_CONDUIT_JAR_PAX
- Add
0x4f7f76f31CE6Bb20809aaCE30EfD75217Fbfc217
asRWA015_A_INPUT_CONDUIT_URN_PAX
- Remove
- Chainlog Cleanup
- Remove
FLIP_FAB
andFLIPPER_MOM
from the chainlog
- Remove
- Yank GovAlpha Budget Streams
⚠️ Order is off- Yank DAI stream ID 17
- Yank MKR stream ID 34
- Launch Project Dai Transfer
- Launch Project - 941993 DAI -
0x3C5142F28567E6a0F172fd0BaaF1f2847f49D02F
- Launch Project - 941993 DAI -
- Launch Project MKR Transfer
- Launch Project - 210.83 MKR -
0x3C5142F28567E6a0F172fd0BaaF1f2847f49D02F
- Launch Project - 210.83 MKR -
- Trigger Spark Proxy Spell
- Mainnet -
0xFBdB6C5596Fc958B432Bf1c99268C72B1515DFf0
- Mainnet -
Development Stage
- Office Hours
- OFF
- Matches Exec Doc
- 30 days spell expiry in constructor (
block.timestamp + 30 days
) - Exec Doc Hash:
-
Search the 'Community' GitHub repo for the corresponding Exec Doc⚠️ Ignored because this does not work when there are more recent non-related commits in the repo. -
Click 'History' for the corresponding Exec Doc⚠️ Ignored because this does not work when there are more recent non-related commits in the repo. - Ensure Exec Doc file name follows the format
Executive vote - Month DD, YYYY.md
-
Click 'View at this point in the history' (the file icon with< >
) for the latest commit -
Click 'Raw' and copy the resulting URL - Generate Exec Doc Hash using this URL
- Automatically: using
make exec-hash $URL
- Manually: using
cast keccak -- "$(curl '$URL' -o - 2>/dev/null)"
0xd4f061429b564e422f18f0289a0f956f0229edbeead40b51ad69d52b27f7e591
- Automatically: using
-
- Spell Description
- Description follows the format
TARGET_DATE MakerDAO Executive Spell | Hash: EXEC_DOC_HASH)
- Target date in description matches the Exec Doc target date
- Exec Doc Hash in description matches your locally generated Exec Doc Hash
- Accompanying comment above spell
description
- Comment follows the format
// Hash: cast keccak -- "$(wget 'EXEC_DOC_URL' -q -O - 2>/dev/null)"
- Exec Doc URL in comment matches your Raw Exec Doc URL
✅ URL is different, but the hashes of the content match.
- https://raw.githubusercontent.com/makerdao/community/64b0d8425a316c40d1fc464c084d800e3b17c1f3/governance/votes/Executive%20vote%20-%20August%2030%2C%202023.md + https://raw.githubusercontent.com/makerdao/community/61cd85d98bf6a18f5ab51c140dc08f43b4c720b1/governance/votes/Executive%20vote%20-%20August%2030%2C%202023.md
- Exec Doc URL in comment refers to the 'Community' GitHub repo
- Comment follows the format
- Description follows the format
- Local Environment Actions
- Update Foundry by running
foundryup
- Reinstall libraries
- Remove libraries by deleting the
lib
folder - Install libraries using
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 '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'
- Remove libraries by deleting the
- Dependency checks
-
dss-exec-lib
- if submodule upgrades are present make sure
dss-exec-lib
is synced as well - git submodule hash (run
git 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)
- if submodule upgrades are present make sure
-
dss-test
-
dss-interfaces
- git submodule hash matches version used by
dss-test
(Non-critical)
- git submodule hash matches version used by
-
forge-std
- git submodule hash matches version used by
dss-test
(Non-critical)
- git submodule hash matches version used by
-
-
- Update Foundry by running
- Interface Checks
- Static Interfaces
- ensure they match
dss-interfaces
(Where there is a mismatch, usecast interface
as the source of truth) - check on-chain interface of deployed contract via
cast interface <contract_address>
to ensure correctness - interface naming style should match with
Like
suffix (e.g.VatLike
), with some exceptions - ensure they only list used functions in spell code
- ensure they match
- Static Interfaces
- RWA Updates
- Soft Liquidation
- Set debt ceiling to
0
for the specificilk
- Call
RwaLiquidationOracle.tell(ilk)
- Set debt ceiling to
- Soft Liquidation
- Payments
- MKR transfers
- Recipient addresses match Exec Doc
- Transfer values match Exec Doc
- Follows archive patterns
- DAI Surplus Buffer transfers
- Recipient Addresses match Exec Doc
- Payment Amounts match Exec Doc
- Follows previous patterns
- Terminate Existing MKR/DAI Streams (
Yank
)- Yanked stream ID matches Exec Doc
- Use
MCD_VEST_MKR_TREASURY
for MKRyank
- Use
MCD_VEST_DAI
for DAIyank
- Ensure Recipient Addresses match
addresses_wallets.sol
- MKR transfers
- SubDAO Content
- SubDAO SubProxy spell execution
- SubDAO spell address matches Exec Doc
- SubDAO spell deployer is a smart contract (e.g. multisig or factory)
- Ensure the deployer address is in
addresses_deployers.sol
as an entry
- Ensure the deployer address is in
- SubDAO spell deployer is purely an EOA
- Ensure the deployer address is in
addresses_deployers.sol
as a comment
- Ensure the deployer address is in
- Executed using
ProxyLike(SUBDAO_PROXY).exec(SUBDAO_SPELL, abi.encodeWithSignature("execute()"));
- Execution is NOT delegate call
- Reviewer Note: Gas cost may be very high as SubDAO spells execute within the main
cast
execution. (Also note that low level call gas estimation is not done by our scripts)
- SubDAO SubProxy spell execution
- ChainLog
- Increment ChainLog version based on update type
- Minor -> Core Module (DSS) Update (e.g. Flapper) (0.++.0)
- Increment ChainLog version based on update type
-
addresses_mainnet.sol
matches spell code - Ensure every spell variable is declared as public/internal
- Ensure
immutable
visibility is only used when fetching addresses from theChainLog
viaDssExecLib.getChangelogAddress
andconstant
is used instead for static addresses- Fetch addresses as type
address
and wrap withLike
suffix interfaces inline (when making calls) unless archive patterns permit otherwise (Such asMKR
) - Use the DssExecLib Core Address Helpers where possible (e.g.
DssExecLib.vat()
) - Where addresses are fetched from the
ChainLog
, the variable name must match the value of the ChainLog key for that address (e.g.MCD_VAT
rather thanvat
), except where the archive pattern differs from this pattern (e.g. MKR)
- Fetch addresses as type
- Spell actions match the corresponding Exec Doc
- Tests
- Ensure each spell action has sufficient test coverage
- Soft liquidation of
RWA003-A
- Authorize
MCD_ESM
onMCD_VOW
- Onboard
RWA015-A
GUSD and USDPRwaSwapInputConduit2
conduits - Rename
RWA015-A
USDC conduits - Offboard
FLIPPER_MOM
andFLIPPER_FAB
- Scuttle
FLIPPER_MOM
- Execute Spark spell
- MKR transfer
- DAI transfer
- Yank vests
- DAI
id = 17
- MKR
id = 34
- DAI
- Soft liquidation of
- Ensure every test function is declared as public if enabled or private if disabled
- Ensure that the
DssExecLib.address
file is not being modified by the spell PR - Check all CI tests are passing as at the latest commit
- Check all tests are passing locally using
make test
- Ensure that only
ETH_RPC_URL
is being used from env (i.e. nomatch
,block
or similar are active in your env)
- Ensure that only
- Ensure each spell action has sufficient test coverage
Using DssExecLib at: 0x8De6DDbCd5053d32292AAA0D2105A32d108484a6
[⠆] Compiling...
[⠰] Compiling 100 files with 0.8.16
[⠘] Solc 0.8.16 finished in 4.01s
Compiler run successful!
Running 2 tests for src/test/starknet.t.sol:StarknetTests
[PASS] testStarknet() (gas: 2312546)
[PASS] testStarknetSpell() (gas: 2346)
Test result: ok. 2 passed; 0 failed; 0 skipped; finished in 22.23s
Running 30 tests for src/DssSpell.t.sol:DssSpellTest
[PASS] testAuth() (gas: 9223371487105898164)
[PASS] testAuthInSources() (gas: 9223371487099324820)
[PASS] testBytecodeMatches() (gas: 2777538)
[PASS] testCastCost() (gas: 2160461)
[PASS] testChainlogValues() (gas: 11018150)
[PASS] testChainlogVersionBump() (gas: 4772012)
[PASS] testContractSize() (gas: 9006)
[PASS] testDeployCost() (gas: 2762152)
[PASS] testFailNotScheduled() (gas: 14420)
[PASS] testFailTooEarly() (gas: 13629)
[PASS] testFailTooLate() (gas: 13562)
[PASS] testFailWrongDay() (gas: 13585)
[PASS] testFlipperMomDeauth() (gas: 2162716)
[PASS] testGeneral() (gas: 38030850)
[PASS] testMKRPayments() (gas: 2175548)
[PASS] testNewChainlogValues() (gas: 2256556)
[PASS] testNextCastTime() (gas: 353681)
[PASS] testOnTime() (gas: 2156145)
[PASS] testPSMs() (gas: 3517709)
[PASS] testPayments() (gas: 2226444)
[PASS] testRWA003OracleTell() (gas: 2172951)
[PASS] testRWA015_CONTRACT_DEPLOYMENT_SETUP() (gas: 90905)
[PASS] testRWA015_INPUT_CONDUITS() (gas: 2778029)
[PASS] testRWA015_INTEGRATION_CONDUITS_SETUP() (gas: 2213009)
[PASS] testRemoveChainlogValues() (gas: 2170652)
[PASS] testSparkSpellIsExecuted() (gas: 2159659)
[PASS] testUseEta() (gas: 352302)
[PASS] testVowEsmRely() (gas: 2162930)
[PASS] testYankDAI() (gas: 2172795)
[PASS] testYankMKR() (gas: 2210407)
Test result: ok. 30 passed; 0 failed; 0 skipped; finished in 440.56s
Ran 2 test suites: 32 tests passed, 0 failed, 0 skipped (32 total tests)
Using DssExecLib at: 0x8De6DDbCd5053d32292AAA0D2105A32d108484a6
[⠔] Compiling...
[⠢] Compiling 4 files with 0.8.16
[⠒] Solc 0.8.16 finished in 2.64s
Compiler run successful!
Running 2 tests for src/test/starknet.t.sol:StarknetTests
[PASS] testStarknet() (gas: 2312546)
[PASS] testStarknetSpell() (gas: 2346)
Test result: ok. 2 passed; 0 failed; 0 skipped; finished in 16.38s
Running 30 tests for src/DssSpell.t.sol:DssSpellTest
[PASS] testAuth() (gas: 9223371487105898164)
[PASS] testAuthInSources() (gas: 9223371487099324820)
[PASS] testBytecodeMatches() (gas: 2777538)
[PASS] testCastCost() (gas: 2160461)
[PASS] testChainlogValues() (gas: 11018150)
[PASS] testChainlogVersionBump() (gas: 4772012)
[PASS] testContractSize() (gas: 9006)
[PASS] testDeployCost() (gas: 2762152)
[PASS] testFailNotScheduled() (gas: 14420)
[PASS] testFailTooEarly() (gas: 13629)
[PASS] testFailTooLate() (gas: 13562)
[PASS] testFailWrongDay() (gas: 13585)
[PASS] testFlipperMomDeauth() (gas: 2162716)
[PASS] testGeneral() (gas: 38030850)
[PASS] testMKRPayments() (gas: 2175548)
[PASS] testNewChainlogValues() (gas: 2256556)
[PASS] testNextCastTime() (gas: 353681)
[PASS] testOnTime() (gas: 2156145)
[PASS] testPSMs() (gas: 3517709)
[PASS] testPayments() (gas: 2226214)
[PASS] testRWA003OracleTell() (gas: 2172951)
[PASS] testRWA015_CONTRACT_DEPLOYMENT_SETUP() (gas: 90905)
[PASS] testRWA015_INPUT_CONDUITS() (gas: 2778029)
[PASS] testRWA015_INTEGRATION_CONDUITS_SETUP() (gas: 2213009)
[PASS] testRemoveChainlogValues() (gas: 2170652)
[PASS] testSparkSpellIsExecuted() (gas: 2159659)
[PASS] testUseEta() (gas: 352302)
[PASS] testVowEsmRely() (gas: 2162930)
[PASS] testYankDAI() (gas: 2172795)
[PASS] testYankMKR() (gas: 2210407)
Test result: ok. 30 passed; 0 failed; 0 skipped; finished in 457.80s
Ran 2 test suites: 32 tests passed, 0 failed, 0 skipped (32 total tests) Good to deploy |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
good to deploy
Spell deployed: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good to handover
Deployed Stage
- Deployed Spell is Verified
- Optimization Enabled: No
- Other Settings: default evmVersion, GNU AGPLv3 license
- Deployed Spell Code matches GitHub
- diffcheck etherscan source against spell PR (via
make diff-deployed-spell
)
- diffcheck etherscan source against spell PR (via
- Deployed Spell Etherscan Checks
- automated checks via
make check-deployed-spell
- verified
- license type matches
- solc version matches
- optimizations are disabled
- dss-exec-lib library address used (under 'Libraries Used') matches the hardcoded local
DssExecLib.address
file- Check again that the PR did not modify the
DssExecLib.address
file (e.g. look under the 'Files Changed' PR tab, etc.)
- Check again that the PR did not modify the
-
deployed_spell_created
matches deployment timestamp -
deployed_spell_block
matches deployment block number
- manual checks
- Ensure
make deploy-info tx=<tx>
matches config-
deployed_spell_created
timestamp -
deployed_spell_block
block number
-
- Ensure Etherscan
Libraries Used
matches DssExecLib Latest Release - (For your tests to be accurate) git submodule hash matches dss-exec-lib latest release's tag commit and inspect diffs if doesn't match to ensure expected behaviour (Currently Non-Critical pending the next DssExecLib release, double check that the ExecLib used by the contract matches the latest release)
- Ensure
- automated checks via
- Archive matches
src
-
make diff-archive-spell
for current date or ordate="YYYY-MM-DD" make diff-archive-spell
(date as per target Exec Doc date) - Ensure date corresponds to target Exec Doc date
-
- Tests
- Ensure that the
DssExecLib.address
file is not being modified by the spell PR - Check all CI tests are passing as at the latest commit
commit on gh - Check all tests are passing locally using
make test
- Ensure that only
ETH_RPC_URL
is being used from env (i.e. nomatch
,block
or similar are active in your env)
- Ensure that only
- Ensure that the
make test
./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 3.89s
Compiler run successful!
Running 2 tests for src/test/starknet.t.sol:StarknetTests
[PASS] testStarknet() (gas: 2312546)
[PASS] testStarknetSpell() (gas: 2346)
Test result: ok. 2 passed; 0 failed; 0 skipped; finished in 257.29s
Running 30 tests for src/DssSpell.t.sol:DssSpellTest
[PASS] testAuth() (gas: 9223371487105898164)
[PASS] testAuthInSources() (gas: 9223371487099324820)
[PASS] testBytecodeMatches() (gas: 2777538)
[PASS] testCastCost() (gas: 2160461)
[PASS] testChainlogValues() (gas: 11018150)
[PASS] testChainlogVersionBump() (gas: 4772012)
[PASS] testContractSize() (gas: 9006)
[PASS] testDeployCost() (gas: 2762152)
[PASS] testFailNotScheduled() (gas: 14420)
[PASS] testFailTooEarly() (gas: 13629)
[PASS] testFailTooLate() (gas: 13562)
[PASS] testFailWrongDay() (gas: 13585)
[PASS] testFlipperMomDeauth() (gas: 2162716)
[PASS] testGeneral() (gas: 38032947)
[PASS] testMKRPayments() (gas: 2175548)
[PASS] testNewChainlogValues() (gas: 2256556)
[PASS] testNextCastTime() (gas: 353681)
[PASS] testOnTime() (gas: 2156145)
[PASS] testPSMs() (gas: 3517709)
[PASS] testPayments() (gas: 2226904)
[PASS] testRWA003OracleTell() (gas: 2172951)
[PASS] testRWA015_CONTRACT_DEPLOYMENT_SETUP() (gas: 90905)
[PASS] testRWA015_INPUT_CONDUITS() (gas: 2778029)
[PASS] testRWA015_INTEGRATION_CONDUITS_SETUP() (gas: 2213009)
[PASS] testRemoveChainlogValues() (gas: 2170652)
[PASS] testSparkSpellIsExecuted() (gas: 2159659)
[PASS] testUseEta() (gas: 352302)
[PASS] testVowEsmRely() (gas: 2162930)
[PASS] testYankDAI() (gas: 2172795)
[PASS] testYankMKR() (gas: 2210407)
Test result: ok. 30 passed; 0 failed; 0 skipped; finished in 1039.76s
Ran 2 test suites: 32 tests passed, 0 failed, 0 skipped (32 total tests)
Deployed Stage
Using DssExecLib at: 0x8De6DDbCd5053d32292AAA0D2105A32d108484a6
[⠢] Compiling...
[⠊] Compiling 4 files with 0.8.16
[⠢] Solc 0.8.16 finished in 2.65s
Compiler run successful!
Running 2 tests for src/test/starknet.t.sol:StarknetTests
[PASS] testStarknet() (gas: 2312546)
[PASS] testStarknetSpell() (gas: 2346)
Test result: ok. 2 passed; 0 failed; 0 skipped; finished in 193.78s
Running 30 tests for src/DssSpell.t.sol:DssSpellTest
[PASS] testAuth() (gas: 9223371487105898164)
[PASS] testAuthInSources() (gas: 9223371487099324820)
[PASS] testBytecodeMatches() (gas: 2777538)
[PASS] testCastCost() (gas: 2160461)
[PASS] testChainlogValues() (gas: 11018150)
[PASS] testChainlogVersionBump() (gas: 4772012)
[PASS] testContractSize() (gas: 9006)
[PASS] testDeployCost() (gas: 2762152)
[PASS] testFailNotScheduled() (gas: 14420)
[PASS] testFailTooEarly() (gas: 13629)
[PASS] testFailTooLate() (gas: 13562)
[PASS] testFailWrongDay() (gas: 13585)
[PASS] testFlipperMomDeauth() (gas: 2162716)
[PASS] testGeneral() (gas: 38032947)
[PASS] testMKRPayments() (gas: 2175548)
[PASS] testNewChainlogValues() (gas: 2256556)
[PASS] testNextCastTime() (gas: 353681)
[PASS] testOnTime() (gas: 2156145)
[PASS] testPSMs() (gas: 3517709)
[PASS] testPayments() (gas: 2226444)
[PASS] testRWA003OracleTell() (gas: 2172951)
[PASS] testRWA015_CONTRACT_DEPLOYMENT_SETUP() (gas: 90905)
[PASS] testRWA015_INPUT_CONDUITS() (gas: 2778029)
[PASS] testRWA015_INTEGRATION_CONDUITS_SETUP() (gas: 2213009)
[PASS] testRemoveChainlogValues() (gas: 2170652)
[PASS] testSparkSpellIsExecuted() (gas: 2159659)
[PASS] testUseEta() (gas: 352302)
[PASS] testVowEsmRely() (gas: 2162930)
[PASS] testYankDAI() (gas: 2172795)
[PASS] testYankMKR() (gas: 2210407)
Test result: ok. 30 passed; 0 failed; 0 skipped; finished in 418.03s
Ran 2 test suites: 32 tests passed, 0 failed, 0 skipped (32 total tests) Good to handover. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Handover and Merge Stage
- Check that the spell address posted by the crafter in
new-spells
is correct- Confirm the address in
new-spells
(via a thumbs up message reaction, )
- Confirm the address in
- Ensure that no commits or changes have occurred since the spell was deployed and archived
- Approve spell PR for merge via 'Approve' review option
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