前言
这部分主要是对彩色币的一种应用纯粹概念性练习。
让我们设想一个公司,投票后投资者委员会做出一些决定。
· 一些投资者对一个主题不够了解,所以他们想将有关某些主题的决策委托给其他人;
· 存在大量潜在的共同投资者;
· 作为首席执行官,你希望有能力出售投票权为公司融资;
· 作为首席执行官,您希望当您决定时能够投票;
彩色币是如何帮助透明地组织这样的投票?
在开始之前,让我们来谈谈关于区块链投票的一些不利之处:
· 没有人知道选民的真实身份;
· 矿工们可以审查(即使这可能是可证明的,也不符合他们的利益);
· 即使没有人知道选民的真实身份,多次投票的选民的行为分析可能会揭示他的身份;
这些要点是否相关取决于投票组织者的决定。
接下来我们来概述一下我们如何实现这一点。
发布投票权
一切都始于公司的创始人(让我们称他为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如何进行投票。
閱讀更多 區塊鏈研究實驗室 的文章