「區塊鏈研究實驗室」流動式民主-區塊鏈的核心投票技術-第一部分

前言

這部分主要是對彩色幣的一種應用純粹概念性練習。

讓我們設想一個公司,投票後投資者委員會做出一些決定。

· 一些投資者對一個主題不夠了解,所以他們想將有關某些主題的決策委託給其他人;

· 存在大量潛在的共同投資者;

· 作為首席執行官,你希望有能力出售投票權為公司融資;

· 作為首席執行官,您希望當您決定時能夠投票;

彩色幣是如何幫助透明地組織這樣的投票?

在開始之前,讓我們來談談關於區塊鏈投票的一些不利之處:

· 沒有人知道選民的真實身份;

· 礦工們可以審查(即使這可能是可證明的,也不符合他們的利益);

· 即使沒有人知道選民的真實身份,多次投票的選民的行為分析可能會揭示他的身份;

這些要點是否相關取決於投票組織者的決定。

接下來我們來概述一下我們如何實現這一點。

發佈投票權

一切都始於公司的創始人(讓我們稱他為Boss),他希望將公司的“決定權”賣給一些投資者。決定權力可以採取一種彩色硬幣的形式,我們會為了這次練習而稱之為“Power Coin”。

我們用紫色代表它:

「區塊鏈研究實驗室」流動式民主-區塊鏈的核心投票技術-第一部分

假設有三個人感興趣,Satoshi,Alice和Bob。

所以Boss決定以每個0.1 BTC的價格賣出每個Power Coin。

讓我們開始撥款給powerCoin地址,satoshi,alice和bob。

var powerCoin = new Key();

var alice = new Key();

var bob = new Key();

var satoshi = new Key();

var init = new Transaction() {

Outputs = {

new TxOut(Money.Coins(1.0m), powerCoin),

new TxOut(Money.Coins(1.0m), alice),

new TxOut(Money.Coins(1.0m), bob),

new TxOut(Money.Coins(1.0m), satoshi),

}

};

var repo = new NoSqlColoredTransactionRepository();

repo.Transactions.Put(init);

Alice購買2個Power Coin,這裡是如何創建這樣的交易

「區塊鏈研究實驗室」流動式民主-區塊鏈的核心投票技術-第一部分

var issuance = GetCoins(init,powerCoin)

.Select(c=> new IssuanceCoin(c))

.ToArray();var builder = new TransactionBuilder();

var toAlice = builder .AddCoins(issuance)

.AddKeys(powerCoin)

.IssueAsset(alice, new AssetMoney(powerCoin, 2))

.SetChange(powerCoin)

.Then()

.AddCoins(GetCoins(init, alice))

.AddKeys(alice)

.Send(alice, Money.Coins(0.2m))

.SetChange(alice)

.BuildTransaction(true);

repo.Transactions.Put(toAlice);

總而言之,powerCoin向Alice發行2個Power Coins,並將更改發送給他自己。 同樣,Alice將0.2 BTC發送給powerCoin並將更改發送給她自己。

那麼GetCoins是在哪裡?

private IEnumerable GetCoins(Transaction tx, Key owner)

{

return tx.Outputs.AsCoins().Where(c => c.ScriptPubKey == owner.ScriptPubKey);

}

出於某種原因,Alice可能希望將她的一些投票權賣給Satoshi。

「區塊鏈研究實驗室」流動式民主-區塊鏈的核心投票技術-第一部分

你可以注意到,我從初始化事務中花費了Alice的硬幣。

但是,我們還沒有看到如何輕鬆地從區塊鏈中檢索未使用的硬幣,所以讓我們想象一下,練習過程中,硬幣不是雙倍花費。

現在Alice和Satoshi有一些投票權,下一節讓我們來看看Boss如何進行投票。


分享到:


相關文章: