以太坊智能合约环境搭建图,以太坊智能合约开发平台

  

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

  

  边肖:记得要集中注意力。   

  

  来源:深圳零点时间科技   

  

  工欲善其事,必先利其器。只有知道如何构建智能合约中安全漏洞的实际实践环境,他才能更好地恢复合约中的漏洞。   

  

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

  

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

  

  基础知识回顾及快速了解区块链区块链技术是一种全新的分布式基础设施和计算范式,使用区块链数据结构验证和存储数据,使用分布式节点共识算法生成和更新数据,使用密码学保证数据传输和访问的安全性,使用自动化脚本代码组成的智能契约对数据进行编程和操作。   

  

  简单地说,区块链是一个分散的分布式分类账数据库。   

  

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

  

     

  

  什么是以太坊以太坊是一个基于区块链技术的分布式应用平台。它允许任何人在平台上通过区块链技术构建和使用分散的应用程序。   

  

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

  

  以太坊和比特币的一大区别在于,以太坊有智能合约的概念。比特币是数字货币——价值存储,而以太坊不仅是数字货币,还支持智能合约。   

  

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

  

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

  

  智能合约是事件驱动的、有状态的计算机程序,在可复制和共享的帐簿上运行。当满足某些条件时,智能合同将自动执行。合同一旦部署,就不能修改;合同执行后,不可撤销;并且可以跟踪所有的执行事务。   

  

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

  

  区块链是一个去中心化的系统,存在于所有被允许的当事人之间。智能合约消除了传统系统中导致各方冲突的中间人需求。   

  

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

  

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

  

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

  

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

  

   Remix IDE有三个环境选项:   

  

  Remix内置的虚拟机Javascript VM提供了合约部署和操作的功能,与以太坊虚拟机相同。这相当于在内存中模拟一个区块链。如果选择Javascript VM模式,可以调试契约;   

  

  注入的Web3主要是通过插件来使用,可以很容易的用metamask来部署。   

智能合约到以太坊测试网或者主网;

  

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

  

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

  

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

  

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

  

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

  

Injected Web3Injected 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编辑器中,并完成编译。

  

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

  

在测试网中申请测试ETH

  

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

  

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

  

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

  

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

  

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

  


  

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

  

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

  

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

  

geth --datadir testNet --dev console 2>> test.log执行命名后,会进入geth控制台:

  

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

  

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

  

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

  

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

  

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

相关文章