使用Remix编译和部署以太坊智能合约
链客,专为开发者而生,有问必答!
此文章来自链客区块链技术问答社区,未经允许拒绝转载。
使用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 编译合约
- 点右上角 + 新增一个合约
名称任意只要扩展名是“.sol”。
- 复制合约內容到该合约并编译
Remix 默认设置会自动编译,只要旁边没有蹦出红色的 error 提示就代表编译成功。
在本地部署合约
- 设置网络
点选左上的run。
Environment 选择 JavaScript VM 代表所有资料都是存在本地(功能类似 testrpc)。它会提供 5 个虚拟账户每个有 100 ETH,随便选择一个账户(要记住后面一直要用)。
- 发送交易部署合约
选择MyToken。可以看到 create 按钮。且已根据合约內容显示必须输入initialSupply(也就是要发行的代币数量)。输入一个数目点create,就可以发送交易部署合约。
合约部署成功后,可以看到合约的使用界面。Remix 会自动根据合约的內容,产生对应的合约使用界面。可以看到合约有两个功能:balanceOf(查询余额) 和 transfer(转移代币)。
底下可以看到log(记录每一次的操作)。实际上部署合约是通过一个 Ethereum 交易完成,点 Details 可以看到这笔交易详细资料。
执行合约— 查询余额
- 选择刚刚发起合约的账户
可以点右边的按钮复制
- 输入账户
注意要用“” 把账户括起來,示例:
“0xca35b7d915458ef540ade6068dfe2f44e8fa733c”
- 点击 balanceOf
可以看到执行结果,也就是目前这个账户的代币余额。
可能的错误情況
说明一点,因为数据传输是用JSON 格式,所以要加上 “”。如果忘了 “” 就会在 log 中看到错误提示:
执行合约— 转移代币
- 选择要输出的账户
选择刚刚发起的合约的账户。
- 输入要转入的账户
选择並复制另一个账户。在合约界面transfer 后面的输入位置,输入转入账户和要转移的代币数量。账户同样需要用 “” 括起來,示例:
“0x4b0897b0513fdc7c541b6d9d7e929c4e5364d2db”, 10
- 点击 transfer
点击transfer,成功后会看到 log 更新。
- 确认余额更新
这时在查询转入账户的余额,就可以看到代币余额增加啦!
错误情況
如果选择要转出的账户代币余额不足,这个交易就会失败,会在log 看到错误提示。
在测试网络部署合约
- 安裝 MetaMask
首先,要连到测试网络,这就要安裝MetaMask。它是浏览器端的Ethereum 钱包,可以连結 Ethereum 公共和测试网络。安装后需要建立 Ethereum 账号,这个这里就不细讲了。
成功启动后是这样的。
我们选择Ropsten Test Net
- 选择测试网络
回到Remix,这次 Environment 选择 Injected Web3,Remix 会自动连接 MetaMask。
成功连接后会看到和MetaMask 相同账号和 Ether 余额
- 部署合约
接着用同样的方式,按create 部署合约,就会看到 MetaMask 的弹出窗口。直接按 submit 发送交易。
稍等片刻(需要等交易被确认),部署成功后合约的使用界面就会出来。
ok,现在可以用同样的方式使用合约啦!
总结下
Remix 提供一个 Solidity 智能合约的开发环境,可以方便的编译、部署、执行甚至找错,适合编程经验不多的初学者。但无法做到版本控制、测试及和其他开发工具一起使用等,实际上要开发 DApp,使用 Truffle3、Ganache、web3.js 来编译和部署合约比较方便和专业些更适合开发人员。
使用Remix编译和部署以太坊智能合约相关推荐
- 基于新版Remix+MetaMask部署以太坊智能合约
本来是不打算写这个博客的,因为网上也有很多关于Remix+MetaMask的教程,但是看到的教程都是基于旧版的Remix,所以当初自己在开始部署的时候还是挺费力的.所以,希望能帮到跟我一样的小伙伴吧~ ...
- 部署以太坊智能合约01
运行环境 win7 开发环境搭建Solidity安装 强烈建议新手使用Browser-Solidity来进行开发.(初次在浏览器打开需要一会加载时间). Browser-Solidity是一个基于浏览 ...
- 以太坊智能合约语言Solidity - 1 走进Solidity
1. 走进Solidity 1.1 Remix IDE 界面初识 在本地编写我们可能会遇到各种各样的问题,所以使用在线的Remix编译器来编写合约:https://remix.ethereum.org ...
- 以太坊智能合约之如何执行智能合约?
区块链技术在顶级技术中占据主导地位的主要原因在于其去中心化.虽然区块链的主要目的是在没有中心的情况下维护交易记录,但为了实现自动化,智能合约被引入.那么在写完智能合约之后呢?在本文的这个以太坊智能合约 ...
- 区块链开发(二)部署和运行第一个以太坊智能合约
区块链开发(二)部署并运行第一个以太坊智能合约 李赫2016年8月22日 本文首发8BTC 网络上不少部署智能合约的文章,但是都有一个共同的特点,就是采用命令行的方式来部署,先是建立SOLC的编译环境 ...
- 区块链项目实战 - 使用以太坊/智能合约solidity,全栈开发区块链借贷记账小应用,含完整源码
本文使用区块链平台以太坊+智能合约实现一个区块链记账的功能,具体为: 借款人和贷款人以及数额被记录在区块链中.使用区块链地址来表示借款人或者贷款人. 若一个借款人多次向一个贷款人借钱,更新所有的数额之 ...
- Python开发以太坊智能合约指南(web3.py)
在以太坊上获得一个基本的智能合约是一个很简单的事,只需google查询"ERC20代币教程",你会发现有关如何做到这一点的大量信息.以编程方式与合约交互完全是另一回事,如果你是一个 ...
- 链乔教育在线|智能合约学习——以太坊智能合约学习笔记(四)
链乔教育在线|智能合约学习--以太坊智能合约学习笔记(四) 本笔记记录的是使用matemask钱包连接以太坊私链,并编写一个基本的提币智能合约部署到以太坊私链上,进行调用. 一.浏览器安装metama ...
- Python以太坊智能合约开发指南
在以太坊上获得一个基本的智能合约是一个很简单的事,只需google查询"ERC20代币教程",你会发现有关如何做到这一点的大量信息.以编程方式与合约交互完全是另一回事,如果你是一个 ...
最新文章
- Linux LVM逻辑卷配置过程详解
- 浏览器同源策略以及跨域请求时可能遇到的问题
- Bitcoin.com| 比特币现金在澳大利亚的零售支出大幅超过BTC
- spring boot 使用maven和fat jar/war运行应用程序的对比
- Javascript正则表达式完全学习手册
- Windows系统下将目录挂载为一个磁盘并分配盘符
- DHCP原理及报文格式
- netron可以下载某一层的权重
- 华硕服务器 u盘安装系统,华硕电脑u盘安装系统教程
- matlab表示大于等于,matlab不等于怎么表示
- 第三届中国CEO新年峰会参会感想二
- 身份证你需要了解的知识点
- python合并单元格居中_Python基于xlrd模块处理合并单元格
- 【算法】Sky Map
- 看门狗喂狗实验(有问题)
- C#程序下扫描枪扫描文本自动执行解决方案
- java清空文件夹_java 删除文件夹中的所有内容而不删除文件夹本身的实例
- 使用java代码查询本机ip地址
- 【机器学习】python使用matplotlib进行二维数据绘图并保存为png图片
- 使用PortTunnel来透过局域网架网站
热门文章
- rust 官服指令_RUST 命令大全(包括服务器指令)
- 关于Cocoa Pods的升级安装和使用说明
- 整型数组负数放左面,其他放右面,要求时空复杂度:O(n), O(1)。
- 小程序音频播放报10001 解决方案 errCode:10001, errMsg:errCode:602,err:error,not found param
- swift Sequence 和 SubSequence
- Webhint开源了一种代码检查工具
- Web SCADA 电力接线图工控组态编辑器
- mapreduce作业reduce被大量kill掉
- Java中的策略模式实例教程
- 大数据架构和模式(一)——大数据分类和架构简介