蚂蚁区块链第12课 如何使用命令行编译工具solcjs编译Solidity智能合约?

1,摘要

蚂蚁区块链合约平台支持 Solidity 智能合约,针对合约源代码的编译,可以直接通过蚂蚁区块链 Cloud IDE 合约开发环境进行合约编译、部署、测试和调试。
本文介绍由蚂蚁区块链平台提供的 Solidity 编译工具 solc-js 的 下载、安装 和 使用方式 。

2,操作内容

2.1 下载 solc-js

点击此处,获取合约编译工具 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)。

2.2 安装 solc-js

辉哥是直接在WINDOWS环境下完成Node.js的安装的,也可以使用linux环境安装Node.js环境。
solc-js 工具依赖 Node.js 环境,因此需要先安装 Node.js,然后安装 solc-js。具体步骤如下:

  1. 下载 并安装 Node.js(推荐版本:v10.11.0)。
    不熟悉的,请参考《Node.js安装及环境配置之Windows篇》文档,安装好NODE.JS环境。

  2. 全局安装 solc-js。在下载的 alipay-solc-0.1.12.tgz 所在目录执行以下命令:

npm i -g alipay-solc-0.1.12.tgz

成功输出结果:

D:\jusanban\doc\26-培训分享\01-研发运营销售\01-区块链\05-蚂蚁区块链\8. Solidity-JS SDK-错误码\DAPP\credit-manager-tee>npm i -g alipay-solc-0.1.12.tgz
C:\Program Files\nodejs\node_global\solcjs -> C:\Program Files\nodejs\node_global\node_modules\@alipay\solc\solcjs
+ @alipay/solc@0.1.12
added 66 packages from 35 contributors in 38.203s

2.3 使用 solc-js

全局安装 solc-js 工具后,即可在命令行中直接使用此工具,可以通过 solcjs --help 来查看此工具支持的参数说明。

solcjs --help
Usage: C:\Program Files\nodejs\node_global\node_modules\@alipay\solc\solcjs
[options] [input_file...]

Options:
  --version         Show version number                                [boolean]
  --optimize        Enable bytecode optimizer.                         [boolean]
  --bin             Binary of the contracts in hex.                    [boolean]
  --abi             ABI of the contracts.                              [boolean]
  --standard-json   Turn on Standard JSON Input / Output mode.         [boolean]
  --output-dir, -o  Output directory for the contracts.                 [string]
  --help            Show help                                          [boolean]

命令行语法:

Usage: /usr/local/bin/solcjs [options] <FILE_NAME>

选项:
--version
说明:显示版本号
类型:布尔
--optimize
说明:启用字节码优化器
类型:布尔
--bin
说明:十六进制合约的二进制
类型:布尔
--abi
说明:合约接口说明
类型:布尔
--standard-json
说明:打开标准 JSON 输入或输出模式
类型:布尔
--output-dir,-o
说明:合约输出的目录
类型:字符串
--help
说明:显示帮助信息
类型:布尔

2.4 编译示例

如下所示,创建名为 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。

生成文件截图:

JS 代码中编译合约

1,创建目录 hello,执行 npm init,将 alipay-solc-0.1.12.tgz 文件放到 solcjs-test 目录。
2,运行以下命令行,在 solcjs-test 目录中安装 solc-js:

npm i alipay-solc-0.1.12.tgz --save

3,代码中编译合约,创建 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)
 }

4,运行 index.js:

node index.js

5,运行的输出供参考,已包含编译字节码和合约接口说明(ABI):


D:\jusanban\doc\26-培训分享\01-研发运营销售\01-区块链\05-蚂蚁区块链\8. Solidity-JS SDK-错误码\DAPP\hello>node index.js
:test: 6080604052348015600f57600080fd5b5060898061001e6000396000f300608060405260043610603e5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166338a1231d81146043575b600080fd5b348015604e57600080fd5b506058600435605a565b005b505600a165627a7a72305820a23c93498a557e224f629af6b63ee1721ffaafc0554c0f3966ed8c1edb0c60130029
:test: [{"constant":false,"inputs":[{"name":"a","type":"identity"}],"name":"g","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]

solc-js 与 JS SDK 结合使用

在 JS 代码中编译 Solidity 合约后,得到编译字节码和合约接口说明(ABI),进而可直接使用 JS SDK 来部署、调用合约。详情可参考 JS SDK 使用说明

3,参考

(1)Solidity 合约编译工具 https://tech.antfin.com/docs/2/101793

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,417评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,921评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,850评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,945评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,069评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,188评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,239评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,994评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,409评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,735评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,898评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,578评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,205评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,916评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,156评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,722评论 2 363
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,781评论 2 351

推荐阅读更多精彩内容