-
Notifications
You must be signed in to change notification settings - Fork 10
feat: psp22 example DAO contract #407
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Closed
Closed
Changes from all commits
Commits
Show all changes
54 commits
Select commit
Hold shift + click to select a range
d8f3c22
Dao contract
ndkazu 5cbb44a
Added some events
ndkazu bb060f1
removed absent module
ndkazu 30637ae
Added some in-code documentation
ndkazu e6c9edd
Corrected index error
ndkazu 058e53b
Problem with first test
ndkazu ff2b300
Making sense of pop-drink for testing
ndkazu 2505f89
Added lib.rs to Cargo, but still...
ndkazu 6f653a9
Added the correct deploy() function in tests
ndkazu aacbf87
Put a limitation of description string length
ndkazu f746400
chore: add missing authors
chungquantin 285c178
new member test added
ndkazu 34002d0
create_proposal test
ndkazu d17096c
Calls prepared for testing
ndkazu 3f2c114
ReadMe
ndkazu 22d46e3
ReadME
ndkazu b02f232
create_proposal_test
ndkazu c08b335
Another test
ndkazu 7a1563b
Enactment test
ndkazu 9eca1b2
one more test
ndkazu b0d6194
Reverted some changes
ndkazu f8910ce
Reverted some changes
ndkazu 94d884e
Documented the failing test: proposal_enactment_works
ndkazu 00d76c0
Another test...
ndkazu 8de7a7d
tests
ndkazu 5e91679
refactored the code & added another test
ndkazu 77328df
Treasury balance check & another test
ndkazu a8206d4
Another test
ndkazu 56e622d
cargo fmt
ndkazu 4ad34f4
Final test
ndkazu 0cd9573
Applied some fixes related to the code review
ndkazu be3759f
Added ProposalStatus enum
ndkazu a34f0d1
Added descriptions for errors
ndkazu 5e8e8e4
Review correction
ndkazu ede1283
cargo clippy
ndkazu 425d757
Merge branch 'r0gue-io:main' into psp22Example
ndkazu 0e2db17
update ink version
ndkazu 21b13c5
cargo clippy --fix
ndkazu 34ba35c
Some clean up
ndkazu bd11e86
All tests pass
ndkazu 905705c
cargo fmt
ndkazu 0841c32
Refactored code, implemented Default trait for Proposal
ndkazu 562b17f
cargo fmt
ndkazu eaae705
Preparations for use of RuntimeCall
ndkazu adb72f9
Use transfer_from instead of transfer for runtime_call
ndkazu 290d0ec
Corrected test mistake, using transfer_from instead of transfer
ndkazu bad1126
RuntimeCall working
ndkazu 32ecca5
Corrections
ndkazu c357a07
Code re-factoring
ndkazu c0f9f9d
RuntimeCall conversion problem
ndkazu 2526c04
customised RuntimeCalls works
ndkazu 9e7313a
Merge branch 'main' into psp22Example
ndkazu 026b909
Applied the corrections
ndkazu 739a235
cargo.toml update
ndkazu File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
[package] | ||
authors = ["R0GUE <[email protected]>"] | ||
edition = "2021" | ||
name = "dao" | ||
version = "0.1.0" | ||
|
||
[dependencies] | ||
ink = { version = "5.1.0", default-features = false, features = ["ink-debug"] } | ||
pop-api = { path = "../../../pop-api", default-features = false, features = [ | ||
"fungibles", | ||
] } | ||
|
||
[dev-dependencies] | ||
drink = { package = "pop-drink", git = "https://github.com/r0gue-io/pop-drink" } | ||
env_logger = { version = "0.11.3" } | ||
serde_json = "1.0.114" | ||
|
||
[lib] | ||
path = "src/lib.rs" | ||
|
||
[features] | ||
default = ["std"] | ||
e2e-tests = [] | ||
ink-as-dependency = [] | ||
std = [ | ||
"ink/std", | ||
"pop-api/std", | ||
] |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,66 @@ | ||
# PSP22 DAO contract example | ||
This contract implements a Decentralized Autonomous Organization with token-based voting system built with Pop API. Members can submit a proposal, vote for or against it, and enact approved proposals. | ||
|
||
## Description | ||
This contract implements a Decentralized Autonomous Organization using Psp22. | ||
ndkazu marked this conversation as resolved.
Show resolved
Hide resolved
|
||
The key functionalities include: | ||
- **Membership Management**: It maintains a registry of DAO members. | ||
- **Proposal Lifecycle**: The contract manages the creation, voting, and execution of proposals. Each proposal includes details like description, voting period, vote tallies, execution status, beneficiary, and amount to be awarded. | ||
- **Voting Mechanism**: It implements a voting system where members can vote with their balance on proposals. The contract tracks voting periods and maintains vote counts for each proposal. | ||
- **Token Integration**: The Pop API is used to create and manage the DAO token. | ||
- **Governance Parameters**: governance parameters such as voting periods are customizable. | ||
- **Vote Tracking**: The contract keeps track of when members last voted. | ||
- **Proposal Execution**: Once a proposal's voting period ends and passes, the contract handles its execution: transferring funds to the chosen beneficiary. | ||
|
||
|
||
## Dao Workflow | ||
- **Subscription**: The first step is membership: users use their funds* to join the Dao, become members, and determine their voting power, as membership gives them the right to vote on the use of the Dao Treasury. | ||
- **Proposal**: Dao members can create spending proposals for the treasury. At the moment, the voting period for the proposal is given by the proposal creator, but this could be a Dao parameter, determined by the creator of the Dao contract. | ||
- **Vote**: Members of the Dao can vote for or against a given proposal, through the selection of the corresponding proposal ID. The vote has to be cast within the voting period of the selected proposal. | ||
- **Proposal enactment**: After the end of the voting period, If the proposal has been accepted by the Dao Members, the proposal can be enacted, i.e. funds can be claimed/transferred to the account specified as the beneficiary in the proposal. Any member can claim the reward for the winning proposal. | ||
|
||
|
||
## Test with Pop Drink | ||
|
||
Since this contract interacts directly with Pop’s runtime through the Pop API, it requires [Pop Drink](https://github.com/r0gue-io/pop-drink) for testing. See how the contract is tested in [tests](./tests.rs). | ||
|
||
## Support | ||
|
||
Be part of our passionate community of Web3 builders. [Join our Telegram](https://t.me/onpopio)! | ||
|
||
Feel free to raise issues if anything is unclear, you have ideas or want to contribute to Pop! Examples using the fungibles API are always welcome! | ||
|
||
For any questions related to ink! you can also go to [Polkadot Stack Exchange](https://polkadot.stackexchange.com/) or | ||
ask the [ink! community](https://t.me/inkathon/1). | ||
|
||
ndkazu marked this conversation as resolved.
Show resolved
Hide resolved
|
||
### Flowchart | ||
|
||
```mermaid | ||
flowchart LR | ||
A[Subscriber A] -->|Joins DAO| M[Membership Process] | ||
B[Subscriber B] -->|Joins DAO| M | ||
C[Subscriber C] -->|Joins DAO| M | ||
D[Subscriber D] -->|Joins DAO| M | ||
M --> E[Subscriber B creates Proposal] | ||
E --> F[Voting Process] | ||
F -->|Votes by| G[Subscribers A, C, D] | ||
G --> H{Proposal Accepted?} | ||
H -- Yes --> I[Proposal Enactment] | ||
H -- No --> J[End of Process] | ||
I --> K[Subscriber A claims reward for proposal's beneficiary] | ||
K --> L[Funds transferred to beneficiary] | ||
|
||
style A fill:#f9f,stroke:#333,stroke-width:2px | ||
style B fill:#f9f,stroke:#333,stroke-width:2px | ||
style C fill:#f9f,stroke:#333,stroke-width:2px | ||
style D fill:#f9f,stroke:#333,stroke-width:2px | ||
style M fill:#bbf,stroke:#333,stroke-width:2px | ||
style E fill:#bbf,stroke:#333,stroke-width:2px | ||
style F fill:#bbf,stroke:#333,stroke-width:2px | ||
style G fill:#bbf,stroke:#333,stroke-width:2px | ||
style H fill:#ff0,stroke:#333,stroke-width:2px | ||
style I fill:#bfb,stroke:#333,stroke-width:2px | ||
style J fill:#f99,stroke:#333,stroke-width:2px | ||
style K fill:#bfb,stroke:#333,stroke-width:2px | ||
style L fill:#bfb,stroke:#333,stroke-width:2px | ||
``` |
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.