Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

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

Cherry95
156 0 0
从比特币开始,区块链就被定义为“不可篡改”的数据库技术,当所有节点通过区块链来建立信任的时候,需要同步完整的区块信息。如果区块链允许用户上传大型数据,那么将会造成大量的存储和网络资源浪费。所以,各个区块链网络都会通过限制区块大小、高昂的gas费用等方式,指导用户只把更有价值的简短信息记录在区块链中,所以区块链网络也被成为“价值网络”。5 W6 K/ R. O  ~! v

% c' i6 H7 y1 J# G6 M    IPFS[1](InterPlanetaryFileSystem,星际文件系统)完美解决了大型文件的去中心化存储问题。每一个上传到IPFS的大型文件将会被分成若干个大小为256KB的块,每个块在IPFS中都会做一次哈希计算,得到的运算结果作为块的地址。系统最终会给整个文件生成一个哈希值作为该文件的地址,IPFS网络中的任何节点都能通过该地址来下载整个文件。
/ q5 i2 x+ `- t' E1 E3 K$ p/ G# a3 n% \6 M
    区块链和IPFS的结合将会是未来去中心化应用的发展方向。把区块链作为数据库来存储结构化数据,把IPFS作为文件系统来存储图片、视频等大型文件,从而构建一个完整的去中心化应用。
  Z0 ]3 z7 o8 E1 ]8 v
+ t% {8 I, M$ Q, k% }# m7 _- o    Qtum+IPFS
; K5 y6 \( G6 w2 ~: D
* \& s) l' s  A  }, _    本文介绍了基于Qtum[2]区块链和IPFS的去中心化应用解决方案,该方案首先将用户上传的文件存储到IPFS,文件IPFS地址记录在Qtum的智能合约中,实现了大型文件的去中心化存储和分享功能。代码已经上传到Github中[3],对于相关技术比较熟悉的开发人员可以直接前往Github进行使用。
6 ]* M+ c! r( M* U/ y# n$ [/ y
# E6 Q9 J# ?, L, C    背景5 g' N# u! V( N2 M6 J! m& J
# [4 g* l' X9 q  Q
    Qtum* q, O3 o$ M/ k) L" e
! r, C8 u( \8 H) c
    Qtum区块链,又称为量子链,是一个基于UTXO(UnspentTransactionOutput,未花费交易输出)、PoS(ProofofStake,权益证明)和EVM(EthereumVirtualMachine,太坊虚拟机)的区块链平台,融合了比特币和以太坊生态系统各自的优点。Qtum通过AAL(AccountAbstractionLayer,账户抽象层)技术把UTXO模型转换成可供EVM执行智能合约的账户模型,使得智能合约可以完美运行在比特币的区块链架构上,因而给系统带来了强大的兼容性。; `/ X* T0 U/ _/ Q3 s; q

" v9 G/ B0 \  a( j1 z. D4 B    IPFS% R2 D5 R4 g' M4 p! A2 `0 O

1 M, f! a4 }' @7 p# B    IPFS是一个旨在创建持久且分布式存储和共享文件的网络传输协议。存储的文件会被分割成多个部分并发送给多个节点。IPFS为每一个文件分配一个独一无二的哈希值作为文件的地址。当查询文件的时候,IPFS网络根据文件的哈希值进行查找。每个节点存储了一张哈希表,记录了文件存储所在的位置,从而用于文件的查询和下载。
/ W5 q) d, c" P# s4 b( R/ [* n" S" {/ m+ S
    区块链+IPFS的应用! l- A+ M! h+ i# x% Y& A+ X- p
/ j% Z# V+ d# U6 y% F& T
    IPFS官方Github[4]上介绍了很多IPFS的应用,在这里将给大家介绍其中的一些区块链和IPFS结合的应用。
  C( Y: t$ @4 Y
, c# V! B* @8 b, B, V    Akasha; Z. k& }- P; q" d7 n2 T
0 F( O4 \! U9 U% Q( z/ X4 w1 R
    由于所有上传到IPFS的文件都不可篡改,所以大家很容易就想到了互联网的信息获取自由,言论自由和隐私权。Akasha[5]是一个典型的应用,它是一个基于以太坊和IPFS的社交博客创作平台,用户创作的博客内容通过一个IPFS网络进行发布,而非中心服务器。同时,用户和以太坊钱包账户进行绑定,用户可以对优质内容进行ETH打赏,内容创作者能以此赚取ETH,如同人脑挖矿一样。它没有太多监管的限制,也没有中间商抽成,内容收益直接归创作者所有。7 K- r3 m, f4 D

3 ], I% _7 U. h6 }/ a; ~: R& t4 ]    uPort# }% H  u+ g$ M7 f! A4 J; G) w

+ O4 u1 V3 u2 t( c    在电子商务领域,身份认证一直是一个关键的痛点。uPort[6]是一个基于Ethereum和IPFS的身份认证应用。用户可以使用uPort提供的智能合约进行身份的注册,系统会将身份的详细信息记录在IPFS上。基于uPort,用户得以在拥有数字身份的同时保护自身隐私,并且只允许特定组织或个人访问、储存、分析或分享个人数据。
( u. ]0 x/ [7 B0 Q
' t+ L% c. g, S3 V    系统
% |8 j  y) Z/ c5 |0 h6 |; Z
/ t4 E6 n; S3 m# c- n    系统架构
3 y# c" p; `: P: d! t" g; n! T5 a( T* A" Z
    本系统可以分为上下两层:
( R- r7 Q9 k* r. {& e
3 B8 x. r+ A7 w8 t  t& A2 O  z  {- P- r    上层:基于React框架,以HTML+JS的方式运行在浏览器中,用户可以通过网页访问本系统。上层系统通过QtumJS和JS-IPFS-API两个组件和下层进行通信。QtumJS通过call接口访问Qtum中的智能合约,通过sendto接口向智能合约发送交易;JS-IPFS-API通过add接口向IPFS网络中添加文件,通过get接口从IPFS网络中获取文件内容。
& e8 J4 c- `7 K- s. ?- G5 g* i! a- a6 U6 C) L( e0 G5 S0 F9 ]
    下层系统包括QTUM和IPFS两个部分:6 D8 E6 I6 a' c/ h4 e7 R
' G* t2 e0 g' ]) w3 P* A, r+ _
    Qtum部分:部署了智能合约,用来存储文件的结构化数据(文件名,哈希值,添加时间等),通过合约的add接口写入数据,通过合约的getIndex和get接口获取合约中存储的文件相关信息,合约代码如下:
( l3 z$ {: ]$ P- ^. ~  R; z+ P
. u" m1 t% a! o6 z  s5 M    pragmasolidity^0.4.24;2 q- k6 k7 O9 p3 m; T

5 n) X4 w  P, M( m/ J    contractIpfsRecord{9 [5 k, V* f' j3 {8 ]# i* i# q

. j3 ~; e' ~3 \6 _9 M- x    string[]records;4 M. |! @. P5 _0 k! s2 t* D
8 |) e3 x; B& `' v
    functionadd(stringdata)external{
; i: I" b% w; g) b
+ P$ K( o3 S( a- j8 Y3 k    records.push(data);
+ i0 Q( @0 }) q* h. I6 `) p
- K) d+ \! t: A    }) X$ x3 Z; ]6 h5 p% N# }; l$ \

: e, z- q$ E. X+ ?1 ]$ \    functiongetIndex()publicviewreturns(uint){+ H# c1 F  M+ X/ [

+ L% r) {3 v: S0 D    returnrecords.length;
7 @8 X- M2 n# [4 i. E
. E0 J9 I- i! E/ d5 S    }- q9 S) Y1 \* I5 g0 G
; y% y6 l8 e6 [: I* k/ v
    functionget(uintindex)publicviewreturns(string){  |6 i4 D, O2 j3 `" A% J
3 [  j# y3 z+ u( Z
    returnrecords[index];% f1 S! J8 v$ C# l3 ^

$ q8 _: y% z. U: B' t+ {    }1 c% S: m& N. |* g9 a; |5 w

# x2 r5 q# f# m    }1 r% r1 E  P/ n! Z4 V% u, X7 G

$ Q$ X9 J+ A+ V1 _    IPFS部分:可以是本地节点或者远程节点,当收到JS-IPFS-API发送过来的add请求时负责存储文件内容并返回哈希值;当收到get请求时负责根据文件哈希值查询文件,并返回文件内容。& m/ R8 J1 a" T5 S5 r& S3 G
' _* @4 W0 F9 b" T! L
    系统流程
/ K, e2 f$ E  n& U  X! c
* ?. G! `! D1 s* f0 [/ \    用户上传文件8 s. n+ n- v' \' U3 t) d0 r1 p
) m; i% n+ `* r8 z/ y6 P* M
    当用户点击UPLOAD按钮上传文件时,后端JS监听到UPLOAD按钮的点击动作,将文件转换成BUFFER类型,通过js-ipfs-api的add接口上传到IPFS节点,IPFS节点返回文件的哈希值给后端JS。JS将文件哈希值,发送者地址和当前时间拼接成字符串,再向Qtum区块链节点发送send请求,将数据记录在智能合约中,当交易确认之后,刷新页面即可在浏览器中查看此记录。. w& W) X4 I2 C: g! q

) ]+ r; r+ A7 h* y8 U; D; Q. V- O    流程图如下:
$ E7 P0 O0 a1 g% ~7 s9 r: B$ ?+ _2 ?$ j# W' z. S0 M9 B. p
    展现文件列表% h$ U; @9 m/ o4 X
7 q" ~- E4 {- P1 z3 [8 t
    当用户通过浏览器访问网站时,React加载前端组件,后端开始初始化,连接Qtum节点和IPFS节点,并且通过qtumJS向Qtum区块链节点发送CALL请求,调用合约中的getIndex接口获取合约中的记录数index,再循环index次调用合约的get接口获取合约内容,最后将合约内容返回给前端展示。
4 g! ]6 K8 O( b% O
( B" @: y/ b% t9 s8 X    系统部署" j8 t8 I  D3 j

6 z* y$ }0 P/ Z" `4 {& w3 F" A3 \! \    系统部署步骤简单概述如下:( u% i/ i# g& Y/ A' |' K5 O

' A& H  z2 ^1 n; R9 C    克隆代码,下载React前端依赖;) m* g/ F! o1 @" @

  O4 |% t7 g" d% b" K$ e    我们需要将智能合约部署到区块链上,所以要下载Soliditycompiler和Solar;# O( F4 G1 L( ?& P/ B( t" B
2 n& p' _# r1 t# q. j% T
    启动本地IPFS节点或者在用infura远程节点;
+ E# }: {# d! e2 j! O" T# k  L, d  ~! v7 w- w# r6 b% ?8 D
    下载并启动Qtum节点,设置corsproxy代理;
, m; f+ W3 B' o9 f' S5 e
! q2 ~: I7 @7 R/ D$ \    部署智能合约(确保测试账户有足够的Token);0 c: t4 Y# A# S3 v' j/ S
9 n0 S1 y5 T$ h& {/ B7 d
    最后,启动系统。
% v4 e8 X: A( t% k, n* Z) d" A* q' g: D' L' f* T) u5 r7 ^1 F
    详细步骤可以参考[3]中的QuickStart。
2 t2 `$ \; w! ?; t3 B9 w! x. @8 N  N; K( @
    系统使用
2 |& Y! p, h9 i( o
6 N4 A9 A9 ]$ L( s5 E- i    系统的使用很简单,当部署成果之后,只需要在浏览器中访问http://localhost:3000/,点击UPLOAD即可上传文件,按钮下方将显示为智能合约中的记录。
& ^! \% J% E4 }/ _' ?' u  ]
* f! g3 D$ U7 r    未来工作5 F' M+ k  w9 s8 W  u

7 m- v( U. j; P2 v8 r3 E! i    IPFS协议从本质出发,找出现有互联网最底层,即数据层存在的痛点,结合区块链技术,重新设计了该系统的架构。也许在不远的未来,任何地点访问网站轻松看超高清电影不会再是奢望了。+ T5 t" r3 W& i+ i4 {1 G. B3 [
3 P7 ~/ u7 X5 i/ m
    经过分析和论证,我们可以清晰地发现Qtum与IPFS之间的互补关系:IPFS可以极大地弥补区块链存储空间昂贵、扩容难的问题,而Qtum可以将共识、激励以及所有权归属等特性赋予IPFS。
: x" S" s: Y4 D4 F0 h: n. a  D* B
) p. ?: I" n1 O- w    更细一步的说,Qtum通过EVM智能合约可以完美兼容ERC721标准,因此可以将NFT(Non-FungibleToken,非同质化代币)与IPFS结合,给予IPFS存储的内容独一无二的token属性和严格透明的所有权归属与转换功能。同时IPFS也将拓展NFT所能承载的内容,使其具有更加丰富的应用场景。
0 a5 H& s) q9 \# n4 Q7 S' W8 r7 _& e7 E4 _7 f  f/ R
    例如,我们将一个独具创意的艺术品(名画、雕塑等)的各种信息(图片、名称、创作时间、地点、创意等)上传至IPFS网络中存储,在Qtum上的NFT智能合约中创建一个token来唯一标示该艺术品的所有权,并赋予其所有权转换交易的属性,这样将极大地方便艺术品在虚拟世界的流通和交易,区块链的公开与透明也很大程度上杜绝了交易流转过程的暗箱操作。% E6 u/ ]2 H0 t( M, O

2 ]$ D: q/ i$ A6 @    因此,我们正在考虑从以下几个方面出发:& ^! ]3 q+ _) N! `1 A5 r# M3 f
1 Q$ D$ Y8 ?; {  E. h/ @1 M- W6 V' s
    在Qtum上将NFT和IPFS进行结合:
- `% g0 }% ^2 C6 T# W# w- ?3 @# T6 O
    用ERC721标准开发IPFS与NFT结合的demo;5 B. ^3 Z) y" N

8 Z" w$ R3 r3 ~    开发一键部署NFT合约与接入IPFS网络的工具;
2 y0 Z4 W' d3 z& R8 T0 \$ z* ~) t& w6 Q$ `6 {3 A0 F; E- Q
    搭建去中心化的NFT交易平台,提高NFT的展示效果与流通能力
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

Cherry95 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    2