
簡介
原文鏈接:
https://ethresear.ch/t/effici...
簡介
簡介
原文鏈接:
簡介
鏈上添加/就地更新;
背景
背景
O(1) 存儲空間成本;
背景
背景
Merkle tree廣泛用於以極低存儲成本在鏈上大量成員身份驗證,例如Uniswap 鏈上空投。無需上傳鏈上所有用戶大量的空投信息(比如,地址、數量),空投可以通過以下方式顯著節省成本:
將樹的根哈希存儲在鏈上https://github.com/EYBlockcha...用戶通過鏈上提交證明來獲取獎勵
基本想法
此外,鏈上動態Merkle tree 正在引起人們的興趣。著名的會計事務所安永(Ernst & Young ,EY) 開發了一種僅能在鏈上添加的動態Merkle tree (
5)。它通過只存儲“邊界”節點而不是樹的所有節點來節省樹的存儲成本,但是,添加操作的寫入成本為O(log2(N)),這可能會在EVM 上消耗相當大的gas。
基本想法
用oldLeafHash 和proof 計算rootHash。如果計算出的rootHash != oldRoothHash,則包含驗證失敗;否則繼續
應用
應用
Merklized ERC20
使用newLeafHash 和proof 計算newRootHash,其中證明被重用,newRootHash 將是更新後樹的根哈希
應用
應用
ERC20 標準可以修改為Merklize (賬戶,餘額)的樹。任何造幣/銷毀/轉移操作都需要Merkle 證明。 Merklized 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;


