【Ethereum 智能合约开发笔记】编译和部署合约的第一种姿势:使用 Remix

之前有自己开发过 Ethereum 智能合约,但没有好好纪录开发的过程和碰到的问题,觉得满可惜。这次想重新开始,从最傻的姿势开始,一步步成长。本篇希望将一个很简单的代币合约(只能发行和转帐),部署在本地和测试网路上,并测试其功能。本篇是较详细描述使用 Remix 的步骤及使用上可能碰到的问题。

开发环境

不需要安装,直接在任何浏览器开启 Remix

Remix 是一个 Open SourceSolidity 智能合约开发环境,提供基本的编译、部署至本地或测试网路、执行合约等功能。Solidity 是 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 帐户

使用 Remix 編譯合約

1. 点选右上角 + 新增一个档案

名称任意只要副档名是 ".sol"。

新增档案

2. 复制合约内容到该档案并编译

Remix 预设会自动编译,旁边没有跳出红色的 ERROR 就代表编译成功。

编译合约成功

在本地部署合约

1. 设定网路

点选左边上面的 run

run

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

Account

2. 发送交易部署合约

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

create

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

合约介面

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

log


执行合约 - 查询余额

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

可点选帐户右边的图示复制

2. 输入帐户

注意要用 "" 把帐户包起来,范例:

"0xca35b7d915458ef540ade6068dfe2f44e8fa733c"

3. 点击 balanceOf

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


查询余额成功

错误情况

说明一下,因为资料传送是用 JSON 格式,所以要加上 ""。如果忘记输入 "" 就会在 log 看到错误:

JSON 参数格式错误

执行合约 - 转移代币

1. 选择要转出的帐户

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

可点选帐户右边的图示复制

2. 输入要转入的帐户

选择并复制另一个帐户。在合约介面 transfer 后面的栏位,输入转入帐户和要转移的代币数量。帐户同样用 "" 包起来,范例:

"0x4b0897b0513fdc7c541b6d9d7e929c4e5364d2db", 10

3. 点击 transfer

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

交易成功 log

4. 确认余额更新

再查询转入帐户的余额,就可以看到代币余额增加啦!


查询转入帐户余额

错误情况

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


交易失败 log

在测试网路部署合约

1. 安装 MetaMask

首先,要连到测试网路,就要安装 MetaMask。他是浏览器端的 Ethereum 钱包,可以连结 Ethereum 主要和测试网路。安奘后需要建立 Ethereum 帐户,教练,我”只”想学Solidity 这篇有详细的步骤。

MetaMask
成功开启后,应该会长这样
记得选择 Ropsten Test Net

2. 选择测试网路

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

成功会看到和 MetaMask 相同帐户和 Ether 余额

3. 部署合约

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

用 MetaMask 发送交易

稍等一点时间(因为要等这个交易被确认),部署成功后合约的使用介面就会跑出来。

合约介面,当然是长一样

就可以用同样的方式使用合约啦!


总结

Remix 提供一个 Solidity 智能合约的开发环境,可以简易的编译、部署、执行甚至除错,适合编程经验不多的初学者。但无法做到版本控制、测试及和其他开发工具一起使用等,实际要开发 DApp 的话会比较不方便。下一篇会参考以下文章:

使用 Truffle3、Ganache、web3.js 来编译和部署合约。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269