我正在开发一个加密钱包,我已经在swift中实现了personal_sign和eth_sign,如何实现eth_signTypedData,官方walletConnect文档中似乎没有相关信息。有什么想法吗?谢谢!
personal_sign
eth_sign
eth_signTypedData
dgenwo3n1#
很晚的答案,但我会尝试张贴一些发现和代码在这里,希望它能帮助人们寻找它在未来。首先提供一些初步信息:
您将需要https://github.com/muratogat/wallet-connect-swift/tree/master/WalletConnect/Models/EIP-712中的所有文件这是WalletConnect(v1)的派生版本,我从https://github.com/trustwallet/trust-core/tree/833ec3f263bb9b257b6ec04359cb98d1bae7cf17/Sources/Ethereum/Solidity中复制了支持EIP-712所需的文件这里的重要文件是EIP 712 TypedData,其他文件是它所依赖的模型。
如果您设法在您的项目中使用此功能并修复可能遇到的任何其他警告/错误,则应该能够调用:
let decodedEIP712TypedData = new JSONDecoder().decode(EIP712TypedData.self, from: params[1].data(using: .utf8)!)
这里params是从WalletConnect JSONRPCRequest获得的有效负载字符串数组,其中第一个字符串是地址,第二个字符串是结构化数据JSON对象。后来
decodedEIP712TypedData.signHash
应该会给予你一个byte[]来做标记。然后,根据您的web 3 swift库,您可以实际签署这个byte[]并响应WC请求。注意,您不应该使用添加以太坊签名消息前缀的personal_sign。如果您的web 3 swift库没有直接签署数据的方便方法,您可以手动检查此数据,并使用较低级别的SECP256K1.signForRecovery手动使用您的私钥对其进行签名。祝你好运。
1条答案
按热度按时间dgenwo3n1#
很晚的答案,但我会尝试张贴一些发现和代码在这里,希望它能帮助人们寻找它在未来。
首先提供一些初步信息:
您将需要https://github.com/muratogat/wallet-connect-swift/tree/master/WalletConnect/Models/EIP-712中的所有文件这是WalletConnect(v1)的派生版本,我从https://github.com/trustwallet/trust-core/tree/833ec3f263bb9b257b6ec04359cb98d1bae7cf17/Sources/Ethereum/Solidity中复制了支持EIP-712所需的文件
这里的重要文件是EIP 712 TypedData,其他文件是它所依赖的模型。
如果您设法在您的项目中使用此功能并修复可能遇到的任何其他警告/错误,则应该能够调用:
这里params是从WalletConnect JSONRPCRequest获得的有效负载字符串数组,其中第一个字符串是地址,第二个字符串是结构化数据JSON对象。
后来
应该会给予你一个byte[]来做标记。
然后,根据您的web 3 swift库,您可以实际签署这个byte[]并响应WC请求。注意,您不应该使用添加以太坊签名消息前缀的personal_sign。如果您的web 3 swift库没有直接签署数据的方便方法,您可以手动检查此数据,并使用较低级别的SECP256K1.signForRecovery手动使用您的私钥对其进行签名。
祝你好运。