更新时间:2020-12-17 17:17
蚂蚁区块链合约平台支持 Solidity 智能合约,针对合约源代码的编译,可以直接通过蚂蚁区块链 Cloud IDE 合约开发环境进行合约编译、部署、测试和调试。
本文除介绍由蚂蚁区块链平台提供的 Solidity 编译工具 solc-js 的 下载、安装 和 使用方式 外,还对二进制 solc 编译工具进行简要说明。
点击此处,获取合约编译工具 solc-js 安装包:alipay-solc-0.1.12.tgz(约 1.76M)。
说明:
- 蚂蚁区块链对 Solidity 语言的支持与原生的 Solidity 语言不同,因此不能使用外部社区的 solc-js 编译工具。
- BaaS 平台提供的 solc-js:alipay-solc-0.1.12.tgz 可兼容 Solidity 语言 0.4.24 版本之前的语法(不包含 0.4.24)。
solc-js 工具依赖 Node.js 环境,因此需要先安装 Node.js,然后安装 solc-js。具体步骤如下:
下载 并安装 Node.js(推荐版本:v10.11.0)。
全局安装 solc-js。在下载的 alipay-solc-0.1.12.tgz
所在目录执行以下命令:
npm i -g alipay-solc-0.1.12.tgz
全局安装 solc-js 工具后,即可在命令行中直接使用此工具,可以通过 solcjs --help
来查看此工具支持的参数说明。
命令行语法:
Usage: /usr/local/bin/solcjs [options] <FILE_NAME>
选项:
--version
--optimize
--bin
--abi
--standard-json
--output-dir
,-o
--help
如下所示,创建名为 hello.sol
的 Solidity 合约示例:
pragma solidity ^0.4.20;
contract Hello {
string name;
identity id; //identity 类似于原生 Solidity 语言的 address
constructor() public {
name = 'Hello world!';
}
function hello() view public returns (identity, string) {
return (msg.sender, name);
}
}
hello.sol
合约并得到编译字节码结果:
solcjs --bin hello.sol
如果编译通过,此目录会得到包含字节码的结果文件 hello_sol_Hello.bin
,如果编译失败则提示错误信息。
hello.sol
合约并得得到合约接口说明(ABI):
solcjs --abi hello.sol
如果编译通过,此目录会得到包含合约接口说明(ABI)的结果文件 hello_sol_Hello.abi
。
创建目录 solcjs-test,执行 npm init
,将 alipay-solc-0.1.12.tgz
文件放到 solcjs-test 目录。
运行以下命令行,在 solcjs-test 目录中安装 solc-js:
npm i alipay-solc-0.1.12.tgz --save
index.js
文件内容如下:
var solc = require('@alipay/solc')
var input = 'contract test { function g(identity a) {} }'
// Setting 1 as second paramateractivates the optimiser
var output = solc.compile(input, 1)
for (var contractName in output.contracts) {
// code and ABI
console.log(contractName + ': ' + output.contracts[contractName].bytecode)
console.log(contractName + ': ' + output.contracts[contractName].interface)
}
node index.js
运行的输出供参考,已包含编译字节码和合约接口说明(ABI):
:test: 6080604052348015600f57600080fd5b5060898061001e6000396000f300608060405260043610603e5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166338a1231d81146043575b600080fd5b348015604e57600080fd5b506058600435605a565b005b505600a165627a7a7230582008d3450904d4f09535ba76326aae5ecd2f61113b791d633dbb3c0799ff75b3ad0029
:test: [{"constant":false,"inputs":[{"name":"a","type":"identity"}],"name":"g","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]
在 JS 代码中编译 Solidity 合约后,得到编译字节码和合约接口说明(ABI),进而可直接使用 JS SDK 来部署、调用合约。详情可参考 JS SDK 使用说明。
solc-js 编译工具能支持多系统平台运行,并且可以结合 JS SDK 自动化部署、调用合约,使用方便。solc-js 在命令行支持 --bin
参数,但是不支持通过 --bin-runtime
参数来编译升级合约接口所需要的字节码。
solc-js 工具在 JS 代码中默认也使用 --bin
参数编译合约得到字节码,此字节码不能直接用于合约升级,但是通过一次“本地合约部署”之后即可得到 runtime
字节码,用于合约升级使用。详情可参考 JS SDK 使用说明。
二进制 solc 编译工具同时支持 --bin-runtime
和 --bin
参数,这两个参数在编译结果上的主要差异在于,针对相同的目标Solidity 合约,使用 --bin-runtime
参数的编译字节码是 --bin
参数编译字节码的一部分。--bin
参数编译字节码除了包含--bin-runtime
参数的编译字节码结果之外,还包含合约初始化方法 constructor
的相关字节码等内容。
因此,如果需要使用 SDK 的升级合约接口,建议使用二进制 solc 编译工具,通过 --bin-runtime
参数来直接编译得到升级合约的字节码:
版本 | 说明 | 下载链接 |
---|---|---|
0.1.12 | MacOS 版本 - 兼容 Solidity 语言 0.4.24 版本之前的语法。 - 支持 --bin-runtime 参数。 |
solc-mac-0.1.12.zip |
0.1.10 | CentOS 7.2 版本 - 兼容 Solidity 语言 0.4.24 版本之前的语法。 - 支持 --bin-runtime 参数。 |
solc-centos7.2-0.1.12.zip |
在文档使用中是否遇到以下问题
更多建议
匿名提交