第五章:自第三方的输入预设不可信
2020-01-10 15:41:41 Author: mp.weixin.qq.com(查看原文) 阅读量:61 收藏

五章:自第三方的输入预设不可信

这一章我们要来谈的是来自第三方的风险。在运营一个服务时,我们不免会界接许多第三方服务。而币,甚至也算是第三方。

界接第三方的风险,如果是输出还好。自第三方接收数值是最大的风险。

稳定度校验

以我们币所的 OTC 服务来说。OTC 的价格来自 coinmarketcap ,早期开站时,深受我们的困扰就是 BTC 与小币的离群价格。

因为站上锚钉的是 coinmarketcap 每十分钟的价格。然而 CMC 的价格是取目前市场上的平均。然而,有一些小币所,常常出现一些离谱的数字。

这些离谱的数字就会让某些币的价格,离谱的偏高。然后,站上的卖家就会跟我们抗议价格不可信。

后来我们采取了一些更佳稳定的算法。比如说改让使用者锚钉他们信任的币所的价格,或者是均一采用三间主流币所的平均价格,作为锚钉价格。

并且要设想如果这个价格锚钉器,遇到源头 API 价格失效后的 fallback plan(如暂时下价所有订单)等等。

可信度校验

至于可信度是,传来的数值合不合理。比如说 BTC 现在价格是一万美元,下十分钟传给你十万美元。这件事可不可能发生?

不太可能发生。所以在接收外部信息的时候,你不能假设「它们是完全可信的」。

而是要假设「有可能会出错」。当然我们不可能检验所有数据源的可信度。

而是去思考,要是外部数据失灵,而哪些「主要外部数据错误」可能造成你的损失。

去检验这些「主要外部数据源」的有效度与可信度。

稳定度与可信度失灵的世界:区块链世界

区块链的设计初衷,应该是让人们相信上面的数据是可信不可窜改的。

但在我从业经营区块链币所时,最让人哭笑不得的却是这件事了。

从事交易所,最常遇到的情形就是上币了。

什么是上币呢?就是整合区块链钱包通信进交易所,提供用户充值提币,进行交易。

上币原本就是币所赚钱的主要行业。

但是为什么到最后主流币所都不喜欢上新币甚至上链,逼得搞链的项目方甚至得自己开币所搞流通呢?

我们先不讲发币的项目运营方本身可不可靠。纯就界接技术讨论而言。来讨论我们在里面看到的情形:

以太坊的智能合约

许多项目都是以 ETH 作为基底合约发行 Token,原本在 2018 年初期,很多币所还是乐于帮忙上币的。

但是后来交易所却渐渐趋于保守。

为什么交易所宁愿有钱不赚呢?

原因有几个:

  1. 项目本身看起来就是诈骗。交易所不想帮忙背书

  2. 智能合约太渣

很多发行 Token 方的智能合约,本身都是外包粗制滥造的。本身合约就有一些严重的漏洞。造成 Token owner 可以私自超发,或者是 Token holder 自己也可以抄发。

结果这些超发币就流入交易所砸盘,造成交易所以及项目方的损失。

ETH 的智能合约是不能更改的,一旦上链了就永久执行。所以一旦有 bug 就是无法回收的状态。

币所都是 24 小时运营的。项目方与交易所在 0day 攻击发生时,很多时候是无力阻挡的。

所以后来交易所学乖了。各个交易所一律要求上币方两件事:

  1. 除了缴交上币费外。还要另外缴一笔安全押金。作为若造成这些安全损失的担保金。

  2. 智能合约必须经过区块链谘询公司的安全审计背书。

有的区块链安全谘询公司光是项目审计,就接了几百个项目智能合约的审计。

所以写到这里,读者不难明白,区块链行业的最大受益者,可能不是币所,而是安全谘询公司。

EOS 的智能合约

有人批评 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 本身还有各种侧链。

到最后许多币所干脆生气全部不支持了。

为什么呢?这是因为很多分叉币,说难听一点,就是改几行代码,宣称自己要分叉。

然而,这些分叉,会让币所付出什么代价呢?

  1. 首先是如果要进行分叉,站上的相关交易,要全部停止,打用户的数据快照备份。第二,要正确分发用户改给的币。

  2. 一个币就代表一组冷热钱包,背后是至少一台机器。

  3. 币所要配合升级这些钱包节点,以及防范可能出现的安全漏洞

原本,币所本来还会想,支持一下这些分叉币,可以吸引新用户注册领糖果。但到最后,币所真的不愿意搞这一些。

因为接越多,风险越大。

为什么呢?因为这里面有些区块链项目或分叉币项目,说穿了是业馀之作。一个项目没有几个活跃程序员维护,文件与 API 写的跟渣没两样。一个项目顶多上千个 commit。超大的区块链项目上万 commit。

你可能会觉得上千上万 commit 数量算很大。

错了,真的很小。

我举一下我们交易所项目(创立一年半的项目)的截图吧。我们有三万多 commit,近 6000 pull request。

然后我们再比较一下行业较靠谱的 ETH 这个项目作为对照范例。

以太坊一万多 commit,四千多 pull request。

以太坊还算是业界比较好的项目。

某些区块链项目,commit 顶多就是数千,还是业馀程序员业馀时间写的代码。

到最后有时候真的会哭笑不得。我们觉得像渣的第三方商业服务,可靠性起码比这些区块链项目强上不少。

我们就曾经自己发现区块链项目的 0day,好心想要通知原项目方修补,结果找不到项目方修补。等到联络到真的负责的主程序员出现,花了一周的时间。更不用算上维护这些链的升级成本以及风险成本。

到最后,交易所宁愿接的是 Token 而不是链,而且也会控制同时间维护交易对的数量。因为这些项目全部都是「相对不可信」的第三方(我们先不论项目方道德,只论技术风险)。

而越新的链上面发的 Token 我们越不敢接。因为是 trunk 上的 trunk,谁碰谁倒楣。

总结

如果你是币所。可信度校验这一块,真的没有什么你可以做的。如果你要赚区块链世界的钱。你就得接受这世界的疯狂。改从风控端去下手。

在分叉币最疯狂的时候,每个人都在等其他家先宣布支持,自己再宣布支持。毕竟没人想要为了吸一点新用户,在后门放上大炸弹。

当时大家都心照不宣的作法:

  1. 宣布帮忙打快照。但不一定开放提币

  2. 宣布开放提币,但不一定开放交易

  3. 等其他主流交易宣布可以提币,你再宣布提币

就连 OTCBTC 应该当时是世界最先接好 EOS 提币的币所。但我们也不敢宣布,非得 Bitfinex 先宣布提币,我们看他们试运转一阵子确定没出问题之后,才在几个小时后宣布也开放提币。

如果你打算开一个长久稳定为用户负责的币所的话,宁愿被骂”不作为”,”动作慢”,”不知道服务用户”,有些事千万不能抢快也不能做的。

如果你是一般互联网服务。有几件事你可以做的:

  1. 不要接那么多业馀项目作为自己服务的底层。若真要接,必须校验可靠性

  2. 除了校验可靠性外,还要设计 fallback plan。


文章来源: http://mp.weixin.qq.com/s?__biz=MzUyNTk1NDQ3Ng==&mid=2247484927&idx=5&sn=976befb32239b2619b855433c44ff437&chksm=fa17793ccd60f02a2cf2be665e7b68ea56af1d96c2c893769b76defac99c2eef16bb29ff054d#rd
如有侵权请联系:admin#unsafe.sh