v1 is the first production-ready release of Firm protocol 🥳
We conducted an audit with security firm Coinspect which you can find here. This release was mostly about addressing findings found it the audit.
What's Changed
🆕 Semaphore
Semaphore is a new optional module that allows to balance power between Safe signers and Voting.
🆕 Open source license
- #158: Firm protocol is now licensed under the open source GPL-3.0 license (except for interfaces which are MIT)
Captable
- #163: Vestings can no longer be revoked retroactively (but still allow future effective dates)
- #169: Controllers can now only be set in accounts with a positive balance
- #179: Added limits to avoid overflows on vote counts
- #186: Removed ':' for token names
Misc
- #182: Ensure all role admin roles exist in Roles
- #186: Check actual balance delta for debit amount to handle fee on transfer tokens
- #170: Use msg.sender from ERC2771Context across the protocol to allow Safe to use FirmRelayer for batching
- #180: Increase nonce even if execution fails in FirmRelayer to prevent replays
Testing and development
- #160, #187: Added Captable and Semaphore state and actions to seed state script
- #159: Added tests for VestingController
- #161: Reorganized flag helpers
Deployment
- #188: v1 deployed to Ethereum mainnet, Polygon mainnet and Ethereum Goerli
Deployment addresses
Network | FirmFactory | UpgradeableModuleProxyFactory |
---|---|---|
Ethereum mainnet | 0xFbeC16EECD4558297FB3deA9934A162Ef76b14bd |
0x8EBa12de23C24D27469a748904CA6ba16aff6803 |
Polygon mainnet | 0xaC722c66312fC581Bc57Ee4141871Fe0bf22fA08 |
0x6232B169db8e0f5A1FD1eEC3B802aa3FFC430bB4 |
Ethereum Goerli | 0x1Ce5621D386B2801f5600F1dBe29522805b8AC11 |
0x159200D27301776D5412D52Ed2605b7c5371AcFe |
Historic deployments: https://github.com/firm-org/firm-protocol/blob/master/deployments/factory.json
Full Changelog: v0.5.0...v1.0.0