签名
建议使用现有的 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 构造的,未必与实际签名所用的负载一致。