| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 |
- -- # DAO::mint()
- --
- -- First one person will create the DAO
- --
- -- $ drk dao create_dao \
- -- PROPOSER_LIMIT \
- -- QUORUM \
- -- EARLY_EXEC_QUORUM \
- -- APPROVAL_RATIO \
- -- GOV_TOKEN_ID > dao.toml
- --
- -- dat.toml contains:
- --
- -- * DAO parameters as listed above
- -- * Secret keys for the DAO
- -- * Bulla blind
- --
- -- We can view the data like so:
- --
- -- $ drk dao view < dao.toml
- --
- -- Now everyone inside the DAO exchanges dao.toml out of band,
- -- will import it into their wallets.
- --
- -- $ drk dao import DAO_NAME < dao.toml
- -- Imported DAO ccb8XXX8af6
- --
- -- Where ccb8XXX8af6 is the DAO's name.
- --
- -- Next someone that holds all the keys will mint it on chain
- --
- -- $ drk dao mint DAO_NAME > dao_mint_tx
- -- $ drk broadcast < dao_mint_tx
- --
- -- And then the others will receive confirmation that the DAO they imported
- -- into their wallet has also been accepted on chain.
- --
- -- # Minting and Receiving Coin
- --
- -- Assume that the governance tokens have been created and distributed
- -- appropriately among DAO members. We will skip that part here.
- --
- -- Now the DAO can receive coins into its treasury. These coins simply
- -- have both the coin's spend_hook and user_data fields set correctly
- -- otherwise they are rejected as invalid/malformed.
- --
- -- # DAO::propose()
- --
- -- Create a transfer proposal for the DAO
- --
- -- $ drk dao propose-transfer \
- -- DAO_NAME \
- -- DURATION \
- -- AMOUNT \
- -- SENDCOIN_TOKEN_ID \
- -- RECV_PUBKEY
- --
- -- If we don't have enough tokens to meet the proposer_limit threshold
- -- or don't hold the proposer key, then this call will simply fail with
- -- an error message. Nothing will be added to the database or sent to the
- -- network.
- --
- -- Once a proposal has been generated, it can be exported and shared
- -- to other participants.
- --
- -- $ drk dao proposal PROPOSAL_BULLA --export > dao_transfer_proposal.dat
- -- $ drk dao proposal-import < dao_transfer_proposal.dat
- --
- -- We can now mint the proposal on-chain
- --
- -- $ drk dao proposal PROPOSAL_BULLA --mint-proposal > dao_proposal_tx
- -- $ drk broadcast < dao_proposal_tx
- --
- -- # DAO::vote()
- --
- -- You have received a proposal which is active. You can now vote on it.
- -- You will see other votes only if you hold the DAO votes view key.
- --
- -- $ drk dao proposals DAO_NAME
- -- 0. f6cae63ced53d02b372206a8d3ed5ac03fde18da306a520285fd56e8d031f6cf
- -- 1. 1372622f4a38be6eb1c90fa67864474c6603d9f8d4228106e20e2d0d04f2395e
- -- 2. 88b18cbc38dbd3af8d25237af3903e985f70ea06d1e25966bf98e3f08e23c992
- --
- -- $ drk dao show_proposal f6cae...1f6cf
- -- Proposal parameters
- -- ===================
- -- Bulla: f6cae...1f6cf
- -- DAO Bulla: 2Wmyc...zQeke
- -- Proposal leaf position: Position(1)
- -- Proposal transaction hash: 07148...52f96
- -- Proposal call index: 0
- -- Creation block window: 0
- -- Duration: 30 (Block windows)
- --
- -- Invoked contracts:
- -- Contract: Fd8kf...z7iXj
- -- Function: 4
- -- Data:
- -- Recipient: DQeQR...q31Fz
- -- Amount: 690000000 (6.9)
- -- Token: GY8xX...xY8Qu
- -- Spend hook: 6iW9n...2GLuT
- -- User data: 0x35431...e3678
- -- Blind: 13EHb...xR6ng
- --
- -- Contract: BZHKG...4yf4o
- -- Function: 3
- -- Data: -
- --
- -- Votes:
- -- ...
- -- Total tokens votes: X + Y
- -- Total tokens Yes votes: X (60%)
- -- Total tokens No votes: Y
- -- Voting status: Ongoing
- -- Current proposal outcome: Rejected
- --
- -- $ drk dao vote f6cae...1f6cf 1 > dao_vote_tx
- -- $ drk broadcast < dao_vote_tx
- --
- -- # DAO::exec()
- --
- -- Once there are enough yes votes to satisfy the quorum and approval ratio,
- -- then any DAO member can execute the proposal.
- --
- -- $ drk dao exec f6cae...1f6cf > dao_exec_tx
- -- $ drk broadcast < dao_exec_tx
- CREATE TABLE IF NOT EXISTS Fd8kfCuqU8BoFFp6GcXv5pC8XXRkBK7gUPQX5XDz7iXj_dao_daos (
- -- Bulla identifier of the DAO
- bulla BLOB PRIMARY KEY NOT NULL,
- -- Unique name identifier of the DAO
- name TEXT UNIQUE NOT NULL,
- -- DAO parameters
- params BLOB NOT NULL,
- -- These values are NULL until the DAO is minted on chain and received
- -- Leaf position of the DAO in the Merkle tree of DAOs
- leaf_position BLOB,
- -- The transaction hash where the DAO was deployed
- tx_hash BLOB,
- -- The call index in the transaction where the DAO was deployed
- call_index INTEGER
- );
- CREATE TABLE IF NOT EXISTS Fd8kfCuqU8BoFFp6GcXv5pC8XXRkBK7gUPQX5XDz7iXj_dao_proposals (
- -- Bulla identifier of the proposal
- bulla BLOB PRIMARY KEY NOT NULL,
- -- Bulla identifier of the DAO this proposal is for
- dao_bulla BLOB NOT NULL,
- -- The on chain representation of the proposal
- proposal BLOB NOT NULL,
- -- Plaintext proposal call data the members share between them
- data BLOB,
- -- These values are NULL until the proposal is minted on chain and received
- -- Leaf position of the proposal in the Merkle tree of proposals
- leaf_position BLOB,
- -- Money merkle tree snapshot for reproducing the snapshot Merkle root
- money_snapshot_tree BLOB,
- -- Money nullifiers SMT snapshot for reproducing the snapshot Merkle root
- nullifiers_smt_snapshot BLOB,
- -- The transaction hash where the proposal was deployed
- tx_hash BLOB,
- -- The call index in the transaction where the proposal was deployed
- call_index INTEGER,
- -- This value is NULL until the proposal is executed on chain and received
- exec_tx_hash BLOB,
- FOREIGN KEY(dao_bulla) REFERENCES Fd8kfCuqU8BoFFp6GcXv5pC8XXRkBK7gUPQX5XDz7iXj_dao_daos(bulla) ON DELETE CASCADE ON UPDATE CASCADE
- );
- CREATE TABLE IF NOT EXISTS Fd8kfCuqU8BoFFp6GcXv5pC8XXRkBK7gUPQX5XDz7iXj_dao_votes (
- -- Numeric identifier of the vote
- vote_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
- -- Bulla identifier of the proposal this vote is for
- proposal_bulla BLOB NOT NULL,
- -- The vote
- vote_option INTEGER NOT NULL,
- -- Blinding factor for the yes vote
- yes_vote_blind BLOB NOT NULL,
- -- Value of all votes
- all_vote_value BLOB NOT NULL,
- -- Blinding facfor of all votes
- all_vote_blind BLOB NOT NULL,
- -- Transaction hash where this vote was casted
- tx_hash BLOB NOT NULL,
- -- Call index in the transaction where this vote was casted
- call_index INTEGER NOT NULL,
- -- Vote input nullifiers
- nullifiers BLOB NOT NULL,
- FOREIGN KEY(proposal_bulla) REFERENCES Fd8kfCuqU8BoFFp6GcXv5pC8XXRkBK7gUPQX5XDz7iXj_dao_proposals(bulla) ON DELETE CASCADE ON UPDATE CASCADE
- );
|