“真行者珞珈山诉苦,假猴王水帘洞誊文。” ——《西游记·第五十八回》
在《西游记》中,六耳猕猴冒充猴王孙悟空,以假乱真,过了唐僧,过了众神,纵使是照妖镜也分不出真假。现在,智能合约遇上了“六耳猕猴”,又会擦出怎样的火花?
在智能合约中,构造函数负责一些数据的初始化工作,owner值一般也会放在构造函数中进行初始化。owner是智能合约拥有者的称呼,也常被用来作为该合约的超级管理员。对代币合约来说,owner可能被分配的权限有:铸造/销毁代币、冻结代币等。如果开发者以错误的语法创建“构造函数”,造成构造函数缺失,致使“六耳猕猴”以假乱真,瞒过了开发者,最后使得攻击者成为合约的拥有者(owner),那么攻击者便可依赖owner的权限,对代币进行增发或销毁等操作,进而可能造成整个代币的崩盘。
智能合约平台Firechain完成300万美元Pre-Seed轮融资,Genblock Capital领投:5月24日消息,异步智能合约平台Firechain近日宣布完成300万美元Pre-Seed轮融资,Genblock Capital领投,MGNR、Cogitent Ventures、1NVST、Ankr等参投。此轮融资资金将用于扩大团队规模、加快发展路线图、以及推出其创新区块链平台。
据悉,Firechain构建异步、事件驱动的混合账本模型架构,以支持免费交易、可证明安全链上随机性等功能。Firechain计划于6月发布其DLT网络的公开测试网。[2023/5/24 15:22:12]
在Solidity语言中,当函数名和合约名相同时,此函数就是合约的构造函数,在合约对象创建时,会先调用构造函数对相关的数据进行初始化。
区块链安全机构Halborn推出区块链和智能合约安全虚拟机 ZIION:8月29日消息,区块链安全机构 Halborn 推出开源区块链和智能合约安全虚拟机 ZIION,包含超过 100 种区块链安全工具,包括协议工具、EVM 工具、Rust 工具等,开发者可基于该虚拟机在比特币、以太坊、Solana、Polkadot、Substrate 基础之上进行开发。[2022/8/29 12:56:01]
以太坊Solidity 0.4.22版本中引入了关键字constructor,新的构造函数声明形式:constructor() public { },引入的目的是用以替代低版本中将合约名作为构造函数名的语法形式,从而避免开发者笔误造成构造函数命名错误的问题。引入的这个关键字看似平淡无奇,实则意蕴深刻,且听我慢慢道来。
IOHK首席执行官:将于本周五公布Cardano智能合约的发布日期:IOHK首席执行官Charles Hoskinson表示,将于本周五公布Cardano(ADA)智能合约的发布日期。(U.Today)[2021/8/11 1:48:25]
下面以ethernaut靶场的Fallout题目为例进行分析。一眼看去,这似乎是一个正常没有漏洞的合约代码,但经过仔细观察发现,该合约存在一个致命错误——构造函数名称与合约名称不一致,Fallout合约的构造函数被写错成了Fal1out(字母l和数字1的差异),这样的错误使其成为了一个被public修饰的普通函数,失去了构造函数仅在合约部署时被调用的特性,使得任何人都可以调用。该题目源码如下图所示:
Cardano将在Alonzo升级后利用本地Plutus语言编写智能合约:Cardano发布了关于Plutus的更多细节,Plutus是一种本地编程语言,将在其下一次重大升级Alonzo之后用于编写智能合约。Cardano背后公司IOHK在一篇博文中解释称,Plutus合约由链上运行的部件和链下在用户设备上运行的部件组成。这两部分实际上都是用Haskell语言编写的,但都是由Plutus编译(compile)的,后者为Cardano上的智能合约提供了框架。Plutus Core将用于定义EUTXO交易的参数,并编译为智能合约开发的代码。一个Plutus应用程序框架(PAF)将提供对运行在网络上的服务和应用程序的便捷访问,同时具有完整的web浏览器互操作性。Cardano在2月份的“Mary”升级中推出了原生代币,允许用户创建唯一定义的自定义代币,并进行交易。Plutus将扩展当前代币的能力,极大地改善铸币策略,这将有利于可能需要时间锁的NFT。(Crypto Potato)[2021/4/15 20:22:21]
图 1
瑞波没有智能合约或由于代码结果不确定、编程语言选择等问题:在最近的一次研讨会上,瑞波CTO David Schwartz和Coli CEO Stefan Thomas探讨了为什么瑞波没有智能合约。Stefan Thomas表示之前曾以谷歌本地客户端为基础推出过一个原型,但由于代码不能产生确定性的结果,以及选择何种编程语言等问题,他们没有将智能合约整合进瑞波账本。[2020/8/12]
在Fal1out函数中直接指定了函数调用者的地址即为owner,所以只需要调用Fal1out函数即可实现对合约owner的更改。如下图所示:
图 2
“假猴王”Fal1out想借着一些字体类型的相似字符的视觉差异混淆视听,可最终还是没能逃过我们的“火眼金睛”。
在过去也曾发生过类似的安全事件,包含着假构造函数的合约被成功发布到主链上,其中比较出名的是“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
建议更换Solidity 0.4.22及以上版本,并使用正确的constructor()语法。如下图所示:
图 7
切记: constructor()前并无function,function constructor() public { }为错误的构造函数形式。
如果要使用低于0.4.22的版本,则一定要着重检查函数名是否和合约名一致。如下图所示:
图 8
在智能合约中因开发者粗心,而造成安全漏洞的事件层出不穷,“千里之堤,溃于蚁穴”,成都链安-安全实验室在此给出如下建议:
1、 开发者在编写智能合约敏感函数(如构造函数、回退函数fallback)时,应严格按照官方要求的代码书写规范,注意不要出现字符错误等情况。
2、 在某些情况下,编译器会对constructor的错误使用发出警告,开发者应予以正确对待,不可认为其只是警告信息而忽略不处理。
3、 在合约正式上线前一定要找专业可信的机构做好合约代码的审计工作。
继上次UMA的IUO被人利用赚取数十万美元的丰厚利润之后,bZx的代币IUO(在Uniswap上首次发行),再次上演类似事件。上次的UMA事件可以参考蓝狐笔记的《UMA的IUO:谁是赢家?》.
1900/1/1 0:00:00比特币曾被认为是一种与其他金融市场无关的资产。只要看看富达投资(Fidelity Investments)对机构投资者的调查就知道了.
1900/1/1 0:00:00在传统观点中,银行不会因为加密货币交易主动冻结用户的银行卡,但吴说区块链获悉,近期有多人因为正常的加密货币交易,招商银行信用卡遭到银行主动冻结或储蓄卡停止非柜面交易.
1900/1/1 0:00:00我们从BTC和纳斯达克指数长期走势对比可以发现,两者之间还是比较相似的,前期阶段都是牛市顶点回落的长期下降趋势线压制.
1900/1/1 0:00:00清澄君对区块链上的通证——原先我把它称为虚拟货币——一直有所关注,虽然谈不上持续,断断续续地也没停止。以一个法学者的视角,从前主要从证券监管方面入手,今天还想谈点治理问题.
1900/1/1 0:00:00美国最大的加密货币交易所Coinbase认为,在加密货币监管和税收方面,其他国家比美国更开放。Coinbase首席税务官Lawrence Zlatkin在7月7日的Unitize小组讨论上分享了.
1900/1/1 0:00:00