Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

Qtum:如何基于Qtum和IPFS搭建DApp

Cherry95
85 0 0
从比特币开始,区块链就被定义为“不可篡改”的数据库技术,当所有节点通过区块链来建立信任的时候,需要同步完整的区块信息。如果区块链允许用户上传大型数据,那么将会造成大量的存储和网络资源浪费。所以,各个区块链网络都会通过限制区块大小、高昂的gas费用等方式,指导用户只把更有价值的简短信息记录在区块链中,所以区块链网络也被成为“价值网络”。* m+ d- u" S! i6 m; r# d
. ^. O/ B" ~, j" N+ l& O* y3 w
    IPFS[1](InterPlanetaryFileSystem,星际文件系统)完美解决了大型文件的去中心化存储问题。每一个上传到IPFS的大型文件将会被分成若干个大小为256KB的块,每个块在IPFS中都会做一次哈希计算,得到的运算结果作为块的地址。系统最终会给整个文件生成一个哈希值作为该文件的地址,IPFS网络中的任何节点都能通过该地址来下载整个文件。
* w+ n( q6 `/ W1 `# Y
2 |  e& i1 {& x, e# `- ?    区块链和IPFS的结合将会是未来去中心化应用的发展方向。把区块链作为数据库来存储结构化数据,把IPFS作为文件系统来存储图片、视频等大型文件,从而构建一个完整的去中心化应用。
. M4 \3 a, q* a  s
- i$ w! v7 j' P) ~    Qtum+IPFS
& C  D8 r% b- m6 \* ?# o2 G
( B( u5 o' X, e$ S8 W    本文介绍了基于Qtum[2]区块链和IPFS的去中心化应用解决方案,该方案首先将用户上传的文件存储到IPFS,文件IPFS地址记录在Qtum的智能合约中,实现了大型文件的去中心化存储和分享功能。代码已经上传到Github中[3],对于相关技术比较熟悉的开发人员可以直接前往Github进行使用。" s+ ]1 B& q% ?4 {. r9 u  K, w, e

1 d" i' j* q1 N! }' r- F' C2 @    背景8 m0 F! ^: N8 [' O/ l
3 ~) |8 m/ I0 G
    Qtum* I5 I- r4 W0 h" x$ C# G5 [0 O
( |5 h4 {, L. p9 m6 E* e
    Qtum区块链,又称为量子链,是一个基于UTXO(UnspentTransactionOutput,未花费交易输出)、PoS(ProofofStake,权益证明)和EVM(EthereumVirtualMachine,太坊虚拟机)的区块链平台,融合了比特币和以太坊生态系统各自的优点。Qtum通过AAL(AccountAbstractionLayer,账户抽象层)技术把UTXO模型转换成可供EVM执行智能合约的账户模型,使得智能合约可以完美运行在比特币的区块链架构上,因而给系统带来了强大的兼容性。
8 n* K' r; {5 R2 i7 C8 \5 p  ~
    IPFS' O* }  h2 {- `  M" ~% {9 m3 Y* u/ L

* d" W' R; D* U, g( n# ^    IPFS是一个旨在创建持久且分布式存储和共享文件的网络传输协议。存储的文件会被分割成多个部分并发送给多个节点。IPFS为每一个文件分配一个独一无二的哈希值作为文件的地址。当查询文件的时候,IPFS网络根据文件的哈希值进行查找。每个节点存储了一张哈希表,记录了文件存储所在的位置,从而用于文件的查询和下载。
% C: S: _% }- [7 g$ l% `. c  D: y: j, s! E( m; A6 O) l% T( s5 n' L: S$ I
    区块链+IPFS的应用
" p2 _2 G9 O, A7 I1 q$ o5 D/ l+ ^1 q6 f, n
    IPFS官方Github[4]上介绍了很多IPFS的应用,在这里将给大家介绍其中的一些区块链和IPFS结合的应用。
; f( {8 q# K4 E3 r# |4 B5 Z5 x' z4 e0 C1 q; h
    Akasha
; {: D( I6 ^: J/ P2 R3 B6 I, i4 l) ]+ u9 ^% ]) }: |, F
    由于所有上传到IPFS的文件都不可篡改,所以大家很容易就想到了互联网的信息获取自由,言论自由和隐私权。Akasha[5]是一个典型的应用,它是一个基于以太坊和IPFS的社交博客创作平台,用户创作的博客内容通过一个IPFS网络进行发布,而非中心服务器。同时,用户和以太坊钱包账户进行绑定,用户可以对优质内容进行ETH打赏,内容创作者能以此赚取ETH,如同人脑挖矿一样。它没有太多监管的限制,也没有中间商抽成,内容收益直接归创作者所有。* \8 z: [% l& L& B) P
5 P- I6 H1 }6 @' _
    uPort
, @2 e, ^7 v9 o: p) o
2 O* `* ^; B4 R# b" d    在电子商务领域,身份认证一直是一个关键的痛点。uPort[6]是一个基于Ethereum和IPFS的身份认证应用。用户可以使用uPort提供的智能合约进行身份的注册,系统会将身份的详细信息记录在IPFS上。基于uPort,用户得以在拥有数字身份的同时保护自身隐私,并且只允许特定组织或个人访问、储存、分析或分享个人数据。6 P/ s5 R2 d' e  ~, j5 U

( \1 R/ t1 H% n3 }7 V& k$ Q6 |    系统
4 L) e! X7 l; V) ~9 k* q9 j$ C9 @& C. {" I4 X: ?
    系统架构' U8 g; K7 X' K5 {7 L
8 d3 j7 i1 O/ R& \
    本系统可以分为上下两层:
0 I) ^3 B+ X# U# ]- j* x1 h+ P, ]- V
    上层:基于React框架,以HTML+JS的方式运行在浏览器中,用户可以通过网页访问本系统。上层系统通过QtumJS和JS-IPFS-API两个组件和下层进行通信。QtumJS通过call接口访问Qtum中的智能合约,通过sendto接口向智能合约发送交易;JS-IPFS-API通过add接口向IPFS网络中添加文件,通过get接口从IPFS网络中获取文件内容。9 x( t" j& s/ A% o2 C* R
% x5 {/ d" i& {9 `6 n9 J5 m
    下层系统包括QTUM和IPFS两个部分:
, @* p' s6 V* X9 Y- d! S" z
* {1 r* M1 X7 w; u1 g$ B) F. v( T- [    Qtum部分:部署了智能合约,用来存储文件的结构化数据(文件名,哈希值,添加时间等),通过合约的add接口写入数据,通过合约的getIndex和get接口获取合约中存储的文件相关信息,合约代码如下:3 `2 |% D. e4 h. ~9 u; R

; s- N% G) V, O3 H2 b& s    pragmasolidity^0.4.24;
) A4 ]" t# Y; Z9 M1 N) W4 L8 c- D/ H/ J' `' O7 Y
    contractIpfsRecord{
, k5 D2 |9 s' J, B% j7 s. c
& |) O/ }% Z  y; F1 N$ r4 m    string[]records;
5 @/ r9 l  ?+ l3 D* ~+ [: ]) @! I
    functionadd(stringdata)external{
7 M# S" U; Q4 Q' p- G5 E- o3 D$ B. X3 b$ u/ Z
    records.push(data);
! c. P6 k5 M3 p% e& H
( Z# i3 v! @2 J    }
% [7 A( r) _) p( E$ J" {6 B7 w
    functiongetIndex()publicviewreturns(uint){* g( r) T# a) ~) _

) N5 o* N2 n( e3 ^  [    returnrecords.length;
, H# W% B+ ]3 F1 E  F5 c$ @( \
2 m& o! T3 a. s) T; r    }
' G, W6 A' m0 k& g7 O! G% [
9 K/ m$ S% g7 U; a* U    functionget(uintindex)publicviewreturns(string){
+ [5 C. D; P% X0 |6 o% i7 A0 i8 i7 \6 m* [. [, ~7 \: X
    returnrecords[index];( |; M* ]! Z+ S- j: L) |
$ y8 a9 ~  z2 f% D: }5 D2 F
    }
& Z# C; `9 z) s
/ F4 w2 R& ^% B. }1 ]. H- c; U( z& q7 z    }" M# z6 [. ^* P# ]3 L( {

/ W- l& ?$ J% N' p: o! m$ l    IPFS部分:可以是本地节点或者远程节点,当收到JS-IPFS-API发送过来的add请求时负责存储文件内容并返回哈希值;当收到get请求时负责根据文件哈希值查询文件,并返回文件内容。
* p6 M: d: b8 Y/ m0 G$ @* x  ]9 T
" C* t, B% h7 f' J- i& C    系统流程
) e, U: a1 x5 `1 y; j7 s/ @
7 n) P" y/ H7 @    用户上传文件
6 L+ z7 ^" ?5 A0 U6 Q- s7 b: \$ u0 ~" E3 J
    当用户点击UPLOAD按钮上传文件时,后端JS监听到UPLOAD按钮的点击动作,将文件转换成BUFFER类型,通过js-ipfs-api的add接口上传到IPFS节点,IPFS节点返回文件的哈希值给后端JS。JS将文件哈希值,发送者地址和当前时间拼接成字符串,再向Qtum区块链节点发送send请求,将数据记录在智能合约中,当交易确认之后,刷新页面即可在浏览器中查看此记录。
& q  Q2 C- P' Y
0 ~9 T2 J& D$ Z  t; ]% L& P    流程图如下:+ N2 f1 F9 M9 `6 j# B4 M$ M/ h

% ?/ @: {* E  |. g/ D; m% W9 \    展现文件列表
6 y$ {6 X: i3 ?2 g1 c
+ i6 i' ?% B- I/ ]; @. b; @* E    当用户通过浏览器访问网站时,React加载前端组件,后端开始初始化,连接Qtum节点和IPFS节点,并且通过qtumJS向Qtum区块链节点发送CALL请求,调用合约中的getIndex接口获取合约中的记录数index,再循环index次调用合约的get接口获取合约内容,最后将合约内容返回给前端展示。9 O7 s, f! z1 H" j
# q! h$ k- K1 X9 s# T; m3 W" Q
    系统部署
8 _: c2 O6 P& s4 p
2 c9 `& e' d; Q" B0 I    系统部署步骤简单概述如下:
' ?8 w. z$ Q8 c0 b: _9 D, }$ L2 C. P% _8 m8 a1 s4 l: ~, m1 x* D
    克隆代码,下载React前端依赖;2 K* i0 [( r6 U; d8 ~3 J  c  g+ V; b6 n; g

+ J# V. g" [  h# ~2 N8 g4 R. o' N    我们需要将智能合约部署到区块链上,所以要下载Soliditycompiler和Solar;
5 Y3 V8 x" C9 r% i! v& m! o4 S2 j2 P4 m) C
    启动本地IPFS节点或者在用infura远程节点;* K( b$ h# p  _; f% F
( X1 _. t8 \6 N  s, d8 M
    下载并启动Qtum节点,设置corsproxy代理;' Y8 o4 ?2 f# i* Q' L
) A$ y4 W8 O/ O0 u3 ~* f
    部署智能合约(确保测试账户有足够的Token);
  v) f, @# T5 I% b
  t- n3 T) H- A- W$ t. g    最后,启动系统。
; `; g, k8 H) y( @6 z' L8 f& ]0 T
& h  Q" B  E; f' ^* A    详细步骤可以参考[3]中的QuickStart。2 s6 s! n0 s' g/ y! A% u1 D

, P9 ?5 j+ Q. s* E+ {. O    系统使用6 v6 }$ w8 L7 @. x- t
: X/ l. E0 n' y+ }' V
    系统的使用很简单,当部署成果之后,只需要在浏览器中访问http://localhost:3000/,点击UPLOAD即可上传文件,按钮下方将显示为智能合约中的记录。
9 ^' ~1 N! M. V5 h! p1 s5 R2 h) K) M3 s7 }/ s, v
    未来工作1 F7 W' X) _) o# Z7 w+ L( z+ x0 c8 g
( g  i; w: [9 P' U
    IPFS协议从本质出发,找出现有互联网最底层,即数据层存在的痛点,结合区块链技术,重新设计了该系统的架构。也许在不远的未来,任何地点访问网站轻松看超高清电影不会再是奢望了。
& \; A5 D  [# [5 T9 u( ]9 T& B9 J: n) b9 ^& N0 i7 t) d0 i
    经过分析和论证,我们可以清晰地发现Qtum与IPFS之间的互补关系:IPFS可以极大地弥补区块链存储空间昂贵、扩容难的问题,而Qtum可以将共识、激励以及所有权归属等特性赋予IPFS。6 H) H) L* j+ q0 A
! M5 G: \* l. |' N# C
    更细一步的说,Qtum通过EVM智能合约可以完美兼容ERC721标准,因此可以将NFT(Non-FungibleToken,非同质化代币)与IPFS结合,给予IPFS存储的内容独一无二的token属性和严格透明的所有权归属与转换功能。同时IPFS也将拓展NFT所能承载的内容,使其具有更加丰富的应用场景。" S! p0 ?3 a. o

% k' v& y- w! u  m    例如,我们将一个独具创意的艺术品(名画、雕塑等)的各种信息(图片、名称、创作时间、地点、创意等)上传至IPFS网络中存储,在Qtum上的NFT智能合约中创建一个token来唯一标示该艺术品的所有权,并赋予其所有权转换交易的属性,这样将极大地方便艺术品在虚拟世界的流通和交易,区块链的公开与透明也很大程度上杜绝了交易流转过程的暗箱操作。- f/ L7 J! i4 ~6 b7 U- g

, o/ ?1 m( J: ]% u1 d2 r* p& @# J    因此,我们正在考虑从以下几个方面出发:
% K3 _! x, b, Y2 M
3 Q+ v" {" B3 A1 q' ?0 B4 l    在Qtum上将NFT和IPFS进行结合:; |3 ]7 D- p6 l
  \7 z- P2 g+ h8 H
    用ERC721标准开发IPFS与NFT结合的demo;
& x9 z  P+ i0 v& v% V; P2 P  B* e" y/ V# ?1 _
    开发一键部署NFT合约与接入IPFS网络的工具;, P: [! b: ~. A3 K6 _; V3 K

1 a* Q# R- d6 U7 [. ~7 g  }# t! F    搭建去中心化的NFT交易平台,提高NFT的展示效果与流通能力
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

Cherry95 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    2