由於最近實驗室接的產學專案是與區塊鏈、硬體加密晶片有關,於是在簽章流程中就必須把signTx的步驟獨立出來(私鑰鎖在硬體中),並透過硬體加密晶片的api執行簽章動作。在無法直接使用web3套件api情況下,就必須要了解以太坊簽章的逐步流程~
以太坊簽章流程:
- 將transaction rlp壓縮編碼
- rlp過的transaction透過sha3 hash成固定長度(32 bytes)十六進制碼
- 使用secp256k1演算法進行簽名(32 bytes r | 32 bytes s | 1 byte v)
- 將簽名結果(signature)塞回原來transaction(v,r,s)欄位裡
- 將更新欄位後的transaction rlp壓縮編碼後即是raw
最後將產生的raw透過web3.eth.sendSignedTransaction()即可上鏈!
實作的部份我主要是使用"ethereumjs-tx"與"secp256k1"這兩個套件來完成,就不在此獻醜貼code。
參考資料:
非常感謝讀完本篇文章,希望本文能對你有些幫助,記得按拍手給我一些鼓勵,Medium 文章中一個人最多能按 50 下 !