2020/06/21

[sol]Solidityのこと

なぜ日本語には、「以上」「以下」は対であるのに「未満」の対はないのだろうか・・・。
あったとしても私は聞いたことがないので、あまり普及はしていないだろう。

 

と、本題とはまったく関係ない文章から始まってしまったが、今日はSolidityの学習だ。
細かいところは全部省略する。


Solidity v0.6.10を見る。

Solidity — Solidity 0.6.10 documentation
https://solidity.readthedocs.io/en/v0.6.10/index.html

 

1行目

SPDXを何かしら指定する。

// SPDX-License-Identifier: UNLICENSED

 

2行目

pragmaで対応solcバージョンを指定する。

 

範囲指定

pragma solidity >=0.4.21 <0.7.0;

指定バージョン以上、次バージョン未満(メジャーバージョンやマイナーバージョンの変更がある手前まで?)

pragma solidity ^0.6.11;

 

他にも、構造体を戻り値にしたいpragmaなどある。

 

import

使いたい外部パッケージなど。
残念ながらrequire()はない。
truffle compileなどを使っているとパスの指定はそこまで考えなくて良くなるので助かる。OpenZeppelinとか。

 

本体

これ以降が本体。

 

コメント

//と/* */が使える。
doxygenと同じ感じで、///や/** */もある。
コマンドはdoxygenではなくNatSpecフォーマットというもののようだ。
コンパイル時にうまいことドキュメントにしてくれたりするので、独自でやるよりは従った方が良かろう。


contract, interface, libraryのどれか。
ブロックチェーンに上げられたものは全部見えるので、publicとかprivateとかはない。
変数や関数になるとそういうのが出てくるが、あくまで言語的なアクセスについてだけで、ブロックチェーン的に隠したりとかはチェーンにそういう機能がない限りできない。

 

contractは、他の言語で言うところのclassっぽいもの。
継承もできる。
デプロイがインスタンスを作る作業で、コントラクトアドレスがインスタンスのアドレスと思っておけばいいだろう。

 

abstract contract、というものもあるようだ。
interfaceもあるのだから、どっちかいらないんじゃないかという気もするのだが、作りたいものによっては便利なのかもしれない。

 

libraryはcontractと同じようにデプロイできるのだが、単なる関数の集まりみたいなもので、コンテキストは呼び出し元に依存する。
それだけならよかったのだが、どうもthisが使えるらしいし、呼び出し元のコントラクトのストレージにも触れるようだ。

やらかしてしまいそうなのであまり使いたくないのだが、使いたくなるシーンが出てくるのだろう。
ここら辺は要勉強だ。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。

注: コメントを投稿できるのは、このブログのメンバーだけです。