{"content":{"title":"比特币全节点和索引器安装","body":">  🦜跟着Casey Rodarmor一起安装比特币全节点和Ord索引器(Part 1)\r\n\r\n本文是根据视频链接：[https://www.youtube.com/watch?v=zXlvkOSVM9M ](https://www.youtube.com/watch?v=zXlvkOSVM9M) 进行写作的。别小看这个视频，这是2023年2月份比特币铭文协议Ordinal创始人Casey Rodarmor手把手教大家安装比特币全节点和Ord索引器的第一个完整视频。这个视频发布后，Ordinal协议和BRC20就开始风靡全球Crypto行业，很多人都说这是比特币生态找到了第二曲线。很可惜这个视频到现在都才只有4000多次观看量。看来关注涨跌的人多，潜心研究所以然的人还是少啊。\r\n\r\n\r\n如果不想花43分钟看casey和erin打情骂俏，那么我们把这个视频内容摘录一下，再加上我自己的踩坑心得，希望可以让大家少走弯路。再次说明，我只是一个不成功的投资人和一个蹩脚的程序员，因为觉得铭文在未来2-3年都有创业和投资机会而学习，所以对不同投资水平和技术水平的人来说，我写的东西有的可能太浅了，有的可能太深了，还请多多包涵。\r\n\r\n\r\n\r\nCasey一开始打开Notepad就是写了一个日程，大概的流程如下：\r\n\r\n🎉[x] homebrew install\r\n\r\n🎉[x] bitcoincore install\r\n\r\n🎉[x] start bitcoin \r\n\r\n🎉[x] install cargo with rustup\r\n\r\n🎉[x] install ord server\r\n\r\n里面Casey给美女show了很多电脑技巧，也做了一个很好的MAC电脑使用和优秀程序员使用工具的科普。我想起大学的时候给学文科的同学show命令行和快捷键，Casey这个视频满足搞技术的男生的一切幻想。但是，大学里就是在同学面前吹吹牛皮，没有钱；在Crytpo领域，你技术好就可以在开源社区挣大钱了，不用再间接跟产品和销售打交道，有了钱自然就有颜如玉，从这一点看，技术男不搞币圈就入错行了。\r\n\r\n先说下我配置的情况，我是2023年的MacBOOK Pro，苹果的M2芯片，我先是在Bitcore.org里面下了图形化界面的安装包（bitcoin-25.0-arm64-apple-darwin.dmg），但是它安装后只有qt命令，没有我更喜欢更酷的bitcoind和bitcoin-cli等后台命令，所以还是要用到Casey第一小节提到的homebrew。\r\n\r\n🎉[x] homebrew install\r\n\r\n*Homebrew是一个包管理软件，自称是*The Missing Package Manager for macOS。我们Google Homebrew可以打开[https://brew.sh/](https://brew.sh)， 里面有一个安装脚本\r\n\r\n\r\n\r\n```\r\n/bin/bash -c \"$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)\"\r\n```\r\n\r\n在Macbook的终端里，输入就可以安装好。安装好以后我们进入第二步。\r\n\r\n🎉[x] bitcoincore install \r\n\r\n只需要在终端输入\r\n\r\n\r\n\r\n```\r\nbrew install bitcoin\r\n```\r\n\r\n就可以安装好bitcoin最新版。这非常强大。很多教程都是让去官网下载，然后解压，然后把bitcoincore里面的命令如bitcoin-cli，从usr的bin拷到全局的bin文件夹里，还要更新环境变量，没一点计算机基础的很快就晕了，有点基础的也容易在环境变量等地方反复配置，让人容易泄气。所以*Homebrew把这些都安排好了，你只需要一句话安装，就ok。*\r\n\r\n🎉[x] start bitcoin \r\n\r\n别小看这一步，不就是启动bitcoincore这个程序吗，很多坑。一般默认的bitcoincore，它的数据目录是在一个默认的地方比如 ~/Library/Application Support/Bitcoin/ ，但大家的硬盘都不够，流行的办法是要外挂一个2T的SSD（闪存），价格基本是600-800元，所以我们要启动程序，要用命令。这一点是Casey的视频没讲的，他们的电脑一上来就有1T的自带硬盘。我的硬盘名字叫Element，默认是挂载在/Volumes下，所以我启动需要这个命令，-datadir是说把数据目录放到Element盘下的bitcoin目录， -txindex要求一开始就索引。\r\n\r\n\r\n\r\n```\r\nbitcoind -datadir=/Volumes/Element/bitcoin -txindex\r\n```\r\n\r\n几个小点：\r\n\r\nA)我买的硬盘一开始在同步的时候老是同步失败，Bitcoin Core客户端在尝试将数据写入磁盘时遇到了一个严重的I/O（输入/输出）错误。错误信息“FileCommit: fcntl F_FULLFSYNC failed: 25”表明尝试对文件进行完全同步到磁盘的操作失败了。一开始我以为是权限问题，用sudo什么的都试过了，还是不行。\r\n\r\n后来我在网上看有一个经典的帖子讨论[https://github.com/bitcoin/bitcoin/issues/27972#issuecomment-1611123854 ](https://github.com/bitcoin/bitcoin/issues/27972#issuecomment-1611123854)，是因为硬盘的格式问题，我是windows和mac通用的ExFAT格式，这对bitcoin数据的写入有些不兼容，要先格式化为APFS。\r\n\r\nB)要现在Elements盘里加一个文件夹bitcoin才行，不然也通不过。\r\n\r\nC)最好一开始就保存好一个文件，bitcoin.conf，我总结如下内容最佳\r\n\r\n> txindex=1 \r\n>\r\n> server=1 \r\n>\r\n> daemon=1 \r\n>\r\n> rpccookiefile=.cookie \r\n>\r\n> datadir=/Volumes/Element/bitcoin blocksdir=/Volumes/Element/bitcoin rpcauth=nextdao:cca838b4b19bdc6093f4e0312550361c$213834a29e8488804946c196781059a7ee0ac2b48dbf896b4c6852060d9d83dd \r\n>\r\n> rpcallowip=127.0.0.1\r\n>\r\n> rpcallowip=172.0.0.0/8 \r\n>\r\n> rpcallowip=192.168.0.0/16\r\n>\r\n> rpcbind=0.0.0.0\r\n\r\n然后把这个文件贴到/Volumes/Element/bitcoin 里面，这是权限最高的配置，bitcoincore就按这个来运行。 这里面都是啥含义？把它全部粘贴问chatgpt。\r\n\r\nD)这里的rpcauth=nextdao:cca838b4b19bdc6093f4e0312550361c$213834a29e8488804946c196781059a7ee0ac2b48dbf896b4c6852060d9d83dd 本质就是用户名为nextdao，密码是nextdao，这是粘贴之前nextdao给atomical协议写的教程，也算致敬他们直接用了。有了这段话，就可以用bitcoin-cli -rpcuser=yourusername -rpcpassword=yourpassword getblockchaininfo 来登录，并运行代码，比如看getblockchaininfo （这是视频里casey花了很多时间回忆的命令，最后google到了，看这一段很花时间）。\r\n\r\n\r\n\r\n```\r\nbitcoin-cli -rpcuser=nextdao -rpcpassword=nextdaogetblockchaininfo\r\n```\r\n\r\nrpcauth很重要。如果你的比特币全节点在一个电脑，你要用另外一个电脑RPC，如果是明文用户名和密码容易被拒绝。这时你可能要排除bitcoin.conf的配置，防火墙问题，反复查很久原因。其实是因为新版的RPC，要求更安全的连接方式。\r\n\r\n如果你成功运行bitcoincore了，你的数据目录Element\\bitcoin是很干净的，里面还有几个重要文件夹如blocks(里面一大堆dat文件）,chainstate（里面一大堆ldb文件），indexes（里面也有很多ldb），文件如debug.log，bitcoin.conf\r\n\r\n如果你要看看日志，在终端新建窗口，输入\r\n\r\n\r\n\r\n```\r\ntail -f debug.log\r\n```\r\n\r\n在这一小节，还有一些命令经常用，比如停止bitcoin程序。因为你粘贴了bitcoin.conf，所以要重启\r\n\r\n\r\n```\r\nBitcoin-cli stop\r\n```\r\n\r\n🎉[x] install cargo with rustup\r\n\r\n这主要是安装rust语言环境以及安装包，cargo 类似Python里的pip，Nodejs的npm。看视频的[28:30](https://www.youtube.com/watch?v=zXlvkOSVM9M&t=1710s) Install cargo with rustup 或者直接问chatgpt.\r\n\r\n\r\n\r\n🎉[x] install ord server\r\n\r\n一句代码\r\n\r\n\r\n\r\n```\r\nord server\r\n```\r\n\r\n安装索引器。在安装之前，建议大家用一个python程序，看看你能否远程对你运行的bitcoincore编程？这是我跟chatgpt磨合很久写出来的\r\n\r\n\r\n\r\n```\r\nimport requests\r\nimport json\r\n\r\n# 指定比特币RPC服务器的地址和端口\r\n# rpc_url = \"http://192.168.10.57:8332\"\r\n# rpc_url = \"http://127.0.0.1:8332\"\r\n# rpc_url = \"http://192.168.10.11:8332\"\r\n# rpc_url = \"http://221.216.144.195:8332\"\r\n# rpc_url = \"http://192.168.1.96:8332\"\r\nrpc_url = \"http://192.168.1.86:8332\"\r\n# 指定比特币RPC用户名和密码\r\nrpc_credentials = (\"nextdao\", \"nextdao\")\r\n\r\n\r\ndef bitcoin_rpc(method, params):\r\n    payload = {\r\n        \"method\": method,\r\n        \"params\": params,\r\n        \"jsonrpc\": \"2.0\",\r\n        \"id\": 0,\r\n    }\r\n    print(\"Request payload:\", payload)  # 打印请求内容\r\n    response = requests.post(rpc_url, json=payload, auth=rpc_credentials)\r\n\r\n    # 打印响应的状态码和文本内容\r\n    print(\"Response status code:\", response.status_code)\r\n    print(\"Response text:\", response.text)\r\n\r\n    if response.status_code == 200:\r\n        return json.loads(response.text)\r\n    else:\r\n        raise Exception(\"RPC request failed with status code {}: {}\".format(response.status_code, response.text))\r\n\r\n\r\n# 示例：调用getblockchaininfo和getnetworkinfo 和 getblockcount\r\ntry:\r\n    result = bitcoin_rpc(\"getblockchaininfo\", [])\r\n    print(result)\r\nexcept Exception as e:\r\n    print(f\"Error: {str(e)}\")\r\ntry:\r\n    result = bitcoin_rpc(\"getnetworkinfo\", [])\r\n    print(result)\r\nexcept Exception as e:\r\n    print(f\"Error: {str(e)}\")\r\ntry:\r\n    result = bitcoin_rpc(\"getblockcount\", [])\r\n    print(result)\r\nexcept Exception as e:\r\n    print(f\"Error: {str(e)}\")\r\n```\r\n\r\n如果成功，会报200，给类似如下的结果。注意我记录当日当前比特币是824858个区块，80多万个吧。如果你的数字差距太大要注意。\r\n\r\n\r\n\r\n```\r\nRequest payload: {'method': 'getblockchaininfo', 'params': [], 'jsonrpc': '2.0', 'id': 0}\r\nResponse status code: 200\r\nResponse text: {\"result\":{\"chain\":\"main\",\"blocks\":824858,\"headers\":824858,\"bestblockhash\":\"00000000000000000003c42c52579dfb4bd3a9dbc64997b634bf94c0a323772d\",\"difficulty\":73197634206448.34,\"time\":1704718871,\"mediantime\":1704713627,\"verificationprogress\":0.9999998181796409,\"initialblockdownload\":false,\"chainwork\":\"000000000000000000000000000000000000000064a1bfc6d211b8d17258c8e3\",\"size_on_disk\":612770777418,\"pruned\":false,\"warnings\":\"\"},\"error\":null,\"id\":0}\r\n\r\n{'result': {'chain': 'main', 'blocks': 824858, 'headers': 824858, 'bestblockhash': '00000000000000000003c42c52579dfb4bd3a9dbc64997b634bf94c0a323772d', 'difficulty': 73197634206448.34, 'time': 1704718871, 'mediantime': 1704713627, 'verificationprogress': 0.9999998181796409, 'initialblockdownload': False, 'chainwork': '000000000000000000000000000000000000000064a1bfc6d211b8d17258c8e3', 'size_on_disk': 612770777418, 'pruned': False, 'warnings': ''}, 'error': None, 'id': 0}\r\nRequest payload: {'method': 'getnetworkinfo', 'params': [], 'jsonrpc': '2.0', 'id': 0}\r\n```\r\n\r\nA)多用which，看看你装的cargo， ord 服务器都在哪？这也是视频多次提到的。\r\n\r\nB)我运行ord的时候出现找不到cookie: error: cookie file `/Users/aaronzhang/Library/Application Support/Bitcoin/.cookie` does not exist 这是因为登录的文件找不到了，需要复制一下\r\n\r\n\r\n\r\n```\r\nln -s /Volumes/Element/bitcoin/.cookie /Users/aaronzhang/Library/Application\\ Support/Bitcoin/.cookie\r\n```\r\n\r\nOrd运行后，就一直监听80窗口，一旦比特币核心程序有新的区块同步，他就索引。\r\n\r\n打开 http://localhost ，如果你看到跟http://ordinals.com 类似的样子，你就安装这个索引器成功了。\r\n\r\n看看视频里男主和美女是如何庆祝的，[41:20](https://www.youtube.com/watch?v=zXlvkOSVM9M&t=2480s) Load local Ordinals Block Explorer 看那个clock,如果你的程序里也有，你也会有成就感。恭喜你，开始挣钱了。\r\n\r\n------\r\n\r\n*欢迎关注本文作者的twitter并提出宝贵意见：https://twitter.com/zzmjxy*\r\n\r\n## 扩展\r\n\r\n[**🦜跟着Casey Rodarmor一起安装比特币全节点和Ord索引器(Part 1)**](https://learnblockchain.cn/article/8513)\r\n[**🐧Electrumx安装心得全纪录(Part 1)**](https://learnblockchain.cn/article/8515)\r\n[**🐧Electrumx安装心得全纪录（Part 2）**](https://learnblockchain.cn/article/8516)"},"author":{"user":"https://learnblockchain.cn/people/21122","address":null},"history":"bafkreicmzmgrkhu6bamwcm5uvq53cjcqlkgdm4hipbm3xdkwrovdchyghe","timestamp":1719483189,"version":1}