如何使用 web3 在服务器端对消息进行签名

Mae*_*ros 2 cryptography node.js blockchain ethereum web3js

我正在使用 Node.js 构建一个去中心化应用程序。我需要 node.js 应用程序从前端接收消息,使用 web3.js 签署消息并将签名发送回前端。

我正在考虑将预定义的私钥作为环境变量传递给 node.js 应用程序。然后使用私钥实例化Web3并调用web3.personal.sign对消息进行签名。我需要在服务器端进行签名过程,所以我不认为使用像 Metamask 这样的客户端钱包是适用的。

我是区块链和 Web3 开发的新手,所以我不确定我的要求是否可行。

Pet*_*jda 6

您可以将私钥传递给wallet.add(),然后使用web3.eth.sign()对消息进行签名。

web3.eth.accounts.wallet.add(SIGNER_PRIVATE_KEY);
const message = "Hello world";

// sign
const signature = await web3.eth.sign(message, SIGNER_ADDRESS);

// recover
const recoveredSigner = web3.eth.accounts.recover(message, signature);
console.log(recoveredSigner == SIGNER_ADDRESS);
Run Code Online (Sandbox Code Playgroud)

  • Solidity 可以使用本机函数“ecrecover()”恢复签名者地址,或者您可以使用包装此函数的开源实现,例如 OpenZeppelin 的 [EDCSA](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master /contracts/utils/cryptography/ECDSA.sol)。 (2认同)
  • 这是实例化实例的有效方法。如果你想连接到网络的一个节点(例如以太坊),你可以在可选的构造函数参数中传递它的 URL。示例: `var web3 = new Web3("https://127.0.0.1:8545");` (2认同)