IPFS 区块链实战案例|通过 IPFS 发布自己的电台播客

混迹 Steemit.com 一段时间,除了写文章,还发现了 DSound ,恰好我和 九升 一直在做的播客 朋友的捎带,那就试着发布上去,结果在发布的时候就接触到了 IPFS ,因为这个传起来更快更稳,那就学起来吧,结果越学越上瘾。

如果你愿意和我分享你的想法,非常欢迎,我的微信号:fromfriend020,加我时简单介绍一下自己,并注明「站对未来区块链学院」。同时我会把你拉入微信群「站对未来区块链学院」。

关于我的更多信息,请点阅关于

打赏须知:您在阅读本文时,我将通过您的浏览器占用 CPU 进行少量区块运算,以此作为打赏,若造成困扰您可点击文末的「停止按钮」即可,关闭页面也将自动停止挖矿!

IPFS 是什么?

官方的视频将的很清楚:

用维基百科的话就是:

IPFS(InterPlanetary File System)IPFS是一个对等的分布式文件系统,它尝试为所有计算设备连接同一个文件系统。在某些方面,IPFS类似于万维网,但它也可以被视作一个独立的BitTorrent群、在同一个Git仓库中交换对象。换种说法,IPFS提供了一个高吞吐量、按内容寻址的块存储模型,及与内容相关超链接。这形成了一个广义的Merkle有向无环图(DAG)。IPFS结合了分布式散列表、鼓励块交换和一个自我认证的命名空间。IPFS没有单点故障,并且节点不需要相互信任。分布式内容传递可以节约带宽,和防止HTTP方案可能遇到的DDoS攻击。

该文件系统可以通过多种方式访问,包括FUSE与HTTP。将本地文件添加到IPFS文件系统可使其面向全世界可用。文件表示基于其哈希,因此有利于缓存。文件的分发采用一个基于BitTorrent的协议。其他查看内容的用户也有助于将内容提供给网络上的其他人。IPFS有一个称为IPNS的名称服务,它是一个基于PKI的全局命名空间,用于构筑信任链,这与其他NS兼容,并可以映射DNS、.onion、.bit等到IPNS。

我想讲的通俗一点,用过种子下载的朋友,应该都感叹过下载的速度之快,快的原因就是,不止一个人给你提供资源。

IPFS(InterPlanetary File System,星际文件系统)就是永久的、去中心化保存和共享文件的方法,这是一种内容可寻址、版本化、点对点超媒体的分布式协议。

  • 内容可寻址:通过文件内容生成唯一哈希值来标识文件,而不是通过文件保存位置来标识。相同内容的文件在系统中只会存在一份,节约存储空间

  • 版本化:可追溯文件修改历史

  • 点对点超媒体:P2P 保存各种各样类型的数据

可以把 IPFS 想象成所有文件数据是在同一个 BitTorrent 群并且通过同一个 Git 仓库存取。

总之,它集一些成功系统(分布式哈希表、BitTorrent、Git、自认证文件系统)的优势于一身,是一套很厉害的文件存取系统。

IPFS 哪里用得到?

比如我的播客,我希望全世界的人收听,现在我是把它存在 七牛云 上,而 IPFS 能做的比我们想象的还要多。正如IPFS 的发明者 Juan Benet(juan@benet.ai)在 IPFS 技术白皮书中假设了一些使用场景:

  • 在 /ipfs 和 /ipns 下挂载全球文件系统
  • 挂载的个人同步文件夹,拥有版本功能
  • 文件加密,数据共享系统
  • 可用于所有软件的带版本的包管理器
  • 可以作为虚机的根文件系统
  • 可以作为数据库:应用可以直接操作 Merkle DAG,拥有 IPFS 提供的版本化、缓存以及分布式特性
  • 可以做(加密)通讯平台
  • 各种类型的 CDN
  • 永久的 Web,不存在不能访问的链接

IPFS 如何使用?

我是在 Mac 系统操作的。

下载安装包

下载地址在此:https://dist.ipfs.io/#go-ipfs

下载后,执行以下操作:

tar xvfz go-ipfs_v0.4.13_darwin-amd64.tar.gz解压文件

1
2
3
cd go-ipfs

mv ipfs /usr/local/bin

将已解压的文件夹中的ipfs文件移动到/usr/local/bin/文件夹中。

创建 IPFS 节点

为了运行项目,我们需要通过ipfs init在本地计算机建立一个IPFS节点。

1
2
3
4
5
6
7
8
9
10
11
12
13
14

➜ ~ ipfs init
initializing IPFS node at /Users/davidfnck/.ipfs
generating 2048-bit RSA keypair...done
peer identity: QmQCR758o4qTyMPS1tAJtWLoiDQk2y7DCHKTU1LEHYAvR4
to get started, enter:

ipfs cat /ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv/readme

➜ ~ cd ~/.ipfs
➜ .ipfs ls
blocks datastore keystore
config datastore_spec version
➜ .ipfs

修改默认存储空间

刚安装的时候就遇到的一个问题就是,系统默认我提供给 IPFS 网络 10 个G 的空间,我们如果不希望被占用这么多的话,可以自己调整。

1
➜  ~ vi ~/.ipfs/config

修改下图的StorageMAX,比如我改成了 1 G。

vim 编辑器的操作Tips:输入 i 可以开始编辑,编译完毕后按 esc 键,再输入:,再次输入 wq 保存退出即可。

查看当前节点

1
2
3
4
5
6
7
8
9
~ ipfs id

{
"ID": "QmQCR758o4qTyMPS1tAJtWLoiDQk2y7DCHKTU1LEHYAvR4",
"PublicKey": "CAASpgIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvPw+r4fEBQhLQV+nGXtsbaQANXVM0GjpvZJa4Igf/P/XUaox6NsleiY6yiTGFK+DzU+ycVtsLnaJuIc5qLrinITthrBuppeV64D7LrAIkqjdllnFce4WE6M6Sy+4vQQ0R10cS+A2XhzIpyR/j6pEJHHM/cJL5zMIiDUs5Vh5IT/+iIbBHCVNN2mMhWDjFSEoU7u8qohUaWw1e0PDvNcPZMjGrJ0gh3ac+wZ6gjHZD/5rZoN8HX++mnMPyXZvkCmYu1rafBVMMuP0ILQDwEhvHQ/a0t9S60NfTtmMSjpoEbxDBdrWUkaOheURa18zoHv0h0BAEbbL7BUujYwKolFGJAgMBAAE=",
"Addresses": null,
"AgentVersion": "go-ipfs/0.4.13/",
"ProtocolVersion": "ipfs/0.1.0"
}

QmQCR758o4qTyMPS1tAJtWLoiDQk2y7DCHKTU1LEHYAvR4为你的节点ID每个节点都会有一个唯一的ID

启动节点服务器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

➜ ~ ipfs daemon
Initializing daemon...
Adjusting current ulimit to 2048...
Successfully raised file descriptor limit to 2048.
Swarm listening on /ip4/127.0.0.1/tcp/4001
Swarm listening on /ip4/192.168.0.244/tcp/4001
Swarm listening on /ip6/::1/tcp/4001
Swarm listening on /p2p-circuit/ipfs/QmQCR758o4qTyMPS1tAJtWLoiDQk2y7DCHKTU1LEHYAvR4
Swarm announcing /ip4/127.0.0.1/tcp/4001
Swarm announcing /ip4/192.168.0.244/tcp/4001
Swarm announcing /ip6/::1/tcp/4001
API server listening on /ip4/127.0.0.1/tcp/5001
Gateway (readonly) server listening on /ip4/127.0.0.1/tcp/8080
Daemon is ready

Ctrl + c 可以停止节点服务器。

验证服务

启动节点服务器后,新开一个 Terminal, 输入以下命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
ipfs cat /ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv/readme

Hello and Welcome to IPFS!

██╗██████╗ ███████╗███████╗
██║██╔══██╗██╔════╝██╔════╝
██║██████╔╝█████╗ ███████╗
██║██╔═══╝ ██╔══╝ ╚════██║
██║██║ ██║ ███████║
╚═╝╚═╝ ╚═╝ ╚══════╝

If you're seeing this, you have successfully installed
IPFS and are now interfacing with the ipfs merkledag!

-------------------------------------------------------
| Warning: |
| This is alpha software. Use at your own discretion! |
| Much is missing or lacking polish. There are bugs. |
| Not yet secure. Read the security notes for more. |
-------------------------------------------------------

Check out some of the other files in this directory:

./about
./help
./quick-start <-- usage examples
./readme <-- this file
./security-notes

网页端访问

浏览器访问: http://localhost:5001/webui 进入管理界面,查看系统状态、管理文件以及配置系统。

至此,我们的 IPFS 节点已经部署好了,与全球的人连接在一起了。

发布内容

以上传电台第六期的电台内容为例,先切换到对应文件夹,找到文件。

1
2
3
4
5
6
➜  ~ cd podcasts 
➜ podcasts ls
002_time_is_fast_20170105.mp3 017_rock_roll_friend_20170307.mp3 037_mass_words_20170709.mp3
004_do_not_lie_to_me_20170117.mp3 018_not_rich_enough_20170312.jpg 038_diss_back_20170716.mp3
005_just_enjoy_20170121.mp3 018_not_rich_enough_20170312.mp3 039_wait_b_20170804.mp3
006_happy_new_year_20170125.mp3 019_free_talk_20170317.jpg 040_no_face_20170821.mp3

查看 IPFS 相关命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
➜  podcasts ipfs help
USAGE
ipfs - Global p2p merkle-dag filesystem.

ipfs [--config=<config> | -c] [--debug=<debug> | -D] [--help=<help>] [-h=<h>] [--local=<local> | -L] [--api=<api>] <command> ...

SUBCOMMANDS
BASIC COMMANDS
init Initialize ipfs local configuration
add <path> Add a file to IPFS
cat <ref> Show IPFS object data
get <ref> Download IPFS objects
ls <ref> List links from an object
refs <ref> List hashes of links from an object

DATA STRUCTURE COMMANDS
block Interact with raw blocks in the datastore
object Interact with raw dag nodes
files Interact with objects as if they were a unix filesystem
dag Interact with IPLD documents (experimental)

ADVANCED COMMANDS
daemon Start a long-running daemon process
mount Mount an IPFS read-only mountpoint
resolve Resolve any type of name
name Publish and resolve IPNS names
key Create and list IPNS name keypairs
dns Resolve DNS links
pin Pin objects to local storage
repo Manipulate the IPFS repository
stats Various operational stats
p2p Libp2p stream mounting
filestore Manage the filestore (experimental)

NETWORK COMMANDS
id Show info about IPFS peers
bootstrap Add or remove bootstrap peers
swarm Manage connections to the p2p network
dht Query the DHT for values or peers
ping Measure the latency of a connection
diag Print diagnostics

TOOL COMMANDS
config Manage configuration
version Show ipfs version information
update Download and apply go-ipfs updates
commands List all available commands

Use 'ipfs <command> --help' to learn more about each command.

ipfs uses a repository in the local file system. By default, the repo is
located at ~/.ipfs. To change the repo location, set the $IPFS_PATH
environment variable:

export IPFS_PATH=/path/to/ipfsrepo

EXIT STATUS

The CLI will exit with one of the following values:

0 Successful execution.
1 Failed executions.

我们可以看到添加文件,就是ipfs add <path> Add a file to IPFS

1
2
➜  podcasts ipfs add 006_happy_new_year_20170125.mp3 
added QmSssQStqbA6EieuLAHtmqH339KV8nHYwgUEDUrc2ct6Z9 006_happy_new_year_20170125.mp3

当执行完ipfs add file这个命令以后,会将006_happy_new_year_20170125.mp3添加到ipfs当前的节点中,并且会对此文件生成一个唯一的hash QmSssQStqbA6EieuLAHtmqH339KV8nHYwgUEDUrc2ct6Z9,如果想查看本地ipfs节点的数据,可以通过ipfs cat QmSssQStqbA6EieuLAHtmqH339KV8nHYwgUEDUrc2ct6Z9 进行查看。

如果立马使用 https://ipfs.io/ipfs/QmSssQStqbA6EieuLAHtmqH339KV8nHYwgUEDUrc2ct6Z9 访问的话,是无法访问的,因为我们没有发不到 IPFS 公网里面。

同步 IPFS 节点

ipfs daemon

稍等一会儿,你再查看就可以了。

发布到 Dsound

按照要求提交上传即即可。

友情赞助

站对未来,cda区块链学院

您可以通过以下社交渠道找到我:

同时,我的文章还会在以下渠道同步更新,欢迎关注:

如果您希望打赏,以下方式可供选择:

  • BTC: 1BuwE6ugdm4hyagkeuJieGaWatrvxpAsbC
  • ETH: 0x5F469Bd0B38243aFC692b48cc45e0f14E7Ebf9ca
  • Bitcoin Cash: qpx4pka2eduu9taxs53qms0euxd79v6vyy83mtc6d8
  • ERC20 Token: 0x0F9a6b5B3A597647bF01A1Ce4855E414092a5C2a
  • Paypal: PayPal.Me/davidfnck
------ EOF ------
David Fnck wechat

⬇⬇~ 挖 矿 打 赏 系 统 ~⬇⬇

启动线程数当前算力(Hashs/秒)您已贡献(Hash单位:个)

点击 Coin Hive 挖矿教程 学习如何配置博客打赏!

欢迎留下您的评论