以太坊学习6--智能合约的在线IDE工具

导语:

Remix是一个https://github.com/ethereum/remixhttps://solidity.readthedocs.io/en/develop/智能合约开发环境,提供基本的编译、部署至本地或测试网络、执行合约等功能。Solidity是Ethereum官方设计和支持的程序语言,专门用于编写智能合约。
solidity的基本语法可以去这个网站实战练习(https://cryptozombies.io/zh/)这个超爽边玩。
 

Remix有哪些功能?
  • 开发智能合约(集成了solidity语言的编辑器)
  • 动态调试(debug)智能合约
  • 访问已部署的智能合约的状态和属性
  • 代码分析,给出错误提示,并给出最佳实践的提示
  • 调试和测试Dapp(需要借助于Mist或者其它注入了Web3的工具)

Remix地址(有时候刷新不出来,我的做法是多等会或者多刷新几次):https://remix.ethereum.org/
这里写图片描述

说明:

1.文件夹管理
最左边是文件夹管理,里面列出了当前的工作区里的文件,remix可以支持从本地文件夹读取文件。

2.工作区
正中间是工作区,工作区上半部是代码编辑区,在这里可以写solidity合约。
- 每5秒自动保存。
- 支持多tab
- 左上角的+-符号可以改变字体大小
- 自动语法检查,黄色是警告和建议,红色是语法错误
中部下方是一个交互式的命令行终端。
- 集成了javascript解释器,可以使用js脚本与系统交互。
- 注入了web3对象(只有在web provider和injected provider两种模式下才有)

3.功能区
最右边是功能区,也是最为强大的地方,最主要的就是编译和运行区了,调试区其实也很强大,但是对于初学者太难用了

4.编译(Compile)
- 默认每次编辑代码都会自动编译,如果合约有很多依赖,建议关闭自动编译。
这里写图片描述
- 详情按钮中有包含编译生成的详细信息。

5.运行(Run)
- 运行环境有三种模式可选:
** JavaScript VM: 这种模式是在浏览器中模拟一个区块链,合约在这个模拟的沙盒中执行,刷新页面就会使所有数据清空,不会做任何持久化,没有注入web3对象。
** Injected Provider:连接到包含注入web3对象的源上,例如Mist和Metamask。
** Web3 Provider:连接到远程节点,需要填写源的url地址和端口,例如geth、ganache等客户端,包含web3对象。
- Account 当前操作的账户,比如用于发布合约、调用合约方法。
- Gas Limit 合约交易的gas最大限量。
- Value 向合约发送以太币。
- Deploy 部署合约。相当于new一个合约实例。(旧版是Create按钮)
- At Address 假定此地址是所选合约的一个已部署的实例。相当于将地址强制转换为一个合约实例。

6.设置(Settings)
- 编译器版本选择
- Text Wrap 编辑器自动换行
- Always use VM at Load 总是在加载时使用虚拟机
- Enable Optimization 编译优化,对执行gas做优化,调试期间不要使用,可能会引起行为异常。

7.分析(Analysis)
这里是编译器做静态代码分析的选项,给出相应的警告。
默认全部勾选,并自动执行。也可以手动执行。

8.调试器(Debugger)
动态调试内容比较多,之后再专门介绍。

9.支持(Support)
这里是一个在线支持的链接,可以在线与remix的开发团队沟通,提交bug或者意见反馈。也可以直接访问地址: https://gitter.im/ethereum/remix
 

取得代币合约:

代币合约的范例很多,https://www.ethereum.org/token有提供一个最小可行的代币合约(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 账户
至于一个完整的代币合约,可参考https://medium.com/taipei-ethereum-meetup/erc20-token%E4%BD%BF%E7%94%A8%E6%89%8B%E5%86%8A-3d7871c58bea

使用Remix编译合约:

1.点选右上角 + 新增一个档案
名称任意只要扩展名是“.sol”。
这里写图片描述
IDE左侧是文件浏览器区域,左上角有一排功能按钮。
- 创建新文件
- 从硬盘中导入文件
- 将项目文件上传至github
- 更新GitHub上的项目文件
- 将项目文件复制到另外一个remix实例中
- 连接到本地硬盘

2.复制合约内容到该档案并编译
Remix预设会自动编译,旁边没有跳出红色的ERROR就代表编译成功(有黄色感叹号不影响)。
这里写图片描述

在本地部署合约:

1.设定网络
点选左边上面的run。
Environment选择JavaScript VM代表所有数据都是存在本地内存(功能类似testrpc)。它会提供5个虚拟账户每个有100ETH,随便选一个账户(要记住)。
这里写图片描述

2.发送交易部署合约
选择MyToken。可以看到Deploy按钮(旧版是Create按钮)。且已根据合约内容显示必须填入unit256 initialSupply(也就是要发行的代币数量)。输入一个数目并按Deploy,就会发送交易部署合约。
这里写图片描述

合约部署成功后,可以看到合约的使用接口。Remix会自动根据合约的内容,产生对应的合约使用接口。可以看到合约有两个功能:balanceOf(查询余额)和transfer(转移代币)。
这里写图片描述

底下可以看到log(纪录每一次的操作)。点展示下拉按钮可以看到该笔交易详细数据。
这里写图片描述
这里写图片描述

执行合约–查询余额:

1.选择刚刚发起合约的账户,可点选帐户右边的图示复制
这里写图片描述
注:初始的时候还100个eth,现在变少是因为每调一次智能合约都会花费相应的eth

2.输入账户,点击balanceOf
注:旧版必须用”“把帐户包起来,因为数据传送是用JSON格式,所以要加上”“。如果忘记输入”“就会在log报错
可以在旁边看到执行结果,也就是目前这个账户的代币余额。
这里写图片描述

执行合约–转移代币:

1.选择要转出的账户
选择刚刚发起合约的账户。
这里写图片描述

2.输入要转入的账户,点击transfer
点击transfer,成功后会看到log更新。
这里写图片描述
这里写图片描述

3.确认余额更新
再查询转入账户的余额,就可以看到代币余额增加了
这里写图片描述

错误情况:
如果选择要转出的账户代币余额不足,这笔交易会失败,就会在log看到错误。
这里写图片描述
 

在测试网络部署合约:

1.安装 MetaMask
首先,要连到测试网络,就要安装MetaMask。他是浏览器端的Ethereum钱包,可以链接Ethereum主网和测试网络。安奘后需要建立Ethereum账户。
MetaMask插件的安装使用可以查看我的前一篇文章https://blog.csdn.net/m0_37739193/article/details/81057582
安装好MetaMask后选择测试网络,导入eth不为零的账户或者自己挖矿获得相应的eth,并且要切换到该用户,回到Remix,这次Environment选择Injected Web3,Remix会自动连结MetaMask。
这里写图片描述
成功会看到和MetaMask相同账户和Ether余额
注:疑问:我不理解为什么要这样显示(显示两个相同的账户,你不应该显示一个吗),还是哪里有问题了
这里写图片描述

2.部署合约
接着用刚才同样的方式,输入一个数目(我这里输入的是1000000)并按Deploy部署合约,就会看到MetaMask的弹出窗口。直接按submit发送交易。
这里写图片描述
稍等一点时间(我等了一分钟左右吧,因为要等这个交易被确认),首先在浏览器右下角出现
这里写图片描述
点击会弹出如下页面
这里写图片描述
部署成功后合约的使用接口就会在Remix中跑出来。
这里写图片描述
就可以用同样的方式使用合约了!
复制该智能合约地址,在MetaMask中可以加入该代币。
这里写图片描述
注意:我一开始导入部署好的智能合约地址后显示发起该合约的账户该代币余额为0。后来才发现是导入的时候单位写的是18的缘故,因为我总共发了1000000个币,这里填18会显示小数点后三位显示不全所以会显示为0。所以说这里填0余额才会显示为1000000,填1则会显示100000.0
这里写图片描述

参考:
https://ethfans.org/posts/deploying-smart-contract-with-remix
https://www.jianshu.com/p/9b301519b7a5
https://www.jianshu.com/p/c3ac1dbdf336
https://www.jianshu.com/p/31c6194bc47d
https://www.cnblogs.com/baizx/p/7280224.html

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小强签名设计

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值