Bytes

驗證 bytes16 參數大小

  • January 25, 2019

我有一個接受一個bytes16參數的函式。

 function start(
   bytes16 reference
 )

我有一些用於跟踪行為reference的事件,用作索引。一切都執行良好,除非使用者送出 17-32 個字元的參考。在 web3 和 SC 之間,reference被截斷,只保留左邊的 16 個字節,其餘的為零。

我在客戶端為此添加了驗證,但我仍然想設置 SC 以更優雅地處理此問題。我原以為它會用類型錯誤恢復事務,但只有當參數超過 32 個字節時才會發生這種情況。

我想我應該添加一個修飾符來要求正確的長度,但我很難找到類似的案例來理解它應該如何完成。在這種情況下,最佳做法是什麼?

我應該在智能合約上還是在客戶端驗證這一點以觸發對使用者的正確響應

您可以解析契約中的 msg.data 以檢查是否已送出額外的字節,但這將花費額外的氣體,並且最好在 UI 中的客戶端完成檢查。

如果你的函式是外部的(或公共的)你有整個消息發送到合約中msg.data

您可以按照solidity abi對其進行解析,以確定是否送出了不正確的數據。

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