籤名
建議使用現有的 SDK,而不是手動生成籤名。籤名出錯的可能性有很多。錯誤的籤名會使得根據籤名和負載恢復出的籤名者與預期不同,並導致以下錯誤之一:\
"L1 error: User or API Wallet 0x0123... does not exist."\
Must deposit before performing actions. User: 0x123...\
其中返回的地址與你籤名的錢包的公開地址不一致。並且對於不同的輸入,返回的地址也會不同。\
錯誤的籤名並不會指出錯在哪裡,這讓調試變得更具挑戰性。要調試此問題,建議仔細閱讀 Python SDK 並確保你的實現與其完全一致。如果仍然不行,添加日誌以找出輸出產生分歧的位置。
一些常見的錯誤:\
1. 沒有意識到存在兩種籤名方案(Python SDK 中的方法爲 sign_l1_action 與 sign_user_signed_action)。\
2. 沒有意識到欄位順序對 msgpack 很重要。\
3. 數字末尾的零引發的問題。\
4. 地址欄位中出現大寫字母引發的問題。建議在籤名和發送前將任何地址轉爲小寫。有時該欄位會被解析爲字節,導致其在網路傳輸中被自動轉爲小寫。\
5. 認爲籤名一定是正確的,因爲在本地呼叫 recover signer 得到了正確的地址。recover signer 所用的負載是根據 action 構造的,未必與實際籤名所用的負載一致。