721合约 erc eth_智能合约安全审计的环境搭建 | 火星技术帖

本文介绍了在以太坊智能合约安全漏洞实验中所需的工具和环境,包括Remix IDE的JavaScript VM、Injected Web3和Web3 Provider三种模式。通过Remix与Metamask、MyEtherWallet或Truffle+Infura的组合,可以实现合约的开发、部署、调用和测试。此外,还详细说明了如何在不同模式下设置和使用这些工具。
摘要由CSDN通过智能技术生成
e08bae6f354e6713d380951b7eb2c811.png

免责声明:本文旨在传递更多市场信息,不构成任何投资建议。文章仅代表作者观点,不代表火星财经官方立场。

小编:记得关注哦

来源:深圳零时科技

工欲善其事必先利其器,只有知道怎么搭建智能合约安全漏洞实战练习的环境,才能更好的进行合约漏洞的复盘。

本文主要介绍在进行以太坊智能合约安全漏洞实验演练时需要的工具和环境,方便后续漏洞实战操作。

阅读本文前,你应该对区块链、以太坊、智能合约有所了解。本文在第一部分简单快速介绍一下相关内容。

基础知识复习
快速了解区块链

区块链技术是利用块链式数据结构来验证与存储数据、利用分布式节点共识算法来生成和更新数据、利用密码学的方式保证数据传输和访问的安全、利用由自动化脚本代码组成的智能合约来编程和操作数据的一种全新的分布式基础架构与计算范式。

简单地说,区块链就是一种去中心化的分布式账本数据库。

区块链网络传递的是价值信息,解决的是信任问题。

eea6cce891f3e72930d76c43923fe8ce.png
什么是以太坊

以太坊(Ethereum)是一个建立在区块链技术之上的去中心化应用平台。它允许任何人在平台中建立和使用通过区块链技术运行的去中心化应用。

以太坊平台对底层区块链技术进行了封装,让区块链应用开发者可以直接基于以太坊平台进行开发,只要专注于开发应用本身逻辑的智能合约,这样就可以大大降低开发难度。

以太坊与比特币很大的不同是以太坊拥有智能合约的概念。比特币是数字货币 - 价值存储,而以太坊不单单是数字货币,还支持智能合约。

如果想更深入地了解什么是以太坊,还可以参考另一篇文章:以太坊是什么 - 以太坊开发入门指南(https://learnblockchain.cn/2017/11/20/whatiseth/)

什么是智能合约

那么什么是智能合约呢?以太坊网络上运行程序就称之为智能合约, 它和其他的程序一样,也是代码和数据(状态)的集合。

2df8ad1ceb8a9e32f8b2e00c7f2f0d14.png

智能合约是由事件驱动的、具有状态的、运行在一个可复制的、共享的账本之上的计算机程序,当满足特定条件时,智能合约会自动执行。合约一旦部署不可修改、合约执行后不可逆、所有执行事务可追踪。

智能合约非常适合对信任、安全和持久性要求较高的应用场景,比如:数字货币、数字资产、投票、保险、金融应用、预测市场、产权所有权管理、物联网、点对点交易等等。

区块链是去中心化的系统,存在于所有允许的各方之间,智能合约消除了传统的系统中对导致各方冲突的中间商的需要。

678ba22a6ecef450297bc5afc6322a0a.png

如果想更深入地了解智能合约原理,还可以参考另一篇文章:智能合约运行原理(https://learnblockchain.cn/2018/01/04/understanding-smart-contracts/)

智能合约安全漏洞实战环境搭建

目前开发智能合约的IDE,首推还是Remix,Remix是以太坊智能合约编程语言Solidity的一个基于浏览器的IDE,强烈建议新手使用Remix在线IDE(https://remix.ethereum.org/)来进行开发,不用本地安装Solidity。

如果想自己本地搭建开发环境,可以看另一篇文章: 搭建智能合约开发环境Remix IDE及使用(https://learnblockchain.cn/2018/06/07/remix-ide/)。

我们在进行智能合约的安全漏洞实战过程中,需要开发测试,如果通过Remix在线IDE来进行的话,根据 Remix IDE 的 Environment 选项不同,有不同的方法,如下图所示:

29656e34f6d9e3416ed185daaf74611c.png

Remix IDE 的 Environment 选项有三种:

  • Javascript VM,这个Remix内置的虚拟机,提供了合约部署、运行的功能,跟以太坊虚拟机功能一样的,这个相当于在内存中模拟了一条区块链,如果选择Javascript VM模式,可对合约进行debug调试;

  • Injected Web3,主要是通过插件使用,配合metamask可方便部署智能合约到以太坊测试网或者主网;

  • Web3 Provider,将Remix连接指定的以太坊节点,比如通过本地通过安装以太坊客户端geth搭建的私有链节点。

下面分别从上述三种模式对智能合约的安全漏洞实战环境搭建进行讲解,以方便后续对智能合约漏洞进行实战练习。

本文所使用的Solidity开发也将基于在线Remix IDE来进行。

Javascript VM

Javascript VM模式,也是最简单的方式,可以直接使用在线Remix IDE来进行智能合约的开发、编译、部署、调用、测试、调试等,很适合入门选手进行练习,如下图所示:

ad92d6e5689550ddece53a899dd5b2f1.png

具体的Remix IDE使用这里不在赘述,可移步Remix官方文档:https://remix-ide.readthedocs.io/en/latest/#

Injected Web3

Injected Web3,主要是通过插件使用,配合metamask可方便部署智能合约到以太坊测试网或者主网。

在这种模式下,可以使用remix + metamask + myetherwallet的模式开发部署智能合约,这种方法最简单也最常用;还可以使用Truffle + Infura这种工程化的高级开发部署方法。

Remix(http://remix.ethereum.org)不用介绍了;

MetaMask(https://www.metamask.io)是一款在谷歌浏览器Chrome上使用的插件类型的以太坊钱包,该钱包不需要下载,只需要在谷歌浏览器添加对应的扩展程序即可,非常轻量级,使用起来也非常方便,Metamask详细图文教程:https://www.jianshu.com/p/7ea707978dc5

MyEtherWallet(https://www.myetherwallet.com)或简称MEW钱包,是最有名的以太钱包之一,MEW钱包是一个基于网络的服务,允许您控制您的资金。它用于安全地存储、发送和接收以太和ERC-20代币,以及用于与智能合同进行交互。该服务为其用户提供了一个地址(公共地址),用户可以在此接收任何人的硬币和代币。它还为用户提供了一种通过私钥(秘密密码)发送硬币的快捷方式。

Infura(https://infura.io/)就是一个可以让你的dApp快速接入以太坊的平台,不需要本地运行以太坊节点,背后是负载均衡的API节点集群。使用它的好处就是,你永远不必担心连接的节点失效的问题,Infura会管理好这一切。

Truffle(https://www.trufflesuite.com)是针对基于以太坊的Solidity语言的一套开发框架。本身基于Javascript。对以太坊客户端做了深度集成,开发,测试,部署一行命令都可以搞定。Truffle - 以太坊Solidity编程语言开发框架使用指南(https://truffle.tryblockchain.org/index.html)

下面介绍如何通过remix + metamask + myetherwallte这种简单的方法开发、部署、调用合约,开始之前请自行安装好Metamask钱包插件到浏览器。

这里使用简单的测试用Solidity智能合约:

pragma solidity ^0.4.0;

contract SimpleStorage {
uint storedData;
function set(uint x) public {
storedData = x;
}
function get public constant returns (uint) {
return storedData;
}
}

将合约写入Remix IDE编辑器中,并完成编译。

6a0ade6f1dc4db499e7884215ded5860.png

然后在Metamask中选择测试网络,并申请测试ETH,因为在我们部署合约到以太网测试网时也需要测试ETH手续费,部署到以太坊主网就得真正的花真金白银ETH了。

38f4d1110b8d88efe2e19673e609e185.png

在测试网中申请测试ETH

03087110a746d5e27f153b74cc0cb8c1.png

然后通过Remix IDE点击部署,此时弹出Metamask交易确认,看到了是需要花费测试ETH的。

ed692d6f381b97c2a16ae95e930eff8a.png

部署成功后,可以在Remix IDE的console窗口看到我们在测试网的交易hash,以及我们的合约。

a185faa507e146ecb4ba09ebad4b9f49.png

此时可以通过Remix IDE直接调用已经部署的合约,也可以通过myetherwallet来调用任意合约,进入myetherwallet网站之后,需要选择跟myetherwallet进行交互的方式,这里我们选择Metamask,然后myetherwallet就会和Metamask建立连接。

f40914c07429a785fe309a64efc82598.png

我们输入部署之后的合约地址,再输入合约的ABI,然后就可以直接调用我们部署的合约。

71e1125c92e654f93189b70022ec99c5.png

调用合约,如图所示,我们设置一个x值为2,然后获取x的值,返回结果为2。

e8f23d2b7b223f669beed95f727a4fa4.png
daef56a00499eac76bd926f6eec480a9.png
Web3 Provider

Web3 Provider,将Remix连接指定的以太坊节点,比如通过本地安装以太坊客户端geth搭建的私有链节点。

Geth是典型的开发以太坊时使用的客户端,基于Go语言开发。Geth提供了一个交互式命令控制台,通过命令控制台中包含了以太坊的各种功能(API)。

安装完以后,把geth控制台启动,通过如下命令进入:

geth --datadir testNet --dev console 2>> test.log

执行命名后,会进入geth控制台:

d2eb963ad3237f3b5ff685301722de9e.png

然后创建账户,解锁账户,编写合约,编译合约,从编译详情中拷贝WEB3DEPLOY中的内容,通过修改相关信息后进入geth客户端执行,进行合约部署。

6b772e197d9508cfc535e159b465cd91.png

部署成功即可直接在geth控制台进行合约调用,整个部署和调用过程确保账户中有余额。更多详细过程请见另一篇文章:使用remix+geth开发部署智能合约(https://learnblockchain.cn/2017/11/24/init-env/)

磨刀不误砍柴工,先了解清楚基础知识,才能更好的了解智能合约,以及智能合约的安全问题。

工欲善其事必先利其器,只有知道怎么搭建智能合约安全漏洞实战练习的环境,才能更好的进行合约漏洞的复盘。

本篇文章为以太坊智能合约安全漏洞实战的前奏文章,敬请期待后续的智能合约安全漏洞实战详情文章。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值