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

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

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 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", 10

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开发教程:

http://xc.hubwiz.com/course/5a952991adb3847553d205d1

如果想加入以太坊技术开发群可以加微信:cuixuebin2,拉你入群。

相关文章
|
XML 安全 数据库
【sqli靶场】第四关和第五关通关思路
【sqli靶场】第四关和第五关通关思路
294 0
|
SQL 存储 算法
ClickHouse性能优化 3
ClickHouse性能优化
841 0
|
JavaScript 前端开发 架构师
12个开源免费的程序员简历模板
12个开源免费的程序员简历模板
1558 0
|
Kubernetes Java Docker
Java程序在K8S容器部署CPU和Memory资源限制相关设置
背景 在k8s docker环境中执行Java程序,因为我们设置了cpu,memory的limit,所以Java程序执行时JVM的参数没有跟我们设置的参数关联,导致JVM感知到的cpu和memory是我们k8s的work node上的cpu和memory大小。
9070 0
|
10月前
|
机器学习/深度学习 编解码 自动驾驶
RT-DETR改进策略【模型轻量化】| 替换骨干网络为MoblieNetV1,用于移动视觉应用的高效卷积神经网络
RT-DETR改进策略【模型轻量化】| 替换骨干网络为MoblieNetV1,用于移动视觉应用的高效卷积神经网络
421 3
RT-DETR改进策略【模型轻量化】| 替换骨干网络为MoblieNetV1,用于移动视觉应用的高效卷积神经网络
|
机器学习/深度学习 算法 算法框架/工具
为什么使用C++进行机器学习开发
C++作为一种高性能语言,在某些性能要求极高或资源受限的场景下也具有非常重要的地位。C++的高效性和对底层硬件的控制能力,使其在大规模机器学习系统中发挥重要作用,尤其是当需要处理大数据或实时响应的系统时。
288 3
|
JavaScript Android开发
|
Python
接上python如何处理下载中断的情况
实现断点续传机制涉及记录已下载的字节数、使用`Range`头继续下载及合并文件块。Python示例代码展示了如何通过`requests`库从上次中断的位置开始下载,将新内容追加到现有文件。函数`resume_download(url, filename, last_byte=0)`接收URL、文件名和最后字节位置作为参数。注意,实际使用时需确保URL和文件路径有效。
458 0
|
XML 存储 缓存
如何让 Flutter 应用更好地使用 SVG?
SVG 作为一个强大的矢量图标准格式,在图片清晰度的表现力上有着位图无法比拟的优势。那么是否 SVG 就是绝对的首选了呢?事实可能并非如此。本文将带大家了解 SVG 在 Flutter 应用中的性能问题,分享 UC 浏览器内核技术团队在 Flutter 应用中改进 SVG 应用的探索实践。
3624 0
如何让 Flutter 应用更好地使用 SVG?
如何创建以太坊ERC20代币
看这篇文章需要对以太坊,智能合约,代币等概念有基本的了解。 什么是ERC20 可以把ERC20简单理解成以太坊上的一个代币协议,所有基于以太坊开发的代币合约都遵守这个协议。
2297 0