相信没有人可以否认,大部分人在现实生活中接触到的第一个区块链案例,就是区块链货币交易所。要想理解区块链货币交易所,我们先要讨论一下传统的银行是如何运作的。你给银行一笔钱——做一笔存款,银行日后会按照你的要求把钱还给你。当然,银行并不会把你的钱一直锁在保险柜里,银行只是答应,当你提款的时候把钱给你,在这期间,银行通常会把钱用于投资。许多银行会保留一部分钱作为储备金,保证人们来提款的时候,有足够的现金。许多银行通常按存款的固定比例来留存储备金。
现在来谈区块链货币交易所。就只从用户使用的角度而言,区块链数字资产交易所和银行很像。交易所可以办理数字资产(如比特币)存款,日后需要用钱的时候,可以到交易所提款。你还可以把法定货币(法币,如美元等)存到数字资产交易所,交易所承诺日后会按照你的要求把钱(法币或某种数字资产,或两者都有)还给你。也可以通过交易所办理类银行业务,例如,用比特币付款或收款。还可以通过交易所把虚拟货币兑换成法币,或把法币兑换成虚拟货币,或将两种虚拟货币进行相互兑换,交易所在该业务过程中通常起撮合作用,它们同时寻找愿意兑换的人,并安排他们作为交易对手,如果交易对手对于汇率达成一致意见,交易所就促成这笔交易。
值得一提的是,有许多人包括我自己,一开始都会下意识地以为,作为去中心化应用的典范,交易所中的每一笔交易都应该被记录在区块链上,而事实却恰好相反。交易所不需要在区块链里把虚拟货币从一个地址转到另一个地址。交易所只是修改了与你的合约,交易前,它说“我们日后会还给你15000美元和3个比特币”;交易完成后,它说“我们日后会还给你3000美元和5个比特币”。所以,交易前后,比特币并没有真正在区块链中移动,只是你和银行的合约变化了而已。对于你的交易对手而言亦是如此。
在交易所中,懂得投资的人会试图从复杂程度极高的交易撮合的各项参数中找到商机,就像当初从股市中获利一样。有人通过不同的交易撮合策略配比来组合自己的投资,而非简单地买入和售出,但老实说,预估市场并非一件容易的事情,这往往需要敏捷地市场观察能力。甚至有人使用深度学习这样的方式来完成自动化的投资——如阿尔法猫,它能像阿尔法狗一样学习交易所中的K线图/深度图/均线等参数,不断纠正自己的投资策略来达到正常人类达不到的收益回报率。
复杂的交易所参数
还有,随着交易所的数量增长,像比特币类似的区块链货币在不同交易所的价格是存在一定差异的,这也很正常,交易所中某个币种的价格受交易所交易撮合结果的直接影响,而谁也无法保证不同交易所中的价格认知都时刻保持一致。那么问题来了,哪个交易所的价格才可以用来代表比特币的最新价格呢?事实上,这个问题并不会对比特币的价格产生过大的影响,因为区块链货币的去中心化特质,一旦A交易所中比特币的价格高于B交易所中的,就会有人从B交易所购买比特币,并且转入A交易所中高价卖出,这会使得两个交易所中的比特币价格趋同,当然,还需要考虑到转币的手续费是否可以被利润cover掉。
由交易所生成的合约地址并非区块链公钥
前面提到,交易所中的地址并非区块链上的公钥,而是使用了一种叫做钱包服务器的技术生成并分配给用户的,如果用户通过Txhash或者其他方式在区块链上查询从个人钱包转入到交易所钱包的一笔转账,就会发现区块上的转入地址并非交易所提供的地址,事实上,这个地址是交易所的收款公钥(为了和大家所知的交易所地址区分)。实际的流程是,用户从个人钱包转帐给了交易所的收款公钥,交易所再将与这一笔转账的金额相同数量的虚拟货币分配到用户的账户下,这个时候,它又从一个区块链实体变成了一个数字,真正的区块链实体保存在了交易所的钱包中。
黑客通常喜欢将黑手伸向这些囤积有大量虚拟货币的交易所钱包,一旦交易所钱包失窃,那对交易所会是个莫大的打击,甚至万劫不复。为了应对这种情况,有人开发出了多种方案,其中还运用了许多密码学的知识。冷存储和热存储,是目前较为流行的做法。
冷储存与热储存
前面我们提到,交易所会把区块链货币放在自己的服务器中,把区块链货币放在电脑里就像把钱放在钱包里带着,这叫“热储存”,这很方便但不安全。而“冷储存”是离线的,把区链货币锁在其他地方,不联入互联网,所以相对安全和保险,但显然是不方便的。这就像你带着一些零钱出去,但是把终身积蓄锁在保险柜里的道理一样。
要分开热储存和冷储存,你也必须要用不同的私钥,否则如果热储存被人破坏了,冷储存也会处于危险之中。你也需要把币在两边转来转去,这样两边都需要知道对方的地址或公钥。
因为冷储存是离线的,所以热储存和冷储存不需要上线就可以接收比特币—---热储存端知道冷储存端的地址,所以它随时可以给冷储存转账。当你觉得你的钱包里的钱太多的时候,你可以把一部分的币转到冷储存,但不需要让冷储存上线而暴露自己。当然,只要冷储存上线,就可以接收到区块链的转账信息,然后可以随意处理这些比特币。
但管理冷储存有个小问题:一方面,为了私密性和其他考虑,我们希望使用不同的地址(这些地址有不同的密钥)收款。所以我们把比特币从热储存转到冷储存的时候,要用一个新的冷储存地址。但是由于冷储存不上线,所以热储存端必须要能找到这样的地址。
一个直接的方案是让冷储存一次性生成一批地址,然后把地址列表发送给热储存,热储存可以依次使用这些地址,当然,这个方法的缺陷是为了传送地址,我们不得不经常让冷储存端上线,上线的过程中就存在与热储存端一样的风险了。
分层确定性钱包
还有一个比较有效的方法是分层确定性钱包。这个方法可以让冷储存端制造无限量的地址数量,然后通过一个短暂的/一次性的交换,让热储存端知晓所有地址。但这需要使用密码学的技巧。在分层确定性钱包中,我们用“generateKeys”地址生成函数生成一个被称为“地址生成信息”的东西;我们也不只生成私钥,而是生成“私钥生成信息”。有了地址生成信息,我们就可以生成一系列地址。我们把地址生成信息和一个整数i作为地址生成函数的输入参数,就生成了i个对应地址。同样,我们用私钥生成信息来生成一系列私钥。对于每个i而言,第i 个地址和第i个私钥相匹配——换言之,第i个私钥控制第i个地址的区块链虚拟货币,这样一来,我们就有一组彼此配对的公钥和私钥。这种方式的好处是:地址生成信息不会泄露关于私钥本身的任何信息,这意味着你可以放心的把地址生成信息给任何人。
了解了这样的技术后,接下去的过程就显而易见:
大脑钱包与助记词
除了分层确定性钱包外,还有一种通过密码就可以支取数字资产的方式,这被称之为“大脑钱包”。大脑钱包无需使用硬件/纸张或者其他长期储存介质,这在物理安全性较差的情况下(例如跨国出差/旅行时)非常有用。大脑钱包的主要原理是用一个可预测的算法把一个口令变成一对公钥/私钥。但是,如果有黑客知道了猜到了你的口令,他还是可以偷走你大脑钱包里的所有私钥。在计算机安全领域,我们通常假定黑客知道你生成密钥的步骤,黑客不知道的只是你的口令。所以黑客可以尝试使用不同的口令生成地址,并在区块中查看这些地址上是否还存在未被使用的数字资产,一旦发现数字资产,黑客就可以迅速把这些资产转给自己,这种破解方式被称之为离线猜测或者密码破解。因此,设置口令密码的难度就大大增加了,又要容易记,又要不容易被猜中。这也就是助记词的由来,从最常见的10000个英语词汇中,随机选择6个词,从而
生成大致80位长度的字节。这种方式会比随机取字母容易记忆,因为这种方式生成的口令通常是这样的:
除了分层确定性钱包外,还有一种通过密码就可以支取数字资产的方式,这就被称之为大脑钱包。大脑钱包无需使用硬件/纸张或者其他长期储存介质,这在物理安全性较差的情况下非常有用。大脑钱包的主要原理是用一个可预测的算法把一个口令变成一对公钥/私钥。但是如果有黑客知道了猜到了你的指令,它还可以偷走你大脑钱包里的所有私钥。在计算机安全领域,我们通常假定黑客知道你生成秘钥的步骤,黑客不知道的只是
earth alloy dog okay till focusing
当然了,如果需要增加复杂度,可以选择12个词或更多。需要记住的是,一旦用户忘记大脑钱包的口令,钱包里的数字资产就永远取不出来了,除非用户还采取了其他措施来保管私钥。
前面我们提到了交易所最重要的几个技术特点: