本文へスキップ
このページは英語からの機械翻訳を使用しており、誤りや不明瞭な表現が含まれている可能性があります。最も正確な情報については、オリジナルの英語版をご覧ください。頻繁な更新のため、一部のコンテンツはオリジナルの英語になっている可能性があります。Crowdinでの取り組みに参加して、このページの翻訳改善にご協力ください。 (Crowdin translation page, Contributing guide)

署名

シグネチャを r, s, v 形式と 圧縮文字列 形式の間で変換する。

web3py_ext から bytes_to_hex_str, hex_str_to_bytes をインポートする。

{r,s,v} のシグネチャを文字列に変換するには、r,s,v フォーマットのシグネチャを定義し、hex_str_to_bytes を使って各要素を bytes に変換する。

構成要素を r + s + v の順に連結し、結果のバイトを string に変換する。

文字列形式のシグネチャを {r,s,v} に変換するには、文字列形式でシグネチャを定義する。

hex_str_to_bytesを使って文字列シグネチャを bytes に変換する。

署名バイトから R 最初の 32 個のインデックスS 次の 32 個のインデックスV 最後のインデックス を取り出す。

各コンポーネントを文字列に戻すには、bytes_to_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')

ページを改善してください。