使用Ethers.js在以太坊上创建和验证铭文

  • 木西
  • 发布于 7小时前
  • 阅读 78

前言本文将详细介绍如何利用Ethers.js库来创建个性化的区块链铭文,并深入探讨铭文技术的各项特性比特币相关概念总量:2100万枚最小单位:聪(sat)单位换算表单位中文名称英文名称换算关系BTC

前言

本文将详细介绍如何利用 Ethers.js 库来创建个性化的区块链铭文,并深入探讨铭文技术的各项特性

比特币相关概念

总量:2100万枚<br> 最小单位:聪(sat)<br> 单位换算表 单位 中文名称 英文名称 换算关系
BTC 比特币 Bitcoin 1 BTC
cBTC 比特分 Bitcent 0.01 BTC
mBTC 毫比特 Milli-Bitcoin 0.001 BTC
μBTC 微比特 Micro-Bitcoin 0.000001 BTC
sat Satoshi 0.00000001 BTC

什么是铭文

一种将数据(如文本、图片、音频、视频等)永久写入区块链的技术。通过Ordinals协议,将数据存储在区块链的某个最小单位(如比特币的“聪”)中,从而实现数据的不可篡改和永久存储。

铭文的技术实现

比特币铭文(通过Ordinals协议)

  • 核心原理:比特币铭文通过Ordinals协议实现,该协议为比特币的最小单位“聪”分配唯一编号(序号),用户可以将任意数据(如文本、图片、音频等)作为元数据写入到特定的聪中。

  • 技术细节:铭文数据存储在比特币交易的见证(Witness)字段中,利用隔离见证(SegWit)和Taproot升级提供的技术空间。

  • 创建过程

    1. 选择要铭刻的数据(如文本、图片等)。
    2. 将数据转换为适合存储的格式(如Base64编码)。
    3. 创建一笔比特币交易,将数据写入交易的见证字段。
    4. 发送交易到比特币网络,等待确认。

以太坊铭文(通过Ethscriptions协议)

  • 核心原理:以太坊铭文通过Ethscriptions协议实现,允许用户将数据写入以太坊交易的calldata字段。

  • 技术细节:数据以16进制字符串的形式存储在交易中,用户可以通过智能合约或直接发送交易来创建铭文。

  • 创建过程

    1. 将要铭刻的内容转换为16进制字符串。
    2. 创建一笔以太坊交易,将16进制字符串填入calldata字段。
    3. 发送交易到以太坊网络,等待确认。

铭文的应用场景

  • 数字艺术和收藏品:艺术家可以将作品直接嵌入区块链,创建独一无二的数字艺术品,这些艺术品可以在市场上进行交易。
  • 数字身份和所有权证明:铭文可以作为数字身份或所有权证明的形式,确保数据的真实性和不可篡改。
  • 智能合约和协议:企业可以使用铭文进行智能合约和协议的记录,确保交易的透明性和安全性。
  • 版权保护:创作者可以通过铭文技术在区块链上注册作品,确保作品的原创性和版权归属。

铭文的争议与挑战

  • 网络拥堵和手续费:铭文的大量使用可能导致区块链网络拥堵,增加交易手续费。
  • 对区块链本质的争议:部分比特币社区成员认为,比特币应保持其作为价值转移和存储的简单特性,而铭文的出现可能会使比特币网络变得复杂。

    代码实例实现以及相关说明

  • 文字铭文

    const { ethers } = require("hardhat");
    async function sendTextInscription() {
    // 替换为你的钱包私钥和目标地址
    const privateKey = "0xac0974xxxxxx";//钱包私钥
    // 替换为你的节点提供商URL
    const provider = new ethers.JsonRpcProvider("https://sepolia.infura.io/v3/{object_id}");
    const wallet = new ethers.Wallet(privateKey, provider);
    const strtoHex=(str)=>{
    return "0x"+Buffer.from(str,"utf-8").toString("hex")
    }
    const inscriptionContent='{"p": "erc-20","op": "deploy","tick": "boykayuri","max": "21000000","lim": "10000"}'//格式参考https://domo-2.gitbook.io/brc-20-experiment
    const hexData = strtoHex(inscriptionContent);
    // 构建交易
    const tx = {
    to: wallet.address,
    value: ethers.parseEther("0.0"), // 可以发送少量ETH作为交易的一部分
    data: hexData,
    // nonce: await provider.getTransactionCount(wallet.address),
    // gasLimit: 1000000, // 根据需要调整gas限制
    // gasPrice: ethers.parseUnits("20", "gwei") // 根据网络情况调整gas价格
    };
    
    // 签名并发送交易
    const txResponse = await wallet.sendTransaction(tx);
    console.log("Transaction Hash:", txResponse.hash);//拿到交易hash在区块浏览器上验证
    // 等待交易被打包进区块
    const receipt = await txResponse.wait();
    console.log("Transaction Receipt:", receipt);
    }
    sendTextInscription().catch(console.error);
  • 图片铭文

    
    const { ethers } = require("hardhat");
    const fs = require('fs');
    const path = require('path');

async function sendImageInscription() { // 替换为你的钱包私钥和目标地址 const privateKey = "5025c087dedcf32dxxxxx";//钱包私钥 const toAddress = "0xf39xxxxx";

// 替换为你的节点提供商URL const provider = new ethers.JsonRpcProvider("https://sepolia.infura.io/v3/{object_id}"); const wallet = new ethers.Wallet(privateKey, provider);

// 图片路径 const imagePath = path.join(__dirname, 'logo.jpg');//读取图片

// 读取图片并转换为Base64编码 const imageBuffer = fs.readFileSync(imagePath); const base64Image = imageBuffer.toString('base64');

// 构建铭文数据 const inscriptionData = data:image/png;base64,${base64Image}; // 将铭文数据转换为16进制字符串 const hexData = ethers.solidityPacked(["string"], [inscriptionData]);

// 构建交易 const tx = { to: toAddress,//转向目标地址 value: ethers.parseEther("0.0"), // 可以发送少量ETH作为交易的一部分 data: hexData, nonce: await provider.getTransactionCount(wallet.address), gasLimit: 1000000, // 根据需要调整gas限制 gasPrice: ethers.parseUnits("20", "gwei") // 根据网络情况调整gas价格 };

// 签名并发送交易 const txResponse = await wallet.sendTransaction(tx); console.log("Transaction Hash:", txResponse.hash);//拿到hash在区块浏览器上验证 // 等待交易被打包进区块 const receipt = await txResponse.wait(); console.log("Transaction Receipt:", receipt); }

sendImageInscription().catch(console.error);


* #### 验证图片

![屏幕截图 2025-07-09 172307.png](https://img.learnblockchain.cn/attachments/2025/07/rWCrnvZC686e3b31c439b.png)

![屏幕截图 2025-07-09 172605.png](https://img.learnblockchain.cn/attachments/2025/07/3J9OmPBs686e3b31a3cd5.png)
* #### 代码实例说明
* **供应商**:主要使用[infura供应商](https://www.infura.io/zh)的sepolia链,
* **合约说明**:不管是文字、图片、音视频铭文等最主要的区别在Tx中的data的不同,
* **验证浏览器**:验证发布的[sepolia区块浏览器](https://sepolia.etherscan.io/tx/0x3498e481cad6a4a92c27596da75ae811bcce2ecbfa3c59980e43338695dd2144)
* **文字铭文参考**:[文字铭文格式参考](https://domo-2.gitbook.io/brc-20-experiment)
### 总结
铭文技术为区块链带来了新的应用场景和可能性,但同时也引发了关于其对区块链本质和网络性能影响的讨论。
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
木西
木西
江湖只有他的大名,没有他的介绍。