介绍
Remix是一个开源的 用于 Solidity 智能合约开发的Web端IDE,提供基本的编译、部署至本地或测试网络、执行合约等功能。Solidity 是 Ethereum 官方设计和支持的程序语言,专门用于编写智能合约。
可以本地部署Remix,也可以直接使用官方部署好的,地址是:remix.ethereum.org。界面如下图:
创建代币合约
solidity官网上有一个最简单的创建代币合约Subcurrency Example。
pragma solidity >0.4.24;
contract Coin {
// The keyword "public" makes those variables
// easily readable from outside.
address public minter;
mapping (address => uint) public balances;
// Events allow light clients to react to
// changes efficiently.
event Sent(address from, address to, uint amount);
// This is the constructor whose code is
// run only when the contract is created.
// 合约的构造函数,创建合约的时候合约创建者即为铸币人
constructor() public {
minter = msg.sender;
}
//铸币,只有合约创建人才能铸币
function mint(address receiver, uint amount) public {
require(msg.sender == minter);
require(amount < 1e60);
balances[receiver] += amount;
}
//发送代币
function send(address receiver, uint amount) public {
require(amount <= balances[msg.sender], "Insufficient balance.");
balances[msg.sender] -= amount;
balances[receiver] += amount;
emit Sent(msg.sender, receiver, amount);
}
}
复制代码
这是一个最简单的代币生成合约,主要就做了以下几件事:
- 创建合约:约定创建者即为铸币者
- 生成代币:合约创建者随时可以调用mint方法创建指定数量的代币
- 发送代币:只要自己拥有代币,就可以给指定地址发送代币
编译合约
- 创建.sol格式的合约文件
- 编写合约代码
- 开始编译
- 编译成功
编译合约生成的Details
合约编译成功之后,点击Details
按钮,就能看到编译之后的一些信息,如下图所示(内容比较多,没有全部截图):
NAME
:合约名METADATA
:一些编译相关的信息,比如版本、所用的语言、设置等BYTECODE
:写入区块的字节码ABI
:此智能合约对应的 ABI ,也就是我们合约里面定义的一些接口WEB3DEPLOY
:智能合约编译之后的发布命令,这个就是比较重要的,之后的web3就是调用这段命令来部署合约的METADATAHASH
:上面2元数据的一个哈希值SWARMLOCATION
:Swarm网络的一个地址(到底什么是Swarm)FUNCTIONHASHES
:合约定义的方法的hash,其实我们执行合约的时候就是通过这个hash去找到对应的方法进行执行的GASESTIMATES
:关于矿工费的一个预算,在ETH上进行合约的部署,执行等都是需要矿工费的。一般合约代码越多矿工费越高。
本地部署合约
- 点击右上角的Run
- 选中部署的环境为本地(也就是合约不会部署到公共的区块链网络,只是部署到一个本地的测试区块链网络)
- 选中部署的账户(本地环境默认会创建好几个账户,每个账户默认有100个eth)
- 选择要部署的合约
- 点击Deploy之后就会部署到本地了
- 部署完成之后的合约地址
或者在At Address
填写已经部署好的合约地址,6中就会出现对应地址的合约。
测试网络部署合约
首先要安装MetaMask插件,到Chrome商店去下载。这是一个Chrome上的以太坊钱包插件。具体的使用在这里不做说明。
我这里使用的测试网络是Rinkeby
,在Rinkeby上账户的eth代币需要到www.rinkeby.io/#faucet获取。
我们在测试网络上环境选择Injected Web3
,Remix
会自动连结 MetaMask
。我们能看到账号也变成了我们MetaMask
上面的账号。
最后点击Deploy
部署,MetaMask
会弹出界面让你进行一个确认,因为部署合约是需要一个矿工费的,这里主要就是确认矿工费,确认之后就会发起广播,矿工收取矿工费,合约部署到区块上。
调用合约
合约部署完成之后,下面就会出现我们部署好的合约,或者我们直接在At Address
里填入之前已经部署过的合约地址也可以。
展开合约,我们就能看到之前合约代码里我们定义的一些方法和变量。这里mint
和send
执行时是需要支付矿工费的。
- mint生成代币:填入账户地址(需要是合约创建者的地址)和生成代币的数量,点击
transact
执行合约代码。 - send发送代币:展开之后一样填入接受者的账户地址和接收数量
- 查看对应地址里的代币余额
- 查看铸币者(即合约创建者)
终端输出器
查看交易详情
在合约部署、执行的过程中终端输出器会输出相应的内容信息。如下图,是一个合约部署的输出内容(标有转账的哈希,合约创建者,gas费用,输入内容等):
Debug调试
调试需要在本地环境进行调试,即合约部署时选择JavaScript VM
,然后在我们上图所示的终端输出中点击对应交易右边的Debug
按钮,即可显示如下图所示的调试界面:
PS:按道理这里不是本地环境也可以,直接输入Block number
和TxHash
即可查看调用栈,但是我输入之后发现是empty,不知道什么原因。