这一章我们要来谈的是来自第三方的风险。在运营一个服务时,我们不免会界接许多第三方服务。而币,甚至也算是第三方。
界接第三方的风险,如果是输出还好。自第三方接收数值是最大的风险。
以我们币所的 OTC 服务来说。OTC 的价格来自 coinmarketcap ,早期开站时,深受我们的困扰就是 BTC 与小币的离群价格。
因为站上锚钉的是 coinmarketcap 每十分钟的价格。然而 CMC 的价格是取目前市场上的平均。然而,有一些小币所,常常出现一些离谱的数字。
这些离谱的数字就会让某些币的价格,离谱的偏高。然后,站上的卖家就会跟我们抗议价格不可信。
后来我们采取了一些更佳稳定的算法。比如说改让使用者锚钉他们信任的币所的价格,或者是均一采用三间主流币所的平均价格,作为锚钉价格。
并且要设想如果这个价格锚钉器,遇到源头 API 价格失效后的 fallback plan(如暂时下价所有订单)等等。
至于可信度是,传来的数值合不合理。比如说 BTC 现在价格是一万美元,下十分钟传给你十万美元。这件事可不可能发生?
不太可能发生。所以在接收外部信息的时候,你不能假设「它们是完全可信的」。
而是要假设「有可能会出错」。当然我们不可能检验所有数据源的可信度。
而是去思考,要是外部数据失灵,而哪些「主要外部数据错误」可能造成你的损失。
去检验这些「主要外部数据源」的有效度与可信度。
区块链的设计初衷,应该是让人们相信上面的数据是可信不可窜改的。
但在我从业经营区块链币所时,最让人哭笑不得的却是这件事了。
从事交易所,最常遇到的情形就是上币了。
什么是上币呢?就是整合区块链钱包通信进交易所,提供用户充值提币,进行交易。
上币原本就是币所赚钱的主要行业。
但是为什么到最后主流币所都不喜欢上新币甚至上链,逼得搞链的项目方甚至得自己开币所搞流通呢?
我们先不讲发币的项目运营方本身可不可靠。纯就界接技术讨论而言。来讨论我们在里面看到的情形:
许多项目都是以 ETH 作为基底合约发行 Token,原本在 2018 年初期,很多币所还是乐于帮忙上币的。
但是后来交易所却渐渐趋于保守。
为什么交易所宁愿有钱不赚呢?
原因有几个:
- 项目本身看起来就是诈骗。交易所不想帮忙背书
- 智能合约太渣
很多发行 Token 方的智能合约,本身都是外包粗制滥造的。本身合约就有一些严重的漏洞。造成 Token owner 可以私自超发,或者是 Token holder 自己也可以抄发。
结果这些超发币就流入交易所砸盘,造成交易所以及项目方的损失。
ETH 的智能合约是不能更改的,一旦上链了就永久执行。所以一旦有 bug 就是无法回收的状态。
币所都是 24 小时运营的。项目方与交易所在 0day 攻击发生时,很多时候是无力阻挡的。
所以后来交易所学乖了。各个交易所一律要求上币方两件事:
- 除了缴交上币费外。还要另外缴一笔安全押金。作为若造成这些安全损失的担保金。
- 智能合约必须经过区块链谘询公司的安全审计背书。
有的区块链安全谘询公司光是项目审计,就接了几百个项目智能合约的审计。
所以写到这里,读者不难明白,区块链行业的最大受益者,可能不是币所,而是安全谘询公司。
有人批评 ETH 的智能合约是不能更改的。而 EOS 的合约是能够更改的,很多人在当初称赞这个功能。
但是,EOS 这项功能真的有用吗?不,交易所更怕接基于 EOS 的币。
为什么呢?
因为当 EOS 上币方提交他们的币过来以后,看起来审计是过了。
但是因为 EOS 的 owner 可以修改合约,于是如果项目方改了合约,交易所不会知道。只能盲目信赖「项目方」不会自己突然间想改合约超发。
那这件事更危险了一百倍了…Orz
早期甚至有几场闹剧,几个 EOS 项目,连代码都没有。是自己号称自己手里即将要发币,然后会空投给 EOS holder。如果你的币在交易所,要请交易所代 claim。并且煽动用户,如果交易所不给就是侵吞用户资产。
于是,用户就会来闹交易所要上这个币。
这招非常阴险。形同不付上币费,不付抵押,不经过智能合约审计,就要强行上架。当时很多主流交易所,都被闹得怨声载道。
为什么交易所坚持不屈从呢?
因为人家放个话,什么东西都没有,连智能合约内容(就是个空 template的币,将来他还想改就改)都没有。就要上币,什么跟什么?
这等同于把系统直接凭空种个大安全漏洞。
而且,维护这些「币」都需要机器,程序员设计架构盯著。总不能白嫖吧。
交易所其实是非常非常非常非常非常讨厌分叉币的。这里我为什么要写那么多「非常」呢?
因为这些分叉币,分叉的原因是社群 drama。也就是我爽我也要 fork 一下发个币。
BTC 就能分叉成 BCH,BCD,BTG,SBTC。然后 BCH 还可以分叉成 BCHABC 与 BCHSV。
ETH 分叉成 ETH, ETC。然后还分叉成 ETF,ETH。
EOS 本身还有各种侧链。
到最后许多币所干脆生气全部不支持了。
为什么呢?这是因为很多分叉币,说难听一点,就是改几行代码,宣称自己要分叉。
然而,这些分叉,会让币所付出什么代价呢?
- 首先是如果要进行分叉,站上的相关交易,要全部停止,打用户的数据快照备份。第二,要正确分发用户改给的币。
- 一个币就代表一组冷热钱包,背后是至少一台机器。
- 币所要配合升级这些钱包节点,以及防范可能出现的安全漏洞
原本,币所本来还会想,支持一下这些分叉币,可以吸引新用户注册领糖果。但到最后,币所真的不愿意搞这一些。
因为接越多,风险越大。
为什么呢?因为这里面有些区块链项目或分叉币项目,说穿了是业馀之作。一个项目没有几个活跃程序员维护,文件与 API 写的跟渣没两样。一个项目顶多上千个 commit。超大的区块链项目上万 commit。
你可能会觉得上千上万 commit 数量算很大。
错了,真的很小。
我举一下我们交易所项目(创立一年半的项目)的截图吧。我们有三万多 commit,近 6000 pull request。
然后我们再比较一下行业较靠谱的 ETH 这个项目作为对照范例。
以太坊一万多 commit,四千多 pull request。
以太坊还算是业界比较好的项目。
某些区块链项目,commit 顶多就是数千,还是业馀程序员业馀时间写的代码。
到最后有时候真的会哭笑不得。我们觉得像渣的第三方商业服务,可靠性起码比这些区块链项目强上不少。
我们就曾经自己发现区块链项目的 0day,好心想要通知原项目方修补,结果找不到项目方修补。等到联络到真的负责的主程序员出现,花了一周的时间。更不用算上维护这些链的升级成本以及风险成本。
到最后,交易所宁愿接的是 Token 而不是链,而且也会控制同时间维护交易对的数量。因为这些项目全部都是「相对不可信」的第三方(我们先不论项目方道德,只论技术风险)。
而越新的链上面发的 Token 我们越不敢接。因为是 trunk 上的 trunk,谁碰谁倒楣。
如果你是币所。可信度校验这一块,真的没有什么你可以做的。如果你要赚区块链世界的钱。你就得接受这世界的疯狂。改从风控端去下手。
在分叉币最疯狂的时候,每个人都在等其他家先宣布支持,自己再宣布支持。毕竟没人想要为了吸一点新用户,在后门放上大炸弹。
当时大家都心照不宣的作法:
- 宣布帮忙打快照。但不一定开放提币
- 宣布开放提币,但不一定开放交易
- 等其他主流交易宣布可以提币,你再宣布提币
就连 OTCBTC 应该当时是世界最先接好 EOS 提币的币所。但我们也不敢宣布,非得 Bitfinex 先宣布提币,我们看他们试运转一阵子确定没出问题之后,才在几个小时后宣布也开放提币。
如果你打算开一个长久稳定为用户负责的币所的话,宁愿被骂”不作为”,”动作慢”,”不知道服务用户”,有些事千万不能抢快也不能做的。
如果你是一般互联网服务。有几件事你可以做的:
- 不要接那么多业馀项目作为自己服务的底层。若真要接,必须校验可靠性
- 除了校验可靠性外,还要设计 fallback plan。