v、r、s 的不同值?我究竟做錯了什麼?
假設我有這個私鑰(ropsten 上的測試帳戶,不用擔心):
785cdcd731a1b2438ec4511a25d04efbdc499ed350df612364af1aa6f4fd6abd
當我使用 Pyethereum 執行時
v, r, s = ecsign(tx['hash'], normalize_key(private_key))
則v,R,S =(28,70432465444433342622726730664370509023990924819271715983647847605365849029795,7960080711554037742197166599216482712965266632510536462814358773930726674178)
當我將此與實際交易進行比較時:
{'blockHash': HexBytes('0x47b8f62c1400dae65105d2f8e03824bfc58481c0b32f45788ad3378fbc05e9f6'), 'blockNumber': 4156209, 'from': '0x4e5C95B38bd0B18B83f130a1ffae58cFC58961DE', 'gas': 21000, 'gasPrice': 8000000000, 'hash': HexBytes('0x8ec420a3ba331f2a967ecdaf69b78bbb604ebbb2554a8c635142b7b306defaae'), 'input': '0x', 'nonce': 0, 'r': HexBytes('0xe298a05754cc5a24790bb8c21ecb60fd93f2d096146af7397440697a338dff46'), 's': HexBytes('0x5999f680f17e505c979c43a3a9e7707c817efde705f967681d8a5066b49e5352'), 'to': '0xED6CA7d908f897d0B0D5f9B9E7Aa470698E10b1b', 'transactionIndex': 27, 'v': 42, 'value': 1000000000000000000}
r,s,v 的值非常不同。(當我用 bytes.from_hex(tx 轉換它們時的事件
$$ ‘r’ $$)) Q1:有人知道我在做什麼錯嗎?
只是為了確保:交易是使用元遮罩進行的,然後密鑰是從元遮罩導出的,因此簽署交易的密鑰不可能不同。
Q2:有沒有更好的方法來做到這一點?
提前致謝 :)
您為簽名結果提供的值不正確。我使用您顯示的相同交易和您提供的私鑰進行了此操作。當您使用顯示的私鑰簽署交易時,您將獲得:
‘r’:102492371167525662808729438177964772018202086674566648709527465604425496526662,
’s’: 40527872430728510063557974166309434109284218396283342950340797635881485620050,
‘v’:42
r的表示和S以十六進制有s =‘0x5999f680f17e505c979c43a3a9e7707c817efde705f967681d8a5066b49e5352’R =‘0xe298a05754cc5a24790bb8c21ecb60fd93f2d096146af7397440697a338dff46’
這是您為實際交易顯示的值。
編輯
privatekey = '0x785cdcd731a1b2438ec4511a25d04efbdc499ed350df612364af1aa6f4fd6abd' transaction = { 'to': '0xED6CA7d908f897d0B0D5f9B9E7Aa470698E10b1b', 'value': 1000000000000000000, 'gas': 21000, 'gasPrice': 8000000000, 'nonce': 0, 'data':'0x', 'chainId': 3} signed = w3.eth.account.signTransaction(transaction,privatekey)
請注意,正如@Ismael 指出的那樣,您的程式碼中的問題是您使用的雜湊值不正確。
希望這可以幫助。