使用Remix编译和部署以太坊智能合约
Remix 是一个开源的 Solidity 智能合约开发环境,提供基本的编译、部署至本地或测试网络、执行合约等功能。Solidity 是 以太坊Ethereum 官方设计和支持的开发语言,专门用于编写智能合约。
本文希望将一个很简单的代币合约(只能发行和转账),部署在本地和测试网络上,测试下它的功能。
详细描述使用 Remix 的步骤及使用上可能碰到的问题。
之前开发过以太坊Ethereum智能合约,但没有记录过开发的过程和碰到的问题,觉得挺可惜。这次重新开始,从最基础开始,一步步学习。
开发环境
取得代币合约
代币合约的范例很多,Ethereum官网有提供一个最小可执行的代币合约(MINIMUM VIABLE TOKEN):
pragma solidity ^0.4.;
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 enough
require(balanceOf[_to] + _value >= balanceOf[_to]);
// Check for overflows
balanceOf[msg.sender] -= _value;
// Subtract from the sender
balanceOf[_to] += _value;
// Add the same to the recipient
}
}
这个 MyToken 合约真的很简单,只能做两件事:
- 创建代币:发起合约时创建指定数量的代币,代币拥有者是发起合约的 Ethereum 帐户
- 转移代币:转移指定数量的代币到指定的 Ethereum 帐户
至于一个完整的代币合约,可参考ERC20 Token使用手冊。
使用 Remix 编译合约
1. 点右上角 + 新增一个合约
名称任意只要扩展名是 “.sol”。
2. 复制合约內容到该合约并编译
Remix 默认设置会自动编译,只要旁边没有蹦出红色的 error 提示就代表编译成功。
在本地部署合约
1. 设置网络
点选左上的 run。
Environment 选择 JavaScript VM 代表所有资料都是存在本地(功能类似 testrpc)。它会提供 5 个虚拟账户每个有 100 ETH,随便选择一个账户(要记住后面一直要用)。
2. 发送交易部署合约
选择 MyToken。可以看到 create 按钮。且已根据合约內容显示必须输入 initialSupply
(也就是要发行的代币数量)。输入一个数目点create,就可以发送交易部署合约。
合约部署成功后,可以看到合约的使用界面。Remix 会自动根据合约的內容,产生对应的合约使用界面。可以看到合约有两个功能:balanceOf(查询余额) 和 transfer(转移代币)。
底下可以看到 log(记录每一次的操作)。实际上部署合约是通过一个 Ethereum 交易完成,点 Details 可以看到这笔交易详细资料。
执行合约 — 查询余额
1. 选择刚刚发起合约的账户
可以点右边的按钮复制
2. 输入账户
注意要用 “” 把账户括起來,示例:
"0xca35b7d915458ef540ade6068dfe2f44e8fa733c"
3. 点击 balanceOf
可以看到执行结果,也就是目前这个账户的代币余额。
可能的错误情況
说明一点,因为数据传输是用 JSON 格式,所以要加上 “”。如果忘了 “” 就会在 log 中看到错误提示:
执行合约 — 转移代币
1. 选择要输出的账户
选择刚刚发起的合约的账户。
2. 输入要转入的账户
选择並复制另一个账户。在合约界面 transfer 后面的输入位置,输入转入账户和要转移的代币数量。账户同样需要用 “” 括起來,示例:
"0x4b0897b0513fdc7c541b6d9d7e929c4e5364d2db",
3. 点击 transfer
点击 transfer,成功后会看到 log 更新。
4. 确认余额更新
这时在查询转入账户的余额,就可以看到代币余额增加啦!
错误情況
如果选择要转出的账户代币余额不足,这个交易就会失败,会在 log 看到错误提示。
在测试网络部署合约
1. 安裝 MetaMask
首先,要连到测试网络,这就要安裝 MetaMask。它是浏览器端的 Ethereum 钱包,可以连結 Ethereum 公共和测试网络。安装后需要建立 Ethereum 账号,这个这里就不细讲了。
成功启动后是这样的。
我们选择 Ropsten Test Net
2. 选择测试网络
回到 Remix,这次 Environment 选择 Injected Web3,Remix 会自动连接 MetaMask。
成功连接后会看到和 MetaMask 相同账号和 Ether 余额
3. 部署合约
接着用同样的方式,按 create 部署合约,就会看到 MetaMask 的弹出窗口。直接按 submit 发送交易。
稍等片刻(需要等交易被确认),部署成功后合约的使用界面就会出来。
ok,现在可以用同样的方式使用合约啦!
总结下
Remix 提供一个 Solidity 智能合约的开发环境,可以方便的编译、部署、执行甚至找错,适合编程经验不多的初学者。但无法做到版本控制、测试及和其他开发工具一起使用等,实际上要开发 DApp,使用 Truffle3、Ganache、web3.js 来编译和部署合约比较方便和专业些更适合开发人员。
推荐一个适合区块链新手的以太坊DApp开发教程:以太坊DApp开发实战入门
如果想加入以太坊技术开发群可以加微信.
使用Remix编译和部署以太坊智能合约的更多相关文章
- 深入以太坊智能合约 ABI
开发 DApp 时要调用在区块链上的以太坊智能合约,就需要智能合约的 ABI.本文希望更多了解 ABI,如为什么需要 ABI?如何解读 Ethereum 的智能合约 ABI?以及如何取得合约的 ABI ...
- Go语言打造以太坊智能合约测试框架(level1)
传送门: 柏链项目学院 Go语言打造以太坊智能合约测试框架 前言 这是什么? 这是一个基于go语言编写的,自动化测试以太坊智能合约的开发框架,使用此框架,可以自动化的部署合约,自动测试合约内的功能函数 ...
- rpc接口调用以太坊智能合约
rpc接口调用以太坊智能合约 传送门: 柏链项目学院 在以太坊摸爬滚打有些日子了,也遇到了各种各样的问题.这几天主要研究了一下如何通过rpc接口编译.部署和调用合约.也遇到了一些困难和问题,下面将 ...
- 如何通过以太坊智能合约来进行众筹(ICO)
前面我们有两遍文章写了如何发行代币,今天我们讲一下如何使用代币来公开募资,即编写一个募资合约. 写在前面 本文所讲的代币是使用以太坊智能合约创建,阅读本文前,你应该对以太坊.智能合约有所了解,如果你还 ...
- Go语言打造以太坊智能合约测试框架(level3)
传送门: 柏链项目学院 第三课 智能合约自动化测试 之前课程回顾 我们之前介绍了go语言调用exec处理命令行,介绍了toml配置文件的处理,以及awk处理文本文件获得ABI信息.我们的代码算是完成了 ...
- 以太坊智能合约 Solidity 的常用数据类型介绍
目录 目录 1.数组 1.1.对数组的增删改查操作. 2.String.Bytes.Mapping的使用 3.Enums 和 Structs 的简单应用 4.Ether 单位和 Time 单位 5.A ...
- 使用web3.js监听以太坊智能合约event
传送门: 柏链项目学院 使用web3.js监听以太坊智能合约event 当我们在前端页面调用合约时发现有些数据不会立即返回,这时还需要再调用更新数据的函数.那么这样的方法使用起来非常不便,监听ev ...
- 以太坊智能合约Hello World示例程序
简介 以太坊(Ethereum)是一提供个智能合约(smart contract)功能的公共区块链(BlockChain)平台. 本文介绍了一个简单的以太坊智能合约的开发过程. 开发环境 在以太坊上开 ...
- 以太坊智能合约开发,Web3.js API 中文文档 ethereum web3.js入门说明
以太坊智能合约开发,Web3.js API 中文文档 ethereum web3.js入门说明 为了让你的Ðapp运行上以太坊,一种选择是使用web3.js library提供的web3.对象.底层实 ...
随机推荐
- System V IPC 之共享内存
IPC 是进程间通信(Interprocess Communication)的缩写,通常指允许用户态进程执行系列操作的一组机制: 通过信号量与其他进程进行同步 向其他进程发送消息或者从其他进程接收消息 ...
- java设计模式-State(状态)模式
state定义 不同的状态,不同的行为;或者说,每个状态有着相应的行为. 就像电风扇的开关,一档的上一个是关闭,关闭的上一个是五档,五档的上一个是四档,以此类推,而且五档的下一 ...
- CSS速查列表-3-(font)字体
CSS Fonts(字体) CSS字体属性定义 1.字体:font-family 属性设置文本的字体系列.p{font-family:"Times New Roman", Time ...
- Beta 第五天
今天遇到的困难: 前端大部分代码由我们放逐的组员完成,这影响到了我们解决"Fragment碎片刷新时总产生的固定位置"的进程,很难找到源码对应 新加入的成员对界面代码不熟悉. 我们 ...
- C语言——第六周作业
题目 题目一:高速公路超速处罚 1.实验代码 #include <stdio.h> int main() { int speed,maxspeed; double x; scanf(&qu ...
- django搭建web (一)
建立工程 django-admin.py startproject project_name 建立app python manage.py startapp app_name 将app添加进工程中 在 ...
- 在Apache中运行Python WSGI应用
我们介绍如何使用Apache模块mod_wsgi来运行Python WSGI应用. 安装mod_wsgi 我们假设你已经有了Apache和Python环境,在Linux或者Mac上,那第一步自然是安装 ...
- 项目Beta冲刺Day4
项目进展 李明皇 今天解决的进度 因服务器端未完成登录态维护,故无法进行前后端联动. 明天安排 前后端联动调试 林翔 今天解决的进度 因上课和实验室事务未完成登录态维护 明天安排 完成登录态维护 孙敏 ...
- nyoj 对决吃桃
时间限制:3000 ms | 内存限制:65535 KB 难度:0 描述 有一堆桃子不知数目,猴子第一天吃掉一半,又多吃了一个,第二天照此方法,吃掉剩下桃子的一半又多一个,天天如此,到第m天早 ...
- 谈谈ASP.NET Core中的ResponseCaching
前言 前面的博客谈的大多数都是针对数据的缓存,今天我们来换换口味.来谈谈在ASP.NET Core中的ResponseCaching,与ResponseCaching关联密切的也就是常说的HTTP缓存 ...