Solidity Libraries
#Solidity #EVM
Internal Functions in Libraries
コンパイル時に、そのコントラクトが呼んでいるライブラリのinternal関数は、そのコントラクトにコピーされinternal関数としてJUMPで呼ばれる
ライブラリの関数が全てinternalの場合はそのライブラリはデプロイされない
Call Protection For Libraries
DELEGATECALL, CALLCODEではなくCALLで、viewでもpureでもない関数が呼ばれた場合revertする
DELEGATECALL, CALLCODEなのかCALLを判別するべく、デプロイ時に自身のアドレスが登録され、ADDRESSで得られるアドレスと比較している(ライブラリのコードは常に自身のアドレスをPUSHするところから始まる)
参考
Solidity docs libraries