引子:“真行者珞珈山诉苦,假猴王水帘洞誊文。”?——《西游记·第五十八回》
在《西游记》中,六耳猕猴冒充猴王孙悟空,以假乱真,过了唐僧,过了众神,纵使是照妖镜也分不出真假。
现在,智能合约遇上了“六耳猕猴”,又会擦出怎样的火花?
在智能合约中,构造函数负责一些数据的初始化工作,owner值一般也会放在构造函数中进行初始化。
owner是智能合约拥有者的称呼,也常被用来作为该合约的超级管理员。对代币合约来说,owner可能被分配的权限有:铸造/销毁代币、冻结代币等。
如果开发者以错误的语法创建“构造函数”,造成构造函数缺失,致使“六耳猕猴”以假乱真,瞒过了开发者,最后使得攻击者成为合约的拥有者,那么攻击者便可依赖owner的权限,对代币进行增发或销毁等操作,进而可能造成整个代币的崩盘。
Celestia:启动区块链就像部署智能合约一样简单:8月15日消息,Celestia希望通过使用自己的规则轻松部署自己的区块链,赋予在线社区自己的主权。
上周,在韩国区块链周2022上,Celestia联合创始人Ismail Khoffi表示在接受Cointelegraph采访时表示,该项目的愿景是分离共识和应用执行层,为去中心的应用构建者解锁新的可能性。Celesita基本上是一个剥离的极简层区块链,为用户提供了易于部署自己的区块链或第二层汇总的基础设施。Khoffi表示,开发者和社区可以“点击一个按钮”,部署自己独立的、定制的区块链。
(Cointelegraph)[2022/8/15 12:26:09]
一、构造函数简介
在Solidity语言中,当函数名和合约名相同时,此函数就是合约的构造函数,在合约对象创建时,会先调用构造函数对相关的数据进行初始化。
以太坊Solidity0.4.22版本中引入了关键字constructor,新的构造函数声明形式:constructor()public{},引入的目的是用以替代低版本中将合约名作为构造函数名的语法形式,从而避免开发者笔误造成构造函数命名错误的问题。
Cardano创始人:Vasil升级后Plutus智能合约仍将发挥作用:金色财经报道,Cardano创始人Charles Hoskinson在Twitter上反驳了一些人对即将到来的Cardano Vasil升级的恐惧、不确定性和怀疑(FUD),声称区块链的智能合约在升级实施后仍将发挥作用。
周三,一些Twitter用户开始声称Cardano的智能合约与Vasil硬分叉不兼容,这就是它们必须重写的原因。Input Output社区和生态系统副总裁Tim Harrison很快反驳了这些谣言。他解释说,目前使用第一版Plutus智能合约平台的DApp在Vasil升级后仍将兼容。那些想利用PlutusV2所有增强功能的开发人员必须在其应用程序中使用和部署它们。由于重大的代码更改,他们可能还希望进行新的审计。(U.Today)[2022/7/7 1:57:16]
引入的这个关键字看似平淡无奇,实则意蕴深刻,且听我慢慢道来。
Moskovski Capital首席投资官:智能合约中ETH供应量达28%:10月23日消息,Moskovski Capital首席投资官Lex Moskovski援引Glassnode数据称,智能合约中ETH供应量达28%,创历史新高。[2021/10/23 6:09:26]
二、Fallout“以假乱真?”
–漏洞分析
下面以ethernaut靶场的Fallout题目为例进行分析。
一眼看去,这似乎是一个正常没有漏洞的合约代码,但经过仔细观察发现,该合约存在一个致命错误——构造函数名称与合约名称不一致,Fallout合约的构造函数被写错成了Fal1out。
这样的错误使其成为了一个被public修饰的普通函数,失去了构造函数仅在合约部署时被调用的特性,使得任何人都可以调用。该题目源码如下图所示:
仙人掌CTS智能合约已通过Beosin(成都链安)安全审计:据官方消息,Beosin(成都链安)近日已完成仙人掌CTS智能合约项目的安全审计服务。
?仙人掌CTS是基于波场底层打造的一个去中心化开放金融底层基础设施。结合跨链,同时包含去中心化稳定数字货币,去中心化预言机,去中心化保险,流动性挖矿,智能挖矿等等功能的创新和聚合,进而打造全面的去中心化金融平台。仙人掌CTS代币无ICO、零预挖且零私募,社区高度自治。仙人掌CTS将会在9月28日晚20点上线Justswap,并开启流动性挖矿。
合约地址:TST5pvck2DSYXJk3hkuGH3t1AisCAT4t1s
审计报告编号:202009262149[2020/9/28]
图1
在Fal1out函数中直接指定了函数调用者的地址即为owner,所以只需要调用Fal1out函数即可实现对合约owner的更改。
如下图所示:
动态 | 诺贝尔经济学家奥利弗哈特将会为美国Prysm集团的智能合约系统提供帮助:据福布斯报道,美国经济学家奥利弗哈特加入加密创业公司,担任区块链治理公司Prysm Group的顾问。尽管在加密创业公司担任新职位,和许多同行一样,他对比特币持怀疑态度。奥利弗哈特表示,“就我认为区块链和比特币可以分开的程度而言,我认为我对区块链更加热衷。”[2018/8/2]
图2
“假猴王”Fal1out想借着一些字体类型的相似字符的视觉差异混淆视听,可最终还是没能逃过我们的“火眼金睛”。
三、前车之覆
MorphToken事件分析
在过去也曾发生过类似的安全事件,包含着假构造函数的合约被成功发布到主链上,其中比较出名的是“MorphToken事件”,其因为一个看似很小的问题而造成了数千万市值的代币被增发。
合约代码地址:https://etherscan.io/address/0x2ef27bf41236bd859a95209e17a43fbd26851f92#code
在Owned合约中,由于首字母大小写的错误,导致本该成为构造函数的Owned成为了普通函数owned,且被public修饰,可供任何人调用。
如下图所示:
图3
MorphToken合约继承了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、在合约正式上线前一定要找专业可信的机构做好合约代码的审计工作。
作者|?indiGO Filecoin主网上线在即,想要抓住机会的投资人摩拳擦掌跃跃欲试。矿机太复杂搞不懂,云算力坑太多怕被,期货无支撑怕崩盘,“财富列车”呼啸而来,想上车,但却不知道正确的姿势是什么?为了给读者解答Filecoin.
1900/1/1 0:00:00本文来源:加密谷,作者:MatteoLeibowitz,翻译:Liam 摘要 基于以太坊的货币市场协议Aave,在从之前点对点借贷模式转型之后,其市场份额依然持续以惊人的速度在增长.
1900/1/1 0:00:007月22日,美国货币监理署高级副审计长兼高级法律顾问JonathanGould在一封回信中写道,他们得出结论,国家银行可以为客户提供加密货币托管服务,包括持有加密货币的密钥.
1900/1/1 0:00:00作者:谷燕西 据媒体报道,现在一个日本的房地产项目正在新加坡采用证券型通证的方式进行融资。这样的融资方式此前在美国就开展过,即基于证券型通证的方式进行融资。但是美国在此方面后来并没有持续的发展.
1900/1/1 0:00:00在2020年初,比特币和几乎所有其他市场都经历了巨大的波动,这也使得加密货币市场的一类特殊币种——稳定币成为了大家手里的香饽饽。 数据显示,这些稳定币所占市值在过去半年内翻了一番,投资者平均每个月向各种不同的稳定币投资近10亿美元.
1900/1/1 0:00:00最近,我们一直在思考DeFi领域如何发展以及如何顺应科技行业大趋势这一问题。BenThompson在?Stratechery上的blog?里面,用自己的聚合理论区分了平台公司和“聚合器”.
1900/1/1 0:00:00