Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

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

Cherry95
106 0 0
从比特币开始,区块链就被定义为“不可篡改”的数据库技术,当所有节点通过区块链来建立信任的时候,需要同步完整的区块信息。如果区块链允许用户上传大型数据,那么将会造成大量的存储和网络资源浪费。所以,各个区块链网络都会通过限制区块大小、高昂的gas费用等方式,指导用户只把更有价值的简短信息记录在区块链中,所以区块链网络也被成为“价值网络”。
' a% s$ B+ {& |  b( ]; a, Y7 h" G4 r! I' v' D; u
    IPFS[1](InterPlanetaryFileSystem,星际文件系统)完美解决了大型文件的去中心化存储问题。每一个上传到IPFS的大型文件将会被分成若干个大小为256KB的块,每个块在IPFS中都会做一次哈希计算,得到的运算结果作为块的地址。系统最终会给整个文件生成一个哈希值作为该文件的地址,IPFS网络中的任何节点都能通过该地址来下载整个文件。
0 j* n. z3 c7 M. }8 x2 a% _. h
; o3 p- \+ w$ B3 u) x. R/ R- g0 [* l- P    区块链和IPFS的结合将会是未来去中心化应用的发展方向。把区块链作为数据库来存储结构化数据,把IPFS作为文件系统来存储图片、视频等大型文件,从而构建一个完整的去中心化应用。, ^) ^# ~" p7 s5 Q8 n
5 X  P6 n6 b) v6 k5 t6 g. S) @! F
    Qtum+IPFS4 H$ ^( k1 R$ |3 Z& c' b

* ?$ v- w0 S8 z    本文介绍了基于Qtum[2]区块链和IPFS的去中心化应用解决方案,该方案首先将用户上传的文件存储到IPFS,文件IPFS地址记录在Qtum的智能合约中,实现了大型文件的去中心化存储和分享功能。代码已经上传到Github中[3],对于相关技术比较熟悉的开发人员可以直接前往Github进行使用。
/ S4 e, P7 S! Z" C, ?( m; {  L3 W, L3 @8 c& H
    背景4 Y4 J, _1 R! r7 ]+ U0 U

3 @* x9 R+ m0 d' m: b0 x, {    Qtum
6 O  H/ B8 f: t6 f" l2 _8 a' u, o5 i: N, h9 N: @  e+ f( R' x% p2 R8 G3 Z
    Qtum区块链,又称为量子链,是一个基于UTXO(UnspentTransactionOutput,未花费交易输出)、PoS(ProofofStake,权益证明)和EVM(EthereumVirtualMachine,太坊虚拟机)的区块链平台,融合了比特币和以太坊生态系统各自的优点。Qtum通过AAL(AccountAbstractionLayer,账户抽象层)技术把UTXO模型转换成可供EVM执行智能合约的账户模型,使得智能合约可以完美运行在比特币的区块链架构上,因而给系统带来了强大的兼容性。/ u. D0 H( l; p5 y0 x) [6 |
# z2 y- Z! R. z% u2 p' V
    IPFS
7 @& x" F- M# x7 l) i) q2 C: D# `
    IPFS是一个旨在创建持久且分布式存储和共享文件的网络传输协议。存储的文件会被分割成多个部分并发送给多个节点。IPFS为每一个文件分配一个独一无二的哈希值作为文件的地址。当查询文件的时候,IPFS网络根据文件的哈希值进行查找。每个节点存储了一张哈希表,记录了文件存储所在的位置,从而用于文件的查询和下载。/ z8 }2 v2 [' q

6 P+ o+ O, m/ P( r; A- s+ p    区块链+IPFS的应用
" S$ H  s6 G: P5 J; a7 `/ I
, T/ j. p  J+ U  M2 ]    IPFS官方Github[4]上介绍了很多IPFS的应用,在这里将给大家介绍其中的一些区块链和IPFS结合的应用。1 b" [7 O! M( _8 \

: Z( O% L, Z6 ?, _5 u/ r    Akasha
/ E2 n  d: B2 P5 i6 {+ b' H, r" z  z5 k
    由于所有上传到IPFS的文件都不可篡改,所以大家很容易就想到了互联网的信息获取自由,言论自由和隐私权。Akasha[5]是一个典型的应用,它是一个基于以太坊和IPFS的社交博客创作平台,用户创作的博客内容通过一个IPFS网络进行发布,而非中心服务器。同时,用户和以太坊钱包账户进行绑定,用户可以对优质内容进行ETH打赏,内容创作者能以此赚取ETH,如同人脑挖矿一样。它没有太多监管的限制,也没有中间商抽成,内容收益直接归创作者所有。
( q) y; ?* s' C, p4 w) l0 J1 i5 B- o# Q* J4 U# M0 ]. @( v
    uPort
; y) ]( `; P; Z9 k# F
  p  {1 X7 q& ?. b  a/ Q    在电子商务领域,身份认证一直是一个关键的痛点。uPort[6]是一个基于Ethereum和IPFS的身份认证应用。用户可以使用uPort提供的智能合约进行身份的注册,系统会将身份的详细信息记录在IPFS上。基于uPort,用户得以在拥有数字身份的同时保护自身隐私,并且只允许特定组织或个人访问、储存、分析或分享个人数据。2 `8 h% }( [4 }$ P. x

) q) E4 w( \7 R( q    系统
; X7 L+ n! G# X% |8 D* q! F
% @: ?( H1 s/ c; O) I+ X3 \9 ~- ?9 ^    系统架构
7 g5 C: f- B/ m' r
' y0 l/ ]: o2 w! s+ }+ D  M5 P* a4 b1 `    本系统可以分为上下两层:
9 {& @4 ~( S1 `2 T0 x3 V* L
1 t) H- T4 b/ b    上层:基于React框架,以HTML+JS的方式运行在浏览器中,用户可以通过网页访问本系统。上层系统通过QtumJS和JS-IPFS-API两个组件和下层进行通信。QtumJS通过call接口访问Qtum中的智能合约,通过sendto接口向智能合约发送交易;JS-IPFS-API通过add接口向IPFS网络中添加文件,通过get接口从IPFS网络中获取文件内容。
% S7 }) }7 k8 H. o3 N* h$ ~: y# y0 q4 g, k6 A# `- P
    下层系统包括QTUM和IPFS两个部分:
9 @, W2 @( Z: ]& o: g+ r6 e$ z4 `* l$ W# E7 M& M
    Qtum部分:部署了智能合约,用来存储文件的结构化数据(文件名,哈希值,添加时间等),通过合约的add接口写入数据,通过合约的getIndex和get接口获取合约中存储的文件相关信息,合约代码如下:
9 H3 b' F/ G3 y$ u( ~/ ]% k; U3 y4 d8 a4 u
    pragmasolidity^0.4.24;1 K  Q$ @0 ^0 A0 {

# B" C% S: _. }( m# ^. u    contractIpfsRecord{
0 |  B  X! g$ T2 w/ v9 f
! R, ?& d& ]& v6 K7 }4 w$ h( S    string[]records;
* m" E' r3 B2 A0 ~, E+ }# T# W6 D9 n, J, Q  p
    functionadd(stringdata)external{
# K5 a0 t. a2 L  m7 M
- l& g+ e1 {9 J% L    records.push(data);
8 W( l$ v( j8 n" T
) g1 M( V2 x: [5 ]    }
# x. m/ E. W; ^: Q* ^& X* ^6 q7 x7 Q
    functiongetIndex()publicviewreturns(uint){
6 A: X% k; N5 i' f0 A5 C  E2 ]- w' t0 \) m0 H+ d6 r) \0 n8 [) h
    returnrecords.length;
7 o& l1 v' s6 V0 h6 O$ e+ X# n; }; _$ V. E. B: @
    }
$ w4 V, ^7 x' O1 e3 j
8 A; c; D& t7 c& W, Y    functionget(uintindex)publicviewreturns(string){+ p1 Q% W$ [6 M" ~1 u5 ^
9 A# }2 n6 _7 m0 M4 A/ h% H
    returnrecords[index];
: X  Z' O6 L" C. F9 c
4 a, x' T: v% H    }6 ~/ N* Q7 i2 w4 J8 M

  }: @8 n7 ?# P7 }3 U' D/ z  ]    }
& p, c  n" X$ V  a6 A- `
- h/ ]0 M) e+ \3 e  }5 J% M; w    IPFS部分:可以是本地节点或者远程节点,当收到JS-IPFS-API发送过来的add请求时负责存储文件内容并返回哈希值;当收到get请求时负责根据文件哈希值查询文件,并返回文件内容。, }, W3 I. A' ]3 p* t4 w% n: {
+ O% A" A, g' {5 z) B3 M  Y
    系统流程
. ~" [% n3 Z! A4 {# l( h: h2 R( V5 E
* L" f" P0 v( ~2 s- @    用户上传文件7 M* f: j) o2 P7 f
( N1 m* J' H3 _
    当用户点击UPLOAD按钮上传文件时,后端JS监听到UPLOAD按钮的点击动作,将文件转换成BUFFER类型,通过js-ipfs-api的add接口上传到IPFS节点,IPFS节点返回文件的哈希值给后端JS。JS将文件哈希值,发送者地址和当前时间拼接成字符串,再向Qtum区块链节点发送send请求,将数据记录在智能合约中,当交易确认之后,刷新页面即可在浏览器中查看此记录。& K& Z* t& h3 x" G0 e7 I. u" \

0 P+ A. s, w% E5 H9 _* y! u    流程图如下:
: A) j, T; N( G; x! w  ]
- v9 a! J6 M6 O0 V$ B5 D    展现文件列表, h4 q. v! O2 c7 e. [

% H8 m1 V: A5 O0 u, o# d3 T6 t; `    当用户通过浏览器访问网站时,React加载前端组件,后端开始初始化,连接Qtum节点和IPFS节点,并且通过qtumJS向Qtum区块链节点发送CALL请求,调用合约中的getIndex接口获取合约中的记录数index,再循环index次调用合约的get接口获取合约内容,最后将合约内容返回给前端展示。
( a* s( ^2 `4 W) Q/ B, W% r, Z! R
/ K) [4 y% }% M    系统部署+ a" S( o7 S/ J
$ c/ u" N/ V. G* u& b
    系统部署步骤简单概述如下:
$ n. {' u  [9 V) n- d* G% n0 H/ Z
1 {" p+ h. F& u! E: ?! z( G    克隆代码,下载React前端依赖;6 V; k; n3 p( O! w2 B' k

4 h: Y& G0 C  u  [2 [0 E7 r    我们需要将智能合约部署到区块链上,所以要下载Soliditycompiler和Solar;3 [- D9 k4 ?' S  o1 f
; P  Z) h- Z) S' x2 v
    启动本地IPFS节点或者在用infura远程节点;
/ z7 b+ q0 d# ~$ |  d4 `; t& d$ v2 D
    下载并启动Qtum节点,设置corsproxy代理;
' t- \+ \% T3 U3 S, D" w5 E) E
& H% `, f- T% t7 |# G  M+ c, l    部署智能合约(确保测试账户有足够的Token);
, \4 C; \% W0 A3 Q5 w; o1 N
3 I- J( f6 ?0 K3 D3 T4 @    最后,启动系统。7 V7 `+ n* p# e4 B; {( l/ K1 U3 G
' V9 t- B2 G& I) j5 }7 i4 i
    详细步骤可以参考[3]中的QuickStart。# o, e6 P  K1 z, v; R
4 W% A% ^% w6 T2 k# ^
    系统使用& C! a( n2 g/ d  r7 M0 v
2 c( p/ G+ S& f; o7 M6 M0 C9 `" S
    系统的使用很简单,当部署成果之后,只需要在浏览器中访问http://localhost:3000/,点击UPLOAD即可上传文件,按钮下方将显示为智能合约中的记录。6 V! l. H- d! u: u, m

2 P: z+ o0 P; n! J4 P1 j/ @2 |    未来工作. J  h/ N, X2 z0 x" p" X
7 N6 Y. V6 b7 X5 F
    IPFS协议从本质出发,找出现有互联网最底层,即数据层存在的痛点,结合区块链技术,重新设计了该系统的架构。也许在不远的未来,任何地点访问网站轻松看超高清电影不会再是奢望了。) S) |1 L# i* _" c- x

4 `7 w  U" m- e2 L8 O    经过分析和论证,我们可以清晰地发现Qtum与IPFS之间的互补关系:IPFS可以极大地弥补区块链存储空间昂贵、扩容难的问题,而Qtum可以将共识、激励以及所有权归属等特性赋予IPFS。
0 `: c5 V: C( B1 _$ B
% b/ @' s4 \+ b7 }    更细一步的说,Qtum通过EVM智能合约可以完美兼容ERC721标准,因此可以将NFT(Non-FungibleToken,非同质化代币)与IPFS结合,给予IPFS存储的内容独一无二的token属性和严格透明的所有权归属与转换功能。同时IPFS也将拓展NFT所能承载的内容,使其具有更加丰富的应用场景。
3 C: r% @6 q. `
# w  ]$ L8 E- P( @    例如,我们将一个独具创意的艺术品(名画、雕塑等)的各种信息(图片、名称、创作时间、地点、创意等)上传至IPFS网络中存储,在Qtum上的NFT智能合约中创建一个token来唯一标示该艺术品的所有权,并赋予其所有权转换交易的属性,这样将极大地方便艺术品在虚拟世界的流通和交易,区块链的公开与透明也很大程度上杜绝了交易流转过程的暗箱操作。
( g9 D5 Y& I( @- n1 A# I8 `5 Z, W1 h5 N. t$ @" E4 s& @. Y
    因此,我们正在考虑从以下几个方面出发:
  u' O' N- q; y! p& ?% a% p5 d; ^
" [) f- }$ \! v    在Qtum上将NFT和IPFS进行结合:& o) p& S" @0 D. Q/ S. |& K

+ I& R' b& Z. A* `! l    用ERC721标准开发IPFS与NFT结合的demo;
2 f5 ~2 r# R1 Y% w
$ \/ j; \3 p, K8 m8 o8 @& i    开发一键部署NFT合约与接入IPFS网络的工具;8 e3 ^  o' n! g8 X0 K. l! C* D" x

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

本版积分规则

成为第一个吐槽的人

Cherry95 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    2