引子:“真行者珞珈山诉苦,假猴王水帘洞誊文。”——《西游记·第五十八回》在《西游记》中,六耳猕猴冒充猴王孙悟空,以假乱真,过了唐僧,过了众神,纵使是照妖镜也分不出真假。现在,智能合约遇上了“六耳猕猴”,又会擦出怎样的火花?
在智能合约中,构造函数负责一些数据的初始化工作,owner值一般也会放在构造函数中进行初始化。owner是智能合约拥有者的称呼,也常被用来作为该合约的超级管理员。对代币合约来说,owner可能被分配的权限有:铸造/销毁代币、冻结代币等。如果开发者以错误的语法创建“构造函数”,造成构造函数缺失,致使“六耳猕猴”以假乱真,瞒过了开发者,最后使得攻击者成为合约的拥有者,那么攻击者便可依赖owner的权限,对代币进行增发或销毁等操作,进而可能造成整个代币的崩盘。一、构造函数简介
以太坊ERC-20日均转移量、唯一地址数、日均验证智能合约数量等多个链上指标出现普涨:金色财经报道,最新链上指标表明以太坊使用量和网络活动正在增加,对资产需求和 ETH 价格产生了积极影响。根据 Etherscan 统计,上周 ERC-20 Token 日均转移数量突破 100 万笔,过去六个月内翻了一番;以太坊唯一地址数也达到 2.21 亿的历史新高,过去六个月增长了约 10%;此外,以太坊网络的日均交易量稳定在 100 万笔左右,表明在过去三个月中网络使用和活动并没有随着价格下降;以太坊网络上日均验证智能合约数量较去年同期增加了约 140%,据 Etherscan 数据,目前以太坊每天大约有 600 份新合约得到验证。(beincrypto)[2023/1/30 11:36:52]
在Solidity语言中,当函数名和合约名相同时,此函数就是合约的构造函数,在合约对象创建时,会先调用构造函数对相关的数据进行初始化。以太坊Solidity0.4.22版本中引入了关键字constructor,新的构造函数声明形式:constructor()public{},引入的目的是用以替代低版本中将合约名作为构造函数名的语法形式,从而避免开发者笔误造成构造函数命名错误的问题。引入的这个关键字看似平淡无奇,实则意蕴深刻,且听我慢慢道来。
NBAxNFT:因智能合约问题导致提前售罄,正识别白名单中无法铸造NFT的钱包:4月21日消息,NBA旗下NBAxNFT官推特发文称:“我们认识到智能合约的问题,它导致白名单供应提前售罄。目前正在识别白名单中无法铸造NFT的钱包。”此前消息,NBA宣布4月21日推出季后赛“动态”NFT The Association,总发行量18000枚;BlockSec告警系统今早发现NBA NFT合约存在漏洞,以致非白名单用户可铸造NFT,已有攻击者铸造了多个NFT,而在之前的宣发活动中白名单用户只能免费铸造一个NFT。[2022/4/21 14:38:29]
数据:智能合约中TVL自去年10月以来从100亿美元增加到1000亿美元:加密研究机构Messari发推表示,在很短的时间内,智能合约中的TVL走势呈抛物线状,自2020年10月以来,在不同智能合约平台上流动的资产从100亿美元(大部分在以太坊)增长了10倍,超过1000亿美元,遍及多个扩容解决方案和Layer-1项目。[2021/7/14 0:52:37]
二、Fal1out“以假乱真?”
–漏洞分析下面以ethernaut靶场的Fallout题目为例进行分析。一眼看去,这似乎是一个正常没有漏洞的合约代码,但经过仔细观察发现,该合约存在一个致命错误——构造函数名称与合约名称不一致,Fallout合约的构造函数被写错成了Fal1out。这样的错误使其成为了一个被public修饰的普通函数,失去了构造函数仅在合约部署时被调用的特性,使得任何人都可以调用。该题目源码如下图所示:
智能合约平台Fantom启动Uniswap克隆版fUNI.Uniswap:基于DAG的智能合约平台Fantom宣布启动fUNI.Uniswap,fUNI是部署在Fantom上的Uniswap克隆项目,目前已发布应用版和钱包集成版。公告称,在Fantom上启动Uniswap将拥有较低的费用和更快速的交易:费用低于一美分,确认交易的速度在2秒内。Uniswap的所有其他特征保持不变。用户可在fUNI上交易fUSD和wFTM,开发人员可以像在以太坊上一样部署代币。[2020/10/16]
图1在Fal1out函数中直接指定了函数调用者的地址即为owner,所以只需要调用Fal1out函数即可实现对合约owner的更改。如下图所示:
以太坊智能合约开发工具Truffle总下载量已超350万:金色财经报道,以太坊智能合约开发工具Truffle的总下载量已超过350万,其中大部分下载发生在过去两年中。目前该套件的平均每月下载量约12万。[2020/7/7]
图2“假猴王”Fal1out想借着一些字体类型的相似字符的视觉差异混淆视听,可最终还是没能逃过我们的“火眼金睛”。三、前车之覆:
MorphToken事件分析在过去也曾发生过类似的安全事件,包含着假构造函数的合约被成功发布到主链上,其中比较出名的是“MorphToken事件”,其因为一个看似很小的问题而造成了数千万市值的代币被增发。合约代码地址:https://etherscan.io/address/0x2ef27bf41236bd859a95209e17a43fbd26851f92#code在Owned合约中,由于首字母大小写的错误,导致本该成为构造函数的Owned成为了普通函数owned,且被public修饰,可供任何人调用。如下图所示:
图3MorphToken合约继承了Owned合约,并在自己的构造函数内进行了owner的初始化,但是父合约Owned的owned函数是可供任何人调用的,攻击者便可通过调用owned函数更改合约的所有者owner。owner的初始化代码如下图所示:
图4由上述可知,任何人都可以通过调用合约的owned函数,成为合约的拥有者(owner)。如下图所示:
图5失之毫厘,差之千里,一个小小的字母错误,却导致了合约的代币的崩盘。代币也被恶意增发。如下图所示:
图6四、后车之鉴:
开发者应如何正确使用构造函数建议更换Solidity0.4.22及以上版本,并使用正确的constructor()语法。如下图所示:
图7切记:constructor()前并无function,functionconstructor()public{}为错误的构造函数形式。如果要使用低于0.4.22的版本,则一定要着重检查函数名是否和合约名一致。如下图所示:
图8五、安全建议
在智能合约中因开发者粗心,而造成安全漏洞的事件层出不穷,“千里之堤,溃于蚁穴”,成都链安-安全实验室在此给出如下建议:1、开发者在编写智能合约敏感函数时,应严格按照官方要求的代码书写规范,注意不要出现字符错误等情况。2、在某些情况下,编译器会对constructor的错误使用发出警告,开发者应予以正确对待,不可认为其只是警告信息而忽略不处理。3、在合约正式上线前一定要找专业可信的机构做好合约代码的审计工作。
本文来自Decrypt,作者:JeffBensonOdaily星球日报译者|余顺遂文章要点:上个季度,稳定币的货币基础增加38亿美元,达到120亿美元。超过80%的稳定币市值由USDT控制.
1900/1/1 0:00:00编者按:本文来自Rossa私想汇,作者:Rossa,Odaily星球日报经授权转载。一、丰满的理想对于EOS,中国投资人都不会陌生,因为EOS曾经是明星项目.
1900/1/1 0:00:00文|黄雪姣编辑|Mandy王梦蝶出品|Odaily星球日报特别感谢6Block石榴矿池为本文专业性提供指导 IPFS相关的投资机遇成了近期数字货币行业最出圈的热点.
1900/1/1 0:00:00点差一直是困扰期权交易者的一个难题,尤其是虚值期权,点差是交易中必须考虑的问题。一般而言,主要交易价格区域的点差比较小,比如目前比特币价格为9150左右,一般8500到9500这个价格范围的买一.
1900/1/1 0:00:00编者按:本文来自巴比特资讯,译者:夕雨,星球日报经授权发布。高盛前对冲基金经理拉乌尔·帕尔表示,他正在考虑买入以太坊,因为他认为这个第二大加密货币可能带动下一次牛市反弹.
1900/1/1 0:00:00编者按:本文来自巴比特资讯,星球日报经授权发布。7月17日,“新生?澳门产业区块链协会成立大会”在横琴召开.
1900/1/1 0:00:00