哈希锁:用技术让彼此信任


平时我们买东西,一手交钱,一手交货,钱货两清。拿了东西不给钱,店家是要揪住领子问你要债的。

可在网上就不同了,如果是顾客先把钱打到商家账号上,商家不发货怎么办?或者,商家先发货,顾客收到不认账怎么办?

这时候支付宝跳出来说,我给你们做担保,顾客先把钱打到我这里,商家发货,顾客收到之后确认付款,钱再打到商家手里,双方都觉得很公平,暗暗点头。

所以支付宝解决的最大问题是什么?是信任。

然而,在区块链世界里,规则又发生了变化。

在超市买东西,钱和物都是在线下交付;在淘宝买东西,钱在线上付,货在线下收;而在区块链世界里,用比特币换以太坊,比特币的转账和以太坊的接收全都是线上交付。

这时,信任从何而来?

有人说,再造一个区块链世界的支付宝,我们相信第三方就好了。

其实现有的区块链交易所扮演的不就是这样一个第三方么?

但是,数字资产的买卖过程中,交易所是要收手续费的。更重要的是,万一交易所的信用出现了危机怎么办呢?相信别人总是没有相信自己来得实在。

哈希锁就很好地解决了这个问题,它不依赖于任何一个中介或个人的信用背书,完全靠代码和规则就能实现数字资产间的交易。

它的设计非常得简单,一旦了解,你会学会从另一个思路思考和解决问题。

那么它具体是如何实现的呢?

首先我们假设A和B两个人,A有X资产,B有Y资产。X和Y链上都能运行哈希锁的智能合约。

现在,A要用1个X跟B换10个Y。但谁都不愿意把自己的币转给对方,为什么呢?因为有风险嘛。

哈希锁站出来,给了AB两人各自一个密码盒,让AB分别把1个X和10个Y放进自己的密码盒里,然后给两个密码盒都加上一把锁。注意,这两个密码盒被上的锁是一模一样的,也就是说,可以用相同的钥匙打开。所以,为了防止拿着钥匙的人取走对方盒子里的币后,又取走自己盒子里的币,做出规定,谁都只能打开对方的密码盒,无法打开自己的密码盒。

密码盒锁好了,可是钥匙去哪里找呢?答案是,在AB两人中任何一个人的脑子里。什么意思呢?

哈希锁在给两个密码盒加锁之前,就是向A和B中任意一个人要了一个随机数。我们假设它是向A要的,A给了它一个666。哈希锁把这个666塞进一个黑箱子里,在里面经过一系列加工,出来这样一串字符:

c7e616822  f366fb1b5e  0756af498 cc11d2c  0862edcb  32ca65882 f622ff  39de1b。

这串字符跟666比起来,早已面目全非了。它就好像往绞肉机里放进去一块肉,得到一堆肉末一样,你是很难透过这堆肉末想象出原先那块肉的形状的。

这个过程就叫做给随机数666做哈希,这串字符就是666的哈希值。

现在就用这串字符封住AB两人的密码盒,规定如果你手里的随机数的哈希值和这串字符一致,密码盒就可以被打开,你就可以取走里面的币。

哈希的神奇之处就在于,如果塞相同的数字进去,得出的字符串总是一致的,多个空格、多个点都不行。所以如果你有随机数666,密码盒轻松破解;但如果你没有,想利用小聪明试出来,那就是痴人说梦了。

还记得A和B谁有这个随机数吗?对,是A,那他就可以用这个666去开B的密码箱了。而他的开箱过程是公开的,所以当B看到A用666成功解锁了自己的密码箱后,走到A的密码箱前,也用666成功解锁。至此,两人各取所需,交易完成。

想一想,这个流程有没有什么漏洞呢?

我们来看一个实际的例子,你就能发现问题所在了。

如果哈希锁真如上方的流程运行,那么如果一家大型公司如果想搞垮另一家小公司就变得轻而易举。怎么做呢?假设大公司手握价值10亿的A币,小公司只有价值1亿的B币。大公司只要跟小公司换价值1个亿的币,等两家公司都把币锁进密码箱后,就是不用随机数去开密码箱,直到B公司资金链断裂。B公司无能为力,只能看着一个亿放在那里,干着急直跺脚。

说到这你可能已经意识到了交易的漏洞了。那就是没有给交易规定时间,一旦存在恶意交易者,资金就会无限期被锁死。

发明哈希锁的人不会想不到这一点,他们把哈希锁加上一个时间的维度。规定在这个时间内如果没有用随机数打开密码箱,则原币奉还密码箱的主人。所以哈希锁的全名叫做哈希时间锁。

具体这个时间限制怎么加也是有学问的。

如果两人的时间限制一样,A若存心使诈,只需要在心里默数秒数,直到最后时刻再用随机数打开B的密码箱,此时B刚刚看到A的随机数,来不及跑到A的密码箱处,A的密码箱就到期自动解锁了。那么A得到了B的币,且同时拿回了自己的币,空手套白狼,对B太不公平了。

你肯定已经想到了解决方案,那就是给A的密码箱多锁一会,这样等A拿走了B密码箱里的币后,B有足够多的时间去拿A密码箱里的币。那多出来的这部分时间又应该是多少呢?

我们来假设一个场景解释这个问题。首先要知道,解锁密码箱也是需要一定时间的,假设AB锁定密码箱的瞬间,A就去开B的密码箱,用了10分钟。当然,正常情况下不可能这么慢的,计算机的操作往往都是在光电火石之间,这节课拿10分钟来举例,目的是帮助你理解。同样的,对于B来说,解锁的时间也应该是10分钟,因为两人的锁是一模一样的嘛,解锁的过程也是一模一样的,解锁的时间也就是一模一样的了。

所以,如果我们设定B的密码箱的锁定时间是10分钟,那A的密码箱锁定时间就应该是20分钟,也就是B的密码箱锁定时间的2倍。

至此为止,交易双方还有没有风险呢?如果有,是谁的风险呢?

当然有,而且是两个人都有风险。你可以先猜一猜谁的风险更大呢?谁的风险是可避免的,谁的风险是不可避免的?

我给这两种风险起了个名字,一个叫过失风险,一个叫系统风险。

什么意思呢?我举个例子你就明白了。科学家做实验的时候总会提到误差,误差分过失误差和系统误差两种。

过失误差就比如做实验的人到时间忘记关设备了,或者手一滑火开大了,这些人为因素造成的误差,一般小心一点就可以避免了。

不过对于系统误差,就是实验设计得不合理、流程优化得不到位所导致的了。这个是根本上的问题,很难改变,除非对实验重新设计。

那如果你理解了过失误差和系统误差在实验室的意思,就能类比着理解过失风险和系统风险对于哈希时间锁的意义了。

先看过失风险存在在哪里,以及谁会有过失风险的可能性。

通过刚才对于时间的限定,我们可以按照A的开锁时间分成三种情况:

1、A在0-10分钟内开锁

2、A在10-20分钟内开锁

3、A在20分钟之后开锁

先来说第一种和第三种情况。

第一种情况,A在0-10分钟内开锁,B看到A开锁的密码后再用0-10分钟开锁,所以B的开锁时间不会超过20分钟。两人交易顺利完成。

第三种情况,A在20分钟后解锁。此时两人密码箱都已到期,谁也拿不走对方的币,交易作废。

以上两种情况很简单,剩下的第二种情况就是问题之所在了。A在10-20分钟内开锁。此时B的密码箱已经超时失效,虽然密码箱还在,但里面已经空空如也,币被如数返还给B了。可是,A用随机数开锁的过程B可以看得真真切切的。我们假设A输入的这个随机数是正确的,那么B完全可以趁A的密码箱没到时间之前用这个随机数打开A的密码箱,大大方方地取走里面的币。

一旦这种情况发生,A没有拿到自己应得的币,却失去了用来交换的币,是赔了夫人又折兵。

但这又能怪谁呢?A没有在规定时间,也就是10分钟内取走应得的币,所以如果出现这种情况A只能认倒霉。当然,真实世界里,这种情况是不会发生的。因为所有的操作都是计算机来完成的,系统会检测出是否已经超过10分钟,一旦超过,哪怕憋着随机数不填,静静等到20分钟后,作废这笔交易,计算机也不会让这种过失风险存在。

有了计算机的帮忙,A可以躲避掉过失风险。那另一个即便“小心一点”也逃不掉的系统风险,又会花落谁家呢?

这次就要轮到B倒霉了。

你可以先想想,什么情况下,B有可能蒙受损失呢?

再看一下这个锁全名——哈希时间锁。哈希锁加上了时间维度,解决了永久锁定的问题,但也正是这个时间差,让一些投机倒把的人有机可乘。

我们都知道,数字资产界没有一成不变的汇率。一个X这一秒可以换10个Y,下一秒有可能换20个或者5个Y,涨跌很难预判。

这里就留给A一个漏洞钻。在A可交易的这10分钟里,A静观其变。我们假设A打开密码箱只需要1分钟的时间,那A就一直等到第9分钟的时候,看此时币价波动如何。

如果9分钟时1个X能换20个Y,也就是说,X升值了,那A就不去开B的密码箱,让这笔交易作废。

那你会说,即便这样,A也没有赚到什么钱啊。

非也。刚才只是假设了升值的情况,如果X贬值了,也就是说9分钟时1个X只能换5个Y了呢?这时候A就会立马去开B的密码箱,拿走10个Y,赚得钵满盆满。

真实情况下,XY的价值不会有这么大的变化,但即便是很微小的变化,A设定好程序,反复交易,一定是会获利的。

所以就会出现一个问题,谁都不愿意扮演B的角色,都希望自己是先手。这样就会扭曲市场,长期来看确实是个隐患。

然而至今仍没有一个人或者一项技术来解决这个问题,所以哈希时间锁还有很长的路要走。区块链有更长的路要走。

如果你不了解其中的这些微小的差别,就很容易稀里糊涂地成为交易中弱势的一方而不自知,钱哗啦啦地流入别人的口袋。

如果你不懂哈希锁的工作原理、解决的具体问题,就有可能被人抛出的几个高深概念唬住;或者你不了解哈希锁的缺陷在哪,听人说哈希锁有系统风险,就有可能因此错过一个绝佳的投资机会。不论哪一种,都源于对哈希锁的了解不够深。当你彻底了解之后再做决断,你才会离成功更进一步。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 156,069评论 4 358
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,212评论 1 287
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 105,912评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,424评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,741评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,194评论 1 206
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,553评论 2 307
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,289评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,923评论 1 237
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,251评论 2 240
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,775评论 1 255
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,144评论 2 249
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,698评论 3 228
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,936评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,658评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,214评论 2 267
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,159评论 2 258

推荐阅读更多精彩内容