【Web担当者におすすめ】Solidityでのスマートコントラクトプログラミング | 千葉で集客ホームページ制作はティーエスフォート
コラム

【Web担当者におすすめ】Solidityでのスマートコントラクトプログラミング

【Web担当者におすすめ】Solidityでのスマートコントラクトプログラミング

ビットコインに次ぐ2番目に規模の大きい暗号通貨がイーサリアムです。

イーサリアムの中でとても重要なのがスマートコントラクトです。

この記事では、スマートコントラクトのサンプルコードを使いながら、ご紹介していきます。

はじめに

ビットコインに次ぐ2番目に規模の大きい暗号通貨がイーサリアムです。

イーサリアムの中でとても重要なのがスマートコントラクトです。

この記事では、スマートコントラクトのサンプルコードを使いながら、ご紹介していきます。

ブロックチェーンの基礎

ブロックチェーンはグローバルにシェアされたトランザクションのデータベースです。

つまり誰でもネットワークに接続するだけでこのデータベース上の項目を読み込むことができます。

もしデータベース上の何かを変えたいときはいわゆるトランザクションを発行し、他の全員の同意を得る必要があります。

トランザクションという言葉はあなたがしたい変更がその両方ともが変わらないか、両方とも変更されることを意味しています。

さらに、トランザクションがデータベースに登録されている最中に他のトランザクションはそのトランザクションを変更することはできません。

スマートコントラクトのサンプルコード


pragma solidity >=0.4.0 <0.6.0; //①

contract SimpleStorage {
uint storedData;

function set(uint x) public {
storedData = x;
}

function get() public view returns (uint) {
return storedData;
}
}


コードの解説です。


Solidityバージョン0.4.0もしくはそれより新しいものであればこのソースコードが機能を損なわず動作するバージョンで書かれていることを示しています(0.6.0未満のバージョンまで)。これはこのコントラクトが新しいバージョンのコンパイラでは異なる挙動をする恐れがあるため、コンパイルできないことを明らかにするためです。

pragmaはソースコードをどの様に取り扱うかコンパイラに指示するための一般的な命令です。

サブ通貨の例

以下のコントラクトは最も単純な仮想通貨を扱います。

コインを0から生成することは可能ですが、コントラクトの作成者だけが実行可能です。さらにユーザー名やパスワードの登録無しに誰でもお互いにコインを送ることができます。

必要なのはイーサリアムのキーペアだけです。


pragma solidity ^0.5.0;
contract Coin {
address public minter; //①
mapping (address => uint) public balances; //②
// イベントは軽量クライアントが変更に対する反応を
// 効率的に行うことを可能にします。
event Sent(address from, address to, uint amount); //③
// これはコントラクトが作られた時にだけ動作する
// コンストラクタです。
constructor() public {
minter = msg.sender;
}
function mint(address receiver, uint amount) public {
require(msg.sender == minter);
require(amount < 1e60);
balances[receiver] += amount;
}
function send(address receiver, uint amount) public {
require(amount <= balances[msg.sender], "Insufficient balance.");
balances[msg.sender] -= amount;
balances[receiver] += amount;
emit Sent(msg.sender, receiver, amount);
}
}


ソースコードの解説をしていきます。


パブリックにアクセス可能なアドレス型の変数を宣言しています。
public というキーワードはコントラクトの外側から変数の中身にアクセスできる様にします。


addressに符号無しのinteger型を割り当てます。


send ファンクションの最終行でemitされています、いわゆる"event"を宣言しています。

eventを実行するときはemitをつける必要があります。

ユーザーインターフェースは多くのコストを支払わずにブロックチェーン上でemitされたそれらのイベントをリッスンすることができます。

emitされるとすぐにlistenerは from 、to そして amount を引数として受け取り、トランザクションを追跡するのに役立ちます。

まとめ

スマートコントラクトを理解することはイーサリアムのプログラミングにおいてとても重要なことです。

サンプルコードを参考にして、コーディングできるようになりましょう。

関連記事

ページ先頭へ