vaas(关于形式化验证两大工具(VaaS Mythril)测试对比报告)
时间:2024/04/24 18:17:25 编辑: 浏览量:次
sectionsectionsectionsection/section/sectionsectionsection/section/sectionsectionsectionsectionp随着以智能合约(Smart Contract)及区块链应用(DApp)为核心的区块链2.0时代逐渐成为主流,智能合约及区块链应用的安全性也越发成为业界备受关注的焦点。/pp尤其是,在经历过诸如THE DAO、币安被盗等事件,智能合约及区块链应用的安全性究竟应该如何得到验证和保障,业已成为当前区块链业界亟待解决的痛点。/pp笔者作过简单统计,自17年9月到18年9月期间,智能合约及区块链应用的相关漏洞呈频繁爆发的模式增长,并且所造成的后果都是影响深远的。不仅直接造成了巨额的金额损失;从长远发展角度上来看,更是影响到区块链这项新兴技术在未来的可持续发展。/pp另外,尽管当前智能合约及区块链应用的潜在漏洞并未得到妥善解决,可现状却是,智能合约及区块链应用的数量每天仍在以万计的平均增长率飞速提升。/pp不难看出,智能合约及区块链应用的增长率和安全性,正在以一种不太『健康』的关系并存。如果我们以供求关系来作类比(增长率为『供』;安全性为『求』),当下智能合约及区块链应用的普遍现状即是『供不应求』的状态。/pp基于此,如何保证海量智能合约及区块链应用的安全,已成为区块链行业内具备前瞻性的企业和个人所思考的核心问题。其实,当前行业内已有特行的方法来攻略这个痛点,诸如特征代码匹配、基于符号执行和符号抽象的自动审计、基于形式化验证的自动审计等都是较为可行的办法。其中,经过业界的广泛探究和实践,『基于形式化验证的自动审计』已成为了业内相对成熟和主流的方式。/pp因此,笔者特地将着眼点聚焦于『形式化验证』,选取当前行业内主流的两大形式化验证工具(VaaS Mythril),进行了一个简单的测试对比。特别指出,用以测试的Mythril工具版本为『0.21.12』。/pp以下为相关的测试报告,希望能够抛砖引玉,为广大读者带来一些直观感受和客观建议。若有不妥之处,欢迎留言指出。(本文仅代表笔者作测试后的个人建议,不对任何产品和工具作相关背书)/ph3 label=二级标题span style=font-size: 18px; font-weight: 600;VaaS Mythril工具简介/span/h3p01. VaaS工具简介/p/section/section/section/section/sectionsectionpVaaS工具是由Beosin成都链安采用自有知识产权独立研发的自动形式化验证工具,能够为智能合约和区块链应用提供『军事级』的形式化验证服务,可精确定位到有风险的代码位置并指出风险原因,有效检测出智能合约常规安全漏洞、安全属性和功能正确性,精确度高达95%以上。/p/sectionsectionsectionsectionp02. Mythril工具简介/p/section/section/sectionsectionpMythril工具是由以太坊开源社区所提供的安全分析工具,能够检测出Solidity智能合约中的安全漏洞并实现深入分析,是用以分析以太坊智能合约及区块链应用安全性的安全分析工具及引擎,支持常用IDE集成。/ph3 label=二级标题测试案例组成/h3p合约测试案例组成包括代币合约260个及业务合约20个。 /p/sectionul class= list-paddingleft-2 style=list-style-type: disc;lip代币合约包括Top200的代币合约及60个用以审计的典型代币合约,覆盖到了ICO、锁仓、铸币和销毁等功能。/p/lilip业务合约包括拍卖、商城、溯源等业务类合约共20个。/p/li/ulsectionh3 label=二级标题测试结果总览/h3pVaaS工具可检测出代币类和业务类的所有合约测试案例;但Mythril工具仅能检测出代币类合约,却无法对业务类合约进行检测。因此需要注意的是,本次测试结果总览仅是对代币类合约所罗列的对比分析。 /p/sectionsectionpVaaS工具总计有28项漏洞检查;但Mythril工具相对于VaaS工具只有9项漏洞检测。因此VaaS工具的检测项是远远多于Mythril工具的检测项。具体检测项对比如下:/ppVaaS Mythril检测项对比/p/sectionsectionsectionsectionsectionpimg src=https://pic.36krcnd.com/avatar/201910/14064349/0kfu0apughcrxqch.jpg data-img-size-val=520,735//ppimg src=https://pic.36krcnd.com/avatar/201910/14064359/yfl2q6a2y52x8ccs.jpg data-img-size-val=518,524//pp01. 之于两者相同检测项的检测结果/p/section/section/section/sectionsectionp对于选择的260个代币测试用例,Mythril工具在15分钟的时限内,可跑出184个合约结果,76个无检测结果;而VaaS工具可跑出全部结果。取Mythril工具和VaaS工具双方均可跑出的184个结果进行对比,结果如下。/pul class= list-paddingleft-2 style=list-style-type: disc;lip命中率误报率/p/li/ulp通过检测结果对比,之于相同的检测项,VaaS工具的检测能力是远远高于Mythril工具的检测能力。据计算,VaaS工具的检测精度为96.9%;Mythril工具的检测精度为36.6%;而VaaS工具的误报率为15.3%;Mythril工具的误报率为48.5%。具体见下图。/p/sectionsectionsectionimg src=https://pic.36krcnd.com/201910/14064300/eu2h9c0128p6enwl data-img-size-val=555,361//section/sectionsectionp需要注意的是,命中率和误报率的计算公式为:br//pul class= list-paddingleft-2 style=list-style-type: disc;lip命中率 = 命中个数/总问题个数/p/lilip误报率 = 误报个数/(误报个数+命中个数)/p/li/ulp笔者统计,VaaS工具和Mythril工具两者都进行的检测项共计655个问题:/pul class= list-paddingleft-2 style=list-style-type: disc;lipVaaS工具总计检测出635个问题,命中率为96.9%;误报共115个,误报率为15.3%/p/lilipMythril工具总计检测出240个问题,命中率为36.6%;误报共计226个,误报率为48.5%。其中,Mythril工具重入攻击和拒绝服务误报率较高,占总数的93.3%。/p/li/ulp检测总数值具体对比如下表:/p/sectionsectionsectionsectionsectionpimg src=https://pic.36krcnd.com/avatar/201910/14064421/7p2ftpv0iexu3so4.jpg data-img-size-val=528,805//p/section/section/section/sectionul class= list-paddingleft-2 style=list-style-type: disc;lip测试时限/p/li/ulsectionpMythril工具的平均测试时间为226.2s;而VaaS工具的平均测试时间为164.4s。说明VaaS工具的运行效率优于Mythril工具。/p/sectionsectionsectionsectionp02. 之于VaaS工具特有检测项的检测结果/p/section/section/sectionsectionp具体见下表:/ppVaaS工具特有检测项用例结果展示说明/p/sectionsectionsectionsectionsectionimg src=https://pic.36krcnd.com/avatar/201910/14064440/upnnmws5ibqt3axk.jpg data-img-size-val=514,771/h3 label=二级标题案例演示/h3p01. 两者相同检测项案例/p/section/section/section/sectionul class= list-paddingleft-2 style=list-style-type: disc;lipRe Entrancy(重入)/p/li/ulsectionp案例:/p/sectionsectionsectionimg src=https://pic.36krcnd.com/201910/14064300/iby3jssqvkq0p6zb data-img-size-val=750,46//section/sectionsectionsectionsectionsectionsectionsection/section/sectionsectionpinterface TEST {/pp function test123 external view returns (uint256);/pp function getBlocknumber external view returns (uint256);/pp}/pp /ppcontract test2 {/pp /pp function testCalling(address _testAdddress) public {/pp TEST t = TEST(_testAdddress);/ppt.test123;//mythril 误报/pp /pp }/pp /pp function testFormal(address _testAdddress) public view returns(uint256 time){/pp TEST t = TEST(_testAdddress);/pp t.getBlocknumber;//mythril 误报/pp return time;/pp }/pp}/ppcontract Reentrancy {/pp mapping(address = uint256) public balances;/pp /pp event WithdrawFunds(address _to,uint256 _value);/pp /pp function depositFunds public payable {/pp balances[msg.sender] += msg.value;/pp }/pp /pp function showbalance public view returns (uint256 ){/pp return address(this).balance;/pp }/pp /pp function withdrawFunds (uint256 _weiToWithdraw) public {/pp require(balances[msg.sender] = _weiToWithdraw);/pp require(msg.sender.call.value(_weiToWithdraw));/ppbalances[msg.sender] -= _weiToWithdraw;//mythril 明显的误报/pp emit WithdrawFunds(msg.sender,_weiToWithdraw);/pp }/pp}/p/sectionsectionpbr//p/section/section/section/section/sectionsectionsectionimg src=https://pic.36krcnd.com/201910/14064300/iby3jssqvkq0p6zb data-img-size-val=750,46//section/sectionsectionpbr//pul class= list-paddingleft-2lipVaaS工具测试结果:/p/li/ul/sectionsectionsectionsectionsectionimg src=https://pic.36krcnd.com/201910/14064300/w78s7o35r9jaygvd data-img-size-val=771,330//section/section/section/sectionsectionpbr//pul class= list-paddingleft-2lipMythril工具测试结果:/p/li/ul/sectionsectionsectionsectionsectionimg src=https://pic.36krcnd.com/201910/14064300/a0beke89wa37vlmp data-img-size-val=799,765//section/section/section/sectionsectionsectionsectionsectionimg src=https://pic.36krcnd.com/201910/14064300/qsrd9a664gd4aub1 data-img-size-val=562,684//section/section/section/sectionsectionpbr//pp▷笔者分析,VaaS工具报出存在重入攻击的位置;而Mythril工具针对外部的call调用作了告警,总共有4处告警,其中2处是正常的外部调用,另1处是明显的误报,误报率较高。/p/sectionul class= list-paddingleft-2 style=list-style-type: disc;lipTXOriginAuthentication(tx.origin使用错误)/p/li/ulsectionp案例:/p/sectionsectionsectionimg src=https://pic.36krcnd.com/201910/14064300/iby3jssqvkq0p6zb data-img-size-val=750,46//section/sectionsectionsectionsectionsectionsectionsection/section/sectionsectionpcontract TxUserWallet {/pp address owner;/pp /pp constructor public {/pp owner = msg.sender;/pp }/pp /pp function transferTo(address dest, uint amount) public {/pp require(tx.origin == owner);/pp dest.transfer(amount);/pp }/pp}/p/sectionsectionpbr//p/section/section/section/section/sectionsectionsectionimg src=https://pic.36krcnd.com/201910/14064300/iby3jssqvkq0p6zb data-img-size-val=750,46//section/sectionsectionpbr//pul class= list-paddingleft-2lipVaaS工具测试结果:/p/li/ul/sectionsectionsectionsectionsectionimg src=https://pic.36krcnd.com/201910/14064300/oukksdvmq2bfqquc data-img-size-val=732,155//section/section/section/sectionsectionpbr//pul class= list-paddingleft-2lipMythril工具测试结果:/p/li/ul/sectionsectionsectionsectionsectionimg src=https://pic.36krcnd.com/201910/14064301/o6lqnm5o3r1qp91g data-img-size-val=1012,331//section/section/section/sectionsectionpbr//pp▷笔者分析,VaaS工具和Mythril工具均能对tx.origin关键字进行检测报警。/p/sectionsectionpbr//pul class= list-paddingleft-2 style=list-style-type: disc;lipInvoke Low Level Calls(call调用,delegatecall调用,自杀函数调用)/p/li/ulp案例:/p/sectionsectionsectionimg src=https://pic.36krcnd.com/201910/14064300/iby3jssqvkq0p6zb data-img-size-val=750,46//section/sectionsectionsectionsectionsectionsectionsection/section/sectionsectionpcontract Delegatecall{/pp uint public q;/pp bool public b;/pp address addr = 0xde6a66562c299052b1cfd24abc1dc639d429e1d6;/pp function Delegatecall public payable {/pp /pp }/pp /pp function call1 public returns(bool) {/ppb = addr.delegatecall/pp(bytes4(keccak256(fun(uint256,uint256))),2,3);/pp return b;/pp }/pp /pp function call2(address add) public returns(bool){/ppb=add.delegatecall/pp(bytes4(keccak256(fun(uint256,uint256))),2,3);/pp return b;/pp }/pp}/p/sectionsectionpbr//p/section/section/section/section/sectionsectionsectionimg src=https://pic.36krcnd.com/201910/14064300/iby3jssqvkq0p6zb data-img-size-val=750,46//section/sectionsectionpbr//pul class= list-paddingleft-2lipVaaS工具测试结果:/p/li/ul/sectionsectionsectionsectionsectionimg src=https://pic.36krcnd.com/201910/14064301/p91817hx8xy6y0xl data-img-size-val=786,338//section/section/section/sectionsectionpbr//pul class= list-paddingleft-2lipMythril工具测试结果:/p/li/ul/sectionsectionsectionsectionsectionimg src=https://pic.36krcnd.com/201910/14064301/a3r9m1oa03btkvrj data-img-size-val=977,333//section/section/section/sectionsectionpbr//pp▷笔者分析,案例有两处delegetacall调用,而Mythril工具仅报了一次,存在漏报风险。/p/sectionsectionpbr//pul class= list-paddingleft-2lipBlockMembers Manipulation(区块参数依赖)/p/lip案例:/p/ul/sectionsectionsectionimg src=https://pic.36krcnd.com/201910/14064300/iby3jssqvkq0p6zb data-img-size-val=750,46//section/sectionsectionsectionsectionsectionsectionsection/section/sectionsectionpfunction createTokens payable external {/pp if (isFinalized) throw;/ppif (block.number fundingStartBlock) throw;/ppif (block.number fundingEndBlock) throw;/pp if (msg.value == 0) throw;/pp /pp uint256 tokens = safeMult(msg.value, tokenExchangeRate); /pp uint256 checkedSupply = safeAdd(totalSupply, tokens);/pp /pp if (tokenCreationCap checkedSupply) throw; /pp /pp totalSupply = checkedSupply;/pp balances[msg.sender] += tokens; /pp CreateBAT(msg.sender, tokens); /pp }/pp /ppfunction finalize external {/pp if (isFinalized) throw;/pp if (msg.sender != ethFundDeposit) throw;/pp if(totalSupply tokenCreationMin) throw; /pp if(block.number = fundingEndBlock totalSupply != tokenCreationCap) throw;/pp // move to operational/pp isFinalized = true;/pp if(!ethFundDeposit.send(this.balance)) throw; /pp }/pp /pp /ppfunction refund external {/pp if(isFinalized) throw; /ppif (block.number = fundingEndBlock) throw;/pp if(totalSupply = tokenCreationMin) throw; /pp if(msg.sender == batFundDeposit) throw; /pp uint256 batVal = balances[msg.sender];/pp if (batVal == 0) throw;/pp balances[msg.sender] = 0;/pp totalSupply = safeSubtract(totalSupply, batVal);/pp uint256 ethVal = batVal / tokenExchangeRate; /pp LogRefund(msg.sender, ethVal); /pp if (!msg.sender.send(ethVal)) throw; /pp }/pp}/p/sectionsectionpbr//p/section/section/section/section/sectionsectionsectionimg src=https://pic.36krcnd.com/201910/14064300/iby3jssqvkq0p6zb data-img-size-val=750,46//section/sectionsectionpbr//pul class= list-paddingleft-2lipVaaS工具测试结果:/p/li/ul/sectionsectionsectionsectionsectionimg src=https://pic.36krcnd.com/201910/14064301/tzfizormu3bdgizr data-img-size-val=550,655//section/section/section/sectionsectionpbr//pul class= list-paddingleft-2lipMythril工具测试结果:/p/li/ul/sectionsectionsectionsectionsectionimg src=https://pic.36krcnd.com/201910/14064301/42blrofmx3a1o6ak data-img-size-val=921,701//section/section/section/sectionsectionpbr//pp▷笔者分析,VaaS工具和Mythril工具均能对区块参数依赖作出检测;但Mythril工具存在漏报风险。/p/sectionsectionpbr//pul class= list-paddingleft-2lipDenial of service(拒绝服务)/p/lip案例:/p/ul/sectionsectionsectionimg src=https://pic.36krcnd.com/201910/14064300/iby3jssqvkq0p6zb data-img-size-val=750,46//section/sectionsectionsectionsectionsectionsectionsection/section/sectionsectionpcontract Auction {/pp address public highestBidder = 0x0;/pp uint256 public highestBid;/pp function Auction(uint256 _highestBid) {/pp require(_highestBid 0);/pp highestBid = _highestBid;/pp highestBidder = msg.sender;/pp }/ppbr//pp function bid payable {/pp require(msg.value highestBid);/pp highestBidder.transfer(highestBid);/pphighestBidder = msg.sender;/pphighestBid = msg.value;/pp }/ppbr//pp function auction_end {/pp }/pp}/p/sectionsectionpbr//p/section/section/section/section/sectionsectionsectionimg src=https://pic.36krcnd.com/201910/14064300/iby3jssqvkq0p6zb data-img-size-val=750,46//section/sectionsectionpbr//pul class= list-paddingleft-2lipVaaS工具测试结果:/p/li/ul/sectionsectionsectionsectionsectionimg src=https://pic.36krcnd.com/201910/14064301/y809wnbhruk54rlc data-img-size-val=559,320//section/section/section/sectionsectionpbr//pul class= list-paddingleft-2lipMythril工具测试结果:/p/li/ul/sectionsectionsectionsectionsectionimg src=https://pic.36krcnd.com/201910/14064301/lahljr8ahaf488am data-img-size-val=757,42//section/section/section/sectionsectionpbr//pp▷笔者分析,VaaS工具和Mythril工具均能针对拒绝服务作出风险检测。但在此案例中,highestBidder可能是恶意攻击合约,而导致transfer恒不成功,从而导致合约拒接服务,此案例VaaS工具能够检测出拒绝服务风险,Mythril工具未检出。/p/sectionsectionpbr//pul class= list-paddingleft-2lipUnchecked Call Or Send Return Values(call和send的返回值检测)/p/lip案例:/p/ul/sectionsectionsectionimg src=https://pic.36krcnd.com/201910/14064300/iby3jssqvkq0p6zb data-img-size-val=750,46//section/sectionsectionsectionsectionsectionsectionsection/section/sectionsectionpif (lastTimeOfNewCredit + TWELVE_HOURS block.timestamp) {/ppmsg.sender.send(amount);/pp creditorAddresses[creditorAddresses.length - 1].send(profitFromCrash);/pp corruptElite.send(this.balance);/ppbr//pp .../ppbr//pp return true;/pp}/ppelse {/ppmsg.sender.send(amount);/ppreturn false;/pp}/p/sectionsectionpbr//p/section/section/section/section/sectionsectionsectionimg src=https://pic.36krcnd.com/201910/14064300/iby3jssqvkq0p6zb data-img-size-val=750,46//section/sectionsectionpbr//pul class= list-paddingleft-2lipVaaS工具测试结果:/p/li/ul/sectionsectionsectionsectionsectionimg src=https://pic.36krcnd.com/201910/14064302/htm2688ay8ew33xy data-img-size-val=812,806//section/section/section/sectionsectionpbr//pul class= list-paddingleft-2lipMythril工具测试结果:/p/li/ul/sectionsectionsectionsectionsectionimg src=https://pic.36krcnd.com/201910/14064302/rejjh0sej8hifsgs data-img-size-val=791,338//section/section/section/sectionsectionpbr//pp▷笔者分析,VaaS工具和Mythril工具均能对未检查call调用的返回值检测;但Mythril工具存在漏报风险。/p/sectionsectionpbr//pul class= list-paddingleft-2lipInteger Overflow(整数溢出)/p/lip案例1:/p/ul/sectionsectionsectionimg src=https://pic.36krcnd.com/201910/14064300/iby3jssqvkq0p6zb data-img-size-val=750,46//section/sectionsectionsectionsectionsectionsectionsection/section/sectionsectionpfunction distributeBTR(address[] addresses) onlyOwner {/pp for (uint i = 0; i addresses.length; i++) {/pp balances[owner] -= 2000 * 10**8;/pp alances[addresses[i]] += 2000 * 10**8;/pp Transfer(owner, addresses[i], 2000 * 10**8);/pp}/pp }/p/sectionsectionpbr//p/section/section/section/section/sectionsectionsectionimg src=https://pic.36krcnd.com/201910/14064300/iby3jssqvkq0p6zb data-img-size-val=750,46//section/sectionsectionpbr//pp▷笔者分析,以上案例没有对balances[owner]的值作检测,可能会产生下溢,但Mythrill工具不会报错,说明Mythrill工具对常数的运算不会作检测。/ppbr//pp案例2:/p/sectionsectionsectionimg src=https://pic.36krcnd.com/201910/14064300/iby3jssqvkq0p6zb data-img-size-val=750,46//section/sectionsectionsectionsectionsectionsectionsection/section/sectionsectionpcontract A {/pp uint c;/pp function add(uint8 a,uint8 b){/ppuint8 sum = a+b;/pp c=sum;/pp }/pp}/p/sectionsectionpbr//p/section/section/section/section/sectionsectionsectionimg src=https://pic.36krcnd.com/201910/14064300/iby3jssqvkq0p6zb data-img-size-val=750,46//section/sectionsectionpbr//pul class= list-paddingleft-2lipVaaS工具测试结果:/p/li/ul/sectionsectionsectionsectionsectionimg src=https://pic.36krcnd.com/201910/14064302/udzrkx4d5u7um5in data-img-size-val=651,162//section/section/section/sectionsectionpbr//pul class= list-paddingleft-2lipMythril工具测试结果:/p/li/ul/sectionsectionsectionsectionsectionimg src=https://pic.36krcnd.com/201910/14064301/lahljr8ahaf488am data-img-size-val=757,42//section/section/section/sectionsectionpbr//pp▷笔者分析,Mythrill工具对非uint256数据类型的溢出检测不准确。/ppbr//pp案例3:/ppbr//pul class= list-paddingleft-2lipMythril工具的一些检测结果:/p/li/ul/sectionsectionsectionsectionsectionimg src=https://pic.36krcnd.com/201910/14064302/64hcgqxva9bnjcjy data-img-size-val=997,455//section/section/section/sectionsectionsectionsectionsectionimg src=https://pic.36krcnd.com/201910/14064302/bimczdiwt2n0djs4 data-img-size-val=1023,262//section/section/section/sectionsectionpbr//pp▷笔者分析,Mythrill工具对一些特定变量未作处理,导致误报。比如数组,msg.value,now等。/ppbr//p/sectionsectionsectionsectionpbr//pp02.VaaS工具特有检测项案例/p/sectionsectionsection/sectionsectionsection/section/section/section/section/sectionsectionpbr//pp案例1:/p/sectionsectionsectionimg src=https://pic.36krcnd.com/201910/14064300/iby3jssqvkq0p6zb data-img-size-val=750,46//section/sectionsectionsectionsectionsectionsectionsection/section/sectionsectionp.../ppcontract ERC20 is ERC20Basic {/pp function allowance(address owner, address spender) constant returns (uint);/ppfunction transferFrom(address from, address to, uint value);/pp function approve(address spender, uint value);/pp event Approval(address indexed owner, address indexed spender, uint value);/pp}/pp.../pp function transfer(address _to, uint _value) onlyPayloadSize(2 * 32) {/pp balances[msg.sender] = balances[msg.sender].sub(_value);/pp balances[_to] = balances[_to].add(_value);/pp Transfer(msg.sender, _to, _value);/pp }/p/sectionsectionpbr//p/section/section/section/section/sectionsectionsectionimg src=https://pic.36krcnd.com/201910/14064300/iby3jssqvkq0p6zb data-img-size-val=750,46//section/sectionsectionpbr//pul class= list-paddingleft-2lip测试结果:/p/li/ul/sectionsectionsectionsectionsectionimg src=https://pic.36krcnd.com/201910/14064302/cliy97z3eornz7bk data-img-size-val=847,351//section/section/section/sectionsectionsectionsectionsectionimg src=https://pic.36krcnd.com/201910/14064303/esuhp0zunlejcjn0 data-img-size-val=829,174//section/section/section/sectionsectionpbr//pp案例2:/p/sectionsectionsectionimg src=https://pic.36krcnd.com/201910/14064300/iby3jssqvkq0p6zb data-img-size-val=750,46//section/sectionsectionsectionsectionsectionsectionsection/section/sectionsectionpcontract A {/pp B b;/pp uint c;/pp function test(uint a){/pp b = new B(a);/pp c = b.get(200);/pp }/pp}/ppbr//ppcontract B {/pp uint b;/pp function B(uint e){/pp b=100;/pp }/pp function get(uint a)returns(uint){/pp require(a100);/pp return a;/pp }/pp}/p/sectionsectionpbr//p/section/section/section/section/sectionsectionsectionimg src=https://pic.36krcnd.com/201910/14064300/iby3jssqvkq0p6zb data-img-size-val=750,46//section/sectionsectionpbr//pul class= list-paddingleft-2lip测试结果:/p/li/ul/sectionsectionsectionsectionsectionimg src=https://pic.36krcnd.com/201910/14064303/arcc0pw6uxqf91y9 data-img-size-val=514,167//section/section/section/sectionsectionpbr//pp▷笔者分析,在案例2中关于合约间的调用问题,在拥有源码的情况下,VaaS工具是可以调用成功并进行测试的;而Mythril工具不行。这也是Mythril工具无法进行业务合约验证的原因之一。/p/sectionsectionsectionsectionsectionimg src=https://pic.36krcnd.com/201910/14064303/oxh4w7yo34zh750x data-img-size-val=1080,717//section/sectionsectionsection/section/sectionsectionsectionsectionp通过以上对VaaS工具和Mythril工具逻辑、维度、数据进行简单的对比分析,笔者认为,读者在阅后将能够根据自身业务取向和侧重作出相应的判断和评估。/pp且毋论智能合约和区块链应用,甚至整个区块链行业的安全性,未来都将需要以一种供(增长率)求(安全性)关系平衡的模式向前发展,我们就更需要清楚地知道,当前现状的痛点所在,以及如何针对该痛点进行改进和革新。/pp无论是作为前沿科技拥戴者,还是区块链技术极客,但凡具备去中心化思维以及认可智能合约及区块链应用在未来具备深远影响力的有识之士,都能明白笔者针对『形式化验证』作此篇测试报告的用意。/pp诚然,尽管当下更多的目光放是放在如何推进智能合约和区块链应用的落地以及区块链全生态的统筹建设上,但倘若底层技术架构方面本身都还存在各种漏洞风险尚未解决,就未免太过于好高骛远了。/pp因此,笔者建议,为保障海量智能合约及区块链应用的安全,以及维护区块链生态的良好运维,『形式化验证』业已成为了当下自动化审计的重要途径。/pp通过漏报率、误报率、命中率、测试时限等评估维度,来整体判别某种验证和审计工具的可行性,是当前智能合约及区块链应用发展的必经阶段,也是作为区块链从业者需要认真践行的使命。/p/section/section/section/section/section
-
-
二战是哪一年(第二次世界大战简史)
浏览:29 2024-05-09
-
-
孙俪微博(孙俪发微博,晒8岁儿子与邓超的对话,网友大笑:能自力更生了)
浏览:32 2024-05-09
-
-
含有兔的字(“钱”“兔”无量、大展鸿“兔”……谐音梗祝福语火遍全网)
浏览:27 2024-05-09
-
-
月上中天(定风波:词林正韵五阕)
浏览:25 2024-05-09
-
-
香港一级黄色片(她为了红不惜拍大尺度片,性感豪放大胆敢脱敢露)
浏览:24 2024-05-09
-
-
上市时间(上市之路一波三折,留给万达商管的时间不多了?)
浏览:25 2024-05-09