币安BSC智能链Dapp开发教程——ether.js中用户交互方式对消息进行签名并实现链端验签,完成系统会员的代币自动充提【pdf+视频BSC链Dapp开发教程下载】

  • A+
所属分类:以太坊ETH

chatGPT账号

币安BSC智能链Dapp开发教程——ether.js中用户交互方式对消息进行签名并实现链端验签,完成系统会员的代币自动充提【pdf+视频BSC链Dapp开发教程下载】

一、实现原理说明

在 ether.js 中,通过 ethers.Wallet 实例对象的 signMessage 方法,可以实现用户在钱包客户端交互方式下对消息进行签名。

具体实现原理如下:

  1. ethers.Wallet 实例对象通过 provider 与以太坊节点进行连接,并获取当前账户的信息。
  2. 用户在钱包客户端中确认交易,对该交易进行签名。
  3. 钱包客户端返回一个包含签名信息的数据,包括 vrs 值。
  4. ethers.Wallet 实例对象使用用户账户私钥和 vrs 值对消息进行签名,生成签名结果。
  5. 返回签名结果。

需要注意的是,通过 ethers.Wallet 实例对象的 signMessage 方法进行签名,需要用户在钱包客户端进行确认操作,因此该方法只能用于钱包交互方式下的签名,无法在普通网页中直接调用。

本dapp示例代码包含通过metamask钱包客户端签名的方式,私钥后台签名的方式,已经solidity链端完成签名验签的过程,最后执行代币的充提接口。

dapp前端页面展示效果如下:

币安BSC智能链Dapp开发教程——ether.js中用户交互方式对消息进行签名并实现链端验签,完成系统会员的代币自动充提【pdf+视频BSC链Dapp开发教程下载】

二、核心代码实现如下:

1、solidity合约链端验签代码

pragma solidity ^0.8.0;

contract SignatureVerification {
    function verify(
        bytes32 hash,
        uint8 v,
        bytes32 r,
        bytes32 s,
        address expectedSigner
    ) public pure returns (bool) {
        // 计算出签名者的地址
        address signer = ecrecover(hash, v, r, s);

        // 验证签名者是否和期望的地址一致
        return signer == expectedSigner;
    }
}

在上述合约中,verify 函数接收到的参数包括待验签的数据的哈希值、v、r、s 值以及期望的签名者地址。通过调用 ecrecover 函数计算出实际的签名者地址,并将其与期望的地址进行比对,从而进行签名验证。

在 Solidity 中,可以通过 ecrecover 函数对以太坊上的签名进行验证。

具体实现步骤如下:

  1. 合约接收到包含签名信息的数据,将数据进行拆分,分别获取 v、r、s 值和待验签的数据。
  2. 将待验签的数据进行哈希运算,获取消息的哈希值。
  3. 使用 ecrecover 函数对签名进行验证,通过提供哈希值和 v、r、s 值来计算出签名者的地址。
  4. 将计算出的地址与期望的地址进行比对,若一致则验证成功。

 

2、dapp前端页面产生签名消息的代码

const { ethers } = require('ethers');
// 将消息转换为二进制格式
const messageBytes = ethers.utils.arrayify(message);

// 产生签名
const signature = ethers.utils.signMessage(messageBytes, privateKey);

console.log(signature);

在 Ether.js 中,可以使用 ethers.utils.signMessage 函数来产生签名消息。该函数接受两个参数:待签名的消息和私钥。私钥可以是一个字符串或者 Signer 对象。

3、dapp前端页面布局代码如下:

<form>
          <label for="address-input">提币地址:</label>
          <input type="text" id="address-input">
          <label for="amount-input">提币数量:</label>
          <input type="number" id="amount-input">
          <label for="nonce-input">提币nonce:</label>
          <input type="number" id="nonce-input">
          <p class="form-note">提币数量需要包含精度,提币nonce值需要唯一,nonce步长值为2</p>
        </form>
        <div class="button-group">
          <button class="connect-wallet-btn" onclick="connWallet()">连接钱包</button>
          <button class="signmgs-btn" onclick="signMessage()">签名消息(钱包)</button>
          <button class="signmgs-btn" onclick="signMessagePriKey()">签名消息(私钥)</button>
          <button class="verifysig-btn" onclick="verifyMessage()">验证签名</button>
          <button class="execute-contract-btn" onclick="withdraw()">执行提币</button>
        </div>

前端根据用户form表达是输入,对多个变量值进行hash签名产生正确的签名消息后,提交到链端,由链端完成签名验签,最终完成代币的自动化提币,dapp中会员可以自动实现链上充提币操作。

至此,完成ether.js中用户交互方式对消息进行签名并实现链端验签,完成系统会员的代币自动充提所有操作流程。

pdf+视频币安智能链BSC发币教程及多模式组合合约源代码下载:

币安智能链BSC发币(合约部署、开源、锁仓、LP、参数配置、开发、故障处理、工具使用)教程下载:

币安BSC智能链Dapp开发教程——ether.js中用户交互方式对消息进行签名并实现链端验签,完成系统会员的代币自动充提【pdf+视频BSC链Dapp开发教程下载】币安BSC智能链Dapp开发教程——ether.js中用户交互方式对消息进行签名并实现链端验签,完成系统会员的代币自动充提【pdf+视频BSC链Dapp开发教程下载】币安BSC智能链Dapp开发教程——ether.js中用户交互方式对消息进行签名并实现链端验签,完成系统会员的代币自动充提【pdf+视频BSC链Dapp开发教程下载】币安BSC智能链Dapp开发教程——ether.js中用户交互方式对消息进行签名并实现链端验签,完成系统会员的代币自动充提【pdf+视频BSC链Dapp开发教程下载】币安BSC智能链Dapp开发教程——ether.js中用户交互方式对消息进行签名并实现链端验签,完成系统会员的代币自动充提【pdf+视频BSC链Dapp开发教程下载】

多模式(燃烧、回流指定营销地址、分红本币及任意币种,邀请推广八代收益,LP加池分红、交易分红、复利分红、NFT分红、自动筑池、动态手续费、定时开盘、回购)组合合约源代码下载:

币安BSC智能链Dapp开发教程——ether.js中用户交互方式对消息进行签名并实现链端验签,完成系统会员的代币自动充提【pdf+视频BSC链Dapp开发教程下载】币安BSC智能链Dapp开发教程——ether.js中用户交互方式对消息进行签名并实现链端验签,完成系统会员的代币自动充提【pdf+视频BSC链Dapp开发教程下载】

pdf+视频币安智能链BSC发币教程及多模式组合合约源代码下载地址:

此处为隐藏的内容!
登录后才能查看!

添加VX或者telegram获取全程线上免费指导

币安BSC智能链Dapp开发教程——ether.js中用户交互方式对消息进行签名并实现链端验签,完成系统会员的代币自动充提【pdf+视频BSC链Dapp开发教程下载】

免责声明

发文时比特币价格:$24249

当前比特币价格:[crypto coins=”BTC” type=”text” show=”price”]

当前比特币涨幅:[crypto coins=”BTC” type=”text” show=”percent”]

免责声明:

本文不代表路远网立场,且不构成投资建议,请谨慎对待。用户由此造成的损失由用户自行承担,与路远网没有任何关系;

路远网不对网站所发布内容的准确性,真实性等任何方面做任何形式的承诺和保障;

网站内所有涉及到的区块链(衍生)项目,路远网对项目的真实性,准确性等任何方面均不做任何形式的承诺和保障;

网站内所有涉及到的区块链(衍生)项目,路远网不对其构成任何投资建议,用户由此造成的损失由用户自行承担,与路远网没有任何关系;

路远区块链研究院声明:路远区块链研究院内容由路远网发布,部分来源于互联网和行业分析师投稿收录,内容为路远区块链研究院加盟专职分析师独立观点,不代表路远网立场。

本文是全系列中第124 / 230篇:行业技术

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的电报
  • 这是我的电报扫一扫
  • weinxin
chatGPT账号

发表评论

您必须登录才能发表评论!