IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 区块链 -> 以太坊数据签署(二) -> 正文阅读

[区块链]以太坊数据签署(二)

写在前面

在上一篇文章中,我们简单介绍了以太坊数据签署,在这边文章我们将直接讲一些使用案例,处理一些业务逻辑

简单签署消息
?

var sign =  require('@metamask/eth-sig-util');

const helloWorldSignature =
    '0x90a938f7457df6e8f741264c32697fc52f9a8f867c52dd70713d9d2d472f2e415d9c94148991bbe1f4a1818d1dff09165782749c877f5cf1eff4ef126e55714d1c';

const helloWorldMessage = `0x${Buffer.from('Hello, world!').toString('hex')}`;
const privateKey = Buffer.from('你的私钥','hex');

var a = sign.personalSign({ privateKey, data: Buffer.from(helloWorldMessage) });


console.log(a);
const s = fromRpcSig(a);
console.log("0x"+s.r.toString("hex"));
console.log("0x"+s.s.toString("hex"));
console.log(s.v);


签署类型的数据

这里我们使用 uniswap 中智能合约?https://docs.uniswap.org/protocol/V2/reference/smart-contracts/router-02#removeliquidityethwithpermitsupportingfeeontransfertokens

?移除流动性方法 removeLiquidityETHWithPermitSupportingFeeOnTransferTokens 结合开始讲起,因为这个方法涉及到了以太坊的数据签名授权转账

因为这里涉及到多个合约,还有dapp开发,智能合约开发,uniswap去中心化交易所,以太坊数据签署,授权,智能合约相互调用,等众多领域和相关知识关联,不了解这些的,建议先去深度学习下。

接下来我们要开始讲如何签署数据授权调用智能合约的免授权操作过程,并调用智能合约接口

?

const eth_sig_util = require('@metamask/eth-sig-util');

    // UniswapV2Pair constructor 
    // EIP712
    // 
    // 
    // constructor() public {
    //     uint chainId;
    //     assembly {
    //         chainId := chainid
    //     }
    //     DOMAIN_SEPARATOR = keccak256(
    //         abi.encode(
    //             keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)'),
    //             keccak256(bytes(name)),
    //             keccak256(bytes('1')),
    //             chainId,
    //             address(this)
    //         )
    //     );
    // }




var chainId = await web3.eth.net.getId();

    console.log("chainId", chainId);
    // 
    const EIP712Domain = [
        { name: 'name', type: 'string' },
        { name: 'version', type: 'string' },
        { name: 'chainId', type: 'uint256' },
        { name: 'verifyingContract', type: 'address' }
    ]

    const domain = {
        name: 'Uniswap V2', //参看UniswapV2Pair合约中构造参数
        version: '1',       //参看UniswapV2Pair合约中构造参数
        chainId: chainId,    
        verifyingContract: "这里是对应的UniswapV2Pair智能合约地址"
    };



    const Permit = [
        { name: 'owner', type: 'address' },
        { name: 'spender', type: 'address' },
        { name: 'value', type: 'uint256' },
        { name: 'nonce', type: 'uint256' },
        { name: 'deadline', type: 'uint256' }
    ]


    //lppairContract 是UniswapV2Pair合约实例对象
    var nonce = await lppairContract.methods.nonces(“用户地址”).call();
    console.log("nonce", nonce);
    const message = {
        owner: "调用者的用户地址",
        spender: "UniswapV2Router02地址",
        value: web3.utils.toHex("授权lp的金额"), //授权lp的金额
        nonce: web3.utils.toHex(nonce),//UniswapV2Pair合约中调用者的nonce
        deadline: web3.utils.toHex(_deadline)

    }

    const privateKey = Buffer.from(
        “你的私钥”,
        'hex',
    );
    var signature = eth_sig_util.signTypedData({
        privateKey,
        data: {
            types: {
                EIP712Domain,
                Permit
            },
            domain,
            primaryType: 'Permit',
            message
        },
        version: eth_sig_util.SignTypedDataVersion.V3,
    });

到此我们就获得了签名类型数据,免去用户approve再移除流动的复杂操作,让用户调用一次方法就可以移除流动性,从而简化操作

  区块链 最新文章
盘点具备盈利潜力的几大加密板块,以及潜在
阅读笔记|让区块空间成为商品,打造Web3云
区块链1.0-比特币的数据结构
Team Finance被黑分析|黑客自建Token“瞒天
区块链≠绿色?波卡或成 Web3“生态环保”标
期货从入门到高深之手动交易系列D1课
以太坊基础---区块验证
进入以太坊合并的五个数字
经典同态加密算法Paillier解读 - 原理、实现
IPFS/Filecoin学习知识科普(四)
上一篇文章      下一篇文章      查看所有文章
加:2022-05-01 15:49:01  更:2022-05-01 15:49:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 20:37:22-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码