委托给不受信任的调用者Delegatecall是消息调用的一种特殊变体。它几乎与常规消息调用相同,只是目标地址在调用协定的上下文中执行,msg.sender和msg.value保持不变。实际上,delegatecall委托其他智能合约修改调用智能合约的存储。由于delegatecall提供了对智能合约的如此多的控制权,因此只将其用于可信的智能合约(比如您自己的智能合约)是非常重要的。如果目标地址来自用户输入,请确保它是受信任的协定。签名延展性人们通常会假设在智能合约中使用加密签名系统会验证签名是否唯一; 但是事实并非如此。在以太坊中的签名可以在没有私钥的情况下进行更改并保持有效。 例如椭圆密钥密码术由三个变量v,r和s组成,如果以正确的方式修改了这些值,则可以获得带有无效私钥的有效签名。为避免签名可延展性的问题,切勿在签名消息哈希中使用签名来检查智能合约是否已处理了先前签名的消息,因为恶意用户可以找到并重新创建您的签名。构造函数名称不正确在Solidity 0.4.22之前,定义构造函数的唯一方法是使用智能合约名称创建函数。在某些情况下,这是有问题的。 例如如果智能合约以不同的名称重复使用,但构造函数也未更改,则它将变成常规的可调用函数。现在,使用Solidity的现代版本,您可以使用Constructor关键字定义构造函数,从而有效弃用此漏洞。 因此,解决此问题的方法只是使用现代的Solidity编译器版本。隐藏状态变量在Solidity中可以两次使用相同的变量,但可能会导致意外的副作用。 对于使用多个智能合约,这尤其困难。 请看以下示例:contract SuperContract { uint a = 1;contract SubContract is SuperContract { uint a = 2;在这里,我们可以看到SubContract继承了SuperContract,并且变量a被两次定义为不同的值。 现在,假设我们使用a在SubContract中执行某些功能。 由于已修改a的值,因此从SuperContract继承的功能将不再起作用。为避免此漏洞,重要的是我们检查整个智能合约系统是否存在歧义。检查编译器警告也很重要,因为只要它们在智能合约中,它们就可以标记这些歧义。区块链属性的随机性来源较弱在以太坊中,某些应用程序依赖于随机数的生成来保持公平。但是在以太坊中,随机数的生成非常困难,并且有一些陷阱值得考虑。使用诸如block.timestamp,blockhash和block.difficulty之类的链属性似乎是个好主意,因为它们通常会产生伪随机值。然而,问题在于矿工修改这些值的能力。 例如在具有数百万美元大奖的应用中,矿工有足够的动力去生成许多替代区块,只选择会导致矿工中奖的区块。当然,要像这样控制区块链会付出巨大的代价,但是如果注足够高,那肯定可以做到。为了避免在随机数生成中操纵矿工,有一些解决方案:1. 承诺方案,例如RANDAO,DAO,其中随机数由DAO中的所有参与者生成。2. 通过oracle的外部来源-例如Oraclize。3. 使用比特币区块哈希,因为网络更加分散,区块的开采成本更高。缺少针对签名重放攻击的保护有时在智能合约中,有必要执行签名验证以提高可用性和气体的成本。但是在实施签名验证时需要考虑。为了防止签名重放攻击,智能合约应仅允许处理新的哈希。这样可以防止恶意用户多次重播另一个用户的签名。为了更加安全地进行签名验证,请遵循以下建议:· 存储智能合约处理的每个消息哈希,然后在执行功能之前对照现有哈希检查消息哈希。· 在哈希中包括合同的地址,以确保消息仅在单个合同中使用。· 切勿生成包含签名的消息哈希。违反条例equire()方法用于验证条件,例如输入或智能合约状态变量,或验证来自外部智能合约调用的返回值。 为了验证外部调用,可以由调用者提供输入,也可以由被调用返回输入。如果被调用方的返回值发生输入冲突,则可能是以下两种情况之一出了问题:· 提供输入的合同中有一个bug。· 要求条件太强。要解决此问题,首先要考虑需求条件是否太强。如有必要,请减弱它以允许任何有效的外部输入。如果问题不是必需条件,则智能合约中必须有提供外部输入的错误。确保此智能合约未提供无效输入。写入任意存储位置只有授权地址才能访问敏感存储位置。如果整个智能合约中没有适当的授权检查,则恶意用户可能会覆盖敏感数据。但是即使存在用于写入敏感数据的授权检查,攻击者仍可能能够通过不敏感数据覆盖敏感数据。 这可能使攻击者可以覆盖重要的变量,例如智能合约所有者。为了防止这种情况的发生,我们不仅要保护具有授权要求的敏感数据存储,而且还要确保对一个数据结构的写入不会无意间覆盖另一数据结构的条目。继承顺序不正确在Solidity中,可以从多个来源继承,如果不能正确理解,则可能会引起歧义。这种歧义被称为钻石问题:如果两个基本智能合约具有相同的函数,那么哪个优先? 幸运的是,只要开发人员了解解决方案,Solidity就可以很好地处理此问题。Solidity为钻石问题提供的解决方案是使用反向C3线性化。这意味着它将使继承从右到左线性化,因此继承的顺序很重要。建议从更一般的智能合约开始,再到更具体的智能合约结束,以避免出现问题。具有函数类型变量的任意跳转Solidity支持函数类型。这意味着可以将类型为function的变量分配给具有匹配签名的函数。然后可以像其他任何函数一样从变量中调用该函数。用户不应更改函数变量,但是在某些情况下,这是可能的。如果智能合约使用某些汇编指令(例如mstore),则攻击者可能能够将函数变量指向任何其他函数。这可能使攻击者能够破坏智能合约的函数,甚至可能耗尽智能合约资金。由于内联汇编是从底层访问EVM的一种方式,因此它绕过了许多重要的安全功能。 因此,只有在必要且正确理解的情况下,才使用汇编程序。存在未使用的变量尽管允许,但最好的做法是避免使用未使用的变量。 未使用的变量会导致一些不同的问题:· 计算量增加(不必要的气体消耗)· 错误或数据结构错误的指示· 代码可读性降低强烈建议从代码库中删除所有未使用的变量。意外的以太坊余额由于始终可以将以太坊发送到智能合约中(请参阅“强行将以太币发送到智能合约”)-如果智能合约具有特定的余额,则很容易受到攻击。假设我们有一个智能合约,如果智能合约中存储了任何以太坊,则该智能合约将阻止所有函数执行。如果恶意用户决定通过强行发送Ether来利用此漏洞,则将引发DoS,使智能合约无法使用。 因此请勿对智能合约中的以太坊余额使用严格的平等检查,这一点很重要。以太坊智能合约代码始终可以被读取。即使您的代码未在Etherscan上进行验证,攻击者仍然可以反编译甚至检查与它之间的事务以进行分析。这里的一个问题示例是猜谜游戏,用户必须猜测所存储的私有变量才能赢得合同中的以太坊。当然这是极其琐碎的利用(要点是您不应该尝试,因为它几乎可以肯定是蜜罐合约,要复杂得多)。这里的另一个常见问题是在Oracle调用中使用未加密的链下机密(例如API密钥)。如果可以确定您的API密钥,恶意行为者可以简单地自己使用它或利用其他媒介,例如用尽您允许的API调用并强迫Oracle返回错误页面,这可能会或可能不会导致问题,具体取决于智能合约的结构。检测智能合约中错误有些智能合约不希望其他智能合约与之交互。防止这种情况的常见方法是检查主叫帐户中是否存储了任何代码。但是智能合约帐户在构建过程中发起调用仍不会显示它们存储代码,从而有效地绕过了智能合约检测。非封闭区块链依赖许多智能合约依赖于在一定时间内发生的调用,但以太坊可以在相当长的时间内以相对便宜的价格通过非常高的Gwei交易进行垃圾邮件发送。如Fomo3D(倒数游戏,最后一位投资者赢得了头奖,但每项投资都增加了倒计时的时间)是由一个用户赢得的,该用户在短时间内完全阻塞了区块链,不允许其他人在定时器运行之前进行投资出局,他赢了得了比赛。如今有许多经纪人合同依靠过去的哈希来提供RNG。在大多数情况下,这不是可怕的RNG来源,甚至可以解释256个区块后发生的哈希删除。但是到那时,他们中的许多人根本就没有下注。这将使某人可以对许多这些功能相似的智能合约下注,并以一定的结果作为所有人的赢家,在主持人仍未决的情况下检查主持人的提交,并且如果不利,只需阻塞区块链,直到进行修剪即可,得到他们的注。不遵守标准在智能合约开发方面,遵循标准很重要。设置标准是为了防止漏洞,而忽略这些漏洞可能会导致意想不到的后果。
Charles Hoskinson驳斥关于Cardano治理的中心化指控:3月5日消息,Cardano创始人Charles Hoskinson驳斥了围绕Cardano治理结构的中心化指控。在推特上自称“Web3顾问”的Vanessa Harris声称Cardano开发公司拟IOG在当前结构设置下永远不会失去对该网络的控制。
Harris特别引用了CIP-1694(Cardano改进提案)作为证据,证明IOG和其他实体将在除最极端情况外的所有情况下保持对Cardano网络的控制。
对此,Hoskinson驳斥这些说法是“绝对错误的”,并指责Harris传播FUD。在Twitter Spaces的一次谈话中,Hoskinson承认,治理是“一件复杂的事情”。
在Harris有争议的帖子中,她提出了对宪法委员会权力的担忧,她声称该委员会实际上属于IOG,而普通的ADA用户如果不成为DRep就不能参与治理,加密货币社区对此反应不一。(U.Today)[2023/3/5 12:43:28]
本文编译自Medium
The Encyclopedia of Smart Contract Attacks and Vulnerabilities
https://medium.com/better-programming/the-encyclopedia-of-smart-contract-attacks-vulnerabilities-dfc1129fdaac
Harmony 社区通过 Grant 提案,计划推出与 Cosmos 等联通的跨链桥:11月25日消息,Harmony 社区通过 Grant 提案,计划推出与 Cosmos 等区块链网络联通的跨链桥。该项目计划使用 IBC 在 Harmony 和基于 Tendermint 的区块链网络之间架起跨链桥,并部署在它们每一个区块链网络的私有测试网上,同时将使用 ICS-20 标准进行代币转移开发,HRC-20 代币(Harmony 生态代币)将可在基于 Tendermint 的区块链网络上作为 ICS-20 标准代币被处理。[2021/11/25 7:10:25]
CoinShares在德意志交易所发行3个加密ETN产品:CoinShares在德意志交易所发行三个加密 ETN,三个 CoinShares ETN分别跟踪比特币、以太坊和莱特币。CoinShares 是一家总部位于伦敦的加密货币投资基金,是德意志交易所 Xetra 市场上最新的加密交易所交易票据 (ETN) 发行人。(CoinDesk)[2021/6/7 23:18:37]
Charles Hoskinson指责维基百科持续移除Cardano相关论文作为引用:今日,Cardano联合创始人Charles Hoskinson表示,维基百科多次将一篇与其项目有关的“被引用次数最多的PoS论文”从维基百科的相关文章中删除。尽管相关方多次尝试将其附上,但维基百科以“利益冲突”为由,一直进行移除。
此前消息,维基百科联合创始人Jimmy Wales曾表示,还没有看到任何实际的用例说服他将加密货币或区块链集成到平台中。加密货币不会对维基百科有所帮助。实际上,他认为这将损害其愿景,并最终损害平台运行的独特方式。据悉,这并非Jimmy Wales首次表态这一立场,此前他曾表示,区块链技术对维基百科而言毫无用处。(BeInCrypto)[2020/3/25]
本报讯 宝安区混凝土质量区块链平台上线仪式于1月9日上午在宝安区住建局一楼大厅举行。据悉,这是国内首个针对建设工程混凝土溯源开发的区块链平台,实现了混凝土全生命周期信息化监管.
1900/1/1 0:00:00据当地消息称,土耳其资本市场委员会(CMB)计划对加密货币交易进行监管。土耳其主流媒体Hurriyet 在1月4日报道,土耳其资本市场委员会(CMB)是监管该国证券市场的监管机构,它.
1900/1/1 0:00:00新京报讯(记者 肖玮 陈维城)政协北京市十三届三次会议于1月10日开幕。当日19时40分,中国科学院郑志明院士在北京国际会议中心一层3号会议厅作“政协报告厅·区块链技术与发展”的报告.
1900/1/1 0:00:00时间在奔走,行业在进步,2019年区块链领域发生了许多可喜的变化:总书记将区块链作为核心技术自主创新的重要突破口;央行数字货币即将落地试点地区;社交媒体巨头Facebook即将发稳定币Li.
1900/1/1 0:00:00BTC 能否打破1月魔咒?2、4、5、6月表现最好。根据2010年至2019年BTC价格的月度表现,BTC在2月、4月、5月、6月的表现最好,上涨概率均为78%.
1900/1/1 0:00:00拥抱诸如分布式账本技术(DLT)之类的新兴工具,并使用API(应用程序接口)将不同业务按需放在银行核心系统的顶部,这将使银行能够创建一个强大而敏捷的数字平台,并革新自身的业务模型.
1900/1/1 0:00:00