4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Azure Blockchain Serviceを試してみる2(コントラクトデプロイ編)

Last updated at Posted at 2019-09-02

まえおき

前回の記事では、Azure Blockchain Serviceを使ってブロックチェーンを構築するところまで行いました。
今回の記事では、構築したブロックチェーンに対して、コントラクト(今回はERC20のトークンコントラクト)のデプロイを行います。

トランザクションノードとの通信

まずは構築したブロックチェーンと通信するところから始めます。
Azure Blockchain Serviceではチェーンとのやりとりは、トランザクションノードが提供するエンドポイントを経由して行います。
メニューから「Settings > Transaction nodes」を開き、トランザクションノードを選択、さらに「Setting > Connection strings」を開くと、エンドポイントが表示されます。
スクリーンショット 2019-09-02 14.27.04.png
※ 黒塗りの部分がアクセスキーになります。

それでは、ターミナルからJSON RPCのリクエストを送信してみます。

$ curl -X POST -H 'Content-Type:application/json' --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' 'https://member12345.blockchain.azure.com:3200/アクセスキー'
{"jsonrpc":"2.0","id":1,"result":"0xc059"}

正常に結果が返ってきたことが確認出来ます。

トランザクションノードのセキュリティ設定

トランザクションノードに対する接続の許可設定として、IAMによるアクセスコントロール、またはFirewall rulesによるIPアドレス範囲の制限が可能です。

コントラクトのデプロイ

今回デプロイするコントラクトには、オープンソースとして公開されているALISのトークンコントラクトを使います。
デプロイはEthereumの開発ツールのTruffleを使って行います。Azure Blockchain Serviceで使われているQuorumブロックチェーンが、Ethereumのエコシステムをそのまま利用出来るという点は、大きなメリットです。
デプロイの流れは基本的にEthereumにコントラクトをデプロイする時と同様ですので、詳細はここでは割愛します:pray:

デプロイにあたり、truffle-config.jsを編集します。

truffle-config.js
var Web3 = require("web3");
module.exports = {
  networks: {
    development: {
      provider: new Web3.providers.HttpProvider("https://member12345.blockchain.azure.com:3200/アクセスキー"),
      network_id: "*",
      gas: 5000000,
      gasPrice: 0,
    }
  }
};

メンバーアカウントのアンロック

コントラクトをデプロイする前に、メンバーアカウントをアンロックする必要があります。アンロックは以下のJSON RPCリクエストで行えます。

$ curl -X POST -H "Content-Type:application/json" --data '{"jsonrpc":"2.0","method":"personal_unlockAccount","params":["メンバーアカウントのアドレス", "メンバーアカウントに設定したパスワード", アンロックする秒数],"id":1}' "https://member12345.blockchain.azure.com:3200/アクセスキー"
{"jsonrpc":"2.0","id":1,"result":true}

デプロイ

$ truffle deploy
Using network 'development'.

Running migration: 1_initial_migration.js
  Deploying Migrations...
  ... 0x86fd31820ca0e43c79a72ef6b3d2a686461b42142e611de7e1b060084152de64
  Migrations: 0x132364b78fb0a7108fd2868dd362a67a9e6a48a8
Saving successful migration to network...
  ... 0xdcd24af063d07a4be577ddd69cfb563980d5fae8e1afec7d0ed35fa15860860d
Saving artifacts...
Running migration: 2_deploy_contracts.js
  Deploying AlisToken...
  ... 0xcaf88f603e8ac96188484e33b3f1f8d3fc5e47d05cf74b3d455f0b0c137777ca
  AlisToken: 0xdbf7355b30598f24107c05076eed0aa69f028048
Saving successful migration to network...
  ... 0x2e77575f898c78938d32a3b57bf5b8d23226a1ad184c0313276e6925cad41055
Saving artifacts...
✨  Done in 25.06s.

(使っているTruffleのバージョンが古いですね:sweat_smile:

かなり割愛してしまいましたが、以上でコントラクトのデプロイが完了です。

コントラクトのメソッド呼出し

デプロイしたコントラクトに対して、web3.jsを使ってやりとりを行います。試しに、トークンのシンボルを取得してみます。

get_symbol.js
const Web3 = require("web3");
const provider = new Web3.providers.HttpProvider("https://member12345.blockchain.azure.com:3200/アクセスキー");
const web3 = new Web3(provider);
const jsonInterface = [{
  "constant": true,
  "inputs": [],
  "name": "symbol",
  "outputs": [{
    "name": "",
    "type": "string"
  }],
  "payable": false,
  "stateMutability": "view",
  "type": "function"
}];
const tokenContract = new web3.eth.Contract(jsonInterface, "0xdbf7355b30598f24107c05076eed0aa69f028048");
tokenContract.methods.symbol().call().then(console.log);

実行

$ node get_symbol.js
ALIS

以上、簡単にですがweb3.js経由でコントラクトとやりとり出来ることが確認出来ました。

おわりに

Azure Blockchain Serviceで構築したブロックチェーンに対して、Truffleを使ってコントラクトをデプロイし、web3.js経由でコントラクトとやりとりを行いました。
QuorumブロックチェーンがEthereumベースで、Ethereumのエコシステムをそのまま利用出来るため、Ethereumでの開発経験あれば学習コストはほぼ掛からないかと思います。

さて、次回の記事ではAzure Blockchain Serviceのメトリクス周りや、ブロックチェーンのエクスプローラーについて説明していきます:wave:

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?