Flowchain Testnet Report #1:關於 eth_sign

jollen
Flowchain Taiwan
Published in
2 min readMar 4, 2019

Flowchain 是混合區塊鏈(Hybrid Blockchain)架構,而目前 Flowchain 測試網是以 Ethereum 主網做為公有鏈。對於 Accredited Miners 的身份確認,則是採取 [eth_sign] 技術。

Flowchain Hybrid Node 會使用 Ethereum 的 ecrecover() on-chain contract 來確認礦工的訊息簽署是否有效。Flowchain Hybrid Node 會使用標準的 ecrecover() 訊息格式來做 SHA 演算:

web3.sha( '\x19Ethereum Signed Message\n' + length + message )

該訊息格式包含:

  • length:即訊息長度
  • message:原始訊息

原始訊息就是測試礦工利用 MetaMask 等錢包,所「自行簽署」的訊息。例如:

[Flowchain.io 20/02/2019 01/01/1900 hello@flowchain.io 0xc85b0B3DC93e6BE5A15df75F89AcC6855CBf4252]

訊息包含在一對中括號內,並且「沒有換行符號」。在這次的測試中,有幾個簽署訊息確認失敗的案例,原因如下:

  • 訊息多了換行符號。Flowchain Hybrid Node 生成的訊息並沒有換行符號,因此礦工的訊息不但「多了一個 byte」,使得 Flowchain 區塊鏈與礦工二邊訊息長度不同外,當然 Hash 值也會不同,因此產生不匹配的情形。
  • 少了 ‘]’ 做為結尾。
  • Accredited Miners 必須事前申請,Flowchain Hybrid Node 在公鏈上找不到基本資訊。

此外,重覆簽署的訊息,也會使得 Accredited Miners 的區塊確認失敗。這是為了避免一個申請人使用多個錢包的預防政策;不過,我們仍可以「手工」協助確認重覆簽署的有效性。

--

--