VersionField

https://github.com/zcom-cloud-blockchain/solidity/blob/master/contracts/VersionField.sol

概要

対象コントラクトのフィールド部分を保持するクラスの親クラスになります。

VersionField

前後のバージョンのアドレスを保持していて、バージョンアップ時に、古いバージョンで登録されたデータ群のシームレスなバージョンアップをサポートします。

サブコントラクト実装方針

  • 呼出元の限定

    各Field実装は、ContractNameService#isVersionLogic() を使用して呼出元を限定する処理を実装する必要があります。

    (上記の図では、呼び出し元をCNSに"Someone"として登録されたコントラクトのLogicに限定する必要がありいます。)

  • コントラクトの継承方針

    バージョンアップにより、次のバージョンをリリースする際には、前のバージョンを継承『しない』ようにします。

    これは、継承によるロジック肥大化の問題 対応するためで、各バージョンを分割して個々のコントラクトのサイズを抑えます。

  • アクセッサの準備(getter/setter)

    将来のバージョンアップ時にデータにアクセスする必要があった場合に、アクセッサがないと処理できなくなってしまいます。

    アクセス元は信頼できるLogicクラスに限定されているため、Fieldの実装時には最初から全てのフィールドにアクセッサを用意しておきます。

  • バージョンアップ対応

    各フィールドのアクセス時に、対象のIDのデータがバージョンアップによって古いデータになっていないか確認する必要があります。

    getterの場合はデフォルト値の返却ロジック、setterの場合はバージョンアップの処理(バージョンアップで追加されたフィールド(age, someFieldなど)へのデフォルト値の設定など)を実装しておく必要があります。

参考となる実装クラス

results matching ""

    No results matching ""