我试图在将元数据上传到区块链之前使用用户的公钥对其进行签名和加密,并使用用户的私钥对数据进行解密。我遵循了这一点,它工作得很好,但它要求用户的当前连接的用户在元任务的私钥。
所以我试着按照Metamask的文档[1]中的教程。这是代码:
await window.ethereum.enable();
const accounts = await window.ethereum.request({ method: 'eth_requestAccounts' });
let encryptionPublicKey;
ethereum
.request({
method: 'eth_getEncryptionPublicKey',
params: [accounts[0]], // you must have access to the specified account
})
.then((result) => {
console.log(result);
encryptionPublicKey = result;
})
.catch((error) => {
if (error.code === 4001) {
// EIP-1193 userRejectedRequest error
console.log("We can't encrypt anything without the key.");
} else {
console.error(error);
}
});
console.log(encryptionPublicKey);
const encryptedMessage = ethUtil.bufferToHex(
Buffer.from(
JSON.stringify(
sigUtil.encrypt({
publicKey: encryptionPublicKey,
data: 'hello world!',
version: 'x25519-xsalsa20-poly1305',
})
),
'utf8'
)
);
我得到一个空的结果,因此一个空的encryptionPublicKey。因此,我得到这个错误:
Uncaught (in promise) Error: Missing publicKey parameter
我该如何解决这个问题?如有任何帮助,不胜感激。
关于使用公钥加密数据的类似问题,但没有明确的答案:[1]我通过在ethereum.request
之前放置await来使其工作。
附加问题:这种加密和解密方法在区块链中创建和检索事务是否有效?