解读币安钱包归集消耗巨量Gas背后的技术与安全因素
作者:Haotian
交易所管理着大量的 EOA Deposit 充值地址,每次用户充币都把资产转往了这些零碎的小地址,这些地址的资金,交易所通常要做"归集"便于统一资产管理。
交易所地址归集业务通常有两个选择:
1)用户只要冲币,程序立马把相应资产转往热钱包地址,但问题是,一个用户一个充币需求,可能会分成多次,比如,大佬转大资金一般会先转个小额进来,再逐笔转入为安全计,显然这种方案,容易多出更多的 TXS,若交易所采用这种归集方案,遇到恰好 GAS 费高的时候就得顶着高 GAS 执行,手续费也会很高,但好处是它的整个归集过程是分散的,用户端不会感知,对交易所而言也只是正常的业务损耗需要。
2)用户冲币后一段时间内,那些零散的小 EOA 地址保持不动,用户再提币的话直接从大的热钱包提币,然后固定一段时间进行一次地址归集,这样以来可以对一下账,便于资产统一管理,二来可以选一个 Gas 相对低的时间段,统一来进行转账操作。但是这样做有个难点,短时间大量操作很容易拉高 Gas,而且一旦被媒体盯上容易诱发公关事件。因为,很难向公众解释,为啥交易所需要集中归集资产这件事,关键是还烧了那么多的 Gas。
很显然,币安就采用了第二种地址归集方案。站在交易所的业务逻辑下,无论选哪种方案,都存在大量的业务资金损耗,各家的管理资产策略可能会不同。
为了便于理解,我分别找了 Binance14 和 OKX3 两个地址,Binance14 采取了第二种方案,而 OKX 应该是采取了第一种方案。但由于二者地址资产体量和交易量都相差悬殊,数据仅供参考。
如图 1,Binance14 地址管理资产总规模近 11 万 ETH,作为一个接收地址,历史 Gas 共消耗了 1 万个 ETH。而 9 月 13 日那次较多的归集,单日消耗 Gas 也有 388 个以太,历史上最多一次一天消耗 871 个 ETH,所以说地址归集消耗几百万是正常业务损耗,别因为大家的不理解,让负责归集的同学给丢了饭碗。
如图 2,OKX3 地址管理资产规模较小,但作为接受地址历史消耗 1530 个 ETH。从图可以看出,OKX 的日均消耗都比较均衡,峰值也就一天 15 个 ETH,可见第一种归集方案就是花费在平时。
至于两种方案哪个更好,交易所肯定会算出一套适合自己且最优化的选择,没有企业不去做成本优化这件事,Binance 大表哥虽然土豪,但也不至于不做优化。
此外大家得清楚交易所资产归集管理会涉及成本优化、安全风控、内部审批流程、资金效率等多个问题,成本优化只是其中一个关键因素,但不是绝对。
-成本优化:较真的话,肯定可以做优化,我查了下数据,仅北京时间下午 5-6 点就发出了超 14 万笔交易,大家很自然疑惑,平摊到 1-2 天不行吗?监测到 Gas 拥堵把程序停掉不行吗?从工程实现角度当然可以,问题是把时间平摊看,1-2 天,甚至 1-2 个月,肯定不会带来 Gas 拥堵问题,也能省钱,但也可能带来其他风险问题,这和第一种方案也没差了。
-安全风控:最大考量应该还是安全问题,交易所管理者大量的地址私钥,权限可能由一套系统控制,工程师归集资产相当于要获得系统一个高级管理权限(调取私钥签名),假定它是一套 HSM 冷钱包系统,这类系统尽可能少触网,相比 2 天,开 2 个小时的权限显然可以大大减少受攻击面,避免系统被黑客攻击。所以,之所以要快速归集,安全风控会是一大核心考量因素。若花 300 ETH 能有效避免 30 万个 ETH 被攻击,应该很合理吧?
-内控流程:交易所系统是一个庞大的群体组织,涉及到管理层、执行层,内部为了规范资产使用流程也会有审批流程,几十万个 EOA 地址私钥,最高效的自然是老板最高权限,然后统一签名,一次性处理。若分割成小份,再分批处理就涉及到,管理权分摊,那难免会出现部分员工单点爆破风险。若由老板统一管理,理想方案是集中某个时间点,只审批一次就好了,若分好多地址,好多批次要归集审批,把老板的精力捆在资产归集的事上,合适吗?
至于资金效率问题,防止意外突发情况发生等等都是有可能的。
总之,交易所资产归集问题,不单单是成本问题,涉及到面非常复杂,回溯 Binanc14 历史会发现,类似高 Gas 归集的情况不是个例,那很显然这是 Binance 综合考虑各方因素得出的一贯的权衡方案。