# 利用IPFS搭建ENS博客托管 **Published by:** [Leter.io](https://paragraph.com/@leter/) **Published on:** 2022-08-25 **URL:** https://paragraph.com/@leter/ipfs-ens ## Content IPFS被诟病存在各种问题,而且使用体验也不尽如人意,但它已经成为实际上的Web3基础设施。与Torrent类似,想要获取到网络上的文件就必须通过专用的程序来进行访问,而一些第三方提供的服务存在例如网络速率、使用流量等方面的种种限制;但他们却也提供了最快快捷的接入方式。创建托管项目理论上只要将文件存放在本地并上传至IPFS网络,其他主机就可以直接获取到相关文件。然而由于P2P传输的限制,实际访问速度可能较为缓慢,同时如果本机出现单点故障,也会造成无法访问的问题。 为了实现从Github储存库进行自动化同步,我选取了4everland作为托管提供商。同样的,也可以选择使用fleek进行托管,或是直接将生成好的静态文件存放至任意提供PIN服务的地方,如web3.storage。 首先通过MetaMask或其他兼容钱包执行签名进行登录。Log In待登录完成后选择右上角的 "New Project" 创建新项目,并从Github进行同步,之后就可以看到已经部署好的项目。Project设置ENS解析将IPFS内容设置为ENS解析有三种形式。直接作为IPFS内容引入,或通过IPNS通过HASH或DNSLINK形式进行引入。由于每次同步都会生成全新的CID,因此如果使用IPFS方式进行解析,每次都需要重新上链,成本较为高昂,因此着重介绍使用IPNS进行解析的方案。ENSLink使用DNSLINK需要准备一个外部域名,通过设置_dnslink的TXT解析,使得例如"dnslink=/ipfs/QmbkR54w3RGgvQrSXeoan6E8ABzVV9g851Krd6JwL9Z8j6"的IPFS能被域名所反向解析。但是由于ContentHash和IPFS对于CID的离谱转码,无法直接在ENS.domains进行设置,因此可以直接前往Etherscan进行合约交互。选择写入,使用setContenthash方法,这时需要我们输入node和hash值。 由于ENS内部会将注册好的域名转换为派生散列,因此我们需要先获取转换后的node值,此处我们使用Node.js实现进行。 首先安装依赖库npm install @ensdomains/eth-ens-namehash -S,然后使用如下实现查询生成值:var namehash = require('@ensdomains/eth-ens-namehash') var hash = namehash.hash('sakuradream.eth') //转换ENS地址 console.log(hash) 同样地,我们也需要获取转换后的hash值,该值采用了多重转换,可以使用以下实现: 安装依赖:npm install -g content-hash multihashes bs58const contentHash = require('content-hash') const multihashes = require('multihashes') const bs58 = require('bs58') const content = multihashes.encode(Buffer.from('sakuradata.com'), 'identity') //转换DNSLink地址 const address = bs58.encode(content) const racontent = contentHash.encode('ipns-ns', address); console.log("UTF8: ",content) console.log("BASE58: "+address) console.log("ContentHash: 0x"+racontent) 然后在Etherscan链接上钱包,并将生成好的的值对应填写入,发送交易与合约进行交互即可,待交易被打包后就可以访问例如sakuradream.eth.link的地址来进行访问。后续的IPFS CID可以直接通过修改DNSLink的TXT记录进行。IPNS相对于DNSLink而言,IPNS无疑简单许多。你可以通过本地的IPFS客户端生成全新的IPNS地址,并在客户端内为其绑定指定的IPFS地址。或者之前复制前述4everland项目中提供的IPNS地址来进行设置,当然你甚至可以直接在项目页面直接用你的钱包发出设置交易。查看博客页面如果你使用了一个支持ENS的浏览器,例如Brave或是Opera,或是浏览器上安装了MetaMask插件,可以直接通过你的ENS地址进行访问。或者在你的ENS域名后面添加.link或者.limo来使用公开的网关进行访问。 如果一切顺利,那你只需要稍等片刻,就能够看到你刚刚所搭建好的博客啦~参考链接https://github.com/wealdtech/coredns-ens/issues/3https://github.com/ensdomains/ens-app/issues/849https://docs.ens.domains/contract-api-reference/name-processing ## Publication Information - [Leter.io](https://paragraph.com/@leter/): Publication homepage - [All Posts](https://paragraph.com/@leter/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@leter): Subscribe to updates