From b6c9e28f6f08bd39d1270128e605dd97c226e686 Mon Sep 17 00:00:00 2001 From: Daniel Luca Date: Tue, 25 Aug 2020 20:28:52 +0300 Subject: [PATCH 01/11] [WIP] Drafting the DAO proposal --- bbips/001-BarnBridgeDAO.md | 74 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 bbips/001-BarnBridgeDAO.md diff --git a/bbips/001-BarnBridgeDAO.md b/bbips/001-BarnBridgeDAO.md new file mode 100644 index 0000000..a61e5e8 --- /dev/null +++ b/bbips/001-BarnBridgeDAO.md @@ -0,0 +1,74 @@ +--- +bbip: 1 +title: BarnBridge DAO +torchbearer: Daniel Luca (@CleanUnicorn) +author: Daniel Luca (@CleanUnicorn) +discussions-to: +status: Draft +created: 2020-08-25 +--- + +## Simple summary + +The kernel of the BarnBridge platform is a DAO controlled by the community. This describes that DAO. + +## Abstract + +This smart contract needs to be a governance, also known as a Decentralized Autonomous Organization, referred to as **BarnBridge DAO**. + +The design and architecture of this DAO defines what can be done in the future, thus it needs to be flexible enough to allow for future functionality to be added, updated or removed. An in progress standard known as [EIP-2535 Diamond Standard](https://eips.ethereum.org/EIPS/eip-2535) defines an architecture which can be used to create DAOs with a flexible set of features. + +The BarnBridge DAO will become the core component of the BarnBridge Platform because it will be able to make decisions in a decentralized manner that will be able to enforce the best actions for the wellness of the community. + +## Background + +In order to choose how the architecture should behave and what features this DAO should have, we are looking at the existing DAOs in the Ethereum ecosystem. + +The following DAOs (or governance templates) were considered for inspiration: + +[Aragon DAO](https://github.com/aragon/aragon-apps/blob/05d7692fcfb9cf5bc25a96674e09825defa2bbf3/apps/voting/contracts/Voting.sol) has a simple voting mechanism where actors can vote with their own tokens, power of their vote is linearly proportional with the actor's tokens. + - [`changeSupportRequiredPct(uint64 _supportRequiredPct)`](https://github.com/aragon/aragon-apps/blob/05d7692fcfb9cf5bc25a96674e09825defa2bbf3/apps/voting/contracts/Voting.sol#L95) + - [`changeMinAcceptQuorumPct(uint64 _minAcceptQuorumPct)`](https://github.com/aragon/aragon-apps/blob/05d7692fcfb9cf5bc25a96674e09825defa2bbf3/apps/voting/contracts/Voting.sol#L110) + - [`newVote(bytes _executionScript, string _metadata)` +- MakerDAO + - +- Aave DAO + - newProposal + - submitVoteByVoter + - cancelVoteByVoter + - tryToMoveToValidating + - challengeVoters + - resolveProposal + - no meta voting (will be added in the future) + +- [MolochDAO](https://github.com/MolochVentures/moloch) + +Features we will implement for BarnBridge DAO: +- It can upgrade itself - a proposal can be created to self upgrade the DAO. +- The tokens are not locked in the contract - the tokens are still in the actor's balance, they are not transferred to the DAO. +- The proposal is an individual smart contract - the code which will be run, when the proposal is passed, is easily readable. The source code should be available on [Etherscan.io](https://etherscan.io) for anyone to read. +- Actors can cancel their vote - cancelling the vote will remove their voting power for that proposal. + +## Specification + +The DAO MUST implement the [EIP-2535 Diamond Standard](https://eips.ethereum.org/EIPS/eip-2535). This means that in the future more functionality can be added to the governance contract. An example of a functionality that is useful and will not change how the DAO works, but it will improve the usability, is the ability to vote using *meta transactions*. + +Configurable parameters: + +- minimum voting threshold - a minimum absolute number (or percentage) that the proposal should have in order to pass or fail +- minimum proposal duration - a minimum time that a proposal needs to be open in order to collect the needed votes +- + + + +The technical specification should be detailed and should describe the syntax, semantics and interface of any feature. The specs should be detailed enough to allow technical discussions and ideation on top of this. + +## Implementation (optional) + +The implementation can be added and updated before the **Frozen** state of the BBIP. It can be still be updated before that, even in the **Accepted** state. + +This does not need to be the only implementation, but a canonical implementation is useful. + +## Copyright + +To be decided. \ No newline at end of file From 7679f33af7aed580c20f0be7a80cc73a25c5a65c Mon Sep 17 00:00:00 2001 From: Daniel Luca Date: Wed, 26 Aug 2020 14:52:03 +0300 Subject: [PATCH 02/11] [WIP] Sync notes with team. --- bbips/001-BarnBridgeDAO.md | 79 ++++++++++++++++++++++++++++++++------ 1 file changed, 68 insertions(+), 11 deletions(-) diff --git a/bbips/001-BarnBridgeDAO.md b/bbips/001-BarnBridgeDAO.md index a61e5e8..995b6cc 100644 --- a/bbips/001-BarnBridgeDAO.md +++ b/bbips/001-BarnBridgeDAO.md @@ -44,24 +44,81 @@ The following DAOs (or governance templates) were considered for inspiration: - [MolochDAO](https://github.com/MolochVentures/moloch) Features we will implement for BarnBridge DAO: -- It can upgrade itself - a proposal can be created to self upgrade the DAO. -- The tokens are not locked in the contract - the tokens are still in the actor's balance, they are not transferred to the DAO. -- The proposal is an individual smart contract - the code which will be run, when the proposal is passed, is easily readable. The source code should be available on [Etherscan.io](https://etherscan.io) for anyone to read. -- Actors can cancel their vote - cancelling the vote will remove their voting power for that proposal. +- It can upgrade itself - A proposal can be created to self upgrade the DAO. +- The tokens are not locked in the contract - The tokens are still in the actor's balance, they are not transferred to the DAO. +- The proposal is an individual smart contract - The code which will be run, when the proposal is passed, is easily readable. The source code should be available on [Etherscan.io](https://etherscan.io) for anyone to read. +- Actors can cancel their vote - Cancelling the vote will remove their voting power for that proposal. +- Actors can change their vote - This is a combination of vote cancelling and a normal vote. + +Features we might implement in the future: +- Deposit when proposal is created - Is a deposit needed when the proposal is created? Will this deposit be returned or lost in any special case? +- Anyone can create proposals - We need to discuss whether anyone can create proposals or only some actors. This needs to be clear right from the start; maybe only $BOND token owners can create proposal, or only the founders / investors / advisors. +- Do we want to punish people if they don't vote? +- Do we want to reward people if they vote? ## Specification -The DAO MUST implement the [EIP-2535 Diamond Standard](https://eips.ethereum.org/EIPS/eip-2535). This means that in the future more functionality can be added to the governance contract. An example of a functionality that is useful and will not change how the DAO works, but it will improve the usability, is the ability to vote using *meta transactions*. +The DAO MUST implement the [EIP-2535 Diamond Standard](https://eips.ethereum.org/EIPS/eip-2535). This means that in the future more functionality can be added to the governance contract. -Configurable parameters: +An example of a functionality that can be added after the initial launch, which will improve the usability, is the ability to vote using *meta transactions*. Using meta transactions will allow users to store their tokens in a cold storage, while still being able to vote with those tokens. Another similar approach is to delegate votes to another address (hot wallet). -- minimum voting threshold - a minimum absolute number (or percentage) that the proposal should have in order to pass or fail -- minimum proposal duration - a minimum time that a proposal needs to be open in order to collect the needed votes -- +Configurable parameters (not constants): +- Minimum voting threshold - a minimum absolute number (or percentage) of votes that the proposal should have in order to pass or fail +- Minimum proposal duration - a minimum time that a proposal needs to be open in order to collect the needed votes +- Minimum grace period (optional / if needed) - a time interval where the votes can be contested by other parties. In case we delegate votes or do meta transactions, this period needs to exist to make sure no double voting happens. +Key methods: -The technical specification should be detailed and should describe the syntax, semantics and interface of any feature. The specs should be detailed enough to allow technical discussions and ideation on top of this. +``` +newProposal + - executor - the address of the contract that holds the code which will be executed when the proposal passes + - votingBlocksDuration - the number of blocks this proposal remains open, while waiting for the minimum number of votes + - challengeBlocksDuration - the number of blocks this proposal stays in challenge state, where actors can reveal double voting +``` + +The proposal should be a separate contract that holds the details related. This means that the `executor` contract will need to have the following properties: + +- name() - Proposal's name +- description() - Description of the proposal +- execute() - The function which will be executed when the proposal is passed + +Thus, it needs to implement this minimum interface: + +```solidity +interface IProposal { + // Returns the name of the proposal. This cannot be changed in the future. + function name() external pure returns (string memory); + + // Returns a more detailed description of the proposal. This cannot be changed in the future. + function description() external pure returns (string memory); + + // This is executed when the proposal is passed. + function execute() external; +} +``` + +This interface should be implemented by the contract which defines the proposal. Here is an example: + +```solidity +contract ExampleProposal is IProposal { + event ExampleProposalExecuted(); + + function name() public pure override(Proposal) returns(string memory) { + return 'The proposal name'; + } + + function description() public pure override(Proposal) returns(string memory) { + return 'A more detailed description of the proposal'; + } + + function execute() public override(Proposal) { + emit ExampleProposalExecuted(); + } +} +``` + + ## Implementation (optional) @@ -71,4 +128,4 @@ This does not need to be the only implementation, but a canonical implementation ## Copyright -To be decided. \ No newline at end of file +[Apache License Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) \ No newline at end of file From 252d569b5b015b11f42205105352a1ddd5c187c9 Mon Sep 17 00:00:00 2001 From: Daniel Luca Date: Wed, 26 Aug 2020 15:04:36 +0300 Subject: [PATCH 03/11] Restyle key methods. --- bbips/001-BarnBridgeDAO.md | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/bbips/001-BarnBridgeDAO.md b/bbips/001-BarnBridgeDAO.md index 995b6cc..db611de 100644 --- a/bbips/001-BarnBridgeDAO.md +++ b/bbips/001-BarnBridgeDAO.md @@ -70,12 +70,21 @@ Configurable parameters (not constants): Key methods: -``` -newProposal - - executor - the address of the contract that holds the code which will be executed when the proposal passes - - votingBlocksDuration - the number of blocks this proposal remains open, while waiting for the minimum number of votes - - challengeBlocksDuration - the number of blocks this proposal stays in challenge state, where actors can reveal double voting -``` +- newProposal - creates a new proposal + - executor - the address of the contract that holds the code which will be executed when the proposal passes + - votingBlocksDuration - the number of blocks this proposal remains open, while waiting for the minimum number of votes + - challengeBlocksDuration - the number of blocks this proposal stays in challenge state, where actors can reveal double voting + +- vote - cast a vote on an existing proposal. It can also be used to replace an existing vote. + - proposalID + - approve - true / false + +- cancelVote - remove vote + - proposalID + +- challengeVote + - proposalID + - voters[] - list of voters that do not hold the tokens they voted with The proposal should be a separate contract that holds the details related. This means that the `executor` contract will need to have the following properties: From 50b80bfe7740581bf7cdf154156757465a3da269 Mon Sep 17 00:00:00 2001 From: Daniel Luca Date: Wed, 26 Aug 2020 19:32:00 +0300 Subject: [PATCH 04/11] Publish draft. --- bbips/001-BarnBridgeDAO.md | 121 ++++++++++++++++++++++++++----------- 1 file changed, 86 insertions(+), 35 deletions(-) diff --git a/bbips/001-BarnBridgeDAO.md b/bbips/001-BarnBridgeDAO.md index db611de..ea1b502 100644 --- a/bbips/001-BarnBridgeDAO.md +++ b/bbips/001-BarnBridgeDAO.md @@ -26,22 +26,11 @@ In order to choose how the architecture should behave and what features this DAO The following DAOs (or governance templates) were considered for inspiration: -[Aragon DAO](https://github.com/aragon/aragon-apps/blob/05d7692fcfb9cf5bc25a96674e09825defa2bbf3/apps/voting/contracts/Voting.sol) has a simple voting mechanism where actors can vote with their own tokens, power of their vote is linearly proportional with the actor's tokens. - - [`changeSupportRequiredPct(uint64 _supportRequiredPct)`](https://github.com/aragon/aragon-apps/blob/05d7692fcfb9cf5bc25a96674e09825defa2bbf3/apps/voting/contracts/Voting.sol#L95) - - [`changeMinAcceptQuorumPct(uint64 _minAcceptQuorumPct)`](https://github.com/aragon/aragon-apps/blob/05d7692fcfb9cf5bc25a96674e09825defa2bbf3/apps/voting/contracts/Voting.sol#L110) - - [`newVote(bytes _executionScript, string _metadata)` -- MakerDAO - - -- Aave DAO - - newProposal - - submitVoteByVoter - - cancelVoteByVoter - - tryToMoveToValidating - - challengeVoters - - resolveProposal - - no meta voting (will be added in the future) - -- [MolochDAO](https://github.com/MolochVentures/moloch) +- [Aragon DAO](https://github.com/aragon/aragon-apps/blob/05d7692fcfb9cf5bc25a96674e09825defa2bbf3/apps/voting/contracts/Voting.sol) +- [MolochDAO / MetaCartel](https://github.com/MolochVentures/moloch) +- [Compound DAO](https://github.com/compound-finance/compound-protocol/blob/master/contracts/Governance/GovernorAlpha.sol) +- [Livepeer](https://github.com/livepeer/protocol/blob/1074b62435a6272470d40dc8ab3e3d80d5c2b634/contracts/polling/PollCreator.sol) +- [Aave DAO]() TODO: add link - code not public yet (Ernesto said code will be public next week) Features we will implement for BarnBridge DAO: - It can upgrade itself - A proposal can be created to self upgrade the DAO. @@ -68,31 +57,30 @@ Configurable parameters (not constants): - Minimum proposal duration - a minimum time that a proposal needs to be open in order to collect the needed votes - Minimum grace period (optional / if needed) - a time interval where the votes can be contested by other parties. In case we delegate votes or do meta transactions, this period needs to exist to make sure no double voting happens. -Key methods: +### Key methods (WIP) -- newProposal - creates a new proposal - - executor - the address of the contract that holds the code which will be executed when the proposal passes - - votingBlocksDuration - the number of blocks this proposal remains open, while waiting for the minimum number of votes - - challengeBlocksDuration - the number of blocks this proposal stays in challenge state, where actors can reveal double voting +- **propose** - creates a new proposal + - **executor** - the address of the contract that holds the code which will be executed when the proposal passes + - **votingBlocksDuration** - the number of blocks this proposal remains open, while waiting for the minimum number of votes + - **challengeBlocksDuration** - the number of blocks this proposal stays in challenge state, where actors can reveal double voting -- vote - cast a vote on an existing proposal. It can also be used to replace an existing vote. - - proposalID - - approve - true / false +- **vote** - cast a vote on an existing proposal. It can also be used to replace an existing vote. + - **proposalID** - unique identifier of the proposal + - **approve** - true / false -- cancelVote - remove vote - - proposalID +- **cancelVote** - remove one's vote + - **proposalID** - unique identifier of the proposal -- challengeVote - - proposalID - - voters[] - list of voters that do not hold the tokens they voted with +- **challengeVote** - use this in case double voting happened + - **proposalID** - unique identifier of the proposal + - **voters[]** - list of voters that do not hold the tokens they voted with -The proposal should be a separate contract that holds the details related. This means that the `executor` contract will need to have the following properties: +- **executeProposal** - after the proposal has gone through all necessary steps, execute it + - **proposalID** - unique identifier of the proposal -- name() - Proposal's name -- description() - Description of the proposal -- execute() - The function which will be executed when the proposal is passed +### Proposal -Thus, it needs to implement this minimum interface: +The proposal should be a separate contract that holds the related details. This means that the `executor` contract must implement this minimum interface: ```solidity interface IProposal { @@ -127,7 +115,70 @@ contract ExampleProposal is IProposal { } ``` - +This leaves the opportunity to expand the proposals, by just updating the frontend which pulls the information from the `executor` contract. + +### States + +- **Voting** - after a proposal was created it starts in the **Voting** state, where any token holder can vote +- **Validating** - after the required number of votes was accrued, the **Validating** stage allows any party to report double voting by anyone by calling `challengeVote` +- **Passed** - achieved after the **Validating** stage was successful, meaning it did not invalidate enough votes to push the proposal back to the **Voting** stage +- **Failed** - the proposal was rejected by the token owners +- **Expired** - the proposal did not gather enough votes before the expiration time +- **Executed** - a **Passed** proposal can be executed by anyone + +#### Flow diagram + +Flow diagram below. Created and updated with [asciiflow](http://asciiflow.com/). + +``` ++----------+ Enough opposing votes +-------------------------+ Not enough votes +---------+ +| | to cancel the proposal | | within the allotted time | | +| Failed | <------------------------+ Voting +--------------------------------> | Expired | +| | | | | | ++----------+ +-+-------------------+---+ +---------+ + | ^ + | Enough | Enough + | supporting | votes are + | votes | invalidated + | in the | to go back + | allotted | to Voting + | time | + | | + | | + v | + +--+-------------------+---+ + | | + | Validating | + | | + +--------------+-----------+ + | + | + | Proposal + | still has + | enough supporting + | votes at the end + | of the Validating stage + | + | + +-----+----+ + | | + | Passed | + | | + +-----+----+ + | + | + | Proposal + | is executed, + | code is run + | + | + v + +-------+----+ + | | + | Executed | + | | + +------------+ +``` ## Implementation (optional) From 9f6267b79151fe92fedecee6b307f2d14633de06 Mon Sep 17 00:00:00 2001 From: Daniel Luca Date: Wed, 26 Aug 2020 19:34:26 +0300 Subject: [PATCH 05/11] Add discussions-to URL. --- bbips/001-BarnBridgeDAO.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bbips/001-BarnBridgeDAO.md b/bbips/001-BarnBridgeDAO.md index ea1b502..110f139 100644 --- a/bbips/001-BarnBridgeDAO.md +++ b/bbips/001-BarnBridgeDAO.md @@ -3,8 +3,8 @@ bbip: 1 title: BarnBridge DAO torchbearer: Daniel Luca (@CleanUnicorn) author: Daniel Luca (@CleanUnicorn) -discussions-to: -status: Draft +discussions-to: https://github.com/BarnBridge/BBIP/pull/3 +status: Preview created: 2020-08-25 --- From f06c230c974b14c605ed2de2077393d3726a88bd Mon Sep 17 00:00:00 2001 From: Daniel Luca Date: Wed, 26 Aug 2020 19:38:05 +0300 Subject: [PATCH 06/11] Add possible future features. --- bbips/001-BarnBridgeDAO.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bbips/001-BarnBridgeDAO.md b/bbips/001-BarnBridgeDAO.md index 110f139..3b9b0c6 100644 --- a/bbips/001-BarnBridgeDAO.md +++ b/bbips/001-BarnBridgeDAO.md @@ -44,6 +44,8 @@ Features we might implement in the future: - Anyone can create proposals - We need to discuss whether anyone can create proposals or only some actors. This needs to be clear right from the start; maybe only $BOND token owners can create proposal, or only the founders / investors / advisors. - Do we want to punish people if they don't vote? - Do we want to reward people if they vote? +- Meta transactions +- Vote delegation ## Specification From 0d970603101c0632b99cea6e4efe03dd50346e0e Mon Sep 17 00:00:00 2001 From: Casian Lacatusu Date: Wed, 2 Sep 2020 12:48:51 +0300 Subject: [PATCH 07/11] add some more clarifying information --- bbips/001-BarnBridgeDAO.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/bbips/001-BarnBridgeDAO.md b/bbips/001-BarnBridgeDAO.md index 3b9b0c6..3b80462 100644 --- a/bbips/001-BarnBridgeDAO.md +++ b/bbips/001-BarnBridgeDAO.md @@ -59,6 +59,9 @@ Configurable parameters (not constants): - Minimum proposal duration - a minimum time that a proposal needs to be open in order to collect the needed votes - Minimum grace period (optional / if needed) - a time interval where the votes can be contested by other parties. In case we delegate votes or do meta transactions, this period needs to exist to make sure no double voting happens. +Other possible parameters: +- Maximum proposal duration - a maximum time that a proposal can be active. Depending on who will have the ability to create proposals, we might want to introduce a maximum proposal duration as an extra security layer to avoid spam. + ### Key methods (WIP) - **propose** - creates a new proposal @@ -77,7 +80,7 @@ Configurable parameters (not constants): - **proposalID** - unique identifier of the proposal - **voters[]** - list of voters that do not hold the tokens they voted with -- **executeProposal** - after the proposal has gone through all necessary steps, execute it +- **executeProposal** - after the proposal has gone through all necessary steps, execute it; since this cannont be called automatically, an external actor has to call this function when the proposal reached the `Passed` state - **proposalID** - unique identifier of the proposal ### Proposal @@ -119,6 +122,8 @@ contract ExampleProposal is IProposal { This leaves the opportunity to expand the proposals, by just updating the frontend which pulls the information from the `executor` contract. +The `execute()` function will be called via a `delegatecall` by the DAO contract. This gives any proposal unlimited power, including destroying the DAO. + ### States - **Voting** - after a proposal was created it starts in the **Voting** state, where any token holder can vote From 49e14c2d9baa129fcb5ecedb2a95acc28e54a981 Mon Sep 17 00:00:00 2001 From: Casian Lacatusu Date: Wed, 2 Sep 2020 13:00:35 +0300 Subject: [PATCH 08/11] Add author --- bbips/001-BarnBridgeDAO.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bbips/001-BarnBridgeDAO.md b/bbips/001-BarnBridgeDAO.md index 3b80462..48dc84e 100644 --- a/bbips/001-BarnBridgeDAO.md +++ b/bbips/001-BarnBridgeDAO.md @@ -2,7 +2,7 @@ bbip: 1 title: BarnBridge DAO torchbearer: Daniel Luca (@CleanUnicorn) -author: Daniel Luca (@CleanUnicorn) +authors: Daniel Luca (@CleanUnicorn), Casian Lacatusu (@kwix) discussions-to: https://github.com/BarnBridge/BBIP/pull/3 status: Preview created: 2020-08-25 From 0f77689d69e71390721c9f0652089f559146833e Mon Sep 17 00:00:00 2001 From: Daniel Luca Date: Wed, 2 Sep 2020 13:42:13 +0300 Subject: [PATCH 09/11] Update bbip-template.md --- bbip-template.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bbip-template.md b/bbip-template.md index 37c4db4..2ac1f93 100644 --- a/bbip-template.md +++ b/bbip-template.md @@ -28,4 +28,4 @@ This does not need to be the only implementation, but a canonical implementation ## Copyright -To be decided. \ No newline at end of file +[Apache License Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) From 45bcd1785bca6fe60d4fa2a373a010d5d1d62624 Mon Sep 17 00:00:00 2001 From: Daniel Luca Date: Thu, 10 Sep 2020 12:14:14 +0300 Subject: [PATCH 10/11] Fix proposal implementation example. --- bbips/001-BarnBridgeDAO.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/bbips/001-BarnBridgeDAO.md b/bbips/001-BarnBridgeDAO.md index 48dc84e..03091fd 100644 --- a/bbips/001-BarnBridgeDAO.md +++ b/bbips/001-BarnBridgeDAO.md @@ -106,15 +106,15 @@ This interface should be implemented by the contract which defines the proposal. contract ExampleProposal is IProposal { event ExampleProposalExecuted(); - function name() public pure override(Proposal) returns(string memory) { + function name() public pure override(IProposal) returns(string memory) { return 'The proposal name'; } - function description() public pure override(Proposal) returns(string memory) { + function description() public pure override(IProposal) returns(string memory) { return 'A more detailed description of the proposal'; } - function execute() public override(Proposal) { + function execute() public override(IProposal) { emit ExampleProposalExecuted(); } } @@ -195,4 +195,4 @@ This does not need to be the only implementation, but a canonical implementation ## Copyright -[Apache License Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) \ No newline at end of file +[Apache License Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) From beb37e212ec454e8343cdc98e2828f1f166ea87a Mon Sep 17 00:00:00 2001 From: Daniel Luca Date: Thu, 10 Sep 2020 12:29:28 +0300 Subject: [PATCH 11/11] Rename `propose` to `newProposal` --- bbips/001-BarnBridgeDAO.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bbips/001-BarnBridgeDAO.md b/bbips/001-BarnBridgeDAO.md index 03091fd..334c070 100644 --- a/bbips/001-BarnBridgeDAO.md +++ b/bbips/001-BarnBridgeDAO.md @@ -64,7 +64,7 @@ Other possible parameters: ### Key methods (WIP) -- **propose** - creates a new proposal +- **newProposal** - creates a new proposal - **executor** - the address of the contract that holds the code which will be executed when the proposal passes - **votingBlocksDuration** - the number of blocks this proposal remains open, while waiting for the minimum number of votes - **challengeBlocksDuration** - the number of blocks this proposal stays in challenge state, where actors can reveal double voting