那些被一行代码蒸发1个亿的智能合约,形式化验证了解一下? | 人物志

640?wx_fmt=jpeg


「人物志」为区块链大本营(ID:blockchain_camp)着力打造的人物栏目,以「趣味而不失专业,可读而不失深度」为宗旨,每期邀请区块链领域的顶级专家和开发者就行业、投融资、开发、案例、项目实践等展开探讨。



作为以太坊生态的核心,智能合约这几年发展迅速。最早的智能合约,可以追溯到1995年,由密码学家尼克萨博首次提出。智能合约在多方参与、复杂交易的场景中有明显优势。


然而,近期随着智能合约安全问题的频繁出现,智能合约的劣势也愈发明显,包括智能合约如何对实体资产进行控制,从而保证其有效地执行合约;以及如何保证代码完全反应合约方的意志而不出现漏洞等。这些问题所引起的漏洞,使DAO、Parity、BEC等著名项目的市值几乎一夜归零


再加上智能合约一旦上传即公开且不可更改,因此现在的区块链项目,对于安全性的需求更加迫切


针对这些安全问题,成都链安科技尝试将原本应用于军工领域的「形式化验证」方法,应用于智能合约安全审计。形式化验证(formal verification)是基于数学建模方法对系统进行描述,通过形式化验证,开发者可以对程序的安全性事先进行审查,排除逻辑漏洞和安全漏洞,从而保证合约的安全。


关于形式化验证的更多细节,近日,我们采访了链安科技创始人/CEO杨霞,就形式化验证的现状、原理以及市场情况作了深入探讨。


以下是与杨霞对话实录。



偶然打开的区块链新世界大门


区块链大本营:我了解到你的主要身份是电子科技大学的教授,在从事区块链之前有怎样的人生经历?

杨霞:我从本科到研究生到博士,一直都在电子科技大学,而且是一路保送过来的,有人说我这是「坐飞机」(笑),之后就顺理成章的留校当老师了。2012年9月开始做形式化验证;2013年,我在美国一所大学的国际级安全实验室以访问学者身份工作和学习了一年。


我为什么要做形式化验证呢?原因在于,我之前一直研究嵌入式操作系统的安全保障技术,别人就问我你怎么证明你的系统是安全的?是不是得找一个方法来证明?于是我开始探索对系统安全性和功能进行证明的方法,于是发现了形式化验证方法。其实形式化验证本来是一个很冷门的领域,受众范围也没那么广,所以基本都是在高校和研究所里在研究。我也将此技术应用于航天、航空、军事等领域的安全关键软件中。


区块链大本营:作为教师,从教育工作到一个区块链企业的创业者,是出于怎样的契机?

杨霞:我接触区块链是2016年著名的DAO系统安全事件,其实那个时候真的没有太在意。不过我有一个朋友在搞区块链,他跟我说你搞形式化验证,能不能去验证一下智能合约的安全,比如针对Dao系统的安全事件。我觉得挺有趣的就去试了一下。那时候我们还没有自动化的工具,只能靠人工进行代码的形式化描述,然后去证明。最后发现,形式化验证方法应用于智能合约安全审计效果不错。


然后我又找来了一个IBM的捐款智能合约(当时的合约不多),也验证了一下,发现了一个「Unchecked Send返回值」的漏洞

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的 MATLAB 代码,用于可视化一滴水滴蒸发模型: ```matlab % 模拟一滴水滴蒸发的过程 % 设置初始参数 r = 10; % 水滴半径,单位为毫米 h = 5; % 水滴高度,单位为毫米 T = 25; % 初始温度,单位为摄氏度 RH = 50; % 初始相对湿度,单位为百分比 t = 0; % 初始时间,单位为秒 % 设置模拟时间 t_end = 3600; % 模拟时间为1小时 % 计算初始表面积和体积 A = pi * r^2; % 表面积 V = (4/3) * pi * r^3; % 体积 % 开始模拟 while t < t_end % 计算当前温度和饱和水汽压 T_sat = 0.6108 * exp(17.27 * T / (T + 237.3)); % 饱和水汽压 P_sat = RH * T_sat / 100; % 当前水汽压 % 计算当前表面积和体积 A = pi * r^2; % 表面积 V = (4/3) * pi * r^3; % 体积 % 计算当前蒸发速率 k = 0.07; % 蒸发系数 m = k * A * (P_sat - 101.3) / V; % 蒸发速率 % 更新水滴半径和高度 dr = -m * t; % 水滴半径变化量 dh = -2 * dr; % 水滴高度变化量 r = r + dr; % 更新水滴半径 h = h + dh; % 更新水滴高度 % 更新时间 t = t + 1; % 时间增加1秒 % 可视化水滴 clf; % 清空画布 hold on; [X,Y,Z] = sphere(50); % 生成球体网格 surf(X*r,Y*r,Z*r + h); % 画出水滴 axis equal; % 设置坐标轴比例相等 axis([-r r -r r 0 2*r]); % 设置坐标轴范围 view(-30,60); % 设置视角 title(sprintf('Water Droplet Evaporation Simulation (t=%.0f s)', t)); % 设置标题 xlabel('x (mm)'); % 设置x轴标签 ylabel('y (mm)'); % 设置y轴标签 zlabel('z (mm)'); % 设置z轴标签 drawnow; % 刷新画面 end ``` 运行代码后,将会生成一张动态的水滴蒸发模拟图像。可以通过改变初始参数以及模拟时间,来探索不同条件下水滴的蒸发情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值