Dash币中PrivateSend 的过程
Posted 落霞与孤鹜亓飞
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Dash币中PrivateSend 的过程相关的知识,希望对你有一定的参考价值。
钱包准备过程
-
钱包首先将需要PrivateSend的UTXO中的value拆分,拆分成Private Send需要的面额. 具体来说,就是钱包往自己的地址进行转账,UTXO中的钱拆分成10.001, 1.00001, 0.100001,0.0100001, 0.00100001 五种面额. 例如,假如你的钱包有20个Dash, 钱包会拆分成1个10.0001和9.9999的Dash, 继续对剩下的Dash拆分成9个1.00001Dash…, 超出5中面额拆分范围之后剩余的Dash继续转到自己钱包.
-
将钱包中的钱拆分后发送到钱包地址中,但是这笔交易并没有发布,这是为了进行PrivateSend时的collateral, collateral用来支付mixing的费用.
注意: 上述的操作和其他交易一样,拆分时需要提供交易费.
创建Collateral的过程
PrivatreSend collaterals用来支付mixing的费用,但是与denominations过程分离,以最大保证用户隐私. 在Dash 70213协议以后, collateral 费用最少是五种面额中最低面额的1/10, 也就是0.000100001, 在DashCore中, collaterals最少应该是0.004Dash.
PrivateSend Mixing
-
用户决定进行PrivateSend之后,向masternode发送一个dsa 的消息,请求加入到当前mixing pool中,如果当前存在mixing queue,masternode会试图将用户的请求加入mixing queue中,否则master会新建一个mixing queue.当用户提出PrivateSend请求时,必须携带一个已签名的collateral 交易. 一般来说, 33%的概率masternode需要新建一个mixing queue.
-
master会向用户钱包返回一个dssu的消息, dssu中包括当前mixing的进度, mixing pool 中用户个数, 是否接收用户的请求等信息.
-
当接收用户的mixing请求后,当master准备好后,会继续给用户一个dsq, 告知用户mixing queue的进度, 以及何时进行签名等消息. 如果消息指示队列未就绪,则节点将验证消息是否有效。它还验证masternode没有用dsq消息淹没网络,试图控制排队过程。然后,它将消息转发给其连接的对等方。在70214协议中,每次mixing session中参与值最少3个,至多5个.而在此之前,每次mixing的过程中是固定了了3个参与者.(注意:协议70214指的是,运行dash-cli getinfo命令时得到的钱包的一些信息,如下图中显示的"protocolversion"字段) ?
-
如果队列就绪,那么每个收到dsq的用户都会给masternode回复一个dsi消息. 每个用户都会向masternode提供一个未签名的inputs列表, 一个已经签名的collateral 的转账交易,以及接收inputs的地址列表.collateral转账交易用来防止用户作恶,另外也是为了随机的进行收取mixing 费用.每个用户最多提供9个intpus和9个outputs进行mixing.这个mixing的过程,只有用户和masternode知道其中的inputs和outputs,其他人无法看到这些信息. 如果用户在30秒中内没有对masternode的dsf消息进行回复, 用户则会丢掉用户的押金.
-
masternode 收到每个用户的dsi消息之后, masternode开始进行mixing,会给用户返回一个dssu消息, 告知用户当前mixing的进度, mixing pool中用户数等消息.
-
当到达最后一轮mixing transaction时,masternode会向用户发送dsf, dsf消息包括最后一轮mixing的交易, 但是这个交易中的input没有签名.
-
同时也会向用户发送dssu消息以告知当前状态.
-
用户收到dsf消息之后,对其中的交易进行检查是否符合要求, 如果符合要求,随后向masternode返回一个dss消息, 在该消息中,对没有签名的input进行签名,随后发送给masternode.如果用户在15秒中内没有对masternode的dsf消息进行回复, 用户则会丢掉用户的押金.(ps:我想是masternode会发布用户的之前的collateral trx),这样来减少用户的作恶行为.
-
masternode收到用户的dss消息后,会对验证所有的签名,随后回复用用户一个dsc消息, 同时还会广播一个dstx的消息以通知用户mixing, 用户如果收到dsc消息,则表明privateSend已经完成. dstx的消息只能由masternode发布,并且这个消息中交易的交易费用为0. dstx中带有证明masternode身份的签名信息.dsc消息主要包括mixing session的id等信息.
注意: 上述消息中,除了dsq和dstx消息需要广播之外,其他的信息都是masternode和用户之间单独通信,没有第三方参与.
参考
https://dash-docs.github.io/en/developer-guide#privatesend
以上是关于Dash币中PrivateSend 的过程的主要内容,如果未能解决你的问题,请参考以下文章
支付宝信用免押接口签约指南,充电宝信用免押接口开通,充电宝芝麻信用免押接口开通开发,芝麻信用接口签约开通!