引子:“真行者珞珈山诉苦,假猴王水帘洞誊文。”——《西游记·第五十八回》在《西游记》中,六耳猕猴冒充猴王孙悟空,以假乱真,过了唐僧,过了众神,纵使是照妖镜也分不出真假。现在,智能合约遇上了“六耳猕猴”,又会擦出怎样的火花?
在智能合约中,构造函数负责一些数据的初始化工作,owner值一般也会放在构造函数中进行初始化。owner是智能合约拥有者的称呼,也常被用来作为该合约的超级管理员。对代币合约来说,owner可能被分配的权限有:铸造/销毁代币、冻结代币等。如果开发者以错误的语法创建“构造函数”,造成构造函数缺失,致使“六耳猕猴”以假乱真,瞒过了开发者,最后使得攻击者成为合约的拥有者,那么攻击者便可依赖owner的权限,对代币进行增发或销毁等操作,进而可能造成整个代币的崩盘。一、构造函数简介
智能合约钱包UniPass与硬件钱包Keystone宣布合并为Account Labs:5月20日消息,智能合约钱包 UniPass 与硬件钱包 Keystone 宣布合并为 Account Labs,原 Keystone CEO 刘力心将担任 Account Labs CEO,主要负责 BD、增长、融资等对外事宜,原 UniPass CEO 知县将担任 Account Labs COO,主要负责产品、团队建设等内部事宜。
合并后的 Account Labs 将保留原有 Keystone 和 UniPass 业务,现有用户及客户不会因此受到影响,同时还会持续探索两者在账户抽象领域协同的可能性,致力于让更多人能够轻松拥有并管理自己的去中心化账户,将数以亿计的用户引入 Web3 世界。[2023/5/20 15:15:22]
在Solidity语言中,当函数名和合约名相同时,此函数就是合约的构造函数,在合约对象创建时,会先调用构造函数对相关的数据进行初始化。以太坊Solidity0.4.22版本中引入了关键字constructor,新的构造函数声明形式:constructor()public{},引入的目的是用以替代低版本中将合约名作为构造函数名的语法形式,从而避免开发者笔误造成构造函数命名错误的问题。引入的这个关键字看似平淡无奇,实则意蕴深刻,且听我慢慢道来。
现场 | NEO创始人达鸿飞:建立成熟的开发语言有助于智能合约大规模应用:金色财经现场报道,3月13日香港TOKEN2049大会“打造智能合约平台”主题圆桌讨论上,NEO创始人达鸿飞表示,开发中安全性是最重要的,而开发软件和平台时要想要达到极致的安全性是非常昂贵的,不同的应用有不同的安全等级需求,经济生态以及社区的建设能够助力于此。对于开发者而言,建立成熟的智能合约开发语言能够让更多开发者能够参与其中,推进智能合约的大规模应用。[2019/3/13]
二、Fal1out“以假乱真?”
–漏洞分析下面以ethernaut靶场的Fallout题目为例进行分析。一眼看去,这似乎是一个正常没有漏洞的合约代码,但经过仔细观察发现,该合约存在一个致命错误——构造函数名称与合约名称不一致,Fallout合约的构造函数被写错成了Fal1out。这样的错误使其成为了一个被public修饰的普通函数,失去了构造函数仅在合约部署时被调用的特性,使得任何人都可以调用。该题目源码如下图所示:
声音 | 电讯盈科全球CEO:区块链可通过搭建智能合约促进服务互联自动化:据lightreading消息,电讯盈科全球(PCCW Global)首席执行官Marc Halbfinger表示,服务互联正在发生变化,要求前端实现端到端连接的自动化,但后端也要实现大规模处理商业协议的自动化。这就是区块链可以通过搭建智能合约来促进自动化的地方,这样结算和纠纷的参数就可以被纳入其中,从而自动化。
投资有风险,入市须谨慎。
本资讯不作为投资理财建议。[2018/11/13]
图1在Fal1out函数中直接指定了函数调用者的地址即为owner,所以只需要调用Fal1out函数即可实现对合约owner的更改。如下图所示:
分析 | 中国信通院:图灵完备和图灵不完备的智能合约之间的区别:中国信息通信研究院与可信区块链推进计划共同组织编写了《区块链白皮书》(2018年),白皮书中表示,智能合约可分为图灵完备和非图灵完备。影响实现图灵完备的常见原因包括:循环或递归受限、无法实现数组或更复杂的数据结构等。图灵完备的智能合约有较强的适应性,可以对逻辑较复杂的业务操作进行编程,但有陷入死循环的可能。对比而言,图灵不完备的智能合约不能进行复杂的逻辑操作,但更加简单、高效、和安全。[2018/9/6]
图2“假猴王”Fal1out想借着一些字体类型的相似字符的视觉差异混淆视听,可最终还是没能逃过我们的“火眼金睛”。三、前车之覆:
动态 | 俄亥俄州定义区块链和智能合约的法案已生效:据ethnews报道,今年5月,俄亥俄州参议员Matt Dolan向该州立法机构提交了一项法案,旨在澄清区块链签名和合约的法律地位。该法案SB300未能推进,但其部分内容作为修正案被归入另一项涉及网络安全的法案SB220。此前SB220于5月份通过参议院,6月份通过众议院,并一直在等待州长的决定。上周五州长John Kasich终于宣布已签署该法案,SB220修正案正式生效。根据该法案,通过区块链技术获得的记录或合同被视为电子形式的,并成为电子记录。[2018/8/7]
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、在合约正式上线前一定要找专业可信的机构做好合约代码的审计工作。
近两日主流币接连发威,前日莱特领头日涨幅久违的超过4%,带动其他主流币突破一直以来的震荡区间。今日清晨ETH开启爆拉模式接力,日涨幅超过7%,站上3月份以来首次触及的260美元,同时也为其他主流.
1900/1/1 0:00:00编者按:本文来自链闻ChainNews,撰文:李硕淼Frank,ParallelVC投资副总裁,星球日报经授权发布.
1900/1/1 0:00:00作者:OKEx内容策划组焦国锋、胡雅璐OKEx情报局行业周报带你快速回顾行业动态,厘清产业动向.
1900/1/1 0:00:00编者按:本文来自深潮TechFlow,作者:宋小丸,Odaily星球日报经授权转载。比特币还在横盘,LINK早已一飞冲天。7月13日,LINK价格突破8美元,再创新高,24小时涨幅超过30%.
1900/1/1 0:00:00编者按:本文来自威廉闲谈,作者:陳威廉,Odaily星球日报经授权转载。昨天圈内最大的热点属于狗狗币,作为一个曾经的明星币,沉默了很久之后突然爆发,让大家都看呆了.
1900/1/1 0:00:00编者按:本文来自DeepChain深链,作者:Mark,Odaily星球日报经授权转载。2020年,DeFi成为区块链最大的风口,不断增长的资金池很快就成为黑客眼中的宝藏.
1900/1/1 0:00:00