Skip to content

Commit 3069294

Browse files
Add all vesting, ptw and split contracts
1 parent afeb29f commit 3069294

File tree

1 file changed

+50
-28
lines changed

1 file changed

+50
-28
lines changed

docs/03-onchain-architecture.md

Lines changed: 50 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -14,77 +14,99 @@ The Guild’s smart contract architecture is modularized as follows:
1414

1515
### Vesting Contract
1616

17-
- Official documentation: [https://docs.splits.org/core/vesting](https://docs.splits.org/core/vesting)
18-
19-
The Guild’s donation address is an immutable vesting contract which irrevocably vests donated funds on a linear, block-by-block, basis over 4 years. Here, "irrevocably" means donations **cannot** be stopped or otherwise redirected during the vest by anyone, be it the donor or Protocol Guild membership.
20-
21-
Anyone can donate ETH and ERC-20 tokens to the vesting contract on mainnet.
17+
The Guild’s donation addresses on Ethereum mainnet, Arbitrum, Base and Optimism are immutable vesting contract, built by the [Splits](https://splits.org/) team, which irrevocably vests donated funds on a linear (block-by-block), basis over 4 years. Here, "irrevocably" means donations **cannot** be stopped or otherwise redirected during the vest by anyone, be it the donor or Protocol Guild membership. Anyone can donate ETH and ERC-20 tokens to these vesting contract.
2218

2319
**NFT donations are not supported** - standard NFT transfers (safeTransfer) will be rejected by the contract (i.e. meaning the transaction will fail), while non-safeTransfer NFT donations will be lost.
2420

2521
**How it works:**
2622
- Donated tokens will accrue in a per-asset queue until a vesting stream is started for that batch of tokens, by triggering the `startStream` function (permissionless, as in any actor can trigger this function, regardless of whether they are a Guild member)
2723
- Once the vesting stream is started, the tokens will vest linearly over 4 years, and anyone can permissionlessly trigger `releaseStream` to push any vested tokens into a pass-through wallet (this must be done per vesting stream)
24+
- Official documentation: [https://docs.splits.org/core/vesting](https://docs.splits.org/core/vesting)
2825

2926
All donated tokens are thus forced to vest - there is no way to do anything with them until they are vested into the pass-through wallet.
3027

31-
### Pass-Through Wallet
28+
**Deployed Vesting Contracts:**
3229

33-
- Official documentation: [https://docs.splits.org/core/pass-through](https://docs.splits.org/core/pass-through)
30+
- Mainnet: [0x25941dc771bb64514fc8abbce970307fb9d477e9](https://app.splits.org/accounts/0x25941dc771bb64514fc8abbce970307fb9d477e9/)
31+
- Deprecated: [0xF29Ff96aaEa6C9A1fBa851f74737f3c069d4f1a9](https://app.splits.org/accounts/0xF29Ff96aaEa6C9A1fBa851f74737f3c069d4f1a9/)
32+
- Arbitrum: [0x7F8DCFd764bA8e9B3BA577dC641D5c664B74c47b](https://app.splits.org/accounts/0x7F8DCFd764bA8e9B3BA577dC641D5c664B74c47b/?chainId=42161)
33+
- Base: [0xd16713A5D4Eb7E3aAc9D2228eB72f6f7328FADBD](https://app.splits.org/accounts/0xd16713A5D4Eb7E3aAc9D2228eB72f6f7328FADBD/?chainId=8453)
34+
- Optimism: [0x58ae0925077527a87D3B785aDecA018F9977Ec34](https://app.splits.org/accounts/0x58ae0925077527a87D3B785aDecA018F9977Ec34/?chainId=10)
35+
- Deprecated: [0xB3d8d7887693a9852734b4D25e9C0Bb35Ba8a830](https://app.splits.org/accounts/0xB3d8d7887693a9852734b4D25e9C0Bb35Ba8a830/?chainId=10)
3436

35-
All funds from the mainnet vesting contract go into a pass-through wallet (PTW), which pools vested tokens to be pushed to the split contract. (A PTW is not deployed on Optimism, there funds from the vesting contract go straight to the split.)
37+
### Pass-Through Wallet
38+
39+
All funds from vesting contracts go into a pass-through wallet (PTW), built by the [Splits](https://splits.org/) team, which pools vested tokens to be pushed to split contracts.
3640

37-
The PTW allows the Guild’s membership to make arbitrary calls with vested tokens if needed, since the current split contract does not have arbitrary call functionality. For the avoidance of doubt: the PTW can only be used to interact with tokens which have already finished vesting. Tokens still vesting in the [vesting contract](https://app.splits.org/accounts/0x25941dc771bb64514fc8abbce970307fb9d477e9/) cannot be prematurely interacted with.
41+
The PTW allows the Guild’s membership to make arbitrary calls with vested tokens if needed, since the current split contract does not have arbitrary call functionality. For the avoidance of doubt: the PTW can only be used to interact with tokens which have already finished vesting. Tokens still vesting in vesting contracts cannot be prematurely interacted with.
3842

3943
**How it works:**
4044
- The PTW has a permissionless `passThrough` function, which allows anyone to push vested funds accumulated in the PTW to the contract's `passThrough`, which is set to the Guild’s split contract.
4145
- The PTWs owner (the Guild’s multisig), can pause / unpause the contract by changing the `paused` value, allowing the owner to move specific tokens using arbitrary calls instead.
4246
- The PTW owner can also update the `passThrough` recipient if needed e.g. if the Guild migrates to a different split contract in the future
47+
- Official documentation: [https://docs.splits.org/core/pass-through](https://docs.splits.org/core/pass-through)
4348

44-
### Split Contract
49+
**Deployed PTWs:**
4550

46-
- Official documentation:
47-
- Split V1 (Ethereum Mainnet): [https://docs.splits.org/core/split](https://docs.splits.org/core/split)
48-
- Split V2 (Optimism): [https://docs.splits.org/core/split-v2](https://docs.splits.org/core/split-v2)
51+
- Mainnet: [0x2E1A2823B6e65e6AC46BaD6e0Cc4096976Fc265E](https://app.splits.org/accounts/0x2E1A2823B6e65e6AC46BaD6e0Cc4096976Fc265E/?chainId=1)
52+
- Arbitrum: [0x613d2d0dcbe95e2f06e1fa6651633ceb17b58dbf](https://app.splits.org/accounts/0x613d2d0dcbe95e2f06e1fa6651633ceb17b58dbf/?chainId=42161)
53+
- Base: [0xfcdf7254cca539f87f732c4bc19356a3d856a9b1](https://app.splits.org/accounts/0xfcdf7254cca539f87f732c4bc19356a3d856a9b1/?chainId=8453)
54+
- Optimism: [0xd62f993fa6a2d15815795c377cf5c9ccce81f499](https://app.splits.org/accounts/0xd62f993fa6a2d15815795c377cf5c9ccce81f499/?chainId=10)
4955

50-
The split contract contains all Guild members’ addresses and their respective share of vested funds (based on the time-weight formula).
56+
### Split Contract
5157

52-
Unlike the vesting contract, the split contract is mutable, as it needs to be updated quarterly to reflect changes to the membership (i.e. members being added or removed), as well as to update member weights over time.
58+
Split contracts, built by the [Splits](https://splits.org/) team, contain all Guild members’ addresses and their respective share of vested funds (based on the time-weight formula). Unlike the vesting contract, the split contract is mutable, as it needs to be updated quarterly to reflect changes to the membership (i.e. members being added or removed), as well as to update member weights over time.
5359

54-
**How split distributions work:**
55-
- The `distribute` function allocates tokens in the split contract to Guild members according to their weights (it does not move the funds into the member wallets)
56-
- Once distribute has been triggered, members can trigger the `withdrawForMyself` function to deposit tokens into their wallets
60+
**How it works:**
61+
- Distributions:
62+
- The `distribute` function allocates tokens in the split contract to Guild members according to their weights (it does not move the funds into the member wallets)
63+
- Once distribute has been triggered, members can trigger the `withdrawForMyself` function to deposit tokens into their wallets
64+
- Updates:
65+
- Membership changes are ratified once a quarter with a vote in the Guild’s Moloch V3 DAO, where new members are added / old members are removed in an onchain “Signal Proposal”
66+
- Once the DAO proposal is executed, the Guild’s 6/10 multisig exports the offchain membership registry (with member addresses and weights), and uploads it as a CSV into the split contract to update it
67+
- Official documentation:
68+
- Split V1: [https://docs.splits.org/core/split](https://docs.splits.org/core/split)
69+
- Split V2: [https://docs.splits.org/core/split-v2](https://docs.splits.org/core/split-v2)
5770

58-
**How split updates work:**
59-
- Membership changes are ratified once a quarter with a vote in the Guild’s Moloch V3 DAO, where new members are added / old members are removed in an onchain “Signal Proposal”
60-
- Once the DAO proposal is executed, the Guild’s 6/10 multisig exports the offchain membership registry (with member addresses and weights), and uploads it as a CSV into the split contract to update it
71+
**Deployed Splits Contracts:**
6172

73+
- Mainnet: [0xd982477216dadd4c258094b071b49d17b6271d66](https://app.splits.org/accounts/0xd982477216dadd4c258094b071b49d17b6271d66/?chainId=1)
74+
- Deprecated:
75+
- [0x84af3D5824F0390b9510440B6ABB5CC02BB68ea1](https://app.0xsplits.xyz/accounts/0x84af3D5824F0390b9510440B6ABB5CC02BB68ea1/)
76+
- [0xd4ad8daba9ee5ef16bb931d1cbe63fb9e102ec10](https://app.splits.org/accounts/0xd4ad8daba9ee5ef16bb931d1cbe63fb9e102ec10/)
77+
- Arbitrum: [0xd982477216dadd4c258094b071b49d17b6271d66](https://app.splits.org/accounts/0xd982477216dadd4c258094b071b49d17b6271d66/?chainId=42161)
78+
- Base: [0xd982477216dadd4c258094b071b49d17b6271d66](https://app.splits.org/accounts/0xd982477216dadd4c258094b071b49d17b6271d66/?chainId=8453)
79+
- Optimism: [0xd982477216dadd4c258094b071b49d17b6271d66](https://app.splits.org/accounts/0xd982477216dadd4c258094b071b49d17b6271d66/?chainId=10)
80+
- Deprecated: [0xc20A515648ecC1f379fDF6ECE07552a9093F416E](https://app.splits.org/accounts/0xc20A515648ecC1f379fDF6ECE07552a9093F416E/?chainId=10)
81+
6282
### Moloch v3 DAO
6383

64-
- Contract address: [0x412a32dd71357bd12337f4408168df903f90cbd3](https://admin.daohaus.club/#/molochv3/0x1/0x412a32dd71357bd12337f4408168df903f90cbd3/members)
65-
- Official documentation: [https://moloch.daohaus.fun/](https://moloch.daohaus.fun/)
66-
6784
The Guild uses [DAOhaus'](https://daohaus.club/) Moloch V3 contracts for onchain governance. The DAO includes all Guild members, with one person one vote, including vote delegation.
6885

6986
The DAO does not keep track of member weights, nor does it hold any funds. Currently, it is only used to ratify changes to the membership onchain. These changes are then processed by the Guild’s multisig (by updating the split contract).
7087

71-
**Proposal flow:**
88+
**How it works:**
7289
- Once a quarter, “Signal Proposals” are used to ratify changes to the membership onchain, which adjusts the DAO’s members in bulk (i.e. adding and removing members)
7390
- All proposals need to be sponsored by a DAO member before the voting period starts
7491
- The voting period lasts 5 days, with a 33% quorum required for proposals to pass
7592
- Proposals that reach quorum have a 2-day grace period before they can be executed
93+
- Official documentation: [https://moloch.daohaus.fun/](https://moloch.daohaus.fun/)
7694

77-
### Multisigs
95+
**Deployed DAOs:**
7896

79-
- Official documentation: [https://docs.safe.global/](https://docs.safe.global/)
97+
- Mainnet: [0x412a32dd71357bd12337f4408168df903f90cbd3](https://admin.daohaus.club/#/molochv3/0x1/0x412a32dd71357bd12337f4408168df903f90cbd3/members)
98+
99+
### Multisigs
80100

81101
The Guild has deployed 6/10 [Safe](https://safe.global/) multisig contracts to control the PTW and split contract, and to claim funds on mainnet and optimism (when donations cannot be sent to the vesting contact directly). Multisigs are also used to receive donations on most L2s, and then bridge those funds to mainnet.
82102

83103
The multisigs’ signers are not disclosed publicly, and are rotated regularly.
84104

85105
The aim is to reduce reliance on multisigs over time, to replace them with the DAO or other more trustless alternatives as the become available.
86106

87-
Multisigs associated with Protocol Guild:
107+
Safe official documentation: [https://docs.safe.global/](https://docs.safe.global/)
108+
109+
**Deployed Multisigs:**
88110

89111
- Mainnet
90112
- [PG Security Level 1 (PTW): 0xaaaa99a4660f97Ce648FcaE65BEf2f70CF9d404A](https://app.safe.global/balances?safe=eth:0xaaaa99a4660f97Ce648FcaE65BEf2f70CF9d404A)

0 commit comments

Comments
 (0)