數(shù)學(xué)和密碼函數(shù)

2022-05-12 17:02 更新
addmod(uint x, uint y, uint k) returns (uint)

計算在哪里以任意精度執(zhí)行加法并且不會在 (x + y) % k2**256k != 0

mulmod(uint x, uint y, uint k) returns (uint)

計算在哪里以任意精度執(zhí)行乘法并且不會在 處回繞。斷言從版本 0.5.0 開始。(x * y) % k2**256k != 0

keccak256(bytes memory) returns (bytes32)

計算輸入的 Keccak-256 哈希

筆記

曾經(jīng)有一個keccak256被調(diào)用的別名sha3,在 0.5.0 版本中被刪除。

sha256(bytes memory) returns (bytes32)

計算輸入的 SHA-256 哈希

ripemd160(bytes memory) returns (bytes20)

計算輸入的 RIPEMD-160 哈希

ecrecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) returns (address)

從橢圓曲線簽名中恢復(fù)與公鑰關(guān)聯(lián)的地址或在錯誤時返回零。函數(shù)參數(shù)對應(yīng)簽名的 ECDSA 值:

  • r= 簽名的前 32 個字節(jié)

  • s= 第二個 32 字節(jié)的簽名

  • v= 簽名的最后 1 個字節(jié)

ecrecover返回一個address,而不是一個。請參閱應(yīng)付轉(zhuǎn)換地址,以防您需要將資金轉(zhuǎn)移到恢復(fù)的地址。address payable

有關(guān)更多詳細(xì)信息,請閱讀示例用法

警告

如果您使用ecrecover,請注意可以將有效簽名轉(zhuǎn)換為不同的有效簽名,而無需知道相應(yīng)的私鑰。在 Homestead 硬分叉中,此問題已針對 _transaction_ 簽名(請參閱EIP-2)進(jìn)行了修復(fù),但 ecrecover 功能保持不變。

這通常不是問題,除非您要求簽名是唯一的或使用它們來識別項目。OpenZeppelin 有一個ECDSA 幫助程序庫,您可以將其用作包裝器而ecrecover不會出現(xiàn)此問題。

筆記

在運行或在私有區(qū)塊鏈sha256上運行時,您可能會遇到 Out-of-Gas。這是因為這些功能是作為“預(yù)編譯合約”實現(xiàn)的,并且只有在它們收到第一條消息后才真正存在(盡管它們的合約代碼是硬編碼的)。不存在的合約的消息更昂貴,因此執(zhí)行可能會遇到 Out-of-Gas 錯誤。此問題的解決方法是先將 Wei(例如 1)發(fā)送到每個合同,然后再將它們用于實際合同。這在主網(wǎng)上或測試網(wǎng)上都不是問題。ripemd160ecrecover


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號