# BTC上的NFT(二) - 在比特币链上铸造一个NFT

By [AKLabs](https://paragraph.com/@aklabs-2) · 2023-03-07

---

**这不是一篇简易教程，本文的目的是尽量让大家通过实操的方式巩固之前的原理，目前BTC上的NFT还处于非常早期的阶段，有非常多的DYOR要做，只有你清楚地了解自己在做什么，才不会犯错。**

[上一篇文章](https://mirror.xyz/aklabs.eth/x5VloP1qEpQa3jCuJjX88LGqeGLmMeItW-3zBPnysVI)我们介绍了Ordinal的原理以及如何在BTC链上铸造自己的铭文（或称为NFT），现在我们要实际操作一下NFT的铸造、转移和接收。目前在BTC上铸造NFT有非常多的方式，但是回归到本质会有以下几种方式：

1.  通过BTC主网支付进行铸造或通过闪电网络进行铸造，这里可以使用自建节点和第三方节点完成。该模式适用于自己铸造NFT或者铸造项目方提供文件并允许自行铸造的NFT项目（FCFS）
    
2.  项目方提供的闪电网络进行支付并铸造。该模式适用于项目方有一定技术实力并且搭建好了闪电网络基础设施仅支持闪电网络支付的项目。这类项目只需找到支持闪电网络的钱包并支付，接收地址选择支持taproot的地址即可
    

第二种方式视不同的项目要求而定（这里主要是使用的钱包不同），我们预测第二种方式大概率是未来成熟项目的主流方式。在第二种方式没有被广泛采用之前第一种方式还是被大多数项目所采用，设置也更加复杂，所以这里着重介绍第一种方式。

软件安装
----

开始前根据你的需求可能需要准备1个BTC的全节点和2个钱包：

*   BTC全节点：铸造NFT需要通过全节点来发送，全节点可以用自己的电脑或者云服务器搭建一个，也可以用[第三方的全节点](https://ordinalsbot.com/)服务；转移NFT理论上可以使用第三方全节点，但是如果你要执行sat控制，则需要自建全节点和ord。这个全节点只需要同步最新的交易数据即可，不需要开启挖矿功能。
    
*   ord钱包：这个是ordinals官方开发的可以用作索引、区块链浏览器的命令行钱包，可以用于铸造、接收和发送铭文。如果你有发送NFT的需求，目前来看建议安装这个钱包，且需要搭配全节点使用。其他的需求都可以通过其他方式代替。截止到目前，ordinals官方正在开发一个有用户界面的BTC钱包，未来有了这个钱包之后，普通用户才能更方便的操作和管理自己的NFT。
    
*   Sparrow钱包：如果你能通过操作ord(当前只支持命令行)钱包进行操作的话，该钱包就不是必须的。请注意，该钱包只能作为接收钱包，除非你非常清楚自己要做什么，否则不要从这个钱包中做任何的转账操作。
    

### BTC全节点搭建

> 目前需要手动发送自己的NFT并执行sat控制的，需要有自建全节点；铸造NFT时如果没有特殊需求是可以通过第三方节点完成的

先去比特币[官网](https://bitcoincore.org/en/download/)下个Bitcoin core安装包，支持 Windows/MacOS/Linux操作系统，安装的硬件要求也比较低，唯一注意的是硬盘最好给大一点，建议1TB。这里注意，一定要用Bitcoin core 24.0.0+的版本。

![](https://storage.googleapis.com/papyrus_images/c5bb7474e41359b5d303ec421cd12fc86b55af93e8eca70eefaec1e9e2d97f4b.png)

![](https://storage.googleapis.com/papyrus_images/4bd1d166951f318237c629b1ee70e3ab1708b56bc6ab2e9acdbd67efc35f0862.png)

我们这里以Windows系统做演示。下载成功后点击运行即可

![](https://storage.googleapis.com/papyrus_images/c28399b5910fbad2e7b6b44fab20b80972204f06ca60832719f27f34b869655f.png)

第一次运行需要同步所有历史区块数据，这个同步时间视大家的网络和配置情况而定，最快的6小时同步完，慢的话可能需要几天。

![](https://storage.googleapis.com/papyrus_images/b1516e3181b6ced321dab3febb970106bb5dd4475314d807e7aa0439f83b1de3.png)

如果同步完数据会显示这个

![](https://storage.googleapis.com/papyrus_images/872b1979153a0ec59b46965c7f3517c6491f97c27f86222a35255a5675e38f1c.png)

接下来我们需要配置下windows的环境变量，以保证能在控制台运行相关命令

![](https://storage.googleapis.com/papyrus_images/1862892e941f1ac66625e7a1cd88652531f7e1f29e88100c20d96df8b18546db.png)

先找到你的Bitcoin core的安装目录下的daemon文件夹，比如我的是装在`C:\Program Files\Bitcoin`下的，所以路径就是`C:\Program Files\Bitcoin\daemon`，并按照以下设置系统的环境变量

![](https://storage.googleapis.com/papyrus_images/5c3e9a00f1b92a31297ef2c45d92eb9fe26448223fdb0861fdc781c2c150a703.png)

接下来打开命令行，并执行`bitcoind -version` 如果能提示版本，就说明环境变量配置成功了

![](https://storage.googleapis.com/papyrus_images/6dbffe07cc75bf5a5a01e32d8cd0e23c58baff26586a738d319e3f3aba7bdd34.png)

![](https://storage.googleapis.com/papyrus_images/a4d6043e8367fbb83912577cd1041e8d6c11ac05a7b6f1906cd244a08ee8ffa5.png)

下面需要开启比特币节点的交易索引。**请先关闭之前打开的Bitcoin core图形软件**，然后打开一个新的CMD命令行，并运行 `bitcoind -txindex`，等待执行（需要一直保持运行才能正确连接全节点）。

![](https://storage.googleapis.com/papyrus_images/05ded4b7fe624fac1c2a9a4ac643ec135c3450271f80a22a6007a61b4a929209.png)

![](https://storage.googleapis.com/papyrus_images/1bbc51fca3cc87041972d634e5a476efc4b2bfb3d0ea6450dd8c609e6d2b2ce3.png)

如果执行成功，新开一个CMD命令行，执行`bitcoin-cli getblockcount`应该就能看到最新的区块高度了，这就说明安装没有问题。

![](https://storage.googleapis.com/papyrus_images/d571c0fedbf9be8acb27c422f05a8736900ff9c9aabb8c80b126b6cfc6bd1eb0.png)

接下来就是安装ord了

### ord安装

> Bitcoin core提供了比特币全节点和钱包，但是Bitcoin core钱包**不能创建NFT**也**不执行sat控制**。所以这需要用到ord，ord不实现自己的钱包（官方正在开发新的钱包），因此，目前需要通过ord wallet的相关命令与Bitcoin core钱包交互并执行sat控制。目前ord的应用场景：
> 
> 1.  有自建节点，并且需要用ord来铸造NFT的
>     
> 2.  有自建节点，并且需要手动发送自己的NFT并执行sat控制的
>     

ord需要跟BTC全节点安装在同一台电脑上，去官方Github[下载ord](https://github.com/casey/ord/releases)，并根据自己的系统选择版本即可。

![](https://storage.googleapis.com/papyrus_images/27b583e36534cfe07648625e517ce6e045a9941fa5cab85d5e425949b7c800f9.png)

下载完成后解压文件

![](https://storage.googleapis.com/papyrus_images/30fd14a9d763647b52e7c832b523727871d46ad613d0db67f7d2455323fdde72.png)

把解压后的文件全部复制到 Bitcoin的daemon文件夹下

![](https://storage.googleapis.com/papyrus_images/4e34f25da102425df5aed656e1b215b1d28c5b809133d2347e6aa61a202ba145.png)

重新打开CMD，并运行`ord --version`，能看到版本之后就说明ord安装成功了

![](https://storage.googleapis.com/papyrus_images/5da00e3c2c6a9d99384dfe4fa58933cda4bc742c7670426400d068a571dcf245.png)

然后运行`ord wallet create`你就可以得到一个新的助记词来管理你的钱包了（**这个助记词请务必记下！**）

如果你之前已经有助记词了，可以通过命令`ord wallet restore {your mnemonic}`来导入你之前的助记词。

![](https://storage.googleapis.com/papyrus_images/018118347609e9f207d77ff40a26531a706ebcd0049cfc4b89b581bc68009129.png)

完成之后执行一下`ord wallet balance`来建立索引，这一步需要比较长的时间。注意：该过程可以使用Ctrl+c中断，并且下一次执行时会接着上一次，但是**不能强行中断**，强行中断会导致出错。

![](https://storage.googleapis.com/papyrus_images/d023061ee3f5e01656c3c9ebd192d18bbbee5f74bf0e6346b60a64bfa0caf2fa.png)

至此，ord也已经安装完毕，等待后续使用。

### Sparrow钱包安装

> Sparrow钱包目前并不能执行sat控制，但因为他兼容ord，并且有一个可视化界面，所以在现阶段推荐使用。

当收到一个NFT之后，可以通过Sparrow进行可视化管理，但这一步不是必须的，只是为了方便查看。推荐官方[下载](https://sparrowwallet.com/download/)Sparrow钱包。

![](https://storage.googleapis.com/papyrus_images/cc34f0aee5fee6acc82845ea172a1afcdfb9672edd952cc9f8ba4cf061fe0ea8.png)

建议选择公共服务器，连接公共服务器意味着可以与运行服务器的任何人共享你的公钥信息（包括你的隐私），所以不建议对任何大资金执行此操作。这里为了简单起见均使用公共服务器。

![](https://storage.googleapis.com/papyrus_images/ea04ce5f596fa9ab00d3d57fb9627c03d6426ccce43cdf3d49fb821976fc177c.png)

创建一个钱包

![](https://storage.googleapis.com/papyrus_images/ec4838dbf700227855b18f14008a9dbd6030deb3018232b3d6d7a10fbb00b013.png)

![](https://storage.googleapis.com/papyrus_images/24dd794f7ac8d078d21647cc61db2a98b5c6014990551f73a25835504ac26515.png)

![](https://storage.googleapis.com/papyrus_images/5a98e54c1d6eee0bfe6dd16ff8cb423ab9cb94f225c6357bcaf64c7dc7d1002b.png)

![](https://storage.googleapis.com/papyrus_images/ecc7f6db0355e75cb1e88aa27fb9ded8ca6d08afc31c235f73831027dee34021.png)

![](https://storage.googleapis.com/papyrus_images/01a5653fb0a0f123316cce5b38ac66af22f02c881b0b9c528bfb7d0b7a954f3e.png)

在这里你可以随机一个助记词或者导入之前通过ord生成的助记词，这里选择导入跟ord生成的助记词。

![](https://storage.googleapis.com/papyrus_images/b41da6e25b52129ad5189f15e5136ce36079d3159e62e330e36bb6546f48c362.png)

![](https://storage.googleapis.com/papyrus_images/156cfbeff14e4bed6e836e8199509bf9aa6677bc65995b6d653e07d22d2ac0d2.png)

这样就可以把你的助记词导入到Sparrow钱包了。后续我们通过Sparrow钱包来进行NFT的管理。

铸造NFT
-----

### 通过第三方铸造NFT

访问[ordinalsbot网站](https://ordinalsbot.com/)，上传你需要铸造的NFT文件，填写你需要接收的NFT地址（地址建议是bc1开头），点击"Submit & Pay Invoice"后会弹出付款地址和付款二维码，付款即可。这个比较友好的是付款支持闪电网络和比特币主网。因为比特币网络较慢，所以付款之后可能10～60分钟才可能会正式被网络确认生效。

![](https://storage.googleapis.com/papyrus_images/689d27887abdb144214149fbc027ff1e24b9af8e4c46df400d9339a73532412d.png)

![](https://storage.googleapis.com/papyrus_images/f842815d64a5bf18d8340a3a9f283985fceb315c737ce252e4e8e055ddde7b8b.png)

成功之后，你铸造的NFT就会在你填写的接收地址中了。注意，用这个第三方工具会收取额外的费用。

### 通过自建全节点铸造NFT

如果你同步好了BTC全节点以及安装了ord之后，就可以使用全节点来铸造NFT了。先确保你的BTC全节点正通过CMD运行且开启了txindex。后面所有要用到全节点做的，这个窗口都不能关闭。

![](https://storage.googleapis.com/papyrus_images/f66467536763101b1342f76a00a06db566d3ccf36577da794ac68d84b3d8ce6b.png)

打开新的CMD控制台程序，如果你之前在安装ord的时候已经创建了新的助记词，就可以通过输入`ord wallet receive`命令获取你的第一个BTC地址（你会看到你的地址是以bc1开头的），注意，如果你执行多次该命令，会生成不同的地址。

如果你需要导入助记词，可以通过命令`ord wallet restore "{your mnemonic}"`来导入。目前无法导入多个助记词，如果你之前已经有助记词了，需要更换新的助记词时，会提示下图，需要到指定目录下删除之前的钱包文件。

![](https://storage.googleapis.com/papyrus_images/dd4a1b30149150817c767f6eb92cb96a88e8dbf73b603269c50fc4922a14f332.png)

接下来，我们就可以给之前显示的BTC地址转一笔小额BTC来准备后续铸造的矿工费了。注意，这笔钱需要包含铸造NFT的费用以及预留未来要转移NFT的矿工费，NFT文件越大，需要的费用越高，大家在铸造前可以通过[ordinalsbot](https://ordinalsbot.com/)或[inscribenow](https://inscribenow.io/)通过上传相同的文件来确定当前网络的大致费用。这笔钱可以直接从交易所提现过来或者用自己另外的BTC钱包进行转账。这里需要注意的是因为付款地址是Taproot格式（bc1开头）的地址，该格式地址目前很多交易所和钱包都不支持，所以得先确定是否支持才行。这里为了方便，我在Sparrow钱包中又新导入了一个助记词来专门管理我的转账资金并给上面的地址转账。

![](https://storage.googleapis.com/papyrus_images/1755a1de552353f9eccf5999fcbc9bc1d7521261cd042c9a768bfd021cc0f96d.png)

转账成功后可以运行`ord wallet balance`查看资金到账情况，如果你是第一次执行该命令，它会首先去建立所有历史的索引，这一步会非常耗时，请耐心等待。

收到资金后我们就可以开始正式铸造我们的NFT了，我们需要把需要铸造的文件放到电脑上，然后通过命令`ord wallet inscribe --fee-rate {n sats/vB} {FILE}` 来执行，其中{n sats/vB}是指矿工费率，该费率是当前比特币网络的小费；{FILE}是指文件的路径。下面我们实际铸造一个NFT：

![](https://storage.googleapis.com/papyrus_images/3a2d738b836729377ee7ad6695aaebe268c599c5605012554631442e7d82baea.png)

根据你给的费率（fee rate）需要等待一段时间才能被网络打包，如果打包成功，你就可以通过返回的inscription字段去查询，比如：[https://ordinals.com/inscription/82896c6f23211debedf2b9a080335c87df11e0c6b45f39f891e8e18f4d35e8cbi0。这样我们就在比特币网络上铸造了我们的第一个NFT。](https://ordinals.com/inscription/82896c6f23211debedf2b9a080335c87df11e0c6b45f39f891e8e18f4d35e8cbi0%E3%80%82%E8%BF%99%E6%A0%B7%E6%88%91%E4%BB%AC%E5%B0%B1%E5%9C%A8%E6%AF%94%E7%89%B9%E5%B8%81%E7%BD%91%E7%BB%9C%E4%B8%8A%E9%93%B8%E9%80%A0%E4%BA%86%E6%88%91%E4%BB%AC%E7%9A%84%E7%AC%AC%E4%B8%80%E4%B8%AANFT%E3%80%82)

我们可以通过命令`ord wallet inscriptions`查看你所拥有的NFT的对应内容

![](https://storage.googleapis.com/papyrus_images/61723b8db337cf39be4c97db39c94ed8d91f4e7bf24a9e7524cc5e0d7a2f6f6b.png)

也可以通过explorer来查看我们的NFT

![](https://storage.googleapis.com/papyrus_images/fb529dc6e98c510f25e56bc9fa647ba242a3c224bdd03b93956ab9d440452a8c.png)

保管NFT
-----

因为本质上NFT是被铭刻在1个sat（1聪，也是比特币上的最小单位）上的，这个sat又是被保存在UTXO里的，所以要保管你的NFT其实就是保证这个sat不会被非控制地花费掉。在没有更加友好的钱包出来之前，最稳妥的做法是接收到的NFT就不要再次转移了，如果非要转移，建议当前使用ord和Sparrow来完成转移。

发送NFT
-----

### 方法一：使用ord来发送NFT

ord做了很好的NFT管理，发送NFT也相对简单，只需要通过命令`ord wallet inscriptions`找到你所有的NFT的inscription\_id

然后通过发送命令`ord wallet send --fee-rate <FEE_RATE> <ADDRESS> <INSCRIPTION_ID>`指定你要发送的inscription和地址即可，执行成功后下面会返回交易hash，可以通过比特币的explorer来查询你的交易是否已经被打包。这时我们就通过ord完成了比特币NFT的发送

![](https://storage.googleapis.com/papyrus_images/ab6b1828d551801b9e5a323082a02ac84781a17e6596ca6b3bd025158da5bfca.png)

### 方法二：使用Sparrow来发送NFT

当你把有对应NFT的地址对应的助记词导入到Sparrow之后，你应该可以在Sparrow钱包中找到有NFT的那笔UTXO，找到之后可以给这笔UTXO设置备注，方便管理。

![](https://storage.googleapis.com/papyrus_images/c83fe8bcd746817c8198928d749bdfb7cf67e51a85964ef4791c2ea5cca50c09.png)

如果你的钱包里有多笔资金，并且未来要用Sparrow去交易的话，建议冻结这笔UTXO（注意，冻结操作只适用于Sparrow钱包，如果使用其他钱包则无效）

![](https://storage.googleapis.com/papyrus_images/7f6ae9517e8e87289d3321f671725ce597fb416173de117c13687826107395ca.png)

接下来就可以用Sparrow去发送NFT了。

![](https://storage.googleapis.com/papyrus_images/8c44ff1ae2332e8584582ccef9b0eafef4963fd8d838d6795cebdefd81a005be.png)

![](https://storage.googleapis.com/papyrus_images/0c8d3f2e2806510ca11e6642300aad6d56e347359ec3af83ed0a2bdbd6a5c493.png)

![](https://storage.googleapis.com/papyrus_images/2b7e16bd0d36c90daa076039afe86b7a85f6cf7b73afd59507e01a4757a27aeb.png)

![](https://storage.googleapis.com/papyrus_images/f90624afb97703c36119c81eea6084b78532f87c8722cce092288b35e8b1262c.png)

![](https://storage.googleapis.com/papyrus_images/927871118f9fb7b81a94cc8468dc10c6bad4bdea94d27d1e4c98e11916d78a51.png)

PS：这里需要注意的是Sparrow目前并没有sats管理，所以**在极端情况下有可能会导致NFT丢失**，请不要轻易使用Sparrow发送你的NFT，除非你知道自己在做什么。特别是该NFT被多次转移后，每次转移到新的地址时，UTXO中的sats数量都会减少，减少到一定程度后再次转移就需要通过多个UTXO完成，这时候需要务必小心。

总结
--

如果你准备深度参与BTC上的NFT，建议最好先了解BTC及Ordinals的基础原理，建议自己搭建全节点参加；如果你只是想感受下BTC上NFT的魅力，也可以用第三方工具完成。目前市面上已经有了一些相对好用的工具，下一篇我们来介绍下BTC上围绕Ordinals建立的生态。

**关注AK Labs Twitter**

[https://twitter.com/0xAKLabs](https://twitter.com/0xAKLabs)

---

*Originally published on [AKLabs](https://paragraph.com/@aklabs-2/btc-nft-nft)*
