链客,专为开发者而生,有问必答!

此文章来自链客区块链技术问答社区,未经允许拒绝转载。

使用Remix编译和部署以太坊智能合约

Remix 是一个开源的 Solidity 智能合约开发环境,提供基本的编译、部署至本地或测试网络、执行合约等功能。Solidity 是 以太坊Ethereum 官方设计和支持的开发语言,专门用于编写智能合约。

本文希望将一个很简单的代币合约(只能发行和转账),部署在本地和测试网络上,测试下它的功能。

详细描述使用Remix 的步骤及使用上可能碰到的问题。

之前开发过以太坊Ethereum智能合约,但没有记录过开发的过程和碰到的问题,觉得挺可惜。这次重新开始,从最基础开始,一步步学习。

开发环境

不需要安裝,直接在任何浏览器启动Remix。

取得代币合约

代币合约的范例很多,Ethereum 官网有提供一个最小可执行的代币合约(MINIMUM VIABLE TOKEN):

pragma solidity ^0.4.0;

contract MyToken {/* This creates an array with all balances */

mapping (address => uint256) public balanceOf;/* Initializes contract with initial supply tokens to the creator of the contract */function MyToken(uint256 initialSupply) public {balanceOf[msg.sender] = initialSupply;              // Give the creator all initial tokens    }/* Send coins */function transfer(address _to, uint256 _value) public {require(balanceOf[msg.sender] >= _value);           // Check if the sender has enoughrequire(balanceOf[_to] + _value >= balanceOf[_to]);// Check for overflowsbalanceOf[msg.sender] -= _value;                    // Subtract from the senderbalanceOf[_to] += _value;                  // Add the same to the recipient    }

}

这个MyToken 合约真的很简单,只能做两件事:

[if !supportLists]· [endif]创建代币:发起合约时创建指定数量的代币,代币拥有者是发起合约的Ethereum 帐户

[if !supportLists]· [endif]转移代币:转移指定数量的代币到指定的Ethereum 帐户

至于一个完整的代币合约,可参考ERC20 Token使用手冊。

使用Remix 编译合约

  1. 点右上角 + 新增一个合约

名称任意只要扩展名是“.sol”。

  1. 复制合约內容到该合约并编译

Remix 默认设置会自动编译,只要旁边没有蹦出红色的 error 提示就代表编译成功。

在本地部署合约

  1. 设置网络

点选左上的run。

Environment 选择 JavaScript VM 代表所有资料都是存在本地(功能类似 testrpc)。它会提供 5 个虚拟账户每个有 100 ETH,随便选择一个账户(要记住后面一直要用)。

  1. 发送交易部署合约

选择MyToken。可以看到 create 按钮。且已根据合约內容显示必须输入initialSupply(也就是要发行的代币数量)。输入一个数目点create,就可以发送交易部署合约。

合约部署成功后,可以看到合约的使用界面。Remix 会自动根据合约的內容,产生对应的合约使用界面。可以看到合约有两个功能:balanceOf(查询余额) 和 transfer(转移代币)。

底下可以看到log(记录每一次的操作)。实际上部署合约是通过一个 Ethereum 交易完成,点 Details 可以看到这笔交易详细资料。

执行合约— 查询余额

  1. 选择刚刚发起合约的账户

可以点右边的按钮复制

  1. 输入账户

注意要用“” 把账户括起來,示例:

“0xca35b7d915458ef540ade6068dfe2f44e8fa733c”

  1. 点击 balanceOf

可以看到执行结果,也就是目前这个账户的代币余额。

可能的错误情況

说明一点,因为数据传输是用JSON 格式,所以要加上 “”。如果忘了 “” 就会在 log 中看到错误提示:

执行合约— 转移代币

  1. 选择要输出的账户

选择刚刚发起的合约的账户。

  1. 输入要转入的账户

选择並复制另一个账户。在合约界面transfer 后面的输入位置,输入转入账户和要转移的代币数量。账户同样需要用 “” 括起來,示例:

“0x4b0897b0513fdc7c541b6d9d7e929c4e5364d2db”, 10

  1. 点击 transfer

点击transfer,成功后会看到 log 更新。

  1. 确认余额更新

这时在查询转入账户的余额,就可以看到代币余额增加啦!

错误情況

如果选择要转出的账户代币余额不足,这个交易就会失败,会在log 看到错误提示。

在测试网络部署合约

  1. 安裝 MetaMask

首先,要连到测试网络,这就要安裝MetaMask。它是浏览器端的Ethereum 钱包,可以连結 Ethereum 公共和测试网络。安装后需要建立 Ethereum 账号,这个这里就不细讲了。

成功启动后是这样的。

我们选择Ropsten Test Net

  1. 选择测试网络

回到Remix,这次 Environment 选择 Injected Web3,Remix 会自动连接 MetaMask。

成功连接后会看到和MetaMask 相同账号和 Ether 余额

  1. 部署合约

接着用同样的方式,按create 部署合约,就会看到 MetaMask 的弹出窗口。直接按 submit 发送交易。

稍等片刻(需要等交易被确认),部署成功后合约的使用界面就会出来。

ok,现在可以用同样的方式使用合约啦!

总结下

Remix 提供一个 Solidity 智能合约的开发环境,可以方便的编译、部署、执行甚至找错,适合编程经验不多的初学者。但无法做到版本控制、测试及和其他开发工具一起使用等,实际上要开发 DApp,使用 Truffle3、Ganache、web3.js 来编译和部署合约比较方便和专业些更适合开发人员。

使用Remix编译和部署以太坊智能合约相关推荐

  1. 基于新版Remix+MetaMask部署以太坊智能合约

    本来是不打算写这个博客的,因为网上也有很多关于Remix+MetaMask的教程,但是看到的教程都是基于旧版的Remix,所以当初自己在开始部署的时候还是挺费力的.所以,希望能帮到跟我一样的小伙伴吧~ ...

  2. 部署以太坊智能合约01

    运行环境 win7 开发环境搭建Solidity安装 强烈建议新手使用Browser-Solidity来进行开发.(初次在浏览器打开需要一会加载时间). Browser-Solidity是一个基于浏览 ...

  3. 以太坊智能合约语言Solidity - 1 走进Solidity

    1. 走进Solidity 1.1 Remix IDE 界面初识 在本地编写我们可能会遇到各种各样的问题,所以使用在线的Remix编译器来编写合约:https://remix.ethereum.org ...

  4. 以太坊智能合约之如何执行智能合约?

    区块链技术在顶级技术中占据主导地位的主要原因在于其去中心化.虽然区块链的主要目的是在没有中心的情况下维护交易记录,但为了实现自动化,智能合约被引入.那么在写完智能合约之后呢?在本文的这个以太坊智能合约 ...

  5. 区块链开发(二)部署和运行第一个以太坊智能合约

    区块链开发(二)部署并运行第一个以太坊智能合约 李赫2016年8月22日 本文首发8BTC 网络上不少部署智能合约的文章,但是都有一个共同的特点,就是采用命令行的方式来部署,先是建立SOLC的编译环境 ...

  6. 区块链项目实战 - 使用以太坊/智能合约solidity,全栈开发区块链借贷记账小应用,含完整源码

    本文使用区块链平台以太坊+智能合约实现一个区块链记账的功能,具体为: 借款人和贷款人以及数额被记录在区块链中.使用区块链地址来表示借款人或者贷款人. 若一个借款人多次向一个贷款人借钱,更新所有的数额之 ...

  7. Python开发以太坊智能合约指南(web3.py)

    在以太坊上获得一个基本的智能合约是一个很简单的事,只需google查询"ERC20代币教程",你会发现有关如何做到这一点的大量信息.以编程方式与合约交互完全是另一回事,如果你是一个 ...

  8. 链乔教育在线|智能合约学习——以太坊智能合约学习笔记(四)

    链乔教育在线|智能合约学习--以太坊智能合约学习笔记(四) 本笔记记录的是使用matemask钱包连接以太坊私链,并编写一个基本的提币智能合约部署到以太坊私链上,进行调用. 一.浏览器安装metama ...

  9. Python以太坊智能合约开发指南

    在以太坊上获得一个基本的智能合约是一个很简单的事,只需google查询"ERC20代币教程",你会发现有关如何做到这一点的大量信息.以编程方式与合约交互完全是另一回事,如果你是一个 ...

最新文章

  1. Linux LVM逻辑卷配置过程详解
  2. 浏览器同源策略以及跨域请求时可能遇到的问题
  3. Bitcoin.com| 比特币现金在澳大利亚的零售支出大幅超过BTC
  4. spring boot 使用maven和fat jar/war运行应用程序的对比
  5. Javascript正则表达式完全学习手册
  6. Windows系统下将目录挂载为一个磁盘并分配盘符
  7. DHCP原理及报文格式
  8. netron可以下载某一层的权重
  9. 华硕服务器 u盘安装系统,华硕电脑u盘安装系统教程
  10. matlab表示大于等于,matlab不等于怎么表示
  11. 第三届中国CEO新年峰会参会感想二
  12. 身份证你需要了解的知识点
  13. python合并单元格居中_Python基于xlrd模块处理合并单元格
  14. 【算法】Sky Map
  15. 看门狗喂狗实验(有问题)
  16. C#程序下扫描枪扫描文本自动执行解决方案
  17. java清空文件夹_java 删除文件夹中的所有内容而不删除文件夹本身的实例
  18. 使用java代码查询本机ip地址
  19. 【机器学习】python使用matplotlib进行二维数据绘图并保存为png图片
  20. 使用PortTunnel来透过局域网架网站

热门文章

  1. rust 官服指令_RUST 命令大全(包括服务器指令)
  2. 关于Cocoa Pods的升级安装和使用说明
  3. 整型数组负数放左面,其他放右面,要求时空复杂度:O(n), O(1)。
  4. 小程序音频播放报10001 解决方案 errCode:10001, errMsg:errCode:602,err:error,not found param
  5. swift Sequence 和 SubSequence
  6. Webhint开源了一种代码检查工具
  7. Web SCADA 电力接线图工控组态编辑器
  8. mapreduce作业reduce被大量kill掉
  9. Java中的策略模式实例教程
  10. 大数据架构和模式(一)——大数据分类和架构简介