混币(Coin Shuffle) 是一个去中心化的隐私功能,它可以让用户快速高效地与其他用户的资金进行混合,在现有的用户账户和混币后的新账户之间创建随机的映射关系,从而实现完全匿名。该功能是基于TimRuffing在Bitcointalk.org上的描述以及它的学术论文而来的。
混币原理(CoinJoin):许多人参与,一个交易中包括大量输入和输出,很难在输入和输出中找出每个人的对应对,输入与输出之间的联系被事实上割裂。多次混币、每次少量币,效果更好。
比特币块链的混币
为了解决以上隐私问题,有些网站提供了混币服务。 混向原理是割裂输入地址和输出地址之间的关系。
1、 以中心化网站(Blockchain.info)、Darkwallet(实际上也是中心化的,i混币需求要通过暗钱包服务器收集),但是这些中心化和分布式服务都需要服务器,在服务器上会有混币纪录,不是很安全。Blockchain.info就会纪录混币需求一段时间后才删除,以应付有可能的司法检查。 [1]
2、Darkwallet引入Stealth Address隐身地址,打乱了块链的交易连续性,在较大程度上加强了匿名性。
混币是基于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。