Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

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

Cherry95
141 0 0
从比特币开始,区块链就被定义为“不可篡改”的数据库技术,当所有节点通过区块链来建立信任的时候,需要同步完整的区块信息。如果区块链允许用户上传大型数据,那么将会造成大量的存储和网络资源浪费。所以,各个区块链网络都会通过限制区块大小、高昂的gas费用等方式,指导用户只把更有价值的简短信息记录在区块链中,所以区块链网络也被成为“价值网络”。
+ ~2 l# R& e% q& r/ D. F& \4 _5 {+ x, J+ {! f0 }) C0 R9 p
    IPFS[1](InterPlanetaryFileSystem,星际文件系统)完美解决了大型文件的去中心化存储问题。每一个上传到IPFS的大型文件将会被分成若干个大小为256KB的块,每个块在IPFS中都会做一次哈希计算,得到的运算结果作为块的地址。系统最终会给整个文件生成一个哈希值作为该文件的地址,IPFS网络中的任何节点都能通过该地址来下载整个文件。
, j. {3 v3 L: S% Y3 M* }
" D  o4 M8 ^# o; U4 J    区块链和IPFS的结合将会是未来去中心化应用的发展方向。把区块链作为数据库来存储结构化数据,把IPFS作为文件系统来存储图片、视频等大型文件,从而构建一个完整的去中心化应用。3 E* W2 o) R& i- `, V) \1 C

1 _! ^* ~( ^) E6 a) G1 l/ ]    Qtum+IPFS
0 }  B) z; [% [! G% _7 L$ E) K, R4 X
    本文介绍了基于Qtum[2]区块链和IPFS的去中心化应用解决方案,该方案首先将用户上传的文件存储到IPFS,文件IPFS地址记录在Qtum的智能合约中,实现了大型文件的去中心化存储和分享功能。代码已经上传到Github中[3],对于相关技术比较熟悉的开发人员可以直接前往Github进行使用。
% ]2 l8 U* W2 J6 |7 s  i! r" ?* B& h7 }
    背景1 g; I0 i) q2 z, `4 i. O1 {5 `

9 p) D1 g1 h) l" Q9 ^    Qtum0 b  I3 u" j. x
  g( d# O# D8 Z2 ~) `+ B
    Qtum区块链,又称为量子链,是一个基于UTXO(UnspentTransactionOutput,未花费交易输出)、PoS(ProofofStake,权益证明)和EVM(EthereumVirtualMachine,太坊虚拟机)的区块链平台,融合了比特币和以太坊生态系统各自的优点。Qtum通过AAL(AccountAbstractionLayer,账户抽象层)技术把UTXO模型转换成可供EVM执行智能合约的账户模型,使得智能合约可以完美运行在比特币的区块链架构上,因而给系统带来了强大的兼容性。
! T$ N5 v" H8 b0 ]; l# }
# o' A! m0 x1 j3 e+ [  e9 [    IPFS8 U' A4 A+ i1 a& C) x* D% g9 }; f

) @6 K7 l7 F4 r) P, @3 j' t    IPFS是一个旨在创建持久且分布式存储和共享文件的网络传输协议。存储的文件会被分割成多个部分并发送给多个节点。IPFS为每一个文件分配一个独一无二的哈希值作为文件的地址。当查询文件的时候,IPFS网络根据文件的哈希值进行查找。每个节点存储了一张哈希表,记录了文件存储所在的位置,从而用于文件的查询和下载。
8 i9 F4 j2 K. }
3 z$ \7 `" Y9 ^; ]    区块链+IPFS的应用$ \' N# j: |; V% i( }

+ F# m+ e9 B, b    IPFS官方Github[4]上介绍了很多IPFS的应用,在这里将给大家介绍其中的一些区块链和IPFS结合的应用。
1 ~6 H" ^7 h3 ~% a
5 @4 }) O, M$ ]8 K, v) n1 C6 u' L) O2 }    Akasha) H6 `& h, O* R1 t' i
7 C* ^& c2 w3 r4 m6 z7 G$ g2 t
    由于所有上传到IPFS的文件都不可篡改,所以大家很容易就想到了互联网的信息获取自由,言论自由和隐私权。Akasha[5]是一个典型的应用,它是一个基于以太坊和IPFS的社交博客创作平台,用户创作的博客内容通过一个IPFS网络进行发布,而非中心服务器。同时,用户和以太坊钱包账户进行绑定,用户可以对优质内容进行ETH打赏,内容创作者能以此赚取ETH,如同人脑挖矿一样。它没有太多监管的限制,也没有中间商抽成,内容收益直接归创作者所有。
3 b, j; L6 ^2 V4 W8 ]8 h7 Q
* U4 k  D) \( x    uPort' o0 i/ ^; q8 k% j9 D# ?' ^
) c" |) O  R: }0 x# O
    在电子商务领域,身份认证一直是一个关键的痛点。uPort[6]是一个基于Ethereum和IPFS的身份认证应用。用户可以使用uPort提供的智能合约进行身份的注册,系统会将身份的详细信息记录在IPFS上。基于uPort,用户得以在拥有数字身份的同时保护自身隐私,并且只允许特定组织或个人访问、储存、分析或分享个人数据。
9 k: }$ Y, |# w6 }
& r& o( H7 {) w/ Z    系统
+ t0 M' |# p% V3 y# l
* R7 D( A! k3 c7 k3 C    系统架构
0 j: g0 w) O4 z0 @) Y6 d
; X0 g) ]/ w, F0 Q    本系统可以分为上下两层:
% x8 P; l3 y+ c3 @, Z1 y5 J' P. z3 d3 b$ ^+ ]' L; G
    上层:基于React框架,以HTML+JS的方式运行在浏览器中,用户可以通过网页访问本系统。上层系统通过QtumJS和JS-IPFS-API两个组件和下层进行通信。QtumJS通过call接口访问Qtum中的智能合约,通过sendto接口向智能合约发送交易;JS-IPFS-API通过add接口向IPFS网络中添加文件,通过get接口从IPFS网络中获取文件内容。- h* S% ]. k0 v4 l" A
( a+ s6 i0 ~  |5 Z
    下层系统包括QTUM和IPFS两个部分:
3 c% C( n% g* C8 d0 E: }
7 Q* U( J- h% U) m    Qtum部分:部署了智能合约,用来存储文件的结构化数据(文件名,哈希值,添加时间等),通过合约的add接口写入数据,通过合约的getIndex和get接口获取合约中存储的文件相关信息,合约代码如下:' q- }& B' k4 i6 E! X
; n, P: K3 Q8 w! s+ s* o5 Q
    pragmasolidity^0.4.24;- b/ l9 t4 a6 n! |4 I/ \+ `

1 v8 |1 |$ T- A2 T6 _( \. S    contractIpfsRecord{# f* T. R' B8 d2 J

0 |$ c6 r5 E) V# O3 J    string[]records;% P# o7 F3 d0 L3 C: z

3 ]0 A2 m8 I" }1 h& t. u2 u0 v    functionadd(stringdata)external{4 s; f' h- ]0 J7 Q% h3 L' F3 ~9 l; y
+ v, p# {0 k7 ~3 Z' |
    records.push(data);
: N) ~  [, g% K; \1 c1 N4 O+ m8 V! @8 H5 S
    }9 F- j* Y8 Y. o- B  F

2 y& z( t' s% b1 W: {8 U& a    functiongetIndex()publicviewreturns(uint){
& ]- z$ ]' k+ D) A. z' E- o6 w6 }( I# `
# A3 _" T) {* Z% r2 A4 l    returnrecords.length;
9 j$ N3 y5 \& a8 |  A3 u- M4 g& {9 L! V* I
    }
/ }: h! J, ~$ j" y/ _3 ~1 {! i
( B8 y% a& r. p/ a- q    functionget(uintindex)publicviewreturns(string){. g" T% ?2 j/ g) a

! B0 y3 g$ c  a- g    returnrecords[index];, s8 z  D6 v6 J6 w& ]7 ~9 f
' P% i. }/ \! |$ O1 W
    }
2 |8 A( _% \' ?4 C: e- a& T, d; W# h. B$ v, A" o# @
    }- d: [/ y# a0 a/ j0 Q5 k
0 S1 H; v5 Q* R( `- N: }/ P  h0 b3 u/ P4 ]
    IPFS部分:可以是本地节点或者远程节点,当收到JS-IPFS-API发送过来的add请求时负责存储文件内容并返回哈希值;当收到get请求时负责根据文件哈希值查询文件,并返回文件内容。2 V+ M& N3 p, U: q3 y; L2 o
! Q( O3 v7 [. f8 z4 ^
    系统流程- W' d* R+ @& @, V

" T$ i( w% ~. j  e* w    用户上传文件# D4 O+ |: F2 i: G6 A! I

7 h& e( K" ~; ^4 E2 w7 T  \    当用户点击UPLOAD按钮上传文件时,后端JS监听到UPLOAD按钮的点击动作,将文件转换成BUFFER类型,通过js-ipfs-api的add接口上传到IPFS节点,IPFS节点返回文件的哈希值给后端JS。JS将文件哈希值,发送者地址和当前时间拼接成字符串,再向Qtum区块链节点发送send请求,将数据记录在智能合约中,当交易确认之后,刷新页面即可在浏览器中查看此记录。
, c& a7 i! p( ~8 g4 ]! r7 s0 Y) Q( }7 R
    流程图如下:
; k. ]  x! i$ f6 F+ G# Y0 t& ?# ^/ \1 O+ T% K5 K. g
    展现文件列表8 x  R- Y: X' h; b( v

) T- X/ E, i3 D3 ?) C/ x    当用户通过浏览器访问网站时,React加载前端组件,后端开始初始化,连接Qtum节点和IPFS节点,并且通过qtumJS向Qtum区块链节点发送CALL请求,调用合约中的getIndex接口获取合约中的记录数index,再循环index次调用合约的get接口获取合约内容,最后将合约内容返回给前端展示。, J& E" K: Y, ^2 i% B

9 i2 \, ^  Q; ?% k6 X, Y0 z    系统部署* X& g0 L3 h. d& \8 V* |, M- A3 E
5 i  G7 }% J6 n% {( E# p
    系统部署步骤简单概述如下:
$ h) J  r0 _- {
: v2 W! Q+ s4 O# }2 j* ]9 p( ]    克隆代码,下载React前端依赖;9 i; S1 h& ~7 B, C
7 v9 I1 |; p2 W, {5 _- p) C1 m
    我们需要将智能合约部署到区块链上,所以要下载Soliditycompiler和Solar;
5 `3 t2 \; G1 ], J& C7 |- P
+ }" r/ _$ O, O2 {5 b9 o) D: h    启动本地IPFS节点或者在用infura远程节点;
6 W$ P) g3 @* U9 H4 a/ S/ x4 t9 J: ]# I5 ]. X, t$ P  m
    下载并启动Qtum节点,设置corsproxy代理;
6 u9 u3 `- T, k3 B: @, o" d9 G% f& f; V: ]+ H2 b  ~" X4 @, E
    部署智能合约(确保测试账户有足够的Token);
9 b4 y, i; e) t1 n2 E4 h) A) _9 Q, F# U" [# [) c
    最后,启动系统。. N0 x- d- k+ _  H2 V
9 V8 d( `# j2 |2 p+ f/ [7 t
    详细步骤可以参考[3]中的QuickStart。% k& Z0 }2 G$ V% z9 W

" s7 ^0 ~" R8 p2 x    系统使用; n! {- \2 Q7 H. |/ W& e

; j" q1 g# n* z    系统的使用很简单,当部署成果之后,只需要在浏览器中访问http://localhost:3000/,点击UPLOAD即可上传文件,按钮下方将显示为智能合约中的记录。
* ~6 J  _. L$ y1 k
3 }& x5 s  v4 `+ n    未来工作
. O; g$ ^4 n. R+ T4 B, Z2 h, H
' l+ x' E$ V, c3 }4 Q    IPFS协议从本质出发,找出现有互联网最底层,即数据层存在的痛点,结合区块链技术,重新设计了该系统的架构。也许在不远的未来,任何地点访问网站轻松看超高清电影不会再是奢望了。
% W, r+ @! D, u1 Q* ^& s3 x+ ]
) H1 w( T+ N) ?7 j    经过分析和论证,我们可以清晰地发现Qtum与IPFS之间的互补关系:IPFS可以极大地弥补区块链存储空间昂贵、扩容难的问题,而Qtum可以将共识、激励以及所有权归属等特性赋予IPFS。
+ h  Z. A! A1 g! C! x0 S) ?2 I, K
# h1 b5 Z9 \* y) j; t' H    更细一步的说,Qtum通过EVM智能合约可以完美兼容ERC721标准,因此可以将NFT(Non-FungibleToken,非同质化代币)与IPFS结合,给予IPFS存储的内容独一无二的token属性和严格透明的所有权归属与转换功能。同时IPFS也将拓展NFT所能承载的内容,使其具有更加丰富的应用场景。; q: ?- F% F9 D

7 h9 T  ], P( ^& p# b* I    例如,我们将一个独具创意的艺术品(名画、雕塑等)的各种信息(图片、名称、创作时间、地点、创意等)上传至IPFS网络中存储,在Qtum上的NFT智能合约中创建一个token来唯一标示该艺术品的所有权,并赋予其所有权转换交易的属性,这样将极大地方便艺术品在虚拟世界的流通和交易,区块链的公开与透明也很大程度上杜绝了交易流转过程的暗箱操作。
$ L5 v6 Z( `& ~5 ?1 r/ w5 W* G4 x
    因此,我们正在考虑从以下几个方面出发:4 Q9 m) C9 d. d- a: P, @
8 G' @" Z, o0 L! a3 \4 b
    在Qtum上将NFT和IPFS进行结合:
2 m  R* f; R5 a* r) g' O( h3 i7 I& _4 ^9 D" C; }( ^. c, I) K
    用ERC721标准开发IPFS与NFT结合的demo;
* c, j2 ^' D$ N( b- v6 a" R% R8 f8 S. B3 h# \0 W+ t: |
    开发一键部署NFT合约与接入IPFS网络的工具;2 n4 x* k. m; H3 e5 Y
* Q" j& J  T. b
    搭建去中心化的NFT交易平台,提高NFT的展示效果与流通能力
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

Cherry95 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    2