Dash币中PrivateSend 的过程
錢包準(zhǔn)備過程
錢包首先將需要PrivateSend的UTXO中的value拆分,拆分成Private Send需要的面額. 具體來說,就是錢包往自己的地址進(jìn)行轉(zhuǎn)賬,UTXO中的錢拆分成10.001, 1.00001, 0.100001,0.0100001, 0.00100001 五種面額. 例如,假如你的錢包有20個(gè)Dash, 錢包會(huì)拆分成1個(gè)10.0001和9.9999的Dash, 繼續(xù)對(duì)剩下的Dash拆分成9個(gè)1.00001Dash…, 超出5中面額拆分范圍之后剩余的Dash繼續(xù)轉(zhuǎn)到自己錢包.
將錢包中的錢拆分后發(fā)送到錢包地址中,但是這筆交易并沒有發(fā)布,這是為了進(jìn)行PrivateSend時(shí)的collateral, collateral用來支付mixing的費(fèi)用.
注意: 上述的操作和其他交易一樣,拆分時(shí)需要提供交易費(fèi).
創(chuàng)建Collateral的過程
PrivatreSend collaterals用來支付mixing的費(fèi)用,但是與denominations過程分離,以最大保證用戶隱私. 在Dash 70213協(xié)議以后, collateral 費(fèi)用最少是五種面額中最低面額的1/10, 也就是0.000100001, 在DashCore中, collaterals最少應(yīng)該是0.004Dash.
PrivateSend Mixing
-
用戶決定進(jìn)行PrivateSend之后,向masternode發(fā)送一個(gè)dsa 的消息,請(qǐng)求加入到當(dāng)前mixing pool中,如果當(dāng)前存在mixing queue,masternode會(huì)試圖將用戶的請(qǐng)求加入mixing queue中,否則master會(huì)新建一個(gè)mixing queue.當(dāng)用戶提出PrivateSend請(qǐng)求時(shí),必須攜帶一個(gè)已簽名的collateral 交易. 一般來說, 33%的概率masternode需要新建一個(gè)mixing queue.
-
master會(huì)向用戶錢包返回一個(gè)dssu的消息, dssu中包括當(dāng)前mixing的進(jìn)度, mixing pool 中用戶個(gè)數(shù), 是否接收用戶的請(qǐng)求等信息.
-
當(dāng)接收用戶的mixing請(qǐng)求后,當(dāng)master準(zhǔn)備好后,會(huì)繼續(xù)給用戶一個(gè)dsq, 告知用戶mixing queue的進(jìn)度, 以及何時(shí)進(jìn)行簽名等消息. 如果消息指示隊(duì)列未就緒,則節(jié)點(diǎn)將驗(yàn)證消息是否有效。它還驗(yàn)證masternode沒有用dsq消息淹沒網(wǎng)絡(luò),試圖控制排隊(duì)過程。然后,它將消息轉(zhuǎn)發(fā)給其連接的對(duì)等方。在70214協(xié)議中,每次mixing session中參與值最少3個(gè),至多5個(gè).而在此之前,每次mixing的過程中是固定了了3個(gè)參與者.(注意:協(xié)議70214指的是,運(yùn)行dash-cli getinfo命令時(shí)得到的錢包的一些信息,如下圖中顯示的"protocolversion"字段) ?
-
如果隊(duì)列就緒,那么每個(gè)收到dsq的用戶都會(huì)給masternode回復(fù)一個(gè)dsi消息. 每個(gè)用戶都會(huì)向masternode提供一個(gè)未簽名的inputs列表, 一個(gè)已經(jīng)簽名的collateral 的轉(zhuǎn)賬交易,以及接收inputs的地址列表.collateral轉(zhuǎn)賬交易用來防止用戶作惡,另外也是為了隨機(jī)的進(jìn)行收取mixing 費(fèi)用.每個(gè)用戶最多提供9個(gè)intpus和9個(gè)outputs進(jìn)行mixing.這個(gè)mixing的過程,只有用戶和masternode知道其中的inputs和outputs,其他人無法看到這些信息. 如果用戶在30秒中內(nèi)沒有對(duì)masternode的dsf消息進(jìn)行回復(fù), 用戶則會(huì)丟掉用戶的押金.
-
masternode 收到每個(gè)用戶的dsi消息之后, masternode開始進(jìn)行mixing,會(huì)給用戶返回一個(gè)dssu消息, 告知用戶當(dāng)前mixing的進(jìn)度, mixing pool中用戶數(shù)等消息.
-
當(dāng)?shù)竭_(dá)最后一輪mixing transaction時(shí),masternode會(huì)向用戶發(fā)送dsf, dsf消息包括最后一輪mixing的交易, 但是這個(gè)交易中的input沒有簽名.
-
同時(shí)也會(huì)向用戶發(fā)送dssu消息以告知當(dāng)前狀態(tài).
-
用戶收到dsf消息之后,對(duì)其中的交易進(jìn)行檢查是否符合要求, 如果符合要求,隨后向masternode返回一個(gè)dss消息, 在該消息中,對(duì)沒有簽名的input進(jìn)行簽名,隨后發(fā)送給masternode.如果用戶在15秒中內(nèi)沒有對(duì)masternode的dsf消息進(jìn)行回復(fù), 用戶則會(huì)丟掉用戶的押金.(ps:我想是masternode會(huì)發(fā)布用戶的之前的collateral trx),這樣來減少用戶的作惡行為.
-
masternode收到用戶的dss消息后,會(huì)對(duì)驗(yàn)證所有的簽名,隨后回復(fù)用用戶一個(gè)dsc消息, 同時(shí)還會(huì)廣播一個(gè)dstx的消息以通知用戶mixing, 用戶如果收到dsc消息,則表明privateSend已經(jīng)完成. dstx的消息只能由masternode發(fā)布,并且這個(gè)消息中交易的交易費(fèi)用為0. dstx中帶有證明masternode身份的簽名信息.dsc消息主要包括mixing session的id等信息.
注意: 上述消息中,除了dsq和dstx消息需要廣播之外,其他的信息都是masternode和用戶之間單獨(dú)通信,沒有第三方參與.
參考
https://dash-docs.github.io/en/developer-guide#privatesend
總結(jié)
以上是生活随笔為你收集整理的Dash币中PrivateSend 的过程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mac安装unrar解压rar的文件
- 下一篇: 项目客制化文档