全部产品

使用CloudIDE

进入Cloud IDE开发环境

可通过以下任一方式进入 Cloud IDE 合约开发环境:

  • 在 BaaS 平台的合约工程管理页面,您可以通过创建合约或编辑已有的合约,进入 Cloud IDE 合约开发环境。如下图所示:edit

  • 也可通过 概览页面 体验链卡片进入Cloud IDE开发环境。如下图所示:enter

Cloud IDE 合约工程管理

可以通过Cloud IDE对合约工程内的文件夹、文件进行 新建删除修改名字 操作。如下图所示:manage

注意:从合约工程管理页面进入Cloud IDE, 默认实时保存文件;新增合约文件请以 .sol 结尾,否则编译失败。

Cloud IDE 合约开发流程

使用 Cloud IDE 开发合约的过程主要分为以下 5 步:

  1. 选择目标合约链
  2. 编译合约
  3. 部署合约
  4. 调用合约
  5. 调试合约

选择目标合约链

在 Cloud IDE 中,点击 环境配置,选择目标的合约链环境。envir

环境配置 中,您可以选择自己已有的链配置环境。例如,您已申请体验链,则可以选择已有的公共 合约链,该体验链会配备一个默认的测试账户,可以用来部署、调用合约。如果此测试账户不能满足需求,您也可以使用通过 SDK 创建的账户,但是需要填入私钥(16 进制字符串),因为在部署、调用合约时 IDE 都需要账户的私钥对交易做签名处理。关于如何获取 16 进制字符串形式的私钥,参见 JS SDK 快速开始 中的示例代码。

编译合约

开发合约过程中,可以随时对已完成的代码进行编译。

在 Cloud IDE 中,点击 编译,开始编译代码。compile

  • 字节码字节码即合约代码的编译结果,也是合约部署时使用的关键数据,通过 SDK 可以将合约字节码部署到目标的生产链上使用。

  • 合约接口说明(ABI)应用程序二进制接口(Application Binary Interface,ABI)可以理解为合约的接口说明。当合约被编译后,其对应的 ABI 也会一起生成。

ABI 类似于程序中的接口说明文档,描述了属性和方法签名相关信息,包括字段名称、字段类型、方法名称、参数名称、参数类型、方法返回值类型等。

ABI 参数说明:

参数 说明
name 函数名称
type 方法类型,包括 function、constructor、fallback(缺省方法),默认为 function。
constant 布尔值,如果为 true,则表示方法不会修改合约字段的状态变量。
payable 布尔值,表示方法是否可以接收系统转账。
stateMutability 状态类型,包括 pure(不读取区块链状态)、view(和 constant 类型一样,只能查看,不会修改合约字段)、nonpayable(和 payable 含义一样)、payable(和 payable 含义一样)。
inputs 数组,描述参数的名称和类型。
name 参数名称
type 参数类型
outputs 和 inputs 一样,如果没有返回值,缺省是一个空数组。

更多 ABI 相关信息,参见Solidity ABI 官方介绍(英文)

部署合约

在合约编译通过,得到字节码和 ABI 后,在 Cloud IDE 中点击 部署合约 将合约部署到目标体验链进行测试。deploy

在部署定义了 constructor 方法的合约时,需要给定 constructor 方法的参数。Cloud IDE 支持合约方法参数类型的提示和一些基本数据类型的初始化赋值,您可根据自身实际情况初始化合约。

部署成功后,可以看到合约的所有方法列表。list

调用合约

合约部署成功后,IDE 会列出合约中所有的 public 方法以及 public 类型的状态变量。点击目标方法右侧的 调用合约 进行调用。

其中,状态变量对应的调用可以直接返回当前状态变量的值。合约方法的调用可以返回如下几个字段:

参数 说明
input 合约方法的输入数据,通常为合约方法的参数。
output 合约方法的返回值,可能是多个值,根据返回值具体类型转码显示。
log 如果在合约中使用了 Event 事件,并且事件被触发,则会在 log 中展示。

call

错误说明

在使用 Cloud IDE 过程中,可能遇到一些错误提示。在调用合约时,如果合约执行过程中出错,可能有多种原因,Cloud IDE 会将合约调用失败的错误码信息返回,便于您分析原因。Cloud IDE 使用的错误码信息与 SDK 使用的错误码保持一致,您可以查看 合约链错误码 找到对应的错误码说明。

下面通过一个错误码示例来说明如何通过错误说明的提示分析合约内部错误的原因,您也可以通过添加 Event 事件的方式来调试合约。

错误码示例:error

在上图的错误码示例中,系统调用了 Cloud IDE 示例合约的 voteForCandidate 方法,给定的候选人为Demi,返回的错误码为10201,其含义为:

错误码 错误码值 描述
VM_REVERT 10201 触发 revert 指令导致的错误

根据错误码提示,可以判断调用合约失败是因为触发了 revert 语句,含义为某个 require() 方法判断失败。查看合约代码,即可发现 voteForCandidate 方法中的相关条件检查:

  1. require(validCandidate(candidate));

由此,可推断出输入的候选人 Demi 不合法,并不在实际投票的候选人列表 candidateList 中。事实也确实如此,合约部署过程中,constructor 参数仅指定了 NickRose 两个候选人参与竞选。

调试合约

目前,您可以通过添加 Event 事件触发日志的方式实现逻辑分支的判断和分析,进而对合约内部逻辑进行调试。

这里选择调用合约方法 validCandidate

debug

  1. // This function will help to check whether target candidate is in the candidateList.
  2. function validCandidate(bytes32 candidate) view public returns (bool) {
  3. for (uint i = 0; i < candidateList.length; i++) {
  4. if (candidateList[i] == candidate) {
  5. emit VALID(true);
  6. return true;
  7. }
  8. }
  9. emit VALID(false);
  10. return false;
  11. }

validCandidate 方法的实现中,不同的执行逻辑会根据情况触发不同的 Event 事件,通过查看调用结果日志信息,即可分析出合约的执行路径。在以上示例中,执行逻辑相对简单。在复杂的逻辑控制方法中,通过添加 Event 事件的方式可以很好的追踪合约执行路径,达到调试合约的目的。