跳至主要內容
本頁面使用機器翻譯自英語,可能包含錯誤或不清楚的語言。如需最準確的信息,請參閱英文原文。由於更新頻繁,部分內容可能與英文原文有出入。請加入我們在 Crowdin 上的努力,幫助我們改進本頁面的翻譯。 (Crowdin translation page, Contributing guide)

簽名

在 "r、s、v "和 "壓縮字符串 "格式之間轉換籤名。

web3py_ext導入bytes_to_hex_strhex_str_to_bytes

要將 {r,s,v} 簽名轉換為字符串,請定義 r,s,v 格式的簽名,然後使用 hex_str_too_bytes 將每個組件轉換為 bytes 格式。

按 "r + s + v "的順序連接組件,並將結果字節轉換為 "字符串"。

要將 string 簽名轉換為 {r,s,v},請定義字符串格式的簽名

使用 hex_str_too_bytes 將字符串簽名轉換為`字節

從簽名字節中提取 "R 前 32 個索引"、"S 後 32 個索引 "和 "V 最後一個索引

您可以使用 bytes_too_hex_str()hex() 將每個組件轉換回字符串

signature_convert.py

from web3py_ext import bytes_to_hex_str, hex_str_to_bytes
def rsv_to_signature_string(r, s, v):
# Concatenate r, s, and v to form a 65-byte signature
signature = r + s + v
return bytes_to_hex_str(signature)
def signature_string_to_rsv(signature_str):
# Convert the signature string to bytes (remove '0x' if present)
signature = hex_str_to_bytes(signature_str)
# Extract r (first 32 bytes), s (next 32 bytes), and v (last byte)
r = signature[:32]
s = signature[32:64]
v = signature[64]
return bytes_to_hex_str(r), bytes_to_hex_str(s), hex(v)
def main():
# convert {r,s,v} signature to string
r = hex_str_to_bytes('0x678f3a7b600169b800828065cda112aa28291311a5dbb729480444a2b905f6e6')
s = hex_str_to_bytes('0xbaabb5a43a047e75e41a77b88fa7a5bf89e5227f1c8e40bfdfbcceb8164521ed')
v = hex_str_to_bytes("0x1b")
print("From r,s,v to string",rsv_to_signature_string(r,s,v))
# convert string sigature to rsv
signature_str="0x66809fb130a6ea4ae4e823baa92573a5f1bfb4e88e64048aecfb18a2b4012b9975c2c3e5f7b0a182c767137c488649cd5104a5e747371fd922d618e328e5c5081b"
print("From string to r,s,v",signature_string_to_rsv(signature_str))
main()

output

❯ py signature_convert.py
From r,s,v to string 678f3a7b600169b800828065cda112aa28291311a5dbb729480444a2b905f6e6baabb5a43a047e75e41a77b88fa7a5bf89e5227f1c8e40bfdfbcceb8164521ed1b
From string to r,s,v ('66809fb130a6ea4ae4e823baa92573a5f1bfb4e88e64048aecfb18a2b4012b99', '75c2c3e5f7b0a182c767137c488649cd5104a5e747371fd922d618e328e5c508', '0x1b')

讓這個頁面變得更好