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替梨。具體步驟如下:
下載 并安裝 Node.js(推薦版本:v10.11.0)。
不熟悉的装黑,請參考《Node.js安裝及環(huán)境配置之Windows篇》文檔副瀑,安裝好NODE.JS環(huán)境。全局安裝 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