Transactions

v、r、s 的不同值?我究竟做錯了什麼?

  • October 16, 2018

假設我有這個私鑰(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 指出的那樣,您的程式碼中的問題是您使用的雜湊值不正確。

希望這可以幫助。

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