币安BSC智能链Dapp开发教程——ether.js中产生签名消息,solidity端验证签名的实现方式【pdf+视频BSC链Dapp开发教程下载】

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

chatGPT账号

一、说明

在dapp开发中涉及到签名验签的场景比较多,使用区块链技术构建的应用程序。签名和验签在 DApp 开发中是非常重要的,它们用于保护用户的隐私和确保交易的安全性。主要应用场景如下:资产转移、身份验证、消息验证、代币销毁、智能合约。

本代码示例演示了在ether.js端通过私钥对原始消息hash产生签名消息,原始消息为多个变量值。本示例代码中的原始消息为提币地址address,提币数量amount,提币临时变量nonce, 对三个提币信息格式化为32位长度的字节数组,转换为hash值,然后对hash值使用指定私钥进行签名,产生签名消息,然后将签名消息提交到solidity链端。在链端完成对签名消息的验签,如果验证签名地址与solidity中指定的公钥地址一致,则认为是合法的提币请求,执行链端的提币操作。

具体的流程如下:

币安BSC智能链Dapp开发教程——ether.js中产生签名消息,solidity端验证签名的实现方式【pdf+视频BSC链Dapp开发教程下载】

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

币安BSC智能链Dapp开发教程——ether.js中产生签名消息,solidity端验证签名的实现方式【pdf+视频BSC链Dapp开发教程下载】

二、核心代码实现

1、ether.js端对多个变量产生hash并执行私钥签名的代码

const ethers = require('ethers');

const address = document.getElementById("address-input").value;
const amount = document.getElementById("amount-input").value;
const nonce = document.getElementById("nonce-input").value;

// 将变量转换为字符串,并使用 ethers.utils.solidityKeccak256 进行哈希
const hash = ethers.utils.solidityKeccak256(
  ['string', 'uint256', 'bool'],
  [address.toString(), amount.toString(), nonce.toString()]
);

// 使用私钥对哈希进行签名
const privateKey = '0x123...'; // 替换为实际的私钥
const wallet = new ethers.Wallet(privateKey);
const signature = await wallet.signMessage(ethers.utils.arrayify(hash));

2、solidity端验证签名的核心代码

pragma solidity ^0.8.0;

contract SignatureVerification {
    function verify(
        bytes32 message,
        bytes memory signature,
        address signer
    ) public pure returns (bool) {
        bytes32 hash = keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", message));
        bytes32 r;
        bytes32 s;
        uint8 v;
        if (signature.length != 65) {
            return false;
        }
        assembly {
            r := mload(add(signature, 32))
            s := mload(add(signature, 64))
            v := byte(0, mload(add(signature, 96)))
        }
        if (v < 27) {
            v += 27;
        }
        if (v != 27 && v != 28) {
            return false;
        }
        address recovered = ecrecover(hash, v, r, s);
        return recovered == 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中产生签名消息,solidity端验证签名的实现方式所有操作流程。

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

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

币安BSC智能链Dapp开发教程——ether.js中产生签名消息,solidity端验证签名的实现方式【pdf+视频BSC链Dapp开发教程下载】币安BSC智能链Dapp开发教程——ether.js中产生签名消息,solidity端验证签名的实现方式【pdf+视频BSC链Dapp开发教程下载】币安BSC智能链Dapp开发教程——ether.js中产生签名消息,solidity端验证签名的实现方式【pdf+视频BSC链Dapp开发教程下载】币安BSC智能链Dapp开发教程——ether.js中产生签名消息,solidity端验证签名的实现方式【pdf+视频BSC链Dapp开发教程下载】币安BSC智能链Dapp开发教程——ether.js中产生签名消息,solidity端验证签名的实现方式【pdf+视频BSC链Dapp开发教程下载】

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

币安BSC智能链Dapp开发教程——ether.js中产生签名消息,solidity端验证签名的实现方式【pdf+视频BSC链Dapp开发教程下载】币安BSC智能链Dapp开发教程——ether.js中产生签名消息,solidity端验证签名的实现方式【pdf+视频BSC链Dapp开发教程下载】

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

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

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

币安BSC智能链Dapp开发教程——ether.js中产生签名消息,solidity端验证签名的实现方式【pdf+视频BSC链Dapp开发教程下载】

免责声明

发文时比特币价格:$24249

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

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

免责声明:

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

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

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

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

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

本文是全系列中第184 / 286篇:行业技术

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

发表评论

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