螞蟻區(qū)塊鏈第12課 如何使用命令行編譯工具solcjs編譯Solidity智能合約?

1淮菠,摘要

螞蟻區(qū)塊鏈合約平臺支持 Solidity 智能合約,針對合約源代碼的編譯荤堪,可以直接通過螞蟻區(qū)塊鏈 Cloud IDE 合約開發(fā)環(huán)境進(jìn)行合約編譯兜材、部署、測試和調(diào)試逞力。
本文介紹由螞蟻區(qū)塊鏈平臺提供的 Solidity 編譯工具 solc-js 的 下載曙寡、安裝 和 使用方式 。

2寇荧,操作內(nèi)容

2.1 下載 solc-js

點擊此處举庶,獲取合約編譯工具 solc-js 安裝包:alipay-solc-0.1.12.tgz(約 1.76M)。

說明:
螞蟻區(qū)塊鏈對 Solidity 語言的支持與原生的 Solidity 語言不同揩抡,因此不能使用外部社區(qū)的 solc-js 編譯工具户侥。
BaaS 平臺提供的 solc-js:alipay-solc-0.1.12.tgz 可兼容 Solidity 語言 0.4.24 版本之前的語法(不包含 0.4.24)。

2.2 安裝 solc-js

輝哥是直接在WINDOWS環(huán)境下完成Node.js的安裝的峦嗤,也可以使用linux環(huán)境安裝Node.js環(huán)境蕊唐。
solc-js 工具依賴 Node.js 環(huán)境,因此需要先安裝 Node.js烁设,然后安裝 solc-js替梨。具體步驟如下:

  1. 下載 并安裝 Node.js(推薦版本:v10.11.0)。
    不熟悉的装黑,請參考《Node.js安裝及環(huán)境配置之Windows篇》文檔副瀑,安裝好NODE.JS環(huán)境。

  2. 全局安裝 solc-js恋谭。在下載的 alipay-solc-0.1.12.tgz 所在目錄執(zhí)行以下命令:

npm i -g alipay-solc-0.1.12.tgz

成功輸出結(jié)果:

D:\jusanban\doc\26-培訓(xùn)分享\01-研發(fā)運營銷售\01-區(qū)塊鏈\05-螞蟻區(qū)塊鏈\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 來查看此工具支持的參數(shù)說明疚颊。

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
說明:啟用字節(jié)碼優(yōu)化器
類型:布爾
--bin
說明:十六進(jìn)制合約的二進(jìn)制
類型:布爾
--abi
說明:合約接口說明
類型:布爾
--standard-json
說明:打開標(biāo)準(zhǔn) JSON 輸入或輸出模式
類型:布爾
--output-dir狈孔,-o
說明:合約輸出的目錄
類型:字符串
--help
說明:顯示幫助信息
類型:布爾

2.4 編譯示例

如下所示信认,創(chuàng)建名為 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 合約并得到編譯字節(jié)碼結(jié)果:

solcjs --bin hello.sol

如果編譯通過均抽,此目錄會得到包含字節(jié)碼的結(jié)果文件 hello_sol_Hello.bin嫁赏,如果編譯失敗則提示錯誤信息。

運行以下命令行到忽,編譯 hello.sol 合約并得得到合約接口說明(ABI):

solcjs --abi hello.sol

如果編譯通過,此目錄會得到包含合約接口說明(ABI)的結(jié)果文件 hello_sol_Hello.abi清寇。

生成文件截圖:

JS 代碼中編譯合約

1喘漏,創(chuàng)建目錄 hello,執(zhí)行 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负饲,代碼中編譯合約,創(chuàng)建 index.js 文件內(nèi)容如下:

 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返十,運行的輸出供參考,已包含編譯字節(jié)碼和合約接口說明(ABI):


D:\jusanban\doc\26-培訓(xùn)分享\01-研發(fā)運營銷售\01-區(qū)塊鏈\05-螞蟻區(qū)塊鏈\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 結(jié)合使用

在 JS 代碼中編譯 Solidity 合約后椭微,得到編譯字節(jié)碼和合約接口說明(ABI)洞坑,進(jìn)而可直接使用 JS SDK 來部署、調(diào)用合約蝇率。詳情可參考 JS SDK 使用說明迟杂。

3,參考

(1)Solidity 合約編譯工具 https://tech.antfin.com/docs/2/101793

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末本慕,一起剝皮案震驚了整個濱河市排拷,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌锅尘,老刑警劉巖监氢,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異藤违,居然都是意外死亡忙菠,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進(jìn)店門纺弊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來牛欢,“玉大人,你說我怎么就攤上這事淆游“茫” “怎么了隔盛?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長拾稳。 經(jīng)常有香客問我吮炕,道長,這世上最難降的妖魔是什么访得? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任龙亲,我火速辦了婚禮,結(jié)果婚禮上悍抑,老公的妹妹穿的比我還像新娘鳄炉。我一直安慰自己,他們只是感情好搜骡,可當(dāng)我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布拂盯。 她就那樣靜靜地躺著,像睡著了一般记靡。 火紅的嫁衣襯著肌膚如雪谈竿。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天摸吠,我揣著相機(jī)與錄音空凸,去河邊找鬼。 笑死寸痢,一個胖子當(dāng)著我的面吹牛劫恒,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播轿腺,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼两嘴,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了族壳?” 一聲冷哼從身側(cè)響起憔辫,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎仿荆,沒想到半個月后贰您,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡拢操,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年锦亦,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片令境。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡杠园,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出舔庶,到底是詐尸還是另有隱情抛蚁,我是刑警寧澤陈醒,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站瞧甩,受9級特大地震影響钉跷,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜肚逸,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一爷辙、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧朦促,春花似錦膝晾、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽混滔。三九已至洒疚,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間坯屿,已是汗流浹背油湖。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留领跛,地道東北人乏德。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像吠昭,于是被迫代替她去往敵國和親喊括。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,685評論 2 360

推薦閱讀更多精彩內(nèi)容