Decred(德信币)

  • 简介

    Decred,代币DCR,于2015年9月首次推出,是基于社区管理系统集成到区域块链中的一种开放的和渐进的加密数字货币,类似于比特币,使用Blake-256散列算法。它创新性地在区块链中集成了治理机制,采用创新混合工作量证明 (PoW) 和权益证明 (PoS) 的共识投票系统,加强了利益相关者的自主权,解决了比特币当时的主要治理问题,也奠定了它长期发展的基础。

    Decred代币数量和比特币一样,为2100万个,每个DCR可以为108份。在区块被添加到主链后,会发行30枚新DCR币(现在减少了,PoW矿工到手不到12个),其中60%给PoW矿工,30%给PoS持有人,10%给基金。

    Decred的开发人员来自于比特币bitsuite项目团队,创始人 Jake Yocom,2013年曾带领团队参与过比特币生态系统的开发。目前根据Decred的整个开发进程,可以发现整个团队的技术实力雄厚,对区块链有自己的理解、执行能力特别强,现在Decred规划的大部分功能基本已经实现。

    Decred团队的两位顾问Charlie Lee和Jimmy Song在区块链行业内都大有来头。Lee李启威是莱特币的创始人,在行业内知名度很高。Jimmy song曾在多家初创公司担任开发人员和程序员。

  • 项目技术

    混合工作量证明 (PoW) 和权益证明 (PoS) 的共识投票系统,该系统可如下图简单表示。
    在这里插入图片描述

    第一步是矿工通过挖矿产生数据块,即工作量证明的过程(POW),第二步是由DCR票池对数据块进行投票,少于3票的数据块将无法得到DCR的奖励,而投票者将获得DCR奖励,这是所有者证明过程(POS)。

    具体过程是,当每一个新区块被创建时,5张票是从票据池中随机抽取出来投票,所有的新区块都需要至少3票才能有效。对于POW的矿商要得到全额奖励,那么必须是所有5张票都通过。如果只有4张票通过,那么POW的矿工只能得到80%的奖励,如果只有3人同意,那么他们只能得到60%的奖励。任何少于3项的批准意味着没有收到任何奖励,并且被投票区块(指的是上一个区块)无效。而这些投票的交易记录在下一个区块里。如下图:
    在这里插入图片描述

    Votes里的投票交易是对前一个区块
    Hash:00000000000000005b53793f9d0ac79e4889257915578949fc38636993068155
    进行投票。
    我们打开其中一个Vote交易:
    在这里插入图片描述
    第一个输出地址是:
    OP_RETURN 55810693696338fc49895715792589489ec70a9d3f79535b0000000000000000456b0400
    其中字符串5581……400是blockHash + blockHeight(4个字节)的Hex编码,解析出blockHash就是值:00000000000000005b53793f9d0ac79e4889257915578949fc38636993068155
    也就是前一个区块hash。
    Ps:
    目录: https://www.decred.org/

    区块链浏览器:
    主网:https://explorer.dcrdata.org
    https://mainnet.decred.org
    测试网:
    https://testnet.dcrdata.org
    https://testnet.decred.org

  • 奖励获取
    1.PoW模式,和比特币类似,不做详述。
    2.PoS模式,DCR持有者,可以通过购买票据进入票据池,参与新区块的投票,从而获取奖金。用户购买票据的交易被打包进区块,用户算进入票据池,但是此时用户手中的票据状态是未成熟状态,不能进行投票,需要在256块区块后, 票据进入成熟状态,此时用户才有投票资格。用户获取到投票资格后,就等待票据池随机抽中进行投票。

    1)票据的价格及费用。
    票据的价格有相应的算法动态调整,目的是保持票据池大小包含在40960张票。每个新的区块只能打包20笔购买票据的交易,同时每144个区块后(大约是12小时,称为购买窗口),也就是2880笔票据交易打包后,动态调整票据价格。

    购买票据交易中票据价格对应的DCR, 仍然在用户的账户里,状态是锁定或者不可花费状态,一直要到交易超时未打包或票据超时未被选中或成功投票走完流程或未及时投票走完后续流程才能解锁。

    费用分为两部分常规的交易费用和购买票据的手续费,都是支付给矿工的,购买票据的手续费越高被打包的概率越大,一旦票据进区块,之后不管能不能投票,费用都不退的。

    2)票据在票据池等待时间。
    Decred的PoS机制中票据池里每张选票被选中的概率是符合泊松分布的,每张选票平均等待时间是28天, 142天后仍然未被选中的概率小于0.5%。如果40960块后,大约5个月,仍然没有被选中,将被被系统清除,同时退还金额(票价)。

    3)用户购买票据中票据价格对应的DCR的锁定时间。
    用户购买票据时,这些DCR就被锁定,用户的票据需要256块区块确认后才能成熟,抛去等待时间,用户获取投票资格后,不管有没有进行投票,都需要256块区块确认后,投票成熟,这时才算解锁。
    4) 什么是StakePool?
    用户如果无法保证钱包24小时在线,能及时投票,所以可以把投票的委托给StakePool,同时他会收取奖金的4~5%作为佣金。注意:StakePool,没有权限访问用户的钱包,但是有能力决定投票的结果。所以加入StakePool时最好不要加入人数较多的。

  • 优点
    1.由于决定区块合法性的是由PoS这一层,所以避免了算力较大的小团体50%攻击。
    2.方便硬分叉,旧链产生的区块获取不到选票,获取不到奖励,自然会不断向新链上迁移。
    3.所有投票的行为都能上链。。所有投票的行为都能上链。

  • Decred组成

    Decred由三部分组成:dcrd,dcrctl,dcrwallt。
    dcrd:节点,实现pow, pos, p2p块/交易收发等功能。
    dcrwallt: 钱包,实现钱包的功能,构造交易,发送交易,查看账户等功能。
    dcrctl: 命令行, 连接了dcrd 和dcrwallt,并且提供了调用这两块的命令行。
    三块间连接,连接方需要被连接方的授权文件。

  • 区块、coinsbase交易确认

    区块确认数为1,当前区块确认上一个区块。Coinbase交易确认数为256。出块时间间隔为3分钟左右。

  • 交易构造

    1.交易结构
    交易数据结构如下:
    在这里插入图片描述
    多了CashedHash,和SerType两个字段。
    初始化时赋值如下:
    在这里插入图片描述
    CashedHash 为空
    2.交易输入数据结构
    交易输入数据结构TxIn如下图:
    在这里插入图片描述
    多了Witness和Non-witness的区别。
    构造交易时:
    BlockHeight = 0x00000000
    BlockIndex = 0xffffffff
    Sequence = 0xffffffff
    其他正常赋值就行。
    而OutPoint数据结构也有所变化多了字段Tree, 如下图

    构造交易时Tree赋值为0。
    3.交易输出数据结构:
    交易输出没有变化,机构如下:
    在这里插入图片描述

  • Hash算法

Decred使用了blake-256算法,而不是sha-256。在钱包地址生成和交易输入签名中都有使用。例如在pkhash生成钱包地址,就使用了black-256,而没有用sha-256。交易签名过程中,交易的序列化结果是使用black-256算法获取hash值。

  • 输入签名

    签名过程中序列化交易并且获取hash值,过程如下:

在这里插入图片描述

最终hash 由prefixHash和witnessHash的拼接后再次hash获取的。
1.prefixHash生成过程如下:
写入version,然后在写入Input, Output, Locktime, Expiry, 最后使用black-256生成hash值。
其中SigHashSerializePrefix = 1, SigHashSerializeWitness = 3
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
chain.HashH最终调用到black256()
2.witnessHash生成过程如下:
在这里插入图片描述
上图中完成的是去除操作码OP_CODESEPARATOR(值为171)以及其对应数据。常规转账涉及不到,所以上面两步可以忽略。所以在下图中signScript 值为prevOutScript就是交易输入的锁定脚本字符数组。signTxInIdx值为当前要签名的输入序号。
在这里插入图片描述
chain.HashH最终调用到black256()

3.基于prifixHash和witnessHash值生成最终hash值。
在这里插入图片描述
chain.HashB最终调用到black256()

  • 交易序列化

首先写入serializedversion
在这里插入图片描述
基于SerType选择序列化内容。我们tx.SerType取值为0, 等于常量TxSerializeFull。其中pver值为0, 备用值,可以忽视。
在这里插入图片描述

依次写入Prefix,Witness数据。
1.写入Prefix
在这里插入图片描述
涉及到的函数:

在这里插入图片描述
在这里插入图片描述
2.写入Witness

在这里插入图片描述
PS: 寒冬之际,求一个好坑!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值