基于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

智能合约开发 - 如何实现一键化登录 Dapp

任何有帐户体系的网站和 app 都会有自己的登录模块,有时候还会集成 oauth2 (weibo, weixin,github)一键化登录.开发者肯定也都或多或少的开发过注册,登录的功能。那么基于以太坊的 Dapp 中登录功能会有什么区别呢?本文主要介绍了 Dapp 帐号体系的构成,以及如何基于 Metamask 开发一键化登录的功能。

Read More