Skip to content

ret2chain

Solidity 0.8.11

Solidity 0.8.11がリリースされた。主な新機能はLanguage ServerとABIエンコーディングの安全な実行の2つ。

Language Server

Language Serverとは、ソースコードを解析して様々な情報や機能を提供するサーバーのことで、主にIDEやコンパイラなどに自動補完や定義参照などを提供する。Language Server Protocol (LSP)はこのLanguage Serverの開発運用を統一化するプロトコルで、各IDEごとに対して各言語ごとにLanguage Serverを実装するのではなく、全てのIDEに対して一つの言語のLanguage Serverを作ることで相互運用性を高めるものである。

Solidity 0.8.11では最小限の機能を持つLSPの実装が提供された(Implement LSP / Language Server · Issue #7763 · ethereum/solidity)。2022年のQ1の間に「定義へのジャンプ」「リネーム」「すべての参照を検索」「カーソルを置いたときのドキュメントの表示」「セマンティックハイライト」などの機能を提供する予定になっている。

ただしLSPに求められる代表的な機能である自動補完は、不完全なコードの内部でシンボルの検索や型の解決を行わなければならないため実装が複雑であり、機能の提供はまだ先になる予定である。

現在LSPはnpmなどを使わず直接インストールされたネイティブなSolidityに対してのみ対応している。

Qt Creatorであれば「Tools」→「Options」→「Language Client」から「Add」をクリックしsolcの実行ファイルへのパスを--lspオプションでありで追加すれば良い。

Vim/Neovimであればcocプラグインをインストールし、coc-settings.jsonに以下を記述する。

{
    // ...
    "languageserver": {
        // ...
        "solidity": {
            "command": "/path/to/solc",
            "args": [ "--lsp" ],
            "rootPatterns": [".git/"],
            "filetypes": ["solidity"]
        }
    }
}

VSCodeであれば現在はBuiltin Solidity Language Server - DEV Communityを使用して試せるのみで、将来的には既存のSolidityプラグインに追加されることが期待される。

abi.encodeCallの追加

引数の型チェックを行うABIエンコードされたファンクションコールデータを返すビルトイン関数abi.encodeCallが追加された。既にあるabi.encodeWithSelector関数は、引数の型チェックを行わないもので、abi.encodeCallの登場により安全にコールデータをABIエンコードすることが可能になった。