mirror of
https://github.com/darkrenaissance/darkfi.git
synced 2026-01-08 22:28:12 -05:00
199 lines
6.5 KiB
SQL
199 lines
6.5 KiB
SQL
-- # 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
|
|
);
|
|
|
|
-- The merkle tree containing DAO bullas
|
|
CREATE TABLE IF NOT EXISTS Fd8kfCuqU8BoFFp6GcXv5pC8XXRkBK7gUPQX5XDz7iXj_dao_trees (
|
|
daos_tree BLOB NOT NULL,
|
|
proposals_tree BLOB NOT NULL
|
|
);
|
|
|
|
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
|
|
);
|