
การแนะนำ
ลิงค์ต้นฉบับ:
https://ethresear.ch/t/effici...
การแนะนำ
ตามแนวคิดไคลเอนต์ไร้สัญชาติของ Ethereum 2.0 เราได้นำ Merkle tree ไดนามิกแบบ on-chain ที่มีประสิทธิภาพมาใช้ (Merkle tree):
การตรวจสอบการบรรจุแบบออนไลน์
การเพิ่ม/การอัปเดตแบบแทนที่บนเครือข่าย;
O(1) ต้นทุนพื้นที่จัดเก็บ;
พื้นหลัง
พื้นหลัง
Merkle tree ถูกใช้อย่างแพร่หลายในการรับรองความถูกต้องของสมาชิกจำนวนมากบนเชนด้วยต้นทุนการจัดเก็บที่ต่ำมาก เช่น Uniswap on-chain airdrops ไม่จำเป็นต้องอัปโหลดข้อมูล Airdrop จำนวนมาก (เช่น ที่อยู่ ปริมาณ) สำหรับผู้ใช้ทุกคนในเครือข่าย และ Airdrop สามารถประหยัดค่าใช้จ่ายได้อย่างมากด้วยวิธีต่อไปนี้:
เก็บ root hash ของ tree บนเครือข่าย
หลักฐานการให้รางวัลของผู้ใช้โดยใช้การคำนวณแบบออฟไลน์
ผู้ใช้จะได้รับรางวัลโดยส่งหลักฐานในห่วงโซ่
นอกจากนี้ ต้นไม้ Merkle ไดนามิกบนเครือข่ายกำลังได้รับความสนใจ บริษัทบัญชีที่มีชื่อเสียง Ernst & Young (EY) ได้พัฒนา Merkle tree แบบไดนามิก (https://github.com/EYBlockcha...5). ช่วยประหยัดต้นทุนการจัดเก็บทรีโดยจัดเก็บเฉพาะโหนด "ขอบเขต" แทนโหนดทั้งหมดของทรี อย่างไรก็ตาม ค่าใช้จ่ายในการเขียนของการดำเนินการเพิ่มคือ O(log2(N)) ซึ่งสามารถใช้ก๊าซจำนวนมากใน EVM
แนวคิดพื้นฐาน
คล้ายกับแผนผัง Merkle แบบคงที่ที่มีอยู่ซึ่งใช้การพิสูจน์ของ Merkle เพื่อตรวจสอบการรวม แนวคิดพื้นฐานของแผนผังไดนามิกบนเครือข่ายคือการนำการพิสูจน์ของ Merkle มาใช้ซ้ำเพื่ออัปเดตรูทแฮชของต้นไม้หลังจากการตรวจสอบการรวม ขั้นตอนในการอัปเดตทรีมีดังนี้:
กำหนด LeafIndex, oldLeafHash, newLeafHash, oldRootHash, พิสูจน์
คำนวณ rootHash ด้วย oldLeafHash และการพิสูจน์ หากคำนวณ rootHash != oldRoothHash การตรวจสอบการบรรจุจะล้มเหลว มิฉะนั้น ให้ดำเนินการต่อ
คำนวณ newRootHash โดยใช้ newLeafHash และการพิสูจน์ ซึ่งการพิสูจน์จะถูกใช้ซ้ำ newRootHash จะเป็นรูทแฮชของแผนผังที่อัปเดต
แอปพลิเคชัน
แอปพลิเคชัน
Merklized ERC20
สามารถแก้ไขมาตรฐาน ERC20 เพื่อ Merklize ต้นไม้ของ (บัญชี, ยอดคงเหลือ) จำเป็นต้องมีการพิสูจน์ Merkle สำหรับการดำเนินการมิ้นท์ / เผา / ถ่ายโอน แอปพลิเคชัน Merklized ERC20 อาจ:
การลงคะแนนแบบออนไลน์ - การลงคะแนนเสียงข้อเสนอการกำกับดูแลสามารถใช้สแน็ปช็อต ERC20 ในราคาถูก และคำนวณการโหวตแบบออนไลน์ตามสแน็ปช็อต โดยไม่ต้องเก็บประวัติทั้งหมดของการเปลี่ยนแปลงยอดคงเหลือ ERC20 (แบบผสม) หรือสแน็ปช็อตแบบออฟไลน์
การขุดสภาพคล่องระยะไกล - สัญญาบนเชนระยะไกลทำการขุดแบบ airdrop/liquidity mining สำหรับผู้ใช้ ERC20 ในพื้นที่ โดยที่สแน็ปช็อต ERC20 จะถูกส่งต่อไปยังเชนอื่นอย่างสม่ำเสมอผ่านออราเคิลแบบกระจายอำนาจ
รหัสตัวอย่างสามารถพบได้ที่นี่:
https://github.com/QuarkChain...
/SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "hardhat/console.sol";
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
import "@openzeppelin/contracts/utils/Context.sol";
import "./DynamicMerkleTree.sol";contract MerklizedERC20 is Context, IERC20, IERC20Metadata {
mapping(address => uint256) private _balances;
mapping(address => uint256) private _indices1;
uint256 private _totalSupply;
string private _name;
string private _symbol;


