「区块链研究实验室」流动式民主-区块链的核心投票技术-第一部分

前言

这部分主要是对彩色币的一种应用纯粹概念性练习。

让我们设想一个公司,投票后投资者委员会做出一些决定。

· 一些投资者对一个主题不够了解,所以他们想将有关某些主题的决策委托给其他人;

· 存在大量潜在的共同投资者;

· 作为首席执行官,你希望有能力出售投票权为公司融资;

· 作为首席执行官,您希望当您决定时能够投票;

彩色币是如何帮助透明地组织这样的投票?

在开始之前,让我们来谈谈关于区块链投票的一些不利之处:

· 没有人知道选民的真实身份;

· 矿工们可以审查(即使这可能是可证明的,也不符合他们的利益);

· 即使没有人知道选民的真实身份,多次投票的选民的行为分析可能会揭示他的身份;

这些要点是否相关取决于投票组织者的决定。

接下来我们来概述一下我们如何实现这一点。

发布投票权

一切都始于公司的创始人(让我们称他为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如何进行投票。


分享到:


相關文章: