
Giới thiệu
Liên kết gốc:
https://ethresear.ch/t/effici...
Giới thiệu
Theo ý tưởng về ứng dụng khách không trạng thái của Ethereum 2.0, chúng tôi đã triển khai cây Merkle động trên chuỗi hiệu quả (cây Merkle):
Xác minh ngăn chặn trên chuỗi;
Bổ sung on-chain/cập nhật tại chỗ;
O(1) chi phí không gian lưu trữ;
lý lịch
lý lịch
Cây Merkle được sử dụng rộng rãi để xác thực một số lượng lớn thành viên trên chuỗi với chi phí lưu trữ cực thấp, chẳng hạn như airdrop trên chuỗi Uniswap. Không cần tải lên một lượng lớn thông tin airdrop (ví dụ: địa chỉ, số lượng) cho tất cả người dùng trên chuỗi và airdrop có thể tiết kiệm đáng kể chi phí theo các cách sau:
Lưu trữ hàm băm gốc của cây trên chuỗi
Bằng chứng về phần thưởng của người dùng bằng tính toán ngoài chuỗi
Người dùng nhận phần thưởng bằng cách gửi bằng chứng trên chuỗi
Ngoài ra, cây Merkle động trên chuỗi đang được quan tâm. Công ty kế toán nổi tiếng Ernst & Young (EY) đã phát triển cây Merkle năng động (https://github.com/EYBlockcha...5). Nó tiết kiệm chi phí lưu trữ cây bằng cách chỉ lưu trữ các nút "ranh giới" thay vì tất cả các nút của cây, tuy nhiên, chi phí ghi của các thao tác thêm là O(log2(N)), có thể tiêu tốn đáng kể khí trên EVM.
ý kiến cơ bản
Tương tự như các cây Merkle tĩnh hiện có sử dụng bằng chứng Merkle để xác minh tính bao gồm, ý tưởng cơ bản của cây động trên chuỗi là sử dụng lại bằng chứng Merkle để cập nhật hàm băm gốc của cây sau khi xác minh tính bao gồm. Các bước cập nhật cây như sau:
Cho LeafIndex, oldLeafHash, newLeafHash, oldRootHash, bằng chứng
Tính toán rootHash với oldLeafHash và bằng chứng. Nếu tính toán rootHash != oldRoothHash, xác minh ngăn chặn không thành công; nếu không thì tiếp tục
Tính toán newRootHash bằng cách sử dụng newLeafHash và bằng chứng, trong đó bằng chứng được sử dụng lại, newRootHash sẽ là hàm băm gốc của cây được cập nhật
ứng dụng
ứng dụng
Merklized ERC20
Tiêu chuẩn ERC20 có thể được sửa đổi để Merklize cây (tài khoản, số dư). Bằng chứng Merkle là bắt buộc đối với bất kỳ hoạt động đúc/đốt/chuyển nhượng nào. Các ứng dụng Merklized ERC20 có thể:
Bỏ phiếu trên chuỗi - Bỏ phiếu đề xuất quản trị có thể sử dụng ảnh chụp nhanh ERC20 với chi phí thấp và tính toán phiếu bầu trên chuỗi dựa trên ảnh chụp nhanh mà không cần lưu giữ tất cả lịch sử thay đổi số dư ERC20 (Kết hợp) hoặc ảnh chụp nhanh ngoài chuỗi.
Khai thác thanh khoản từ xa - các hợp đồng trên chuỗi từ xa thực hiện airdrop/khai thác thanh khoản trên người dùng ERC20 cục bộ, trong đó ảnh chụp nhanh ERC20 thường xuyên được chuyển tiếp đến chuỗi khác thông qua một nhà tiên tri phi tập trung.
Mã mẫu có thể được tìm thấy ở đây:
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;


