Solidity语言编辑器REMIX指导大全

Remix基本使用 Remix 是以太坊智能合约编程语言Solidity IDE,其实基于浏览器的IDE,有一个很大的好处就是不用安装,打开即用。在线Remix访问缓慢,如果你有很好的网络环境,可以直接访问Remix​​官网​​ ​​https://remix.ethereum.org/​​。也可以本地部署一套。在本地部署Remix需要准备两... 阅读详情

image

1

文章摘要

本文目标:本文翻译和实践Solidity语言编辑器REMIX官网帮助文档,但并不拘泥于逐字翻译,而时根据实践用中文语言讲透编辑器相关功能。

前置条件:了解以太坊ETH和Solidity语言。

技术收获:

  • 使用REMIX编辑器进行Solidity语言编程,编译,运行,调试。

  • REMIX界面介绍

    2 使用REMIX编辑器执行”HELLO WORLD”的智能合约

REMIX是一个智能合约编程语言Solidity的集成开发环境。

最简单的入门就是进行”HELLO WORLD”的程序运行。

2.1 智能合约编译

在CHROME浏览器上点击链接REMIX官网浏览器版编辑器(http://remix.ethereum.org/)即可打开REMIX编辑器。部分不能正常访问官网的,可以访问笔者的国内REMIX编辑器(http://remix2.ju3ban.net/)。

新增一个命名为“HelloWorld.sol”的文件,复制以下代码:

pragma solidity ^0.4.17;

contract Hello         

{    

address creator;         

string greeting;         

function Hello(string _greeting) public       

{        

creator = msg.sender;        

greeting = _greeting;    

}        

function greet() public constant returns (string)               

{

return greeting;    

}        

function setGreeting(string _newgreeting) public    

{        

greeting = _newgreeting;    

}         

/**********     

Standard kill() function to recover funds      

**********/        

function kill() public    

{         

if (msg.sender == creator)            

suicide(creator);  // kills this contract and sends remaining funds back to creator    

}

}

点击”Start to compile”按钮,会得到一下结果:

image

智能合约编译

除一些函数的告警提示外,结果表明该智能合约编译成功。

2.1.1 编译告警

如果编写的程序有告警,REMIX会有提示。一般来说,提示不必修改。

image

REMIXD编译告警

2.1.2 编译错误

为了说明编译错误案例,把该文件的第17行”return greeting;”改为”return _greeting;”, 重新编译,得到以下结果

image

REMIXD编译错误

如果编写的Solidity程序存在语法错误,Remix编译器会以粉红色底色提示显示错误原因,并在编辑器窗口提示位置。

编译错误演示完后,恢复第17行代码为”return greeting;”

2.1.3 详情信息

点击”Detail”按钮,可以看到详细信息。其中WEB3DEPLOY部分的内容就是在案例《第二课 如何实现以太坊最简智能合约“Hello World”的运行》(https://www.jianshu.com/p/2a5d60744988)中geth控制台使用的编译后代码。

image

DETAIL的内容

2.2 智能合约运行

2.2.1 创建智能合约

选择“Run”的页面,选择Environment环境为Javascript VM,在“Create”按钮前输入框内输入”Hello World!”[注意:输入字符串一定要有英文双引号],点击“Create”按钮。

image

创建智能合约

2.2.2 运行greet函数

点击浅蓝色函数”greet”按钮,可以看到输出结果为“Hello World!”

image

运行函数greet

说明:浅蓝色按钮函数表示该交易函数运行时不需要消耗GAS的。

2.2.3 运行setGreeting函数

在setGreeting函数按钮的输入框输入内容”Hello Duncan!”, 运行后在点击执行”greet”函数,发现该函数的输出内容已变为”Hello Duncan!”了,说明setGreeting执行正常。

image

运行函数SetGreeting

说明:粉红色按钮函数表示该交易函数运行时是需要消耗GAS的。

3

REMIX界面详解

第2章以“Hello World”为例,介绍了REMIX集成环境的基本使用方法。本章介绍REMIX编辑器的详细功能描述。

3.1 REMIX集成环境概述

REMIX是一个智能合约编程语言Solidity的集成开发环境,它集成了一个调试器和测试环境。

如果你对以下内容感兴趣,REMIX是一个不错的学习方式:

  • 开发智能合约(REMIX集成了SOLIDITY编辑器)

  • 调试智能合约

  • 获取已运行合约的状态和属性

  • 调试已经提交的合约

  • 分析SOLIDITY代码,以便减少编码错误和加强最佳实践

  • 配合Mist(或者任何植入web3的工具),REMIX可用于测试和调试DAPP分布式程序。(参考链接Debugging a Dapp using Remix - Mist - Geth )(https://remix.readthedocs.io/en/latest/tutorial_mist.html

详解介绍使用的程序案例为”ballot.sol”文件的代码,完整代码如下:

pragma solidity ^0.4.0;

contract Ballot {    

struct Voter {        

uint weight;        

bool voted;        

uint8 vote;        

address delegate;    

}    

struct Proposal {        

uint voteCount;    

}    

address chairperson;    

mapping(address => Voter) voters;    

Proposal[] proposals;    

/// Create a new ballot with $(_numProposals) different proposals.    function Ballot(uint8 _numProposals) public {        

chairperson = msg.sender;       

 voters[chairperson].weight = 1;        

proposals.length = _numProposals;    

}    

/// Give $(toVoter) the right to vote on this ballot.   

/// May only be called by $(chairperson).    

function giveRightToVote(address toVoter) public {        

if (msg.sender != chairperson || voters[toVoter].voted) return;        

voters[toVoter].weight = 1;    

}    

/// Delegate your vote to the voter $(to).    

function delegate(address to) public {        

Voter storage sender = voters[msg.sender]; // assigns reference        if (sender.voted) return;        

while (voters[to].delegate != address(0) && voters[to].delegate != msg.sender)            

to = voters[to].delegate;        

if (to == msg.sender) return;        

sender.voted = true;        

sender.delegate = to;        

Voter storage delegateTo = voters[to];        

if (delegateTo.voted)            

proposals[delegateTo.vote].voteCount += sender.weight;        

else            

delegateTo.weight += sender.weight;    

}    

/// Give a single vote to proposal $(toProposal).    

function vote(uint8 toProposal) public {        

Voter storage sender = voters[msg.sender];       

 if (sender.voted || toProposal >= proposals.length) return;        

sender.voted = true;        

sender.vote = toProposal;        

proposals[toProposal].voteCount += sender.weight;    

}    

function winningProposal() public constant returns (uint8 _winningProposal) {        

uint256 winningVoteCount = 0;       

 for (uint8 prop = 0; prop < proposals.length; prop++)            

if (proposals[prop].voteCount > winningVoteCount) {                winningVoteCount = proposals[prop].voteCount;                _winningProposal = prop;           

 }    

}

}

REMIX主界面截图如下,具体说明参考各个子章节。

image

REMIX主界面截图

3.2 文件浏览器

image

文件浏览器

1)增加新文件(Create new File)

点击在浏览器上增加一个新的智能合约文件

image

增加新文件

2)打开文件(Add Local File)

image

打开存在文件

3) 匿名发布到GitHub(Publish to Gist)

image

匿名发布到GitHub

4) 复制文件列表到其他浏览器(Copy to another instance)

例如,把“http://remix2.ju3ban.net”的文件列表复制到另一个浏览器“http://remix.ju3ban.net

修改输入目标浏览器的网址:

image

复制到别的浏览器

打开新的浏览器,文件列表已复制过来了:

image

别的浏览器的文件列表

5)链接本地服务器(Connect to Localhost)

在Remix文件浏览器上的文件并不会同步到本地文件系统,对浏览器文件列表的新增/修改/删除并不会同步本地文件。一般操作时,调试成功的代码需要在本地文件系统新建文件保存。Remix浏览器提供了一种方法,就是使用Remixd,允许保存和同步浏览器文件到你的本地计算机中。因为根据官网文档,笔者没有能够在Windows 10系统或者Ubuntu中安装成功Remixd,本文不再详细介绍该功能。有兴趣的朋友欢迎根据官网文档()尝试使用REMIXD同步。成功者欢迎跟辉哥反馈交流,补充完整这个文档。

image

链接本地文件系统

3.3 Solidity语言编辑器

image

Solidity 浏览器

Solidity语言编辑器重要的功能列表:

  • TAB页面显示打开的文件

  • 编译告警或者错误会显示在编辑器最左侧边

  • Remix自动保存当前文件(修改后5秒内)

  • +/- 表示增加/减少编辑器的字体大小

3.4 终端输出器

image

终端输出器窗口

终端输出器功能说明:

  • 点击1按钮可隐藏终端输出器

  • 点击2按钮可情况输出器内容

  • 点击3按钮可复制地址信息等到缓存,便于粘贴

  • 点击Details按钮可展开交易详细内容

  • 点击Debug按钮可调试该交易合约

  • 点击复选框,可增加选择显示所有的交易还是只显示智能合约相关的交易程序。默认只显示后者。

image

终端显示内容

  • 输入关键字可搜索定位输出内容
    例如输入”Hello “关键字,相关的内容就显示出来了。

image

搜索Hello关键字

  • 监听网络(Listen to network)
    勾选后,REMIX不仅监听REMIX编辑器中创建的交易,还监听当前环境中所有的交易。

3.5 分页控制面板

3.5.1 编译合约

image

Compile控制面板

发布到Swarm网络(Publish on Swarm)

点击“Publish on Swarm”按钮可把智能合约源码和对应的ABI信息发布到网络上。这个合约智能是非抽象类的才能发布。

合约发布后,你可以点击Detail按钮,在弹出窗口的“SWARM LOCATION”

位置找到对应的MetaDATA信息。

信息中的SWARM LOCATION位置有对应网址,在能科学上网的计算机就可找到该合同的MetaData信息 “bzzr://165fad4c3d8ead3a7fe28296777b4bedafb09bb57de2e9ba39c1547866437182”

3.5.2 运行

image

 Run控制面板

重点特性说明

1) 环境选择

JavaScript VM: 所有交易在浏览器的沙盒中被执行。这以为着没有结果是永久保存的。当页面重载后,一个新的区块链会被从零开始运行,老的会被丢弃。

Injected Provider: Remix将连接被植入的Web3对象。例如Mist或者Metamask钱包是提供植入的Web3对象的例子。例如《第八课 如何调试以太坊官网的智能合约众筹案例》(https://www.jianshu.com/p/c7c87c7ad74f)就是使用Meta的账号。

Web3 Provider: Remix将连接到一个远程节点。你可以用这个地址来选择钱包客户端:geth, parity or any Ethereum client.

2) 初始化合约

创建合约

“Create”按钮用于创建合约。合约创建时,需要参考左边构建函数定义(智能合约的同名函数为构建函数)的类型来输入参数。

image

创建合约

注意:如果输入参数为地址或者字符串,都需要使用英文双引号(“”)囊括起来,使用英文(“,”)表示输入参数分割。

运行合约

假设给出的地址是一个选择合同的实例。通过这种方法就可以跟已经运行的合同进行交互。要特别谨慎使用该功能,因为系统不做验证。运行时要确认信任这个地址的合同。

等待(pending)合约

image

挂起合约

等待合约表示还没有完成执行过程的合约。按钮功能描述参考上述附件。

3.5.1.1 Web3 Provider远程节点配置

1) 启动Ganache客户端。不熟悉的,可参考该篇文章的对应关键字“在WINDOWS上安装Ganache”安装好客户端(https://www.jianshu.com/p/683ea7d62a39)。

image

启动Ganache客户端

2) 输入Web3 Provider远程节点,例如Ganache的签宝地址为“HTTP://127.0.0.1:7545

image

输入WEB3 privider的服务器地址

3) 输入完成后,Remix的账号列表更新为Ganache的账号列表了。

账号为Ganache的账号列表

3.5.3 调试

调试/回滚和单步调试是一个很重要的功能,点击《第九课 如何在Remix环境下进行Solidity代码单步调试》(https://www.jianshu.com/p/a2502274b092)文章查看。

3.5.4 设置

Settiongs

重要特性说明:

  • Solidity version:编译SOLIDITY版本,不调整的话系统会默认选择最新正式发布的版本。

  • Always use Ethereum VM at Load:勾选此项会在重新加载时默认选择JavaScript VM环境。

  • Enable Optimization:勾选此项会节省运行GAS,JVM等测试环境可不用勾选。

3.5.5 分析

分析面板显示的是最后一次编译的信息,默认情况下每一次编译都会产生一个新的分析。

这个分析面板显示的是合约代码的详细信息,它可以帮助你避免代码错误或者增强编码能力。

Analysis页面

Security:
Transaction origin: 如果tx.origin被使用则会告警;
Check effects: 避免潜在的可重入性BUG;
Inline assembly:  使用植入汇编方式;
Block timestamp: Semantics maybe unclear;
Low level calls: Semantics maybe unclear;
Block.blockhash usage: 自毁调用;

Gas & Economy:
Gas costs: 函数的GAS消耗太高会告警。
This on local calls: 勾选后本地函数会被唤醒;

Miscellaneous:
Constant functions: 检查潜在的常量函数
Similar variable names: 检查变量名是否太相似

Miscelllaneous下方显示的是本次编译的优化告警,供程序员优化代码使用。

Analysis页面2

3.5.6 支持

支持页面,可点击需求技术支持和交流。

remix_supporttab

4

典型错误介绍

4.1 REMIX编译器官网链接打不开

提示内容:点击官网链接(http://remix.ethereum.org),如果打不开或者有错误提示“mock compiler: source not found”

原因分析: 这个主要是不能科学上网引起官网浏览器不能下载完全。

解决办法:

1,参考欧阳哥哥的文章《【以太坊开发】Remix IDE本地部署与配置个性风格》完成本地REMIX的部署;
2,采用一个已国内部署的REMIX浏览器链接:http://remix2.ju3ban.net

4.2 参数转换失败

提示内容: 终端输出器显示为“transact to Donation.moveFund errored: Error encoding arguments: Error: Assertion failed ”

原因分析:
Solidity函数定义为”function moveFund(address _to, uint _amount)”

RUN面板的函数输入参数如下,希望转移5个ETH给目标账号。

“0x14723a09acff6d2a60dcdf7aa4aff308fddc160c”,500000000000000

结果提示错误。

这个原因主要是因为”5 *10^18”的值超过了计算器的范围,需要增加”“来让程序进行转换。Solidity的默认单位为wei,1 ETH = 1*10^18 wei。

解决办法:
输入参数改为2个参数均有双引号则不会有错误提示。

“0x14723a09acff6d2a60dcdf7aa4aff308fddc160c”,”500000000000000”

在remix中,任何输入参数都可以带”“表示。

5

参考文档

REMIX英文官网帮助文档(http://remix.readthedocs.io/en/latest/

【以太坊开发】Remix IDE本地部署与配置个性风格(https://www.jianshu.com/p/afdee36ccbc0

SOLIDITY语言官网中文版(http://solidity-cn.readthedocs.io/zh/develop/solidity-in-depth.html

本文作者:HiBlock区块链技术布道群-笔名辉哥

原文发布于简书,原文地址:https://www.jianshu.com/p/2110ed61d2cc

加微信baobaotalk_com,加入技术布道群

以下是我们的社区介绍,欢迎各种合作、交流、学习:)

image

【以太坊开发-02】remix的基本使用 remix的基本操作 阅读详情

相关推荐

(2)Remix介绍及使用

Remix 是以太坊智能合约开发的官方集成开发环境(IDE),基于浏览器,无需安装即可使用。它提供了从编写、编译、调试到部署的一站式开发体验,特别适合初学者和快速原型开发。以下是 最新 Remix 的详细介绍,包括功能、使用方法和最佳实践。 1. Remix 的核心功能 1.1 代码编辑器 支持 Solidity 语法高亮、代码补全和错误提示。 支持多文件管理和文件夹结构。 提供代码格式化功能。 1.2 编译器 内置 Solidity 编译器,支持多种编译器版本。 提供编译选项,如优化器、EVM

鱼遇海 3635

Remix 搭建与简单使用

remix是基于浏览器的在线编译器,鉴于网络问题,可能存在登不上去的问题,因此 ,可以搭建自己本地的Remix。官方在线编译器:https://ethereum.github.io/browser-solidityhttps://remix.ethereum.org推荐使用在线编译器1. 安装本地Remix(windwos):官方地址: https://github.com/ethereum/re...

HIP的博客 2万+

如何使用remix编写solidity智能合约并部署上链

快速上手remix,部署合约到测试链。

m0_65813568的博客 7136

【区块链-以太坊】2 使用Remix编译和部署Solidity智能合约

文章目录1 基础知识2 使用Remix编译智能合约3 在本地部署智能合约4 在测试网络中部署智能合约 1 基础知识 Remix简介: Remix 是以太坊提供的一个开发Solidity智能合约的网络版开发软件(无需安装)。合约的开发者在Remix里提供的JavaScript虚拟机上开发,调试好合约后,可以发布到以太坊,或者任何支持Solidity智能合约的区块链上。 solidity简介 Soli...

猫哆哩o0 2594

PHP与XQuery的奇妙组合,你试过吗?

最近,我接了一个项目,需求是从一堆XML文件中提取数据,然后做一些复杂的查询和处理。作为一个PHPer,我第一时间想到了XQuery。虽然XQuery在PHP中并不是主流,但我觉得它挺有意思,于是决定深入研究一下。今天,我就跟大家聊聊PHP和XQuery的那些事,顺便分享一下我踩过的坑和解决方案。

JSW345的博客 508

xquery_用PHP模拟XQuery和XInclude功能

存档日期:2019年5月15日 | 首次发布:2010年9月21日 许多浏览器通常都可以处理XML,但目前对XQuery和XInclude的支持较弱。 当您构建组合并处理来自多个源的XML结构化数据的Web应用程序时,需要解决此问题。 使用PHP是一种解决方案。 本文首先展示了您的网页如何使用XQuery和XInclude显式传递XML的数据提取,然后如何在花园中心之间相互协作的情况下使用...

cuyi7076的博客 89

XQuery与BaseX完美结合:10个实用查询示例带你精通XML数据处理

想要高效处理XML数据吗?BaseX作为一款功能强大的开源XML数据库,与XQuery查询语言的完美结合,为开发者提供了终极的XML数据处理解决方案。本文将为你展示10个实用的XQuery查询示例,帮助你快速掌握BaseX的核心功能,轻松应对各种XML数据处理挑战!😊 ## 📊 什么是BaseX和XQuery? BaseX是一个轻量级、高性能的XML数据库系统,支持XQuery 3.1、X

gitblog_00260的博客 807

BaseX XML数据库架构解析:高性能XQuery处理器技术实现

BaseX作为一款开源的XML数据库与XQuery处理器,为现代数据处理架构提供了完整的XML存储、索引与查询解决方案。这款高性能数据库系统完全支持W3C XQuery 3.1标准,通过优化的索引引擎和多语言客户端API,实现了海量XML文档的高效管理。🔧 ## 核心技术架构深度剖析 ### 多层存储引擎设计 BaseX的核心存储架构采用分层设计,从内存数据管理到磁盘持久化存储,实现了高性能

gitblog_00760的博客 690

XQuery查资料

wrapper生成 JTidy是HTML Tidy(一个HTML语法检查器和优雅的打印编排工具)的Java移植,除了本身具有的清除HTML文件难看或错误内容的功能外,还提供了一个DOM接口,程序员可以将JTidy当作一个处理HTML文件的DOM解析器来使用。有程序,也有eclipse插件(http://sourceforge.net/projects/eclipsetidy/) 用XQue...

weixin_30273931的博客 87

Remix 开发小技巧

需要考虑的事项:如果我们中止对另一个 API 的 POST 请求,并且该 API 没有中止数据库更改,我们可能仍然会遇到一半突变发生的问题,因为一半已经运行但另一半已中止。如果您将页码和大小存储在 URL 中,Remix 将获取新数据并在 URL 更改时立即显示在页面上,并且由于数据库通常有办法一次返回一页数据,因此您也可以免费获得。这些是生成 .js 输出的文件,是您通常编写代码的位置。应用的其他部分可能依赖于自己的查询参数,当我们创建设置参数的分页组件时,我们不希望覆盖其他查询 $skip 参数。

Willin Wang 的全栈升级指南 538

SolidityRemix在线环境及钱包申请

Ethereum是公有链的一种,中文称之为以太坊。和区块链类似,他也有自己的代币,叫作以太币。Ethereum使用的共识合约是PoS。感兴趣的朋友可以去看我前面的博文区块链博文以太坊是区块链2.0时代的代表性产物,其推出了图灵完备的智能合约,这一创新为区块链和分布式应用带来了革命性的变化。我们可以通过创建自己的智能合约并且在缴纳一定的gas(可以理解成让矿工帮助执行合约的小费)后,就能够在分布式的区块链上运行自己合约并且执行相应的功能。

关关的博客 2445

Remix部署Solidity合约

    Remix是一个用于开发和部署Solidity合约的线上IDE,该IDE含有各个版本的Solidity,当一个工程有多个Solidity版本时,就需要使用Remix来进行分开编译和部署。 1、安装相关的编译与部署插件 1.1)安装Solidity编译插件     点击Remix左侧页边栏里的两脚插头图标,进入Remix的搜索栏,输入solidity关键字,按[Active]依次激活如下插件     SOLIDITY COMPILER     SOLIDITY STATIC ANALYSYS    

sanqima的专栏 5707

使用Remix编辑器发布以太坊ERC20高级代币合约

Remix在线编辑器链接:https://ethereum.github.io/browser-solidity 1、打开编辑器后。把合约代码复制到编辑器中(这里用我的上一个博客的ERC20高级代币源码) Start to compile编译合约代码、如果没有报错就可以了。 2、切换到Run标签。选择网络环境:Injected Web3  注:这里需要安装以太坊谷歌插件metamask...

IT_浩哥的博客 7758

智能合约编辑器有哪些?Remix、Truffle Suite、Hardhat

智能合约编辑器是用于编写、编辑和测试智能合约的工具。1. **代码编辑器:** 提供一个代码编辑区域,开发者可以在其中输入和编辑智能合约的 Solidity 代码或其他区块链合约语言。6. **部署工具:** 支持将智能合约部署到区块链网络的工具,通常可以选择目标网络(例如主网、测试网)和设置部署参数。2. **语法高亮和自动完成:** 用于增强代码的可读性和编写效率的功能,包括语法高亮显示和自动完成代码片段。5. **测试工具:** 提供测试框架,使开发者能够编写和运行单元测试,确保智能合约的正确性。

weixin_41987998的博客 1415

solidity 学习笔记

/ 智能合约的许可协议// 智能合约的适用版本import "";// 导入// 状态变量// 函数// 智能合约的许可协议// 智能合约的适用版本import "";// 导入// 状态变量// 函数。

nina_1314521的博客 3729

Remix 开发小技巧(五)

如果您尝试调用的终端节点影响加载程序使用的数据,您可能不希望只对其进行常规提取调用。Remix 的 useFetcher 钩子有很多你想要利用的生活质量功能,例如自动重新获取装载机重复请求取消避免具有多个请求的争用条件如果服务器返回重定向响应,则重定向客户端因此,为了在这里正确使用它,我们可以在模式中采用创建一个自定义的类型安全获取器钩子,我们可以在应用程序中的任何位置使用它。})},[fetcher],这是使我们与 tRPC 等解决方案具有平价功能缺失的部分。

Willin Wang 的全栈升级指南 755

solidity合约生成成Java代码-vscode工具

solidity合约生成成Java代码-vscode工具

jxpxlinkui的博客 1652

使用Remix部署Solidity可升级代理合约

可升级代理合约是一种设计模式,它允许在不中断合约功能的情况下对合约进行升级。当需要升级合约时,只需部署新的逻辑合约并更新代理合约的地址,而不影响已经部署的代理合约的功能和数据。首先部署StorageContract,记录其地址,然后部署ProxyContract时将StorageContract的地址作为参数传入。通过使用Remix部署Solidity可升级代理合约,开发者可以轻松地进行合约的升级和维护,而无需中断现有的功能和数据。请记住,在实际部署合约时,需要谨慎考虑安全性和合约升级的影响。

YekForth的博客 465
上一篇: 区块链100讲:16进制数据的编码/解码算法
下一篇: 区块链100讲:区块链的3个阶段和4种分类
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值