Old Main DAO Contract

The two-fold DAO i.e MainDAO on Ethereum and nativeDAO on OpenWork Chain needs the ability to do the following through its smart contract/s.

The Main DAO on the Ethereum Mainnet should implement the following:

  1. Upgrading Smart Contracts

    1. Based on a majority vote system, the DAO has the ability to upgrade Implementation Smart Contracts of All OpenWork related Smart Contracts on all chains(through a bridge like CCIP) & Ethereum itself. OpenWork smart contracts would need to use a proxy that allows for upgradability. Upgradability framework should either use the diamond (seemingly preferred due to more modularity), UUPS or transparency standard

    2. The rules of the majority vote system itself must be upgradable. For now, for any smart contract upgrade it can start with something like 80% of votes needing to be in favour with a minimum 20% of the total token supply voting for a smart contract upgrade to take place.

  2. Treasury Management: The treasury would manage both OpenWork tokens and OpenWork’s funds in other crypto assets [ERC20, mainly should be USDC and USDT].

  3. 1B tokens are minted all at once on the Ethereum Mainnet. Initially managed by Armand, then DAO.

    1. Earnings & Governance Rewards: 400 million tokens

    2. Team & Contributors: 200 million tokens

    3. Private Round: 50 million tokens [Then token can be valued at just $4M in the private round, so 5% results in $200k raised for OpenWork to help us get traction needed before the ICO.]

    4. ICO: 200 million tokens [ICO to be launched once there are at least 200k worth of transactions. The token can be valued at just $10M in the private round, so 20% results in $2M raised for OpenWork.This can include private investors too.]

    5. Reserve & Liquidity: 150 million tokens (controlled by DAO in treasury)

  4. Tokens can be minted on other chains too but a matching amount has to be burned on Ethereum.

  5. Staking will be done on Ethereum through MainDAO. Other chains can access this info through a Bridge.

  6. Initiating Proposals: Members with at least 1M of OpenWork tokens staked are eligible to initiate treasury management proposals, ensuring active participants with significant stake can influence financial decisions.

  7. Voting Threshold for Approval: For a treasury proposal to pass, it requires an 80% majority in favour, with at least 20% of the total token supply participating in the vote.

  8. In sync with the upgrading step above, there should be the ability to upgrade for Future Rules: The DAO includes a framework for updating and customising voting rules and participation thresholds for treasury proposals, allowing governance practices to evolve based on community needs and experiences. Future updates could allow flexibility such that there are brackets for proposals, time based release of funds where community can revoke if progress isn’t seen. Decentraland’s DAO has this and it works well.

  9. [This should just be at least possible using upgrades] Using OpenWork itself to build and promote OpenWork. The OpenWork treasury should be usable so that it can create and manage jobs on OpenWork. For example, let's say it’s a community management activity, it should be all done through OpenWork’s work protocols. Ability for OpenWork itself to either instantly or at some point in the future be rebuilt using OpenWork’s protocols.

  10. Remove stake of member as a penalty.

  11. Delegation of votes to other addresses.

  12. Should interface with other chains to communicate things like how many tokens a member has staked.

  13. Should reference to all OpenWork contracts on all chains.

Intricacies of Staking:

  1. Any token holder with at least 100k staked can join the DAO.

  2. 1M tokens need to be staked by a member for proposing through the DAO.

  3. There are three types of people who can stake and participate in governance [DAO or Athena].

    1. People who have Earned Tokens

    2. Team

    3. People who have bought tokens

  4. Tokens can be staked for 1,2,3 years. Only the tokens which are locked or staked by an individual will count when voting. [1,2,3X respective governance power is given].

  5. Unstaked/Redeemed Tokens can be gotten back after 14 days from the last governance action.

Treasury Management

The treasury would manage both OpenWork tokens and OpenWork’s funds in other crypto assets [ERC20, mainly should be USDC and USDT].
Smart Contracts by default can accept all ETH compatible currencies. So no special implementation needed here

1B tokens are minted all at once on the Ethereum Mainnet. Initially managed by Armand, then DAO. Earnings & Governance Rewards: 400 million tokens Team & Contributors: 200 million tokens Private Round: 50 million tokens [Then token can be valued at just $4M in the private round, so 5% results in $200k raised for OpenWork to help us get traction needed before the ICO.] ICO: 200 million tokens [ICO to be launched once there are at least 200k worth of transactions. The token can be valued at just $10M in the private round, so 20% results in $2M raised for OpenWork.This can include private investors too.] Reserve & Liquidity: 150 million tokens (controlled by DAO in treasury)

Tokens will be minted using the mint() function. This function can be only called by the deployer & Governance. Governance means this function is called on passing of a proposal(described later on in this doc). There is no hard-coded division for the pools described in description. DAO has to make sure allocations are followed.

Tokens can be minted on other chains too but a matching amount has to be burned on Ethereum.

A proposal will be passed to mint tokens on other chain. If vote passes, mint() function on other chain will be called and simultaneously burn() function in this contract will be called. Initially this can also be done by the deployer.

Staking

Staking will be done on Ethereum through MainDAO. Other chains can access this info through a Bridge.

Only this contract will have the Stake function and will communicate this data to other chains through bridges. Other chains can call getStake(member_address) to get the stake of a person or getAllStakers() to get a llist of all stakers with their stakes.

There are three types of people who can stake and participate in governance [DAO or Athena]. 1.People who have Earned Tokens 2. Team 3. People who have bought tokens

There wil be 2 Stake functions: StakeBoughtTokens() - called by anyone who has bought tokens. StakeEarnedTokens() - called by Earners and Team Members. How are Earned Tokens identified? Whenever a Team Member is awarded tokens, their tokens are auto-staked by internally calling the StakeEarnedTokens() function

Tokens can be staked for 1,2,3 years. Only the tokens which are locked or staked by an individual will count when voting. [1,2,3X respective governance power is given].

Voting power = Staked Tokens X Period of staking This formula will be used while calculating the results of voting on proposals.

Unstaked/Redeemed Tokens can be gotten back after 14 days from the last governance action.

unstake() function will have a timelock of 14 days

Remove stake of member as a penalty.

This will done through a proposal

DAO Rules

Any token holder with at least 100k staked can join the DAO.

Anyone >100k tokens can call joinDAO() function and they will be stored in list of DAO member. DAOmember {member_address, staked_amount, period} People with more than 100k Earned tokens can call this function too.

Proposals & Voting

Initiating Proposals: Members with at least 1M of OpenWork tokens staked are eligible to initiate treasury management proposals, ensuring active participants with significant stake can influence financial decisions.

Any DAO member with >1M tokens can call the propose() function to initiate a proposal. Here's how a proposal can be called: Field 1 : Targets : this is the list of contract addresses to be called Field 2 : Value : this is the amount to be transferred Field 3 : Call Data : this is the encoded signature of the function that needs to be called after the proposal is passed. Field 4 : description : a small description of the proposal

Voting Threshold for Approval: For a treasury proposal to pass, it requires an 80% majority in favour, with at least 20% of the total token supply participating in the vote.

This is defined as the quorum value which can be changed later using a proposal.

[This should just be at least possible using upgrades] Using OpenWork itself to build and promote OpenWork. The OpenWork treasury should be usable so that it can create and manage jobs on OpenWork. For example, let's say it’s a community management activity, it should be all done through OpenWork’s work protocols. Ability for OpenWork itself to either instantly or at some point in the future be rebuilt using OpenWork’s protocols.

Again, proposals can be used to do this.

Delegation of votes to other addresses.

there's a default delegate() function in the governor pattern which needs to be declared.

Bridging

Should interface with other chains to communicate things like how many tokens a member has staked and upgrades on other chains.

Other chains can call functions like - getStake(member_address), getAllDAOmembers() and isDAOmember() - to get info about DAO members and their stake. For upgrades on other chains, this contract will have a function to call the upgrade function on any other chain. Only Governance can call the upgradeInterchain() function with the following params: 1. Chain ID of target chain, 2.contract address of the proxy contract, 3.Contract address of the new implementation address.

Should reference all OpenWork contracts on all chains.

A struct call originalContract will hold the latest addresses of the official contract on all chains. There will also be a getter function to verify if a particular address if the official one or not.

Upgrading Smart Contracts

Based on a majority vote system, the DAO has the ability to upgrade Implementation Smart Contracts of All OpenWork related Smart Contracts on all chains(through a bridge like CCIP) & Ethereum itself. OpenWork smart contracts would need to use a proxy that allows for upgradability. Upgradability framework should either use the diamond (seemingly preferred due to more modularity), UUPS or transparency standard

We will most like likely use the UUPS pattern for upgrade-ability. All contracts will have a proxy contract and an implementation contract.

The rules of the majority vote system itself must be upgradable. For now, for any smart contract upgrade it can start with something like 80% of votes needing to be in favour with a minimum 20% of the total token supply voting for a smart contract upgrade to take place.

This can be done through a proposal to upgrade the DAO contract or just call the function to update the quorum settings.

In sync with the upgrading step above, there should be the ability to upgrade for Future Rules: The DAO includes a framework for updating and customising voting rules and participation thresholds for treasury proposals, allowing governance practices to evolve based on community needs and experiences. Future updates could allow flexibility such that there are brackets for proposals, time based release of funds where community can revoke if progress isn’t seen. Decentraland’s DAO has this and it works well.

Last updated