基于 IPFS 的去中心化短链接服务

短链接服务国内外有很多,如免费的服务域名 t.cn,t.co, url.cn。但由于服务由公司提供,一旦公司关停服务,原来生成的短链接就面临没法访问的风险。如 google 就把之前的 goo.gl 域名停用了,当然之前生成的链接目前还提供服务。鉴于此,我们提供了一个基于 IPFS ,永久有效,不受任何中心化公司影响的短链接服务 DtinyUrl

你可以访问任意生成链接跳转到你的目标网址,当然如果你有自己的 IPFS 节点,也可以改成自己的节点地址。

我们提供了 api 接口供你使用,可以通过它开发一些插件来提高效率,如 Alfred workflow,捷径,浏览器插件。这里提供一个 workflow 版本。

FAQ

  1. IPFS 的 gateway 地址也是基于域名的,如何保证自己生成的链接不因某些原因被屏蔽。
即使如 gateway.ipfs.io 之类的域名被屏蔽,你也可以使用其他 gateway 域名。或者自己运行一个节点,只要能连上其他节点,那么直接可以在本地访问到 IPFS 网络。
  1. 生成的短链接地址不够短

    这个问题确实存在,所以提供了两种类型的地址
    (1) http://t.bdaily.club/ek5wz 此类地址和其他短链接服务一样,中间会经过 Server 跳转一次到 IPFS。
    (2) https://gateway.ipfs.io/ipfs/QmT2AKLygsgMa6r2AvxiJP31JTqSMMKCVK4FHKXiTCX3bR 这类地址长度取决于 hash QmT2AKLygsgMa6r2AvxiJP31JTqSMMKCVK4FHKXiTCX3bR 的长度。

基于libp2p的http代理

这是一个 ipfs 官方的例子,基于 libp2p 模块构建一个 http 代理。proxy.go

1
2
3
4
5
6
7
8
9
10
11
                                                                                                    XXX
XX XXXXXX
X XX
XXXXXXX XX XX XXXXXXXXXX
+----------------+ +-----------------+ XXX XXX XXX XXX
HTTP Request | | | | XX XX
+-----------------> | libp2p stream | | HTTP X X
| Local peer <----------------> Remote peer <-------------> HTTP SERVER - THE INTERNET XX
<-----------------+ | | | Req & Resp XX X
HTTP Response | libp2p host | | libp2p host | XXXX XXXX XXXXXXXXXXXXXXXXXXXX XXXX
+----------------+ +-----------------+ XXXXX

为了能够代理 HTTP 请求,我们首先创建一个本地节点监听 localhost:9900。 HTTP 请求通过 libp2p 流建立隧道到远程节点,然后执行 HTTP 请求,将请求结果返回给本地节点,最后发送给用户。

注意,这是一个很简单的代理,没有处理 header, 也不支持 HTTPS, proxy.go 代码都注释过了,每一步都有细节描述。

Build

go-libp2p 根目录:

1
2
> make deps
> go build ./examples/http-proxy

Usage

首先按如下方式执行 remote。它将打印一个本地节点的地址。如果你不在同一台机器上运行,需相应替换 IP。

1
2
3
4
> ./http-proxy
Proxy server is ready
libp2p-peer addresses:
/ip4/127.0.0.1/tcp/12000/ipfs/QmddTrQXhA9AkCpXPTkcY7e22NK73TwkUms3a44DhTKJTD

然后运行本地节点,指定请求需通过如下方式到远程节点。

1
2
3
4
5
> ./http-proxy -d /ip4/127.0.0.1/tcp/12000/ipfs/QmddTrQXhA9AkCpXPTkcY7e22NK73TwkUms3a44DhTKJTD
Proxy server is ready
libp2p-peer addresses:
/ip4/127.0.0.1/tcp/12001/ipfs/Qmaa2AYTha1UqcFVX97p9R1UP7vbzDLY7bqWsZw1135QvN
proxy listening on 127.0.0.1:9900

正如你所看到的,代理打印了监听的节点 127.0.0.1:9900。你现在可以用这个地址作为代理,以 curl 为例:

1
2
> curl -x "127.0.0.1:9900" "http://ipfs.io/ipfs/QmfUX75pGRBRDnjeoMkQzuQczuCup2aYbeLxz5NzeSu9G6"
it works!

智能合约开发-基于以太坊的文章付费转载 demo

前段时间做了一个 Dapp demo,名字叫 钉书。通过区块链技术,证明用户文章的所有权,以此为基础打造一个知识类商品平台,用户上传知识,文章,标价,买家选择有价值的知识和文章,付费转载。

这个平台的愿景是为作者和内容使用方提供通畅的授权渠道,引导规范合理的转载行为,为原创者带来更多的尊重和收益。

下面具体说说 Dapp 开发过程中一些技术点和坑吧。

Read More