导语:

Remix是一个https://github.com/ethereum/remix的https://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 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合约只能做两件事:
创造代币:发起合约时创造指定数量的代币,代币拥有者是发起合约的 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

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

  1. 基于以太坊网络的智能合约开发、部署和测试(入门)

    为什么80%的码农都做不了架构师?>>>    基本概念: 以太坊是一个开放的.公开的区块链平台,允许用户构建自己的去中心化应用在上面运行 Solidity是一种语法类似JavaSc ...

  2. 比特币开发者:BSC可能会超越以太坊成为顶级智能合约平台

    比特币开发者Udi Wertheimer发推称,我觉得这是以太坊作为顶级智能合约平台的最后一个周期了. 昨天币安智能链(BSC)结算500万ETH,以太坊本身结算700万ETH左右.这可能会很快结束. ...

  3. 以太坊可更新智能合约研究与开发综述

    原文地址:https://ethfans.org/posts/ethereum-upgradeable-smart-contract-strategies 这篇文章是对以太坊可更新智能合约领域里的研究 ...

  4. 以太坊—开放的智能合约完整解决方案

    什么是以太坊(Ethereum)? 通俗的讲,以太坊是一种新的法律.传统的合同合约依据法律订立,执行.违约处理依赖律师.法院:以太坊解决了这一系列问题,合约通过程序订立.执行,人工无法干预,所以几乎可 ...

  5. 元宇宙应用开发实例——以太坊里的智能合约和Decentraland里的3D前端交互组件

    目录 1. 元宇宙核心技术 2. 元宇宙实例及应用实例 3. 以太坊里的智能合约开发 3.1. World Wide Web的访问能力 3.2. 初始化以太坊钱包 3.3. 开发4方合约 3.4. 手 ...

  6. 区块链入门文章二《以太坊:下一代智能合约和去中心化应用平台》

    以太坊:下一代智能合约和去中心化应用平台 以太坊基金会 著 李志阔(网名:面神护法) 赵海涛 焦锋 译 中本聪2009年发明的比特币经常被视作货币和通货领域内一次激进的发展,这种激进首先表现为一种没有 ...

  7. 3.25 以太坊:实战智能合约众筹1

    这次我们来看看怎么实现以太坊的众筹智能合约案例,首先我们了解一下下面的概念  1.什么是ICO?  ICO是以初始产生的数字加密货币作为投资回报的一种筹措资金的方式,它的概念源自证券界的Initial ...

  8. 附录2 以太坊:下一代智能合约和去中心化应用平台(选译)

    以太坊基金会 著 李志阔(网名:面神护法) 赵海涛 焦锋 译 中本聪2009年发明的比特币经常被视作货币和通货领域内一次激进的发展,这种激进首先表现为一种没有资产担保或内生价值[1],也没有中央发行者 ...

  9. 以太坊:下一代智能合约和去中心化应用平台

    以太坊基金会 著 李志阔(网名:面神护法) 赵海涛 焦锋 译 中本聪2009年发明的比特币经常被视作货币和通货领域内一次激进的发展,这种激进首先表现为一种没有资产担保或内生价值[1],也没有中央发行者 ...

最新文章

  1. puppet运维自动化之yum仓库管理
  2. c语言链表如何做成环,在C语言中单向链表环测试并返回环起始节点的实现方法...
  3. Win32 窗口篇(1)
  4. HashMap与HashTable联系与区别
  5. 一句话讲清楚GIL锁
  6. RISC-V评估系列
  7. 【学习笔记】第二章——进程的定义、组成、组织方式、特征、状态 转换
  8. c语言实现函数给主函数中的指针赋值的方法
  9. 从零开始编写深度学习库(五)ConvolutionLayer CPU编写
  10. hql mysql查询语句,HQL查询语言的使用介绍
  11. oracle数据库建立主键约束,数据库-Oracle主键约束和唯一索引的黑与白
  12. 2017-10-22—发光二极管
  13. 金融危机背景下大学生就业
  14. 从修正Adam到理解泛化:概览2017年深度学习优化算法的最新研究进展
  15. 嵌入式Linux的MiniGUI研究和移植
  16. 设置计算机ip地址时网关的作用是什么,IP地址小课堂:起到门户作用的网关到底有多重要?...
  17. android 多个catch,【Android开发坑系列】之try-catch
  18. 部署keepalive+lvs多master节点高可用
  19. Robocup新手指南
  20. 0.96寸OLED(二)SPI+DMA刷新OLED

热门文章

  1. regsvr32命令
  2. 信管1132班32 章泳涛 数据结构课程设计
  3. DaoCloud Rest API 体验
  4. [华为OD 004] 完美走位
  5. mysql Pxc工作原理_浅谈MySQL-PXC架构
  6. 拖稿一年的开心网研究
  7. VSFTPD配置方法手册
  8. pringboot毕业生就业信息管理 毕业设计-附源码151501
  9. 安卓虚拟键盘_像科幻片里那样隔空打字,虚拟键盘会成为未来趋势吗?
  10. vue 系统服务器,vue可以运行在windows服务器