block chain/Basic/Monero.md
# 匿名性
有小伙伴也许想问:比特币不是已经有匿名性了吗?
是,比特币的确有一定的匿名性,但比特币的匿名性并非无懈可击。众所周知,由于区块链账本的公开及可追溯性,任何一个人都可以通过比特币区块链浏览器的公开信息,顺藤摸瓜查出来所有和它有往来关系的比特币账户。下面就是比特币区块链浏览器上一则典型的地址和交易信息,任何人输入一个钱包地址就能查找到这个地址发生的所有交易往来明细(金额、数量、时间、从哪里收来钱,转出去到哪里)
12c6DSiU4Rq3P4ZxziKxzrL5LmMBrzjrJX (二维码自动识别)
就好像你的银行流水被公示于天下。如果你知道某人的地址,就能把他的账户余额、资金流动看得一清二楚。想象一下,假设银行把你所有的交易记录、个人信息都 PO 在网上,让人家随便看,而且你还不知道谁看到了你的信息、准备用这个信息干嘛...还是挺可怕的。
匿名币让与交易无关的闲杂人等无法窥探交易的具体信息:比如交易金额大小、参与交易双方的信息。以下门罗币区块链浏览器查到的交易信息。
![](http://upload-images.jianshu.io/upload_images/11336404-9767e9925261187a.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
这个“匿名”不是门罗币区块链浏览器把交易金额和交易双方人为地“遮住了”这么简单──门罗币的设计本身就使得这个信息无法追溯。下面朋克为大家讲解环签名、混淆地址、环机密这三者如何实现门罗币的匿名性。
* 环签名 - 发送方,不可追踪
* 混淆地址 - 接收方,不可链接
* 环机密 - 交易金额的隐匿
## **环签名**
打个比方,大家联名上书提意见的时候,怎样让外界难以猜测发起人是谁?上书人的名字可以写成一个环形,环中各个名字的地位看上去彼此相等,因此难以猜测发起人是谁。假设,Alice 发送 5XMR(XMR 即门罗币) 给 Bob,设定混淆交易数量为5。网络在转账时会自动生成5笔5XMR的转账交易,除了Alice发送给Bob的这笔,另外的4笔都是用来瞒骗外界观测者的“诱骗交易”,这样达到隐匿发送方的目的。
![](http://upload-images.jianshu.io/upload_images/11336404-946489efd5127770.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
## **混淆地址**
混淆地址是为了打破输入输出地址之间的关联,以此隐匿转账的来去关系。每当发送者要发起一笔转账的时候,这笔资金不会直接打到接收方的地址,而是打到一个系统临时生成的地址。
![](http://upload-images.jianshu.io/upload_images/11336404-2af3945b5b84b971.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
Alice向Bob转账时,发送者Alice用接受者Bob的公钥加上一些随机数,生成一个独一无二的、一次性的地址,系统给这个临时地址添加5XMR。观测者,包括Alice、Bob自己都能看到这个临时地址,但都不知道地址里的钱属于谁。那么Bob怎么知道有人给自己转账,怎么收到这笔钱呢?Bob的钱包会用私钥进行搜索功能,查看区块链上的临时地址是否有属于自己的钱。当Bob的私钥(仅有接收方Bob自己的私钥能够)识别出自己有权认领的临时地址,就能使用这笔钱。
![](http://upload-images.jianshu.io/upload_images/11336404-3a53a55ef02e58a5.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
## **环机密**
沿用上面Alice向Bob转账的例子,Alice怎么告诉区块链网络转账金额是5XMR呢?在 RingCT 的交易中, Alice 不会直接公开给网络5XMR,而是提供一个数字rct,作为交易金额输出。rct= 随机数 + 5(真正的交易金额)。 随机数是用来为真实金额遮盖的,由钱包自动产生。网络可使用这个rct值去验证交易输入是否等于交易输出的金额,以确认没有额外的 Monero 被伪造产生。 然而,对于一个外部的观察者而言,无从得知实际交易金额。
![](http://upload-images.jianshu.io/upload_images/11336404-5d6eaeaa25867402.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
有了环签名、混淆地址、环机密,Monero完备地实现了针对某一笔交易,第三者无从了解交易**发送方**(环签名的缘故),交易的**接收方**(混淆地址的缘故),交易**金额**(环机密交易的缘故)。
那么,问题来了,如果我们不知道每笔交易信息,我们如何校验某一笔交易有没有执行过两次(俗称:双花问题)呢?
答案是,**镜像钥匙**。
区块链会根据发送方的私钥及之前交易信息产生“镜像钥匙”并保存在区块链里。每次有新交易过来都会检查“钥匙镜像”这之前是否已经出现过,以保证一笔交易不会重复执行。
以上几点已经可以构建比较完备的隐私功能。但是对于门罗开发者来说,这还不够。他们需要另外一层安全保障。
**Kovri 和 I2P**
I2P 是一个路由系统,它能够让应用秘密地互相发送信息而无须任何外部干涉。Kovri 是 I2P 的 C++ 实现,它也会被集成到门罗里面。如果你正在使用门罗,Kovri 将会隐藏你的网络流量,如此一来,被动的网络监控就根本不会暴露你正在使用门罗。为此,你的所有门罗流量将会被加密并通过 I2P 节点路由。节点就像瞎的看门人,它们会知道你的信息通过,但是不知道这些去向哪儿以及信息的具体内容。I2P 和门罗将会很好地共生,因为:
1. 门罗将会多一层防护层
2. I2P 所使用的节点数将会大幅度地提高 post 实现。
Kovri 仍处于开发阶段,尚未实现。
门罗币是目前唯一能隐藏交易发起者,接收者,交易金额,和交易IP的加密货币。在国外geek/黑客/暗网中声誉非常高。
除了匿名性,Monero独特的CryptoNight算法还能帮助它抵抗ASIC,实现**去中心化**。
# 去中心化
**曾经王者—CryptoNight算法**
该算法的特性是,每个计算实例需要2Mb的高速缓存做支持,这意味着并行哈希会被一个芯片可以分配多少内存限制,同时保持尽可能地低成本,以免“入不敷出”。2 MB 的内存要比 SHA256 电路要耗费多得多的硅。CryptoNight 是 CPU 和 GPU 友好型,采用专用矿机挖矿,并不会显著提升算力。显卡也可以用于该算法,但主流显卡的算力并没有特别大的优势。就是说,CPU的算力仍然有一战之力、显卡挖矿也可以参与,又不用担心ASIC矿机的出现......相比CPU\GPU\ASIC在比特币SHA256算法上算力的巨大差异,CryptoNight算法是为POW社区保留了去中心化的火种。
然而,最近蚂蚁X3的出现,可能会碾压现有的挖矿生态。门罗币社区也快速给予了回击:门罗将于区块高度#1539500进行硬分叉,改变现有的POW,抵抗矿霸碾压。
# 可扩展性
Monero采用动态区块容量机制,Monero公平发布且没有限制每天交易最终数量是1MB的区块大小,交易网络会自动提高容量限制来容纳交易需求,Monero可扩展性表现良好。
# Token经济学
Monero的分配可以算是业界良心——没有预挖,没有预售,POW机制,所有区块奖励都给矿工。奖励的方案分为两个阶段:
1. 快速阶段:2022年5月前,挖矿产出18,132,000个门罗币
2. 减速阶段:挖出18,132,000个门罗币后,即自动进入减速阶段,每出一个块奖励0.6门罗币。使得整体货币供应维持在一个极小幅度且减速的状态。减速阶段第一年通胀率:(365d\*24h\*60min\*0.6XMR per block /2 min per block)/18132000XMR=0.87%,之后每年通胀率递减。门罗币总供应量无上限。微通胀保证了全网可持续的激励。
# 共识分析
![](http://sncrating.com/wp-content/uploads/2018/10/3@2x-8.png)
# 总结
门罗币算是为数不多有真实使用场景的数字货币,其隐私功能正被用于几个暗网市场。如果你有兴趣使用门罗币,那么接受门罗币的一些黑市有TradeRoute、WallStreet 和ZionMarket。这些黑市有很多你可以买的商品和服务,其中一些并不违反法律(请注意,你需要使用洋葱浏览器才能访问深网)。
平心而论,门罗币不只在黑市上用于非法活动。门罗币为无痕浏览,私人投资人、独立记者、异政见者等等提供了更多选择。
但是不得不提的是,虽然门罗币的匿名性确实有真实需求,但是匿名币的最大风险来源于政府监管。匿名性与政府管制有天然的冲突,有可能会在未来被政府打压,虽然不一定会消亡,但是对接触不到暗网的大众来说可能就完全没有兑换渠道了,等同于归零。
![code analyze](http://sncrating.com/wp-content/uploads/2018/10/5@2x-8.png)
![](http://sncrating.com/wp-content/uploads/2018/10/6@2x-8.png)