Ant ブロックチェーンは、バージョン 0.4.24 (バージョン 0.4.24 を除く) より前の Solidity 構文と互換性のある、カスタマイズされた Solidity コンパイラ solc-js を使用します。このページでは、solc-js のインストール方法と使用方法、および代わりに solc バイナリコンパイラに切り替えるタイミングについて説明します。
Ant ブロックチェーンは、標準の Solidity コンパイラをサポートしていません。BaaS が提供する solc-js (alipay-solc-0.1.10.tgz) のみを使用してください。Solidity 0.4.24 以降を使用するコントラクトはコンパイルされません。
また、Ant ブロックチェーンのブラウザベースの開発環境である Cloud IDE で、コントラクトのコンパイル、デプロイ、テスト、デバッグを直接行うこともできます。
solc-js
solc-js は、コマンドラインまたは JavaScript コード内から使用できるクロスプラットフォームの JavaScript コンパイラです。JS SDK と統合して、コントラクトのデプロイと呼び出しを自動化します。
制限事項: solc-js は --bin フラグをサポートしていますが、--bin-runtime はサポートしていません。--bin-runtime の出力 (コントラクトの更新に必要) が必要な場合は、代わりに solc バイナリコンパイラ を使用してください。
前提条件
開始する前に、以下が準備できていることを確認してください:
Node.js がインストールされていること
solc-js のダウンロードとインストール
インストールパッケージをダウンロードします: alipay-solc-0.1.10.tgz (約 1.76 MB)。
パッケージをダウンロードしたディレクトリで次のコマンドを実行して、solc-js をグローバルにインストールします:
npm i -g alipay-solc-0.1.10.tgz
インストール後、ターミナルで solcjs が利用可能になります。solcjs --help を実行すると、サポートされているすべてのオプションが表示されます。
CLI リファレンス
使用法: /usr/local/bin/solcjs [オプション] <ファイル名>| オプション | タイプ | 説明 |
|---|---|---|
--version | bool | バージョン番号を出力します。 |
--bin | bool | コンパイルされたバイトコード (16進数からバイナリ) を出力します。初回のコントラクトデプロイに使用します。 |
--abi | bool | Application Binary Interface (ABI) を出力します。 |
--optimize | bool | バイトコードオプティマイザーを有効にします。 |
--standard-json | bool | 標準 JSON 入出力モードを有効にします。 |
--output-dir, -o | string | 指定されたディレクトリに出力ファイルを書き込みます。 |
--help | bool | ヘルプ情報を出力します。 |
solc-js は --bin-runtime をサポートしていません。コントラクトの更新のためにランタイムバイトコードをコンパイルするには、solc バイナリコンパイラ を使用してください。コントラクトのコンパイル
以下の例では、次のサンプルコントラクト (hello.sol) を使用します:
pragma solidity ^0.4.20;
contract Hello {
string name;
identity id; // identity は、標準の Solidity の address に似た Ant ブロックチェーンの型です
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 が表示されます。コンパイルに失敗した場合は、エラーメッセージが表示されます。
ABI の取得
次のコマンドを実行して hello.sol をコンパイルし、ABI を出力します:
solcjs --abi hello.sol成功すると、現在のディレクトリに出力ファイル hello_sol_Hello.abi が表示されます。
JavaScript コードでのコンパイル
以下の手順に従って、プログラムでコントラクトをコンパイルし、ABI とバイトコードの両方を取得します。
solcjs-testディレクトリを作成し、その中でnpm initを実行し、alipay-solc-0.1.10.tgzをそのディレクトリに移動します。solc-js をローカル依存関係としてインストールします:
npm i alipay-solc-0.1.10.tgz --save次のコードで
index.jsを作成します。solc.compile()の 2 番目の引数を1に設定すると、オプティマイザーが有効になります。var solc = require('@alipay/solc') var input = 'contract test { function g(identity a) {} }' // 2 番目のパラメーターとして 1 を設定すると、オプティマイザーが有効になります var output = solc.compile(input, 1) for (var contractName in output.contracts) { // 各コントラクトのバイトコードと 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 SDK を使用したコントラクトのデプロイと呼び出し
コンパイル後、ABI とバイトコードを JS SDK に直接渡して、コントラクトをデプロイおよび呼び出します。詳細については、「JS SDK の概要」をご参照ください。
solc バイナリコンパイラ
既存のコントラクトを更新する必要がある場合は、solc を使用します。solc-js とは異なり、solc は --bin-runtime をサポートしています。これは、SDK のコントラクト更新操作で必要となるランタイムバイトコードを生成します。
--bin と --bin-runtime の比較
| フラグ | 出力 | 用途 |
|---|---|---|
--bin | 完全なデプロイバイトコード = ランタイムバイトコード + コンストラクター バイトコード | 初回のコントラクトデプロイ |
--bin-runtime | ランタイムバイトコードのみ | 既存のコントラクトの更新 |
コントラクトを更新するには、--bin-runtime を使用してコンパイルします:
solc --bin-runtime <your-contract.sol>結果のバイトコードを JS SDK のコントラクト更新操作に渡します。詳細については、「JS SDK の概要」をご参照ください。
solc のダウンロード
どちらのバージョンも、バージョン 0.4.24 より前の Solidity 構文と互換性があり、--bin-runtime をサポートしています。
| バージョン | プラットフォーム | ダウンロード |
|---|---|---|
| 0.1.10 | macOS | solc-mac.zip |
| 0.1.10 | CentOS 7.2 | solc-cenos7.2.zip |
次のステップ
JS SDK の概要 — JS SDK を使用したコントラクトのデプロイと呼び出し
Solidity ドキュメント — Solidity 0.4.x 構文のリファレンス