Solidity
https://gyazo.com/0f813826ff3eb11e6b14543774b7e169
Solidity — Solidity 0.5.11 documentation
言語特徴
JavaScriptに似てる
コンパイラ言語
注意
バージョン記述
contract コントラクト
オブジェクト指向 Object-Oriented言語のclass クラスみたいなもの
uint符号なし整数
関数
アクセス修飾詞
public extaernalは、誰が実行すべきかのか確認すること
デフォルトprivateにして、必要な時だけpublic
internal
privateと同じだが、このcontract コントラクトから継承 Inheritanceしたコントラクトにもアクセスできる
external
publicと同じだが、コントラクトの外からだけ呼び出すことができる
privateは、原則_ (アンダーバーつける)
view関数 読み取り専用
pure関数 アプリから読み込み不可 戻り値が関数パラメーターに依存
実行
外部の呼び出し元から関数を実行しなければならないという決まり
その際よくmsg.sender(関数呼び出し者のアドレス) を使う
関数修飾詞 modifire
別ファイルで書いて、コントラクトに継承 Inheritance
例: owner情報で実行可能分岐(セキュリティ面で重要🤚)
_;
いろんな関数
fallback関数
event (sol)
Blockchain ブロックチェーンで何かが生じたときに、コントラクトがアプリのフロントエンドに伝えることができる
'listening'状態 接続待ち
例外処理 exception handling
mapping マッピング (連結リスト Linked list 連想配列 辞書 object)
mapping(key => value) public ステート変数名;
例 mapping (address => uint) balances;
例外処理 exception handling
比較
文字同士の比較できない Keccak256でハッシュ化して比較
keccak256(_name) == keccak256("Vitalik")
変数
storage
memory
型
address型
EOA 外部所有アカウントやCA コントラクト アカウントの20バイト長のアドレスを格納する型
balance型
Ether イーサの量の値を取得するさいに使う
transfer型
メモリ、ストレージ、スタック
メモリ
プログラム実行用の一時的な値を保存するために使う
引数はデフォルトで保持
ストレージ
全ての状態変数は保持される
複数の関数呼び出しの間でも永続的に保持される
デメリット
非常にGasがかかる
スタック
ローカル変数をほぼ無料で保持可能
使用量に制限あり
struct array mapping以外のローカル変数はスタックに保存
solidity の memory とか storageというkeywordが実際に何をしているのか - Qiita
暗号関数
詳しく
interface
別のコントラクトとやりとり
関数自体は定義しない。呼び出すだけ
interface 使用
indexed
parameterにindexedというmodifierを付与
そのparameterでもEventを絞り込む事ができる
TransactionReceipt内のlog.topics[]に記述される
indexedが無いものは、log.data[]の中に記述
Eventにつけるindexedの役割 - アルゴリズムとかオーダーとか
セキュリティ
SafeMath ライブラリ
オーバーフロー、アンダーフローを防ぐOpenZeppelinのライブラリ
オーバーフロー
限界よりも大きい数字をいれようとして、以上が発生した状態
111 +1 = 000
アンダーフロー
計算結果が小さくなりすぎてコンピュータが表現できなくなった状態
000 - 1 = 111
デバッグ
増やす!!!!!
code:soli.sol
//関数
function eatHamburgers(string _name, uint _amount) private returns (string){
return hoge
}
困りごと
vscode VsualStudioCodeにて
import "openzeppelin-solidity/contracts/ownership/Ownable.sol";
vscodeにsource無いと怒られる
再度vscodeに入ると無くなった。
補間機能もっと欲しい🤚
参考
2018年のEthereum開発者が知るべきツールのリスト - Qiita
ConsenSys/smart-contract-best-practices: A guide to smart contract security best practices
fravoll/solidity-patterns: A compilation of patterns and best practices for the smart contract programming language Solidity