0
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 1 year has passed since last update.

[Solidity] スマートコントラクトを作成し実行する

Posted at

はじめに

イーサリアムを勉強し始めたら、「スマートコントラクト」という壁にぶち当たります。

スマートコントラクトとは?

スマートコントラクトは、ある条件が満たされたときに自動的に実行されるコンピュータコードに契約をデジタル化したものです。ブロックチェーンに記録されるため、契約内容の改ざんが困難で、取引記録の透明性が高く、仲介者が不要なためコストの削減が可能です。これらの特性により、信頼性とセキュリティが高く、効率的な契約や取引が実現されます。スマートコントラクトは、イーサリアムのようなブロックチェーンネットワークで広く使用されています。イーサリアムはスマートコントラクト機能を持つ代表的なブロックチェーンプラットフォームで、金銭取引だけでなく、契約の自動実行など多様な用途に利用されています。例えば、イーサリアム上で動作する分散型金融アプリケーションや自律分散型組織(DAO)などが、スマートコントラクトの実用的な応用例として挙げられます。

実行環境

  • Macbook (Mac OS)
    • homebrewがすでにインストールされていること
  • cpp-ethereum を使用

solidityとは?

Solidityとはプログラミング言語の名前で、Ethereumのブロックチェーン上で動作するプログラム(コントラクト)を記述することができるプログラミング言語です。

SolidityはC++、Python、JavaScriptを参考に、Ethereum Virtual Machine(EVM)の操作を目的に作られています。Solidityは静的言語で継承やライブラリ、ユーザーが定義した複雑な型をサポートします。
Solidityで投票やクラウドファンディング、匿名のオークションやマルチシグウォレットなどを作成することができます。

コントラクトをデプロイする際には最新バージョンのSolidityを使うことが推奨されています。

開発環境の構築

macbookの場合、brewコマンドで基本的にはインストールなどが行えます。

$ brew update
$ brew upgrade
$ brew tap ethereum/ethereum
$ brew install solidity

brew tapとは公式以外のリポジトリをフォーミュラとしてHomebrewに追加するもので、brewのもとでinstall,uninstall,updateなどが行えます。もちろん自分が公開しているものも簡単に追加できます。

brew tapとは - Qiita より

solcがインストールされたのかを確認する

$ solc --version

// 出力結果↓
solc, the solidity compiler commandline interface
Version: 0.8.23+commit.f704f362.Darwin.appleclang

環境変数PATHに設定されているディレクトリを順番に調べて、最初に見つかった実行ファイルを表示するコマンドwhichをでpathを調べます。

$ which solc
/usr/local/bin/solc

コントラクト・コードのコンパイル

"Hello Wolrd"を出力するためのコードを書いてみましょう。
そもそもですが、solidityの拡張子は "xx.sol" になります。

terminal(hello.solを作成)
$ touch hello.sol

基本的なコントラクトを定義する構文は以下のようになります。

contract.sol
contract Contract名 {
   //スマート・コントラクトで行う処理をここに記述
}

これを基にして、hello.solでhello worldを表示するコントラクト・コードを書いてみました。

hello.sol
contract HelloWorld {
    string public greet = "Hello World!";
}

これをhello.solを実行してみます。

terminal(コンパイル実行)
$ solc --abi --bin hello.sol

出力結果 ↓

======= hello.sol:HelloWorld =======
Binary:
60806040526040518060400160405280600c81526020017f48656c6c6f20576f726c642100000000000000000000000000000000000000008152505f90816100479190610293565b50348015610053575f80fd5b50610362565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806100d457607f821691505b6020821081036100e7576100e6610090565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026101497fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261010e565b610153868361010e565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61019761019261018d8461016b565b610174565b61016b565b9050919050565b5f819050919050565b6101b08361017d565b6101c46101bc8261019e565b84845461011a565b825550505050565b5f90565b6101d86101cc565b6101e38184846101a7565b505050565b5b81811015610206576101fb5f826101d0565b6001810190506101e9565b5050565b601f82111561024b5761021c816100ed565b610225846100ff565b81016020851015610234578190505b610248610240856100ff565b8301826101e8565b50505b505050565b5f82821c905092915050565b5f61026b5f1984600802610250565b1980831691505092915050565b5f610283838361025c565b9150826002028217905092915050565b61029c82610059565b67ffffffffffffffff8111156102b5576102b4610063565b5b6102bf82546100bd565b6102ca82828561020a565b5f60209050601f8311600181146102fb575f84156102e9578287015190505b6102f38582610278565b86555061035a565b601f198416610309866100ed565b5f5b828110156103305784890151825560018201915060208501945060208101905061030b565b8683101561034d5784890151610349601f89168261025c565b8355505b6001600288020188555050505b505050505050565b6102138061036f5f395ff3fe608060405234801561000f575f80fd5b5060043610610029575f3560e01c8063cfae32171461002d575b5f80fd5b61003561004b565b6040516100429190610160565b60405180910390f35b5f8054610057906101ad565b80601f0160208091040260200160405190810160405280929190818152602001828054610083906101ad565b80156100ce5780601f106100a5576101008083540402835291602001916100ce565b820191905f5260205f20905b8154815290600101906020018083116100b157829003601f168201915b505050505081565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561010d5780820151818401526020810190506100f2565b5f8484015250505050565b5f601f19601f8301169050919050565b5f610132826100d6565b61013c81856100e0565b935061014c8185602086016100f0565b61015581610118565b840191505092915050565b5f6020820190508181035f8301526101788184610128565b905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806101c457607f821691505b6020821081036101d7576101d6610180565b5b5091905056fea264697066735822122013a9f52bf096edea0c506bad2c5d62064bd9490a874378c56b46cd68cac6a18264736f6c63430008170033
Contract JSON ABI
[{"inputs":[],"name":"greet","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

こんなふうなよくわからん文字列が出てきます。

とりあえず、バイナリが吐けたので、今回はここまで。

0
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
0
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?