前言本文将详细介绍如何利用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协议实现,该协议为比特币的最小单位“聪”分配唯一编号(序号),用户可以将任意数据(如文本、图片、音频等)作为元数据写入到特定的聪中。
技术细节:铭文数据存储在比特币交易的见证(Witness)字段中,利用隔离见证(SegWit)和Taproot升级提供的技术空间。
创建过程:
核心原理:以太坊铭文通过Ethscriptions协议实现,允许用户将数据写入以太坊交易的calldata
字段。
技术细节:数据以16进制字符串的形式存储在交易中,用户可以通过智能合约或直接发送交易来创建铭文。
创建过程:
calldata
字段。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);
* #### 验证图片


* #### 代码实例说明
* **供应商**:主要使用[infura供应商](https://www.infura.io/zh)的sepolia链,
* **合约说明**:不管是文字、图片、音视频铭文等最主要的区别在Tx中的data的不同,
* **验证浏览器**:验证发布的[sepolia区块浏览器](https://sepolia.etherscan.io/tx/0x3498e481cad6a4a92c27596da75ae811bcce2ecbfa3c59980e43338695dd2144)
* **文字铭文参考**:[文字铭文格式参考](https://domo-2.gitbook.io/brc-20-experiment)
### 总结
铭文技术为区块链带来了新的应用场景和可能性,但同时也引发了关于其对区块链本质和网络性能影响的讨论。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!