0xTTEPX

Just do it, deeply...

Follow me on GitHub

RemixIDE使用教程

write by donaldhan, 2020-05-19 10:01

引言

truffle与ganache配合开发方式,十分巧妙,使用VS Code solidity的插件编译合约,包括调试,虽然已经很方便,但如何有一种可视化的调试工具(编译部署完,可以界面话调用相关合约接口调试),是不是很nice,答案是肯定的,今天我们就来介绍一款,以太坊官方指定的在线合约开发工具Remix。

目录

remix ide

使用remix Ide我们可以在线调试合约;并可以将合约部署到测试链或者私链上进行调试;也可以将Remix IDE安装到本地,进行调试。

remix Ide在线调试链接如下: remix-ide ethereum

我们也可选择本地安装,编译调试。

我们使用经典的投票合约来体验remix的使用, 主要有以下功能:

  • 赋予账户投票权限;
  • 投票
  • 委托代理投票
  • 获取最终的投票结果
  • 获取投票合约的主席;

编译合约

compile_contract 我们可以选择不同的solidity版本进行编译合约。

部署合约

deploy_contract

部署合约可以选择,部署到公有测试链上,或者本地的私链上,本地私链可以选择使用GANCE界面化客户端。

需要注意的是,部署合约要选择正确的合约,而不是接口合约或者抽象合约,否则会爆出如下错误。

This contract may be abstract, not implement an abstract parent's methods completely or not invoke an inherited contract's constructor correctly.

部署合约的详细信息 deploy_contract_detail

调试合约

赋予账户投票权限

giveRigthToVote

投票 vote

委托代理投票

vote_delegate

获取最终的投票结果 vote_win

断点调试可以参考如下链接: remix-ide tutorial
这个需要安装调试插件

我们也可以对合约进行单元测试,如下:

run_test

获取投票合约的主席 whoisChairperson

我们还可以安装一些拓展插件,比如调试器

remix_plugin

总结

使用vscode编译合约,也可以使用truffle框架,调试的可以是用js,或者solidity;建议使用 remix结合ganache进行调试。

参考文献

remix
remix-ide ethereum
remix-ide tutorial
remix-ide browser-solidity old

todo

用于编写solidity的IDE,内置调试器和测试环境,可以将Metacoin在上面调试一下, 看一下,账户金额不一致的原因()

问题集锦

This contract may be abstract, not implement an abstract parent’s methods completely or not invoke an inherited contract’s constructor correctly.

This contract may be abstract, not implement an abstract parent's methods completely or not invoke an inherited contract's constructor correctly.

使用remix编译合约的时候,当前合约文件,包含合约接口,库的定义或者抽象合约时,使用remix编译后,我们部署合约时,要选择正确的合约,不然的话,部署的是接口或者抽象 合约,会抛出上面的问题,我们只要选择正确的部署合约即可。

deploy_vvt_token

Cannot Deploy Contract

Name has to refer to a struct, enum or contract

browser/VTToken.sol:380:18: TypeError: Name has to refer to a struct, enum or contract.
constructor (name, symbol, decimals) public ERC20Detailed(name, symbol, decimals) {}
^--^

问题原因,合约参数必须声明类型

我们的原因是

  constructor (name, symbol, decimals)  ERC20Detailed(name, symbol, decimals) public {}

修改为如下即可:

 constructor (string memory name, string memory symbol, uint8 decimals) public  ERC20Detailed(name, symbol, decimals) {}