🕔

EIP-6372について読む

2024/08/15に公開

多くのコントラクトが時間へ依存することがあり、歴史的な時間データを保存するニーズがあるが、それに関するスタンダードがほとんどない状況である。

とあるコントラクトがtimestampへ依存し、とあるコントラクトがblocknumberへ依存することが多々あります。このEIPはこれをスタンダード化してコントラクト双方のコンポザビリティを促進するためのものとされている。このように、EIP6372は時間依存周りを規定をするためのEIPである。

このEIPは以下のインターフェースを規定している。必ずこれらの関数を実装することが求められる。


interface IERC6372 {
  function clock() external view returns (uint48);
  function CLOCK_MODE() external view returns (string);
}

clock

function clock() external view returns (uint48);

この関数は今の時間を返すためのもの。この関数は数字が増加する関数でなければならない。例:block.timestamp, block.numberなどがある。

CLOCK_MODE

function CLOCK_MODE() external view returns (string);

これは今の時間を記録するモードを返すための関数。タイムスタンプ、ブロック番号、または他の時間計測方法のいずれかが返ってきます。

この情報は機械可読な文字列形式で提供され、JavaScriptでnew URLSearchParams(CLOCK_MODE)を用いてデコードできる形式でなければなりません。
この関数を使用することで、他のスマートコントラクトやプログラムが、正確な時間情報を理解できるようになります。

実装例

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.18;

/**
 * @title TimestampClock
 * @dev An implementation of the EIP-6372 interface that uses timestamps as the time representation.
 */
contract TimestampClock {
    /**
     * @notice Returns the current block timestamp as the contract's time representation.
     * @return uint48 The current block timestamp.
     */
    function clock() external view returns (uint48) {
        return uint48(block.timestamp);
    }

    /**
     * @notice Returns the time mode the contract is using.
     * @return string The mode of the clock, indicating "mode=timestamp" for this contract.
     */
    function CLOCK_MODE() external pure returns (string memory) {
        return "mode=timestamp";
    }
}

参考

https://qiita.com/cardene/items/eacc6a32cbac790df52d

Discussion