第四章 智能合约的安全问题 目前,以太坊中总计约有一亿以太币,按市场价(1以太价值 150美元), 总市值约为 150亿美元。广泛的应用也暴露了以太坊的一些漏洞,并被一些攻击 者利用,出现了 TheDao Bug(损失 6000万美元)、Parity Bug(300万以太币无 法取出)等严重的漏洞。这些漏洞使人们对以太坊的安全性产生了怀疑。由于其 他智能合约平台大多都参考了以太坊的底层架构,这些平台同样会受到这些攻击 的威胁。智能合约的安全机制与漏洞涉及到整个以太坊架构的各个层次。目前, 智能合约的安全已经成为智能合约开发者必须考虑且重视的问题[5]。 4.1 智能合约中的漏洞分类 在本节中,我们先对以太坊智能合约的安全漏洞进行归纳。此外,我们通过 一个代码片段说明每个在 Solidity层级的漏洞。所有这些漏洞可以被利用(实际 上,大多数漏洞)来进行攻击,例如从合约中盗取以太币。 Call to the unknown. Solidity中用于调用函数和转移以太币的某些语法可能 具有调用被调用者/接收者的 fallback函数的副作用[3]。我们在下面说明它们。 -call调用一个函数(另一个合约的或本身的函数),并将以太币转移给被调 用者。 例如,可以按以下方式调用合约 c的函数 ping: c.call.value(amount)(bytes4(sha3("ping(uint256)")),n); 其中,被调用函数由其哈希签名的前 4个字节标识,amount决定必须将多 少 wei传递给合约 c,而 n是 ping函数的实际参数。值得注意的是,如果在地址 c处不存在具有给定签名的函数,则执行合约 c的 fallback函数作为替代。 -send用于将以太币从运行中的合约转移到某个接收者 r,如 r.send(amount) 所示。以太币被转移后,send执行接受者的 fallback函数。与 send相关的其他 漏洞在“exception disorders”和“gasless send”中进行了详细说明。 -delegatecall与 call非常相似,区别在于被调用函数的调用在调用者环境中 运行。 例如,执行 c.delegatecall(bytes4(sha3(“ping(uint256)”)),n), 如果 ping包含变量 this,它将引用调用者的地址而不是合约 c的,并且在以太 币转移到某个接收者 d的情况下-通过 d.send(amount)-从调用者 balance中提 取以太币。
2021-11-24 16:14:30 1.98MB 以太坊 智能合约 MPT树 智能合约安全
1
开发 DApp 时要调用在区块链上的以太坊智能合约,就需要智能合约的 ABI。本文希望更多了解 ABI,如为什么需要 ABI?如何解读 Ethereum 的智能合约 ABI?以及如何取得合约的 ABI? 数字猫合约 ABI ABI(Application Binary Interface) 如果理解 API 就很容易了解 ABI。简单来说,API 是程序与程序间互动的接口。这个接口包含程序提供外界存取所需的 functions、variables 等。ABI 也是程序间互动的接口,但程序是被编译后的 binary code。所以同样的接口,但传递的是 binary 格式的信息。所以 ABI
2021-11-21 13:06:17 411KB abi data event
1
SolidityDrive 我创建了以下应用程序,以熟悉Solidity,松露,web3和IPFS。 这是一个简单的驱动器应用程序,其中文件保存在IPFS中,以太坊智能合约将文件与帐户链接。 前端显示放置区和链接到每个以太坊钱包的文件列表。 将文件放入dropzone会将其保存在IPFS分布式存储中。 之后,哈希,文件名,时间戳等将保存在以太坊存储智能合约中,该合约将文件与帐户链接。 在Metamask中更改帐户后,前端将重新加载,访问存储智能合约并呈现文件列表。 在单击该文件时,该用户将随文件重定向到IPFS目录。 前端是一个容易React的项目。 部署方式 克隆仓库 安装 为以太坊安
1
尽量通俗易懂,由浅入深的介绍了被称为区块链2.0的以太坊的基本架构和算法,包括MPT树,以太坊数据结构,区块验证机制,智能合约的执行机制等,并且结合了两个简单的智能合约进行了讲解。然后介绍了一些以太坊中出现的漏洞以及攻击。最后给出了两个智能合约的应用实例,其中一个包含源代码
2021-10-01 12:02:34 1.98MB 以太坊 智能合约 MPT树 智能合约安全
1
pet-shop 这是一个基于以太坊智能合约的宠物商店Dapp,使用truffle框架,Solidity编写,仅用于测试 项目背景 Pete有一个宠物店,有16只宠物,他想开发一个去中心化应用,让大家来领养宠物。 在truffle box中,已经提供了pet-shop的网站部分的代码,我们只需要编写合约及交互部分。 环境搭建 安装Node 安装 Truffle : npm install -g truffle 安装Ganache Ganache(或Ganache CLI)已经取代了 testrpc。 启动服务 npm run dev 会自动打开浏览器显示我们的dapp,如本文的第一张图。 现在领养一直宠物看看,当我们点击Adopt时,MetaMask会提示我们交易的确认 点击Submit确认后,就可以看到成功领养了这次宠物。 在MetaMask中,也可以看到交易的清单: 好了,恭喜你,即将
2021-09-25 10:39:58 14.08MB JavaScript
1
贝德林智能合约 在这里,我可以尝试以太坊合约。 概述 要求 nodeJS v10.15.0或更高版本 npm 6.4.1或更高版本 松露v5.1.48(核心:5.1.48)或更高版本 安装 npm i安装所有依赖项 建立合同 npm run build建立所有合同 运行测试 npm run test -启动所有测试 npm run test +fast没有重建合同的情况下开始测试 npm run test test/.js仅对一个文件运行测试 npm run test +fast test/.js仅对一个文件运行测试,而无需重建合同 运行覆盖 npm run coverage -检查测试覆盖的代码百分比 制作拼合合同文件 npm run flatten flatten-使用所有合同制作Flattened.sol文件 npm run flatten c
2021-09-14 17:33:06 452KB Solidity
1
网上买的开发以太坊智能合约学习视频,适合小白学习,搁在网盘里没用,删除了又可惜,拿出来分享顺便赚点积分
2021-08-31 16:19:37 118B 区块链 以太坊 开发 solidity
1
本议题从EVM底层机制与原理出发,结合一些作者发现的特性、场景,介绍消息调用风险点和攻击技术,并从开发者角度给出防护措施。 以太坊架构与攻击面介绍 EVM消息调用原理剖析 消息调用攻防 议题总结
2021-08-08 13:00:15 1.25MB 以太坊 智能合约 区块链
关于 支持 nori.com 的以太坊智能合约 地方发展 部署到本地测试网 首先,启动 ganache-cli 二、通过迁移脚本部署和初始化所有合约 truffle migrate --network test 测试 首先,启动 ganache-cli 清除和编译合同 rm -rf build && truffle compile 然后运行测试 yarn test 合同 可升级性 此 repo 中的合约使用来管理可升级性 NCCR 铸币者角色 需要铸币工角色来向 NCCR 合同添加额外的铸币工。 此角色允许供应商铸造 NCCR(AKA NRT)。 公共测试网 罗普斯滕 部署 通过松露迁移文件部署和初始化所有合约 truffle migrate --network ropsten 杂项注意事项和提示 使用 oz CLI 工具 部署新的可升级合约 要通过oz CLI 工具单独部署
2021-08-04 14:05:51 141KB JavaScript
1
以太坊(智能合约)知识体系
2021-07-26 14:00:06 7KB 以太坊
1