truffle/contract の仕組みを追う
@truffle/contract の仕組みを知る必要があったのでコードを読んだときのメモです
メモ
- artifacts.require
- Contract クラス的なオブジェクトが返される
- require の実装はここ
- Contract.deployed
- デプロイされた Contarct インスタンス的なオブジェクトが返される
- deployed の実装がどこにあるか見つからなかった
- 実装の中身は https://github.com/trufflesuite/truffle/blob/2b247527f3d3c402f98ae1a968994e3ffcbf56be/packages/contract/lib/contract/index.js#L17
- プロパティに色々継ぎ足しているので読みにくい…
- https://github.com/trufflesuite/truffle/blob/3aaa6a8b8bc2dbac44a69d55138535590c404e04/packages/contract/lib/contract/constructorMethods.js#L11 は Contract クラスのプロパティっぽい
@truffle/contract
の型定義@truffle/contract
は型定義ファイルが同梱されている- 実態は
@truffle/contract-schema
- json-schema-to-typescript を使って json schema から自動生成されている
- 型が間違っている
- デプロイされたコントラクトの address は
contract.networks["mainnet"].address;
からしか取得できないと型は主張しているけど、実際はcontract.address
から取得できる
- デプロイされたコントラクトの address は
感想
- 実装がかなり追いにくい…
- ES にクラスが追加される以前のコードってみんなこんな感じだったんだろうか
- 型が嘘をついている
- 実装と型が別だと乖離していくのかなあ
- この界隈型に対する興味関心が薄い感じがする…
- ここまで自明なものが残ってるとはって感じ