所谓的形式化验证,简单而言就是用数学工具进行验证的方法,把代码编成数学模型,从设计到实现整个流程,通过证明手段来证明代码是完备安全的。
形式化验证作为成都链安的核心技术之一,已经帮助上千份智能合约解决安全问题。可能很多人会问,为什么人工不能检测到的问题,形式化验证可以呢?
这是因为,对于形式化验证,可以无需理解合约具体实现的细节,无需构造特定的场景,无需数据枚举;通过逻辑关系凝练出可复用的安全属性,对合约每条路径都会进行严谨的数学公式推理,自动检测每个可能的系统状态及操作,计算出可满足的解,并根据求解结果对比是否违反安全属性最终检测出每条路径下可能存在的安全问题。
LongHash:美国上市公司目前持有价值100亿美元的比特币:LongHash刊文,受益于投资的增加以及比特币价格在10月的上涨,美国上市公司目前持有价值100亿美元的比特币。这个数字表明,机构正在蚕食有限供应的比特币流通量。目前,仅这些美国上市公司就控制了约5%的比特币流通量。
但是,机构当前囤积比特币的节奏也引起了一些忧虑。首先,如果这种趋势持续下去,一小部分机构最终会控制很大一部分流通中的比特币。由于比特币的供应量上限为2100万,未来就可能出现供应问题。其次,一些分析师,包括化名Theta Seek的期权交易员,表示这可能使比特币在长期内陷入风险。
但在中短期内,这种做法的好处远大于其弊端。然而,在下一个十年里,当比特币作为价值存储手段之余,最终进化为一种全球性货币时,这种做法就会导致安全性方面的风险。Theta Seek称,“ 59.8万BTC可能会被美国政府没收。这可不是什么好主意。”[2020/11/3 11:31:27]
以太坊合并“后时代”,智能合约安全同样不可忽视,今天,我们为大家准备了一个以太坊生态的案例,看看下面这份合约是如何在我们的智能合约形式化验证平台“链必验”检测出漏洞的。
Longhash:比特币期权市场爆炸式增长或对比特币市场波动性产生影响:6月17日,Longhash发文称,2020年第三季度,比特币期权市场经历了爆炸式增长。此前直到2019年初,比特币市场主要还是由现货和期货交易所占据。随后,灰度比特币信托基金这样的投资机构工具以及Deribit等期权交易所的交易量和未平仓合约都出现了迅速的增长。根据Skew的数据,截至6月15日,期权市场的未平仓合约总价值徘徊在15亿美元上方。具体而言,Deribit在期权市场上有11亿美元未平仓合约,占据了约70%的市场份额。CME比特币期权产品成交量在5月也创下了历史新高。根据Skew,CME有望在6月继续突破其历史最高月成交量。如果说2018年和2019年主导市场的是现货和期货市场上的散户投资者,那么专业交易员和机构可能会在2020年占据很大一部分比特币交易量。来自期权以及机构市场还有高盛等主要金融机构的数据表明,专业和机构投资者间的交易活动正在增加。这种趋势的转变可能也会在长期内对比特币市场的波动性产生影响。[2020/6/19]
声音 | 比特币开发商Jimmy Song表示:比特币现金对任何人都没有价值:据ambcrypto报道,在最近接受比特币开发者Crypto Insider的采访时,比特币开发商Jimmy Song谈到了加密货币市场的现状,Song表示,“比特币现金”没有存在的理由,他引用了一篇名为《比特币现金是法定货币》的文章。他坚决表示,比特币现金对任何人都没有价值,而且很难找到真正为这种加密货币提供担保的人。还表示ETH是与欺诈的平台。[2018/10/14]
链必验,是一款全球领先的“一键式”智能合约形式化验证平台。检测准确率高达97%以上,精确定位风险代码位置并给出修改建议,自动检测智能合约80余项的常规安全漏洞及功能逻辑缺陷。现已拥有生态用户10万+,是全球首套同时支持蚂蚁链、腾讯区块链、FISCO-BCOS、Fabric等的智能合约形式化验证平台。可以极大提高智能合约的人工审计效率,有效降低安全隐患遗漏风险。
动态 | 以太坊未确认交易94073笔:据Etherscan.io数据显示,以太坊未确认交易94073笔。以太坊全网算力为189.32 TH/s,当前挖矿难度2313.23 TH,交易处理能力6.8 TPS。[2019/9/13]
01.
准备需要验证的示例Wizard_game.sol
说明:
原合约为以太坊上真实存在的一个巫师决斗合约。为了看起来简单明了并且能够使用形式化检测验证问题,本合约根据逻辑关系只保留巫师决斗超时的处理接口;
resolveTimedOutDuel是更新处理超时情况下的巫师决斗结果的接口;
其中每个巫师有自己的决斗场和决斗能量;
若巫师1满足胜利条件,则将巫师2的决斗能量转移给巫师1,再将巫师2的决斗能量清零。
2.合约上传
新增项目
在“链必验”工具中创建需要检测的项目。本次检测的项目为ETH类型项目,那么根据需求点击工具左上方“新增项目”按钮,输入项目名称,选择项目类型,点击确定。
新增合约文件夹
选择刚创建好的项目,点击工具左上方的“新增合约文件夹”按钮,输入文件夹名称。
上传合约文件
选择刚创建好的文件夹,点击工具左上方的“上传”按钮,上传准备好检测的合约文件。
3.合约检测
新增项目
将待检测合约上传完成之后,选择此合约,按照合约内容输入检测参数,然后点击开始检测。
4.查看结果
待合约检测完成之后,查看检测结果,通过代码定位、错误描述、修复建议了解明确该漏洞的具体信息,然后查看代码逻辑寻找问题并进行修复。
5.结果分析
经分析,产生此漏洞的原因是在执行resolveTimedOutDuel接口更新巫师1和巫师2的决斗属性时,未考虑巫师1和巫师2相等的情况,在此场景下,巫师1的决斗能量会先翻倍,然后再清零,导致巫师1状态更新前后总的决斗能量发生了改变,所以导致了assert断言的失败。
6.问题解决
此时在resolveTimedOutDuel接口中添加一个限制条件“require(wizardId1!=wizardId2);”,确保在执行决斗属性更新时巫师1和巫师2不相等,查看是否还存在此问题。
7.漏洞检测难度人工难以察觉,随机测试难以出现这种情况
对于智能合约的验证,通常是伴随人工验证,靠自身经验不断尝试枚举各项可能不满足的输入条件,从而比对输出来判断是否存在漏洞;其存在的问题就是人工成本昂贵,测试时无法覆盖到所有的路径,测试具有一定的机械性、重复性、工作量往往较大。
而对于智能合约的另外一种验证方式-fuzzing模糊测试,虽然可以解决人工成本昂贵的问题,但是由于其没有实际执行规则机制原因,仅靠“蛮力”不断枚举各个输入,同样存在可能出现某种输入漏掉的问题,并且无法根据路径检测出一些逻辑性的漏洞。
在加密行业你想抓住下一波牛市机会你得有一个优质圈子,大家就能抱团取暖,保持洞察力。
如果只是你一个人,四顾茫然,发现一个人都没有,想在这个行业里面坚持下来其实是很难的。
想抱团取暖,或者有疑惑的,欢迎加入!
感谢阅读,喜欢的朋友可以点个赞关注哦,我们下期再见!
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。