使用钱包连接在以太坊上签名并验证消息不起作用

时间:2020-09-08 12:23:20

标签: ethereum web3

我正在尝试使用我的DAPP的wallet connect签名和验证消息。到目前为止,我已经尝试使用以太和web3来包装WalletConnect,并且在移动设备上使用的是metamask和trust wallet应用程序。到目前为止,这些方法都无效。


function do_this_cron() {
    file_put_contents('/home/vagrant/Code/wordpress/test.log', "schedule event run\n", FILE_APPEND);

}
add_action( 'my_new_event', 'do_this_cron' );

$time = time() + MINUTE_IN_SECONDS * 2;
$ret = wp_schedule_single_event($time, 'my_new_event');
var_dump($ret) // always returns true

您可以在此处找到一些代码沙箱

此链接用于ethersjs https://codesandbox.io/s/peaceful-cdn-jtkvb?file=/src/App.vue

此链接(适用于web3) https://codesandbox.io/s/objective-franklin-gkr3s?file=/src/App.vue

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:1)

对于WalletConnectProvider,我有同样的问题,但它适用于低级连接器调用:

var rawMessage = "Hello World";
var rawMessageLength = new Blob([rawMessage]).size
var message = ethers.utils.toUtf8Bytes("\x19Ethereum Signed Message:\n" + rawMessageLength + rawMessage)
message = ethers.utils.keccak256(message)
var params = [
    await this.signer.getAddress(),
    message
]
this.signature = await this.wc.connector.signMessage(params);
this.verified = ethers.utils.verifyMessage(rawMessage, this.signature);

this.wc是对walletConnectProvider

的引用

答案 1 :(得分:1)

如@Vyacheslav 所述,不是调用较低级别的连接器调用,另一种选择是直接调用personal_sign。

// configure web3, e.g. with web3Modal or in your case WalletConnect
const web3 = await web3Modal.connect();

const provider = new providers.Web3Provider(web3);
const signer = provider.getSigner()
const address = await signer.getAddress();

let signedMessage;
if (web3.wc) {
    signedMessage = await provider.send(
        'personal_sign',
        [ ethers.utils.hexlify(ethers.utils.toUtf8Bytes(rawMessage)), address.toLowerCase() ]
    );
}
else { 
    signedMessage = await signer.signMessage(rawMessage)
}

const verified = ethers.utils.verifyMessage(rawMessage, signedMessage);