前言
這部分主要是對彩色幣的一種應用純粹概念性練習。
讓我們設想一個公司,投票後投資者委員會做出一些決定。
· 一些投資者對一個主題不夠了解,所以他們想將有關某些主題的決策委託給其他人;
· 存在大量潛在的共同投資者;
· 作為首席執行官,你希望有能力出售投票權為公司融資;
· 作為首席執行官,您希望當您決定時能夠投票;
彩色幣是如何幫助透明地組織這樣的投票?
在開始之前,讓我們來談談關於區塊鏈投票的一些不利之處:
· 沒有人知道選民的真實身份;
· 礦工們可以審查(即使這可能是可證明的,也不符合他們的利益);
· 即使沒有人知道選民的真實身份,多次投票的選民的行為分析可能會揭示他的身份;
這些要點是否相關取決於投票組織者的決定。
接下來我們來概述一下我們如何實現這一點。
發佈投票權
一切都始於公司的創始人(讓我們稱他為Boss),他希望將公司的“決定權”賣給一些投資者。決定權力可以採取一種彩色硬幣的形式,我們會為了這次練習而稱之為“Power Coin”。
我們用紫色代表它:
![「區塊鏈研究實驗室」流動式民主-區塊鏈的核心投票技術-第一部分](http://p2.ttnews.xyz/loading.gif)
假設有三個人感興趣,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,這裡是如何創建這樣的交易
![「區塊鏈研究實驗室」流動式民主-區塊鏈的核心投票技術-第一部分](http://p2.ttnews.xyz/loading.gif)
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
{
return tx.Outputs.AsCoins().Where(c => c.ScriptPubKey == owner.ScriptPubKey);
}
出於某種原因,Alice可能希望將她的一些投票權賣給Satoshi。
你可以注意到,我從初始化事務中花費了Alice的硬幣。
但是,我們還沒有看到如何輕鬆地從區塊鏈中檢索未使用的硬幣,所以讓我們想象一下,練習過程中,硬幣不是雙倍花費。
現在Alice和Satoshi有一些投票權,下一節讓我們來看看Boss如何進行投票。
閱讀更多 區塊鏈研究實驗室 的文章