Remix的简单使用

还有没有比特币?你也太OUT了
注册OKEx交易所 快速购买比特币  

作者:探路人

来源:CSDN

原文链接:http://t.cn/Rdv0xYy

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

本文约3400字+,阅读(观看)需要20分钟

目前以太坊智能合约的编辑器主要有在线的 http://remix.ethereum.org;由 remix-ide自己搭建的;以及 Mac,Linux 系统上的 Remix-app 三种。三者的使用方式一致,这里以 Mac 平台的 Remix-app 为例。

1、使用 Remix-app 来编译合约    

下载 remix-app,笔者知道该软件是在使用在线版 remix 中,右侧切换到Settings选项卡,并在最下面发现 “as an electron app”。不过 windows 用户要抱歉了,该项目的二进制预编译版目前只提供了 mac 和 linux 适配,据说是因为 electron 在 windows 上体验不佳。  

打开安装的 remix-app,在左侧填入以下代码,代码功能很简单,不做过多解释,只是将输入的数字乘以 8,再返回。

pragma solidity ^0.4.23;
contract DemoTypes {    function f(uint a) public pure returns (uint b) {        uint result = a * 8;        return result;
    }
}

点击 Details 按钮后可以看到智能合约编译后的一些产物,复制其中的 WEB3DEPLOY 中的代码到命令行,且 accounts[0] 账户处于解锁状态即可进行智能合约的部署

  

在窗体右侧,切换到 settings 选项卡,可以选择 solidity 编译器版本,推荐选择稳定版本。

2、使用 Remix-app 调试合约

    

在合约编译通过的前提下,在右侧切换到 Run 选项卡,点击 Create 按钮,可以创建一个合约实例,在合约实例的函数 f 后面输入 100,点击 f,可以看到返回值为 800,说明合约可以工作。

3、Solidity 源代码分析

这个最简单的智能合约代码如下:

pragma solidity ^0.4.23;
contract DemoTypes {    function f(uint a) public pure returns (uint b) {        uint result = a * 8;        return result;
    }
}

第一行 pragma solidity ^0.4.23;是必须的,否则编译器将不知道该如何选择编译器,以及编译版本。 

       

第二行,和传统面向对象语言中的类很想像,有构造函数,有继承,有变量,有function,也有抽象类等概念,由 Solidity所写的智能合约,经过编译后会由以太坊虚拟机 EVM 来部署执行。

contract DemoTypes {    ...}    

第三行

function f(uint a) public pure returns (uint b) {    ...}

前面说过,合约中包含方法和变量,function f(uint a) public pure returns (uint b)代表定义了一个名为 f 的方法,输入变量为 uint a,输出为 uint b。 

    

uint 代表无状态整形数字,即大于 0 的整数。 

       

uint 默认为 uint256,即最大值为 2 的 256次方,这个数字对于绝大多数的数学去处已经足够了。同理还有 uint8 等。

4、Remix-ide本地部署

       

由于一些原因,可能还是需要使用在线编译器,而 http://remix.ethereum.org 的服务器在国外,速度较慢。因此,接下来还是补充一下 remix-ide 的本地部署相关内容,可以选择部署在内网服务器上,这样内网人员就可以一起用了。

   

首先需要安装 nodejs 及 npm,且 node 版本需要 > 4.6 & < 9

sudo apt-get install -y nodejs nodejs-legacy gitsudo apt-get updatesudo apt-get install -y npmsudo npm install -g nrm         # 安装 npm 源管理器sudo npm install -g n           # 安装 node 多版本管理器nrm use taobao                  # 使用 taobao 的源sudo n v9                       # 使用 node v9 版sudo chown -R $USER:$(id -g $USER) ~/.configsudo npm install -g npm         # 在 node v9 环境下再次更新 npm  

接下来安装 remix-ide

sudo apt-get install -y git
git clone https://github.com/ethereum/remix-ide.gitcd remix-idenpm install
npm run setupremixnpm start    

执行成功后,通过浏览器访问 地址+8080(端口号),可打开本地部署的 remix-ide 在线版。

5、最佳实践

首行说明,这里所说的最佳实践是笔者认为的一种比较高效快捷的开发经验,不代表行业共识,只作参考。

   

在笔者的体验中,remix-ide 不能很好的支持左侧的目录结构,而实际的合约项目可能不仅包含 Solidity 合约代码,也会包含一些工具类,像 Lib,因此 remix-ide 不方便进行一些多合约的开发。而另外的 remix-app,虽已是一款本地 app,但其与本地文件系统的结合仍然不好,笔者的亲身经历是没能够打开本地合约工程项目。

  

在真实的合约项目开发中,一般都会用到一款框架 Truffle,该框架本身可以通过脚本化的方式,支持合约的编译、测试、部署,而且其 Solidity 编译版本也是紧跟 Solidity 官方发布版本,十分方便。因此,这里笔者给出一种还算方便快捷的开发实践:笔者选择的 IDE 是 WebStorm,在其插件仓库中搜索 solidity,会发现有两款插件,这里对这两款插件作一些解释:

  

- Intellij-Solidity 是 Solidity 的代码高亮;

   

- Solidity Solhint 是 Solidity 的语法检查,按照 Solidity 的语法版本来检查,不合法的语法会提示错误。

  

依笔者的测试,在写这篇文章时,Solidity Solhint 的语法版本应在 Solidity v0.4.21 左右,而 Truffle 中的 Solidity 版本是 0.4.23,因此 0.4.21 中的如下写法已在 0.4.23 中被标记为 deprecated,导致 truffle 中编译无法通过:

function Token() public {}    

原本的大写方法名首字母,以作为构造函数的写法被废弃,取而代之的是下面这种写法:

constructor() public {}        

而像事件触发,原本是直接调用事件方法,现已被带 emit 前缀的调用所替代:

event votedEvent(uint indexed_candidateId);
votedEvent(_candidateId);
event votedEvent(uint indexed_candidateId);
emit votedEvent(_candidateId);   

所以,这里我们只安装 Intellij-Solidity 插件,来进行代码高亮,不使用插件的语法检查,语法错误由 truffle 在编译阶段进行提示。这样,用来开发智能合约项目已经十分方便了,而且可以继续使用 JetBrains 家族 IDE 的大量快捷键,实现手不离键盘开发。

文章发布只为分享区块链技术内容,版权归原作者所有,观点仅代表作者本人,绝不代表区块链兄弟赞同其观点或证实其描述。

本文由 区块链技术网 作者:作者:探路人 发表,其版权均为 区块链技术网 所有,文章内容系作者个人观点,不代表 区块链技术网 对观点赞同或支持。如需转载,请注明文章来源。

还有没有比特币?你也太OUT了
注册OKEx交易所 快速购买比特币  

发表评论