Solidity勉強で役に立ったサイトまとめ
コピー渡し、参照渡し
・関数の引数に配列を渡すときは、(渡す配列がmemoryだろうとstorageだろうと)引数の宣言がmemoryだとコピー渡し、storageだと参照渡しになる。
・structのコンストラクタはコピー渡し。なので、structの実体がstorageであれば、初期化時点でmemoryがstorageにコピーされる。
public変数は自動で取得関数(ゲッター)が生成される。
ただし、配列やmappingは要素一つずつのゲッターは生成されるが、全体を取得するゲッターは自動生成されない。
また、structも要素一つずつについて自動生成されるが、配列やmappingが子要素の場合は自動生成されないし、もちろん全体を返すゲッターも自動生成されない。
配列全体,Struct全体を取得するゲッターは自分で作成可能。
配列、Structは関数の返り値にできるので全体をを返すゲッターを自分で作る事はできる。
Mapping全体を取得するゲッターは工夫がいる。
mappingはinternalとprivate関数のみしか返り値として利用できないため、internalとprivateでしかゲッターは作れない(publicなゲッターを作るためには配列やStringになおすなどの工夫が必要)。
stringの連結やlength、splitはこのライブラリを使えばできそう。
addressやuint256をstringに変更するのは以下のサイトが参考になる。
動的配列は基本、関数によって返すことができない。
唯一の例外は、関数の外で定義されたStorage動的配列のみ。
関数内では動的配列を定義することはできないし、memory配列は固定長のみ。
ETHを送金するアドレスは、addressではなくて、address payableでなくてはだめ。
addressをaddress payableにキャストするにはpayable(address)としてやればいい。
RemixでのJavaScript実行サンプル
Remixでのデメリット:
eventをjavascriptで受け取れないっぽい
よくソースコードが消える。
バックアップ機能が動かない
HardHatでWeb3
npm install --save-dev @nomiclabs/hardhat-web3 web3
を実行し、
hardhat.config.jsに require("@nomiclabs/hardhat-web3"); を記入
することで、scriptでweb3が使えるようになる。
HardHatでopenzeppelinのインストール
Discussion
自分用のメモのためのページだったので雑だったんですけど、意外に読まれてるので多少読みやすくしました。
誠に有難うございました。とても勉強になりました