Contract-Design

什麼是 Identity 函式,它的用途是什麼?

  • January 6, 2019

地址0x04的合約是身份函式。它是什麼以及它的案例是什麼?

Identity 函式只返回其輸入的任何內容

在 Vitalik Buterin 的一次演講中,它用於高效的數據複製


每 32 個字節的輸入數據(向上取整)花費 15 gas + 3 gas。

它是位於地址 4的預編譯合約。

正如Gavin Wood(又名“黃皮書”)編寫的乙太坊正式規範第 18 頁所定義的那樣,有 4 個預編譯合約映射到乙太坊區塊鏈中的地址 1-4,如下Pyeth 片段所示

specials = {
   decode_hex(k): v for k, v in
   {
       '0000000000000000000000000000000000000001': proc_ecrecover,
       '0000000000000000000000000000000000000002': proc_sha256,
       '0000000000000000000000000000000000000003': proc_ripemd160,
       '0000000000000000000000000000000000000004': proc_identity,
   }.items()
}

前 3 個函式是 ECDSARECOVER、RIPEMD-160 和 SHA2-256。第四個功能是“身份功能”](https://en.wikipedia.org/wiki/Identity_function)。恆等函式“簡單地將輸出定義為輸入”。

來自黃皮書: 黃皮書 pg。 18

預編譯合約的地址需要一點點乙太幣,這樣呼叫它們就更便宜了。對不存在的帳戶的消息呼叫更昂貴,因此我們不想讓開發人員在網路一開始就可以為初始化帳戶支付費用。

更新:自拜占庭以來,還有 4 個預編譯合約:模冪、alt_bn128 加法、alt_bn128 標量乘法和 alt_bn128 配對檢查,地址分別為 0x05、0x06、0x07 和 0x08。

引用自:https://ethereum.stackexchange.com/questions/441