Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
165 changes: 0 additions & 165 deletions .storage-layout

Large diffs are not rendered by default.

31 changes: 31 additions & 0 deletions .storage-layout-governor.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@

╭--------------------------------------+-----------------------------------------------------+------+--------+-------+-----------------------------------------------╮
| Name | Type | Slot | Offset | Bytes | Contract |
+====================================================================================================================================================================+
| _initialized | uint8 | 0 | 0 | 1 | src/governance/governor/Governor.sol:Governor |
|--------------------------------------+-----------------------------------------------------+------+--------+-------+-----------------------------------------------|
| _initializing | bool | 0 | 1 | 1 | src/governance/governor/Governor.sol:Governor |
|--------------------------------------+-----------------------------------------------------+------+--------+-------+-----------------------------------------------|
| _owner | address | 0 | 2 | 20 | src/governance/governor/Governor.sol:Governor |
|--------------------------------------+-----------------------------------------------------+------+--------+-------+-----------------------------------------------|
| _pendingOwner | address | 1 | 0 | 20 | src/governance/governor/Governor.sol:Governor |
|--------------------------------------+-----------------------------------------------------+------+--------+-------+-----------------------------------------------|
| HASHED_NAME | bytes32 | 2 | 0 | 32 | src/governance/governor/Governor.sol:Governor |
|--------------------------------------+-----------------------------------------------------+------+--------+-------+-----------------------------------------------|
| HASHED_VERSION | bytes32 | 3 | 0 | 32 | src/governance/governor/Governor.sol:Governor |
|--------------------------------------+-----------------------------------------------------+------+--------+-------+-----------------------------------------------|
| INITIAL_DOMAIN_SEPARATOR | bytes32 | 4 | 0 | 32 | src/governance/governor/Governor.sol:Governor |
|--------------------------------------+-----------------------------------------------------+------+--------+-------+-----------------------------------------------|
| INITIAL_CHAIN_ID | uint256 | 5 | 0 | 32 | src/governance/governor/Governor.sol:Governor |
|--------------------------------------+-----------------------------------------------------+------+--------+-------+-----------------------------------------------|
| nonces | mapping(address => uint256) | 6 | 0 | 32 | src/governance/governor/Governor.sol:Governor |
|--------------------------------------+-----------------------------------------------------+------+--------+-------+-----------------------------------------------|
| settings | struct GovernorTypesV1.Settings | 7 | 0 | 96 | src/governance/governor/Governor.sol:Governor |
|--------------------------------------+-----------------------------------------------------+------+--------+-------+-----------------------------------------------|
| proposals | mapping(bytes32 => struct GovernorTypesV1.Proposal) | 10 | 0 | 32 | src/governance/governor/Governor.sol:Governor |
|--------------------------------------+-----------------------------------------------------+------+--------+-------+-----------------------------------------------|
| hasVoted | mapping(bytes32 => mapping(address => bool)) | 11 | 0 | 32 | src/governance/governor/Governor.sol:Governor |
|--------------------------------------+-----------------------------------------------------+------+--------+-------+-----------------------------------------------|
| delayedGovernanceExpirationTimestamp | uint256 | 12 | 0 | 32 | src/governance/governor/Governor.sol:Governor |
╰--------------------------------------+-----------------------------------------------------+------+--------+-------+-----------------------------------------------╯

21 changes: 21 additions & 0 deletions .storage-layout-manager.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@

╭-----------------------------+---------------------------------------------------------------------------------+------+--------+-------+---------------------------------╮
| Name | Type | Slot | Offset | Bytes | Contract |
+=========================================================================================================================================================================+
| _initialized | uint8 | 0 | 0 | 1 | src/manager/Manager.sol:Manager |
|-----------------------------+---------------------------------------------------------------------------------+------+--------+-------+---------------------------------|
| _initializing | bool | 0 | 1 | 1 | src/manager/Manager.sol:Manager |
|-----------------------------+---------------------------------------------------------------------------------+------+--------+-------+---------------------------------|
| _owner | address | 0 | 2 | 20 | src/manager/Manager.sol:Manager |
|-----------------------------+---------------------------------------------------------------------------------+------+--------+-------+---------------------------------|
| _pendingOwner | address | 1 | 0 | 20 | src/manager/Manager.sol:Manager |
|-----------------------------+---------------------------------------------------------------------------------+------+--------+-------+---------------------------------|
| isUpgrade | mapping(address => mapping(address => bool)) | 2 | 0 | 32 | src/manager/Manager.sol:Manager |
|-----------------------------+---------------------------------------------------------------------------------+------+--------+-------+---------------------------------|
| daoAddressesByToken | mapping(address => struct ManagerTypesV1.DAOAddresses) | 3 | 0 | 32 | src/manager/Manager.sol:Manager |
|-----------------------------+---------------------------------------------------------------------------------+------+--------+-------+---------------------------------|
| sourceBridgeAdapterByDao | mapping(bytes32 => address) | 4 | 0 | 32 | src/manager/Manager.sol:Manager |
|-----------------------------+---------------------------------------------------------------------------------+------+--------+-------+---------------------------------|
| bridgeAddressesByDaoByChain | mapping(bytes32 => mapping(uint256 => struct ManagerTypesV2.BridgeAddressesV2)) | 5 | 0 | 32 | src/manager/Manager.sol:Manager |
╰-----------------------------+---------------------------------------------------------------------------------+------+--------+-------+---------------------------------╯

35 changes: 35 additions & 0 deletions .storage-layout-treasury.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@

╭----------------------+-------------------------------------------------------------+------+--------+-------+-----------------------------------------------╮
| Name | Type | Slot | Offset | Bytes | Contract |
+============================================================================================================================================================+
| _initialized | uint8 | 0 | 0 | 1 | src/governance/treasury/Treasury.sol:Treasury |
|----------------------+-------------------------------------------------------------+------+--------+-------+-----------------------------------------------|
| _initializing | bool | 0 | 1 | 1 | src/governance/treasury/Treasury.sol:Treasury |
|----------------------+-------------------------------------------------------------+------+--------+-------+-----------------------------------------------|
| _owner | address | 0 | 2 | 20 | src/governance/treasury/Treasury.sol:Treasury |
|----------------------+-------------------------------------------------------------+------+--------+-------+-----------------------------------------------|
| _pendingOwner | address | 1 | 0 | 20 | src/governance/treasury/Treasury.sol:Treasury |
|----------------------+-------------------------------------------------------------+------+--------+-------+-----------------------------------------------|
| settings | struct TreasuryTypesV1.Settings | 2 | 0 | 32 | src/governance/treasury/Treasury.sol:Treasury |
|----------------------+-------------------------------------------------------------+------+--------+-------+-----------------------------------------------|
| timestamps | mapping(bytes32 => uint256) | 3 | 0 | 32 | src/governance/treasury/Treasury.sol:Treasury |
|----------------------+-------------------------------------------------------------+------+--------+-------+-----------------------------------------------|
| _safeCount | uint32 | 4 | 0 | 4 | src/governance/treasury/Treasury.sol:Treasury |
|----------------------+-------------------------------------------------------------+------+--------+-------+-----------------------------------------------|
| safes | mapping(uint32 => struct TreasuryTypesV2.SafeConfigV2) | 5 | 0 | 32 | src/governance/treasury/Treasury.sol:Treasury |
|----------------------+-------------------------------------------------------------+------+--------+-------+-----------------------------------------------|
| safeIds | mapping(address => uint32) | 6 | 0 | 32 | src/governance/treasury/Treasury.sol:Treasury |
|----------------------+-------------------------------------------------------------+------+--------+-------+-----------------------------------------------|
| globalPolicy | struct TreasuryTypesV2.GlobalPolicyV2 | 7 | 0 | 96 | src/governance/treasury/Treasury.sol:Treasury |
|----------------------+-------------------------------------------------------------+------+--------+-------+-----------------------------------------------|
| safeSpendingLimits | mapping(uint32 => uint256) | 10 | 0 | 32 | src/governance/treasury/Treasury.sol:Treasury |
|----------------------+-------------------------------------------------------------+------+--------+-------+-----------------------------------------------|
| safeSpendingTrackers | mapping(uint32 => struct TreasuryTypesV2.SpendingTrackerV2) | 11 | 0 | 32 | src/governance/treasury/Treasury.sol:Treasury |
|----------------------+-------------------------------------------------------------+------+--------+-------+-----------------------------------------------|
| safePaused | mapping(uint32 => bool) | 12 | 0 | 32 | src/governance/treasury/Treasury.sol:Treasury |
|----------------------+-------------------------------------------------------------+------+--------+-------+-----------------------------------------------|
| allSafesPaused | bool | 13 | 0 | 1 | src/governance/treasury/Treasury.sol:Treasury |
|----------------------+-------------------------------------------------------------+------+--------+-------+-----------------------------------------------|
| guardian | address | 13 | 1 | 20 | src/governance/treasury/Treasury.sol:Treasury |
╰----------------------+-------------------------------------------------------------+------+--------+-------+-----------------------------------------------╯

46 changes: 46 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# Nouns Builder Protocol - Safe Treasury V2
# Storage layout and verification utilities

.PHONY: update-storage-layout verify-storage-layout test-upgrade help

help: ## Show this help message
@echo 'Usage: make [target]'
@echo ''
@echo 'Available targets:'
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf " %-25s %s\n", $$1, $$2}'

update-storage-layout: ## Update storage layout baseline files
@echo "Updating storage layout baselines..."
@forge inspect src/manager/Manager.sol:Manager storage-layout > .storage-layout-manager.txt
@forge inspect src/governance/treasury/Treasury.sol:Treasury storage-layout > .storage-layout-treasury.txt
@forge inspect src/governance/governor/Governor.sol:Governor storage-layout > .storage-layout-governor.txt
@echo "✓ Storage layouts updated"
@echo ""
@echo "⚠️ IMPORTANT: Review changes carefully before committing!"
@echo " - Ensure new storage slots are APPENDED, not inserted"
@echo " - Verify no slot collisions with inherited contracts"
@echo " - Test upgrade path on testnet fork"

verify-storage-layout: ## Verify storage layouts match baselines
@echo "Verifying storage layouts..."
@forge script script/VerifyStorageLayout.s.sol

test-upgrade: ## Test upgrade path on local fork
@echo "Testing upgrade path..."
@echo "TODO: Implement upgrade testing script"

clean: ## Clean build artifacts
@forge clean
@rm -rf cache out

build: ## Build contracts
@forge build

test: ## Run tests
@forge test -vvv

coverage: ## Generate coverage report
@forge coverage

snapshot: ## Generate gas snapshot
@forge snapshot
Loading