主页 > imtoken官网钱包app > 区块链开发(三)第一个以太坊智能合约的编写与调试

区块链开发(三)第一个以太坊智能合约的编写与调试

imtoken官网钱包app 2023-03-05 06:26:12

一、智能合约IDE简介

目前,以太坊支持三种语言编写智能合约。

Solidity:类似于JavaScript,这是以太坊推荐的官方语言,也是最流行的智能合约语言。 具体使用请参考Solidity文档,地址:

Serpent:类似Python风格,文档地址:

LLL:类似Lisp风格,已经终止。

可以根据不同的习惯选择不同的高级语言,目前最流行的是Solidity。 本文中的所有智能合约均使用 Solidity 语言编写。

目前可以编写智能合约的常用IDE有以下几种:

Mix:是以太坊早期主要的开发IDE,可以支持智能合约和DAPP的编写、调试、部署、全图形化界面。 但随着原主Gavin Wood的离开,逐渐被边缘化,最终停止发展。 整个团队转向了 Remix 项目。 为了以后着想,不建议学习Mix。

Remix:是原Mix团队的新作。 目前只有一个简单的Debug功能上线,以后可以关注一下。

browser-solidity:本项目为智能合约浏览器版的开发环境,可支持直接在浏览器中开发、调试、编译。 对于初学者,可以快速上手,无需安装,非常方便,直接访问地址即可使用:,本文使用该IDE进行开发。

Ethereum Studio:由第三方公司开发的用于企业智能合约的在线 IDE。 它功能强大且免费使用。 它可以作为企业级开发的工具。 访问地址:

Visual Studio 2015:没错,就是微软的VS 2015,微软集成了以太坊的智能合约编写功能。 可见微软对以太坊的重视。

2. 编写第一个智能合约

1. 智能合约语法学习方法

智能合约的语法和示例可以在 Solidity 文档网站上查看。 基本上看完这些在线文档,你就已经熟练了,剩下的就是练习编码了。

以太坊合约代码查看_以太坊合约交易怎么玩_以太坊合约地址是什么

2. 示例合约代码

首先我们会给出一个示例代码,接下来我们将以此代码为例来讲解智能合约的编写和调试。

————————————————————————————————

合同投票{

结构候选人{

uint 投票数;

字符串名称;

}

结构选民{

布尔投票;

}

映射(地址=>选民)公众选民;

Candidate[] 公开候选人;

函数 Votelihe() {

以太坊合约代码查看_以太坊合约交易怎么玩_以太坊合约地址是什么

candidates.push(候选人({

名称:“力和”,

投票数:0

}));

candidates.push(候选人({

名称:“丹丹”,

投票数:0

}));

}

函数 Vote_candidate(uint8 numCandidate)

{

如果(选民[msg.sender].voted ||numCandidate>candidates.length)返回;

候选人[numCandidate].votecount+=1;

选民[msg.sender].voted=true;

以太坊合约交易怎么玩_以太坊合约地址是什么_以太坊合约代码查看

}

函数 Getcount() 返回(字符串、uint、字符串、uint){

返回(候选人[0].name,候选人[0].votecount,候选人[1].name,候选人[1].votecount);

}

}

————————————————————————————————–

这段代码创建了一个投票程序,为两个候选人 lihe 和 dandan 投票。 每个人只有一次投票机会以太坊合约代码查看,最后返回lihe和dandan的结果。 各功能说明如下:

function Votelihe():构造函数,智能合约只运行一次

function Vote_candidate():为候选人投票,每个选民只能投一票

function Getcount():返回当前候选人的得票数

3.使用IDE编写智能合约

首先我们打开browser-solidity,IDE的主要功能如下:

1

将示例代码复制到左侧代码编辑框中,IDE会自动检测语法错误并显示在右侧窗口中,如下图:

以太坊合约代码查看_以太坊合约交易怎么玩_以太坊合约地址是什么

2

可以看到有一个undeclared object,在第14行报错。很明显我的一个结构对象candidates被误写成了candidates2,修改后可以通过验证。

请注意,在浏览器中编写代码时,它会自动保存在本地浏览器缓存中。 只要清除浏览器缓存,代码就不会丢失。

3.调试第一个智能合约

目前browser-solidity有两种常用的调试方式,一种是使用本地虚拟机调试方式,另一种是连接本地私有链进行调试。

1.本地虚拟机调试方式

本地虚拟机调试是指不连接任何节点,在内存中虚拟出一个以太坊节点进行调试。 优点是速度快,配置简单。 缺点是可能运行在真正的区块链节点上,因为它只是虚拟调试。 智能合约将与预期结果不同。

首先,在DEBUG环境设置中,选择JavaScript VM,设置本地虚拟调试模式,如下图:

3

设置成功后,可以在账户状态栏看到可用账户列表,如下图

4

智能合约代码编写完成后,点击“创建”按钮,即可将智能合约部署到内存中进行调试。 如果部署成功,会出现智能合约的函数运行按钮和参数输入框,然后就可以调试你的智能合约了。 如下所示:

5

运行函数后,会出现相应的交易数据,即可完成整个智能合约的调试。

以太坊合约交易怎么玩_以太坊合约地址是什么_以太坊合约代码查看

如果要一步步调试智能合约,则选择bug图标,切换到一步步调试界面,即可实现智能合约的单步运行。 注意,这里的单步运行指的不是代码,而是智能合约编译后的OPCODE以太坊合约代码查看,如下图所示。

6

2.连接本地私链调试

连接本地私链调试,就是通过RPC接口连接本地以太坊节点,真正部署调试智能合约。 缺点是速度慢,配置复杂。 好处是可以实际运行智能合约,最大程度的防止出错。 关于私链的配置可以参考我的原创文章《区块链开发(一)基于以太坊搭建私链环境》。

首先在DEBUG环境设置中,选择Web3 Provider设置本地虚拟调试模式。 同时会默认给一个连接地址:8545,如果你配置的私有链的RPC端口有修改,记得改成对应的端口,如下图:

7

然后,切换到帐户状态栏。 此时显示的可用账户应该都是你部署的私有链中的账户。 如果没有,说明私链没有连接成功。 有两个可能的原因。 一种是私有链提供的端口是通过http访问的,而browser-solidity的网页访问地址是https。 解决方法是将browser-solidity的访问地址改为http协议的地址; 二。 原因是系统时间与网络不同步。 可以使用windows系统的时间同步功能进行同步。

4. 其他常用智能合约资源

下面是一些示例网站,可以参考一些成熟的代码,方便快速迭代学习。 常见的示例网站如下:

常用的开发框架有3种:

松露:手动地址

以太坊目前流行的开发框架Truffle的使用说明书比较流行。

Dapple:手动地址

这个开发框架在gitter chart上看到过。 感觉用的人不多。 先观察

流星:手动地址

这个开发框架是以太坊官方推荐的,写在以太坊官方wiki上,值得学习。 当然,以太坊官方经常改方向,以后可能还会改。