前回に引き続きスマートコントラクトの解説です。
前回↓
ソースコードの解説
gist06f95217977eeeae42522f97014fb1c0
solidityはjavascriptライクな言語らしいです(JS触ったことないので分からない)。
インデントはスペース4つです。
(Remixなら自動補完のはず)
また、変数定義などの処理の後ろには「;」が必要です。
1行目から見ていきます。
これはsolidityのバージョン指定です。
範囲指定もできます(「>=0.4.22 <0.6.0」とか)。
2行目でcontractを作成しています。
contractが1つのプログラムの単位だと考えて大丈夫だと思います。
(2行目から13行目までが1つのcontract)
3行目で変数を宣言しています。
変数は「データ型 変数名;」で宣言します。
(保存タイプを指定する時は「データ型 保存タイプ 変数名;」)
同時に値を代入する場合は「データ型 変数名 = 値;」になります。
代入しない場合は初期値になります。
初期値の一覧の参考:
What are the initial/zero values for different data types in Solidity? - Ethereum Stack Exchange
変数のデータの保存方法についてはいくつかのタイプがあります。
参考:
Introduction to Smart Contracts — Solidity 0.5.4 ドキュメント
- storage - ブロックチェーンにデータを書き込み/読み込みする(コスト高)
- memory - メモリ上でデータを扱う(コスト中)
- その他(使うことは少ない)
関数の外で宣言しているので自動的にstorageになります。
storageだとデータが永続的に保存され(ブロックチェーンに書き込まれ)ます。
関数のタイプ一覧:
4から6、7から9、10から12行目で関数を作成しています。
記法は「function(引数の定義) 修飾子 returns(返すデータの定義) {処理の中身}」です。
修飾子の一覧(わかりやすく纏まっています)
Solidityのfunction修飾子がよくわからなくなるのでメモ - Qiita
まずは関数「pureHelloWorld」を見ていきます。
引数はありません。修飾子は「public」と「pure」です。
publicなのでどこからでも呼び出せる関数です。
また、pureなので変数を一切読み書きできません。
returnsは「string memory」です。これは5行目の「return "hello world"」が対応しています。
次に関数「readStrData」です。
引数はありません。修飾子は「external」と「view」です。
externalなので外部から呼び出し可能、viewなので変数の読み込みが可能です。
returnsは「string memory」です。これは8行目の「return data」が対応しています。
この「data」は3行目で宣言した変数です。
最後に関数「sendStrData」です。
引数は「string memory sendData」なので文字列ということになります。「sendData」という名前で関数内で参照できます。
修飾子はpublicのみなのでどこからでも呼び出せますし、「view」や「pure」等がついていないので変数の読み書きができます。
returnsはないので返されるデータはありません。
11行目で3行目で宣言した「data」に引数のデータである「sendData」を代入しています。この操作では「data」がstorageなので新しいデータがブロックチェーンで永続的に保存されます。
最後に
今更ですが、自分も独学(ネット情報)でsolidityを学んでいるので間違っているかもしれません。
誤り等あればコメント欄でお願いします。
VIPSウォレットへのデプロイは次回に変更になります。
VIPSでスマコン使うサービスができてほしいなぁ...(その前にVIPSが終わりそう)
前 ↓
次→まだ
ブログランキング
投げ銭
VIPSアドレス:VGeWZ76u5V1byPtLHyNjDCXRSu48NxmH8c
ヌクモリンク:このブロガーに1000 VIPS を送る!
(ヌクモリンクの導入はここからどうぞ)
Discord
[VIPSTARCOIN]
[VIPSフリマ・オークション](当ブログの発祥地)