混幣(Coin Shuffle)是一個隱私功能,它可以讓用戶快速高效地與其他用戶的資金進行混合,在現有的用戶帳戶和混幣後的新帳戶之間創建隨機的映射關係。
該功能是基於TimRuffing在Bitcointalk.org上的描述以及它的學術論文而來的。
概覽
該功能是基於NXT區塊鏈而實施的,消除了現存的協力廠商混幣服務中存在的手動步驟和信任問題。用戶端錢包提供了用於監控和操作的介面。
可以對NXT、資產以及貨幣進行混幣,混幣創建者在創建混幣時可以指明混幣類型。
任何帳戶都可以創建混幣並指明混幣類型、混幣數量、參與人數和註冊截止日期。
這是通過shufflingCreate API來實現的。接下來的混幣步驟可以通過使用shufflingRegister、shufflingProcess和shufflingVerify或shufflingCancel APIs來手動執行。
然而由於混幣處理過程的複雜性以及操作時間預測的難度等原因,不可能手動來處理混幣。因此,混幣是通過一個自動單元“混幣器”使用startShuffler API來管理執行的。
一旦啟動,混幣器就會監控與指定的混幣相關交易的區塊鏈狀態,而且會代表使用者自動提交所需的交易,根據需求執行混幣處理、驗證或取消。為了實現這些,混幣器需要將使用者的密碼保存在記憶體中,與鍛造時的情況類似。與鍛造一樣,節點重啟或崩潰都需要手動重啟混幣器。在混幣成功完成或取消之後,混幣器還會繼續運行720個區塊,以確保萬一出現區塊回滾重寫(儘管不太可能)時混幣仍然是啟動的。
每一個節點/混幣/參與者都有混幣器。單個節點可以運行的混幣器的最大數目是100個。
除了混幣所需的貨幣或資產數目外,參與混幣還需要至少有1000NXT的押金,如果是混幣NXT,則混幣金額數目必須要大於1000NXT。
當一個混幣成功完成後,參與混幣的錢幣會添加到接收者帳戶中以進行發送出去的交易(只能使用新創建的、未使用過的帳戶作為接收者帳戶)。如果由於註冊參與者沒有按照要求參與混幣或故意提交錯誤資料而導致混幣失敗,那麼導致混幣失敗的參與者將會被處罰1000NXT押金,處罰的押金會分發給混幣完成區塊的鍛造者以及之前3個區塊鍛造者。如果由於參與人數沒有達到要求而導致混幣取消,所有人都不會收到處罰,所有的押金都將退還。在測試網路中,押金和處罰金都是7NXT。
混幣註冊完成後,參與者必須要在100個區塊時間段內(測試網路是10個區塊)提交處理資料。驗證和處罰階段,所有參與者的時間限制是 100+參與人數 個區塊(測試網路是10+參與人數 個區塊)。在任何階段,如果截止時間到後還有參與者沒有提交所需的交易資料,混幣將會取消,這個參與者將會損失它的1000NXT的押金。這個過程是由混幣器處理的。因此註冊一個混幣後,保證混幣器啟動、並運行至混幣成功完成是很關鍵的。如果節點重啟了,那麼之前所有的混幣器都需要手動重啟。
訪問取回目前運行的混幣器、混幣以及混幣參與者的APIs是:getAllShufflings,getAccountShufflings,getAssignedShufflings,getHoldingShufflers,getShufflingParticipants。
如果將nxt.deleteFinishedShufflings屬性設置為true(預設是false),那麼完成的混幣會自動從資料庫中刪除。
創建一個混幣或註冊一個混幣的費用是1 NXT,混幣處理和混幣取消的費用是10NXT,驗證交易的費用是1NXT。
警告:
- 混幣參與者的接收帳戶必須是新創建的帳戶。參與者需要給這個新帳戶創建很強的額密碼,並將其妥善保存好,以備後續之用。如果密碼不夠強或保存不當,可能會導致你的資金損失。
- 一當一個帳戶創建了一個混幣或註冊成為一個混幣參與者,該帳戶使用的節點必須要保持線上,混幣器必須要保持啟動。混幣器的狀態可以使用“My Shufflings”頁面來監控。如果你的節點重啟了,那麼一定要重啟與你的帳戶參與的所有相關的混幣器。
【原文】
https://bitbucket.org/JeanLucPicard/nxt/issues/325/coin-shuffling