你真的了解区块链吗?揭秘白名单背后的技术原理(附白名单实战教程)

这篇具有很好参考价值的文章主要介绍了你真的了解区块链吗?揭秘白名单背后的技术原理(附白名单实战教程)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Merkle树——验证NFT白名单

文末有实战教程,评论区留下你的实战心得吧!

在我们今天所知道和喜爱的区块链出现之前,默克尔树一直是密码学和计算机科学领域的一个方面。如今,我们开始慢慢看到它们在链上更频繁地被用于数据验证的目的。

1. 什么是默克尔树?

默克尔树是一种树状结构,树上的每个节点都由一个值表示,这个值是一些加密哈希函数的结果。哈希函数是单向的,从一个输入产生一个输出很容易但从一个输出确定一个输入在计算上是不可行的。默克尔树有3种类型的节点,如下所示:

  1. 叶子节点 - 叶子节点位于树的最底部,它们的值是原始数据的哈希值。一棵树上有多少个叶子节点,就有多少个需要哈希的原始数据。例如,如果有7个数据需要被哈希,就会有7个叶子节点。
  2. 父节点 - 父节点可以位于树的不同层次,这取决于整个树的大小,父节点总是位于叶节点之上。父节点的值是由它下面的节点的哈希值决定的,通常从左到右开始。由于不同的输入总是会产生不同的哈希值,不考虑哈希值的碰撞,节点哈希值的连接顺序很重要
  3. 根节点 - 根节点位于树的顶端,由位于它下面的两个父节点的哈希值连接而成,同样从左到右开始。任何默克尔树上都只有一个根节点,根节点拥有根哈希值。

2. 默克尔树结构

你真的了解区块链吗?揭秘白名单背后的技术原理(附白名单实战教程),爆火技术背后的原理,区块链,区块链,web3,javascript,智能合约

简化它

你真的了解区块链吗?揭秘白名单背后的技术原理(附白名单实战教程),爆火技术背后的原理,区块链,区块链,web3,javascript,智能合约

3. 为什么需要默克尔树?

3.1 背景

在NFT(ERC-721)的背景下使用Merkle树,白名单为选定的参与者群体保留一定数量的代币。

白名单地址将会预先计算成Merkle对象。

在这种情况下,可以让一个叶子节点代表我们白名单中的一个钱包地址的哈希值。

3.2 痛点

前面提到过哈希函数是单向的——从一个输入产生一个输出很容易但从一个输出确定一个输入在计算上是不可行的,并且连接顺序也将决定结果。

Example:

hash(hash1,hash2) != hash(hash2,hash1)

在NFT白名单实例中,将会使用哈希值进行数据安全验证。

因此在这种情况下,直系验证是非常困难的,需要非常大的计算量和资源。

传统验证

验证根哈希值是否相同,这看似很简单,但问题就在于,当你去验证一个地址时,到底将该地址哈希与哪个叶子哈希值进行替换并验证?这是很难计算得知的。

你真的了解区块链吗?揭秘白名单背后的技术原理(附白名单实战教程),爆火技术背后的原理,区块链,区块链,web3,javascript,智能合约

根哈希验证的另一个难点(了解即可)

你真的了解区块链吗?揭秘白名单背后的技术原理(附白名单实战教程),爆火技术背后的原理,区块链,区块链,web3,javascript,智能合约

3.3 如何解决——取得默克尔证明

Merkle树妙处在于它根本不需要与根哈希父哈希等等进行等量校对

如果试图验证一个叶子节点属于我们的树,只需要知道直接相邻的叶子节点哈希值(如果有的话),以及叶子节点正上方相邻的父节点哈希值就可以了。

如果这个Merkle树有四层,五层甚至一百层,那么返回的哈希值数量将会相应增长!

4. 实战

实战将会带你实例化默克尔树对象以及取得默克尔树验证!

4.1 JavaScript实现

安装

npm i -D merkletreejs keccak256

merkletree.js

const {MerkleTree} = require('merkletreejs')

const keccak256 = require('keccak256')


let whitelistAddresses = [
    "0x262bCDeEf90181676BDC0a247A1954666F8a2815",
    "0x262bCDeEf90181676BDC0a247A1954666F8a2816",
    "0x262bCDeEf90181676BDC0a247A1954666F8a2817",
    "0x262bCDeEf90181676BDC0a247A1954666F8a2818",
    "0x262bCDeEf90181676BDC0a247A1954666F8a2819",
    "0x262bCDeEf90181676BDC0a247A1954666F8a2820",
    "0x262bCDeEf90181676BDC0a247A1954666F8a2821"       
]

//buffer化叶子结点
const leafNodes = whitelistAddresses.map(addr => keccak256(addr))

//实例化默克尔树
const merkleTree = new MerkleTree(leafNodes,keccak256,{sortPairs:true});

//获取根哈希值
const rootHash = merkleTree.getRoot();

console.log('Whitelist Merkle Tree\n',merkleTree.toString())

//定义你所需要验证的地址
const claimingAddress = leafNodes[0]

//取得默克尔树证明
const hexProof = merkleTree.getHexProof(claimingAddress)


console.log(`Merkle Proof for Address is\n`,hexProof)


//当你传入一个错误的白名单地址时
const errAddress = keccak256('0x98D9897e0F0389158978B384E6ecF3cf93153876');

//取得默克尔证明
const hexProof1 = merkleTree.getHexProof(errAddress)

//将会得到空数组!
console.log(`Merkle Proof for error Address is\n`,hexProof1)

测试结果

你真的了解区块链吗?揭秘白名单背后的技术原理(附白名单实战教程),爆火技术背后的原理,区块链,区块链,web3,javascript,智能合约

由于该默克尔树是由七个叶子节点组成的,所以这是一个三层结构的树,因此默克尔证明将会取得三个哈希值作为凭证。当树结构为五层,六层… 默克尔证明的哈希值数量会对应增加!

4.2 智能合约实现

Merkletree.sol

// SPDX-License-Identifier: SEE LICENSE IN LICENSE
pragma solidity ^0.8.0;


//导入默克尔树智能合约
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/cryptography/MerkleProof.sol";

contract Merkletree{

    //该根哈希值需要你用到刚刚js生成的merkle树的根哈希(记得加上0x)
    bytes32 public merkleRoot = 0x3a6036ef5f6da50ea7f3dc72c7c83c1e6d5be6cded8ad495fb4b0bb870f1c093;
    
    //记录白名单是否被使用过
    mapping(address => bool) public whitelistClaimed;

    //使用白名单函数
    function whitelistMint(bytes32[] calldata _merkleProof) public{
        //要求白名单没有被使用过
        require(!whitelistClaimed[msg.sender],"Address has already claimed");
        //初始化叶子哈希
        bytes32 leaf = keccak256(abi.encodePacked(msg.sender));
        //将叶子哈希传入merkle树验证,查看是否是白名单
        require(MerkleProof.verify(_merkleProof, merkleRoot , leaf),"Invalid proof");
        //是白名单,记录该白名单使用过
        whitelistClaimed[msg.sender] = true;
    }
}

5. 总结

Merkle树是区块链中非常重要的数据结构,它的应用极大地减小了哈希安全验证的难度,提高了合约安全程度,减少了被攻击成功的可能性。

感谢阅读!

Blog by Science_jun文章来源地址https://www.toymoban.com/news/detail-855774.html

到了这里,关于你真的了解区块链吗?揭秘白名单背后的技术原理(附白名单实战教程)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 大数据小白初探HDFS架构原理:带你揭秘背后的真相(一)

             目录 1.前言 2. HDFS架构 2.1 架构定义 2.2 揭秘架构 2.3 HDFS核心结构  3. HDFS 的优缺点         3.1 HDFS 的优点         3.2 HDFS 的缺点 4. HDFS 的应用场景 5. 总结         前面的文章写了一篇,大数据方面的基础知识,目的是希望大数据小白可以对大数据能有个清楚

    2024年02月21日
    浏览(9)
  • 什么是区块链?区块链技术和比特币背后的故事

    作者:禅与计算机程序设计艺术 区块链是一种分布式的、去中心化的、非国家级的计算机网络技术,它是一个开放的系统,任何人都可以在不受任何约束的情况下进行去信任的数据交易和共识。它的应用场景包括数字货币,数字身份,金融交易,游戏领域,基于区块链的智慧

    2024年02月08日
    浏览(16)
  • 【ChatGPT】万字长文揭秘 GPT 背后:为何“大模型” 就一下子成为了引领人工智能 AI2.0时代热门技术?

    【ChatGPT】万字长文揭秘 GPT 背后:为何“大模型” 就一下子成为了引领人工智能 AI2.0时代热门技术?

    GPT (Generative Pre-trained Transformer) ,生成式预训练Transformer: 是一种基于 深度学习 的 自然语言处理模型 ,GPT 由 OpenAI 开发。 GPT 是一种基于 Transformer 模型的语言模型,可以通过大量的文本数据进行训练,从而学习到语言的规律和模式,进而生成自然流畅的语言文本。 本文将详

    2023年04月19日
    浏览(11)
  • 前沿技术探究|区块链的故事你真的知道吗?

    前沿技术探究|区块链的故事你真的知道吗?

    前言: 区块链的作用是实现去中心化的安全数据传输和交易验证。 区块链是在2008年由中本聪(Satoshi Nakamoto)提出的概念,它作为比特币(Bitcoin)的底层技术而首次被广为人知。中本聪提出区块链作为一种去中心化的分布式账本技术, 旨在解决传统金融系统中的信任问题

    2024年02月08日
    浏览(16)
  • C++中的多态你真的了解吗?多态原理全面具体讲解

    C++中的多态你真的了解吗?多态原理全面具体讲解

    目录 1. 多态的概念 2. 多态的定义及实现 2.1 多态的构成条件 2.2 虚函数 2.3 虚函数的重写 2.4 C++11 override 和 final 2.5 重载、覆盖(重写)、隐藏(重定义)的对比 3. 抽象类 3.1 概念 4. 多态的原理 4.1 虚函数表 4.2多态的原理 4.3 动态绑定与静态绑定 5. 单继承和多继承关系中的虚函数表

    2024年02月04日
    浏览(13)
  • ChatGPT会一直火热下去吗?他会是下一个AR,区块链吗?

    ChatGPT会一直火热下去吗?他会是下一个AR,区块链吗?

    目录    前言 VR 热潮 区块链热潮 元宇宙热潮 ChatGPT 热潮 理智看待 ChatGPT 如果在今年年底评选 2023 年的年度科技热词,以 ChatGPT 目前的热度,毫无疑问会是今年排名第一的科技热词。 即使今年才过去四个月,但我很难想象还有什么科技新闻能在热度上超过 ChatGPT,如果有,

    2023年04月24日
    浏览(8)
  • ChatGPT背后的技术原理:领略Transformer架构的魅力

    ChatGPT背后的技术原理:领略Transformer架构的魅力

    😲惊艳了时代的ChatGPT,背后到底有怎样的技术支持?本文将深入剖析ChatGPT背后的技术原理,从Transformer架构、自注意力机制到位置编码等方面,带领读者一探究竟🔍! 💥ChatGPT,这个最近让大家炸裂的人工智能语言模型,背后的秘密武器就是Transformer架构。这种神奇的架构

    2024年02月04日
    浏览(12)
  • 红衣大叔讲AI:Sora技术原理大揭秘

    红衣大叔讲AI:Sora技术原理大揭秘

    前沿:Sora是一个OpenAI技术大集成模型,融合了ChatGPT、DALL E3,以及把视频融合到Transformer中,生成一个一的视频帧,利用矢量来表示,最后把这个矢量送到Transformer中训练视觉大模型。 Sora 生成图像能力 : Sora是一个文生视频模型,但同样具备生成图像能力,这个创新属于业内

    2024年03月15日
    浏览(13)
  • 斯坦福Mobile ALOHA背后的关键技术:动作分块算法ACT的原理解析

    斯坦福Mobile ALOHA背后的关键技术:动作分块算法ACT的原理解析

    23年已过35 今24年则将36,到40岁之前还有4年半,这4年半我想冲一把大模型机器人( 兼具商业价值、社会价值、科技价值  ),因为 通过过去一年的研究探索与应用开发( 比如我带队开发完成的AIGC模特生成、论文审稿GPT、企业知识库问答等 ),机器人是在可能范围之内我能做的最

    2024年01月17日
    浏览(12)
  • VR技术揭秘:从头到尾解析VR的实现原理

    虚拟现实(Virtual Reality,简称VR)是一种全新的交互方式,它通过计算机模拟的环境来实现用户沉浸在虚拟世界中的感觉。本篇博客将会详细解析VR技术的实现原理,以及如何使用代码实现VR应用。 VR技术的实现需要涉及到多个方面的知识,例如图像处理、物理仿真、人机交互

    2024年02月06日
    浏览(13)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包