read.cash Log in
@liwi more from that month

幾乎從零開始的把 raw transaction 的部件一個一個兜起來後(https://noise.cash/post/lw8wk3xj ) 正想說終於可以自己來簽署交易送上 BCH 網路了,結果得到錯誤訊息 Error: Tx decode failed。用的是 https://blockchair.com/broadcast/ 的網頁介面廣播系統,沒有什麼偵錯資訊。應該也是可以用 Electron Cash 廣播 Raw Tx,說不定那會有偵錯的蛛絲馬跡。累了,之後再說。 想分享的是一個已知用火。 一開始想說會不會是這個廣播介面失效了,所以就把腦筋動到 Electron Cash 上,看能不能簡單產生一個測試的 Raw Tx。 事實上也很簡單,在 Electron Cash 發錢的那個 tab 裡,如果不選 send 而點 preview 的話,就可以看到交易的細節。這時候點 copy 就會把 Raw Tx 複製下來;也可以點 save 輸出成檔案。然後會看到那個 sign,也就是要簽署交易,簽署完後的 Raw Tx 會不同,一些部分按照協定替換掉這樣。 簽署後交易還是在本機,要按 Boardcast 廣播才會送出去上鏈。這樣操作 Electron Cash 的話其實就很像手作的流程,雖然很多(其實是超多)細節還是不見了,但概念就是這樣。擬定交易內容→用 ECDSA 簽署→把簽名替換進到交易內容裡→廣播。 那就可以把複製下來的 signed Raw Tx 丟到網頁廣播器裡。然後就成功了。 所以網頁沒壞,大概是我程(ㄋㄠˇ)式(ㄉㄞˋ)哪裡壞掉了。 因為我自己也寫了一個 Raw Tx 的 parser,比對下看不太出來有什麼單純的格式錯誤,所以我猜很有可能是 ECDSA 的部分。這部分如 http://www.righto.com/2014/02/bitcoins-hard-way-using-raw-bitcoin.html 所述,很難偵錯: - I found signing the transaction to be the hardest part of using Bitcoin manually, with a process that is surprisingly difficult and error-prone. - Debugging the signature was made more difficult because the ECDSA algorithm uses a random number. 基於安全考量 ECDSA 簽署的過程裡會用到亂數,所以每次簽的結果都不同,很難找一個實例來比對哪個環節有誤。至於實際的機制是怎樣我也不知道,每個黑盒子都打開的話真的要天荒地老了 XD 而我在了解 ECDSA 的過程中,逛到了這個 SafeCurves 安全評比網站。我沒仔細看他的篩選準則,但 secp256k1(就是比特幣用的那條橢圓曲線)的 Safe? 被評為 False。這裡頭不知道有沒有什麼有趣的東西可以挖。 https://safecurves.cr.yp.to/ 這一次實作練習到現在,說實話最有趣的部分是橢圓曲線 + 有限域的部分。有限域又稱 Galois 域。而提到 Galois 就會扯到群論跟很多可歌可泣又浪漫又傷心的故事了,一個 20 歲就因決鬥身亡的熱血法國天才青年。其中包括決鬥前夕潦草重複寫下的: 「我沒有時間了」 ...所以之後再繼續了,希望是哪裡有個低級錯誤而不是 ECDSA 的部分。

No comments yet

Log in to join in Reading is open to everyone. Replying needs an account.