Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

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

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

& N/ D/ g4 e. P" O3 e: ?) T$ A7 {    IPFS[1](InterPlanetaryFileSystem,星际文件系统)完美解决了大型文件的去中心化存储问题。每一个上传到IPFS的大型文件将会被分成若干个大小为256KB的块,每个块在IPFS中都会做一次哈希计算,得到的运算结果作为块的地址。系统最终会给整个文件生成一个哈希值作为该文件的地址,IPFS网络中的任何节点都能通过该地址来下载整个文件。3 }7 q  {. l8 ~3 ^9 C. M9 g" l% x. W

. i" ]5 p0 E2 f    区块链和IPFS的结合将会是未来去中心化应用的发展方向。把区块链作为数据库来存储结构化数据,把IPFS作为文件系统来存储图片、视频等大型文件,从而构建一个完整的去中心化应用。, l! g" E) P( z( W4 @
) F: L6 o2 C' z6 r5 k/ Z
    Qtum+IPFS/ e6 _9 f6 u3 ^) z  @9 f

; |! t' ^7 J9 Y! L' u. y    本文介绍了基于Qtum[2]区块链和IPFS的去中心化应用解决方案,该方案首先将用户上传的文件存储到IPFS,文件IPFS地址记录在Qtum的智能合约中,实现了大型文件的去中心化存储和分享功能。代码已经上传到Github中[3],对于相关技术比较熟悉的开发人员可以直接前往Github进行使用。- y- a! S8 W) a, v

# ~0 z- I- N' P    背景2 n! Y% S, d; m' ?! \' B) f% i
) V* ?+ }! d/ Y# k$ n- ^
    Qtum' ~' M7 g1 F6 Z9 q! ^

& H0 m! P8 \  Z+ ^/ ^/ O    Qtum区块链,又称为量子链,是一个基于UTXO(UnspentTransactionOutput,未花费交易输出)、PoS(ProofofStake,权益证明)和EVM(EthereumVirtualMachine,太坊虚拟机)的区块链平台,融合了比特币和以太坊生态系统各自的优点。Qtum通过AAL(AccountAbstractionLayer,账户抽象层)技术把UTXO模型转换成可供EVM执行智能合约的账户模型,使得智能合约可以完美运行在比特币的区块链架构上,因而给系统带来了强大的兼容性。* p7 h2 A0 A5 F9 f% u3 e8 A. R
8 q4 |4 ?" D* [: T/ r/ A) g
    IPFS( U" |# j9 B$ ]2 {/ X
/ N+ }0 U: J9 I. t2 T; O) ?0 k
    IPFS是一个旨在创建持久且分布式存储和共享文件的网络传输协议。存储的文件会被分割成多个部分并发送给多个节点。IPFS为每一个文件分配一个独一无二的哈希值作为文件的地址。当查询文件的时候,IPFS网络根据文件的哈希值进行查找。每个节点存储了一张哈希表,记录了文件存储所在的位置,从而用于文件的查询和下载。& Y6 ~5 o$ u- _& D  A
) f2 o( V8 G% {+ Y# s+ l0 x; Q% E+ U
    区块链+IPFS的应用
. D! i. l( R% \# x; a: T/ x+ N5 v2 z% D4 Q
    IPFS官方Github[4]上介绍了很多IPFS的应用,在这里将给大家介绍其中的一些区块链和IPFS结合的应用。
+ s9 |# |# v! j  {
; _3 `, p. N" A    Akasha
8 q' @! K. I  `! ]. J0 s
# |% l% w. v8 ?% d6 u" q    由于所有上传到IPFS的文件都不可篡改,所以大家很容易就想到了互联网的信息获取自由,言论自由和隐私权。Akasha[5]是一个典型的应用,它是一个基于以太坊和IPFS的社交博客创作平台,用户创作的博客内容通过一个IPFS网络进行发布,而非中心服务器。同时,用户和以太坊钱包账户进行绑定,用户可以对优质内容进行ETH打赏,内容创作者能以此赚取ETH,如同人脑挖矿一样。它没有太多监管的限制,也没有中间商抽成,内容收益直接归创作者所有。
1 j' l% S/ _, t
' _( I8 d- @; ^    uPort
) e! d) Q) u! M8 y# D; v' i  X; t. r: B! ?+ M
    在电子商务领域,身份认证一直是一个关键的痛点。uPort[6]是一个基于Ethereum和IPFS的身份认证应用。用户可以使用uPort提供的智能合约进行身份的注册,系统会将身份的详细信息记录在IPFS上。基于uPort,用户得以在拥有数字身份的同时保护自身隐私,并且只允许特定组织或个人访问、储存、分析或分享个人数据。
& @' Y7 I2 o* Z# J/ f# u! ~3 P8 _' a4 E' B0 O% r
    系统9 d0 z# M6 e6 r# R8 i. m

" S+ U4 N* P2 }    系统架构/ R# e% A6 A9 t. x

  k$ M( Z1 H) c) d  J9 U    本系统可以分为上下两层:
; f  u' s; E" j( l7 {0 \: W* J( a6 p9 O  k
    上层:基于React框架,以HTML+JS的方式运行在浏览器中,用户可以通过网页访问本系统。上层系统通过QtumJS和JS-IPFS-API两个组件和下层进行通信。QtumJS通过call接口访问Qtum中的智能合约,通过sendto接口向智能合约发送交易;JS-IPFS-API通过add接口向IPFS网络中添加文件,通过get接口从IPFS网络中获取文件内容。
' u9 f3 p8 L4 S" Q9 q9 ~& b) G; Z% o6 [* s' I
    下层系统包括QTUM和IPFS两个部分:
% S- H- N. |  f4 v& G9 [$ Q& h  s0 n9 V5 |
    Qtum部分:部署了智能合约,用来存储文件的结构化数据(文件名,哈希值,添加时间等),通过合约的add接口写入数据,通过合约的getIndex和get接口获取合约中存储的文件相关信息,合约代码如下:/ k7 A/ {' r8 U+ ?: U' q* \. A
/ }- B0 K4 G: h
    pragmasolidity^0.4.24;
8 F  \* V, k* a  }1 J
# t1 E3 |5 x" ?4 g5 S7 f8 E: U    contractIpfsRecord{1 h' _& _% u' T  Z! q8 G0 s
- y: i* a- v0 k
    string[]records;
/ y. G' g& a0 F) C
# t# |( f) z0 H7 G    functionadd(stringdata)external{9 f2 v) K* ?/ |  g( u3 f

7 s8 F3 N+ g) Y* v" B    records.push(data);
0 d5 M: D2 x4 B, s  P+ ^" A9 f
: T+ c" h7 x+ M: S' I  w% l- f    }/ i6 l: Q5 R& \+ F4 I6 W
3 t8 Q& L7 K, T" @3 K; S/ T0 G& d
    functiongetIndex()publicviewreturns(uint){/ c8 b. K8 Q& n) C+ u. l7 W- j

. y/ ]" o6 g7 I  x* E) U1 M    returnrecords.length;
5 }6 t7 Z1 P, G0 Y3 V+ Y9 x: G: Z1 H
    }
( s# p0 C' m% r& W( f0 V  c9 @6 R9 X; e* ]/ x$ Z' p
    functionget(uintindex)publicviewreturns(string){0 y2 p; w" ?  x% m" L  C; x
* m: i( D( p. P& S/ Y3 B2 D; |+ N
    returnrecords[index];: ?; T: T+ r, t4 u3 @1 U% E

+ r* P! D' ]9 c  {    }- w: O8 }' A1 b5 H
1 b* Q7 ]  s0 E* l5 m. P8 d
    }
# |: V$ s% a) J9 e
8 |4 t. f% e% t! h  z* }    IPFS部分:可以是本地节点或者远程节点,当收到JS-IPFS-API发送过来的add请求时负责存储文件内容并返回哈希值;当收到get请求时负责根据文件哈希值查询文件,并返回文件内容。) A. g5 ^8 d) k4 k
* l4 c' \, P+ o1 U+ z
    系统流程3 |: ]/ R) F( n! l( I2 f
7 P8 K1 p$ g9 G6 V
    用户上传文件* @6 S$ U5 B. P+ `
1 X8 K, a8 r# a& t# r
    当用户点击UPLOAD按钮上传文件时,后端JS监听到UPLOAD按钮的点击动作,将文件转换成BUFFER类型,通过js-ipfs-api的add接口上传到IPFS节点,IPFS节点返回文件的哈希值给后端JS。JS将文件哈希值,发送者地址和当前时间拼接成字符串,再向Qtum区块链节点发送send请求,将数据记录在智能合约中,当交易确认之后,刷新页面即可在浏览器中查看此记录。  C4 E# F, e6 L

+ N# N  ]3 Q0 o* V% ~    流程图如下:7 L  ^9 a! s6 _0 a% d6 A( F0 o

, i. k5 `" T# W& j$ d    展现文件列表+ c4 h0 ~/ a8 ?& b4 o* g

7 k  I; t4 @" H$ G9 b- j    当用户通过浏览器访问网站时,React加载前端组件,后端开始初始化,连接Qtum节点和IPFS节点,并且通过qtumJS向Qtum区块链节点发送CALL请求,调用合约中的getIndex接口获取合约中的记录数index,再循环index次调用合约的get接口获取合约内容,最后将合约内容返回给前端展示。
- X* F' W% T" s. k3 E- }
& ~6 s8 p. {+ ]    系统部署( \- P; @. ~* e: e3 u5 c' K
$ l/ `& |; ~# {# E
    系统部署步骤简单概述如下:; z/ \# H0 Y; z% c; @& n, ^, Z

/ [7 ]/ l8 ]4 U    克隆代码,下载React前端依赖;
) O  U8 Q& i2 Q# y" H1 r& u: i* J% h: v2 b: y0 m. Z2 \
    我们需要将智能合约部署到区块链上,所以要下载Soliditycompiler和Solar;
5 ~0 e0 H" I: p  y% O$ i1 `4 ]% d* O* B
    启动本地IPFS节点或者在用infura远程节点;
7 R: \# L6 F7 {9 R, x( r) s! _* v) ^3 G! E+ k& N# J/ m
    下载并启动Qtum节点,设置corsproxy代理;7 c  h& ^+ P( d8 a
  U5 Q  E; v' r; D5 ^$ p3 E) p* X; o2 e
    部署智能合约(确保测试账户有足够的Token);
. B  r' T! w+ W1 k  _$ D7 q* j4 P3 g' t4 ~+ t8 F
    最后,启动系统。
' p* t) G* x% D
% w5 t  N9 R  x8 I& Q2 s2 H7 v    详细步骤可以参考[3]中的QuickStart。
' F& z$ O; K6 g- [
* z- B8 }; w! X4 A    系统使用
4 j, w. A  a: C5 S; {* ~
. F! L, T, Z' ]* c. a" N    系统的使用很简单,当部署成果之后,只需要在浏览器中访问http://localhost:3000/,点击UPLOAD即可上传文件,按钮下方将显示为智能合约中的记录。
3 u; y$ z& {% T5 M; i
) B& n/ t1 X5 S+ \    未来工作
- l2 ^& r7 p  W9 z$ S8 B
' b% F; x# G4 l' |0 P* ~* v0 V    IPFS协议从本质出发,找出现有互联网最底层,即数据层存在的痛点,结合区块链技术,重新设计了该系统的架构。也许在不远的未来,任何地点访问网站轻松看超高清电影不会再是奢望了。1 G; R) ]( u7 o6 L4 i$ j# y
! v8 n3 n- k+ Q- H) C
    经过分析和论证,我们可以清晰地发现Qtum与IPFS之间的互补关系:IPFS可以极大地弥补区块链存储空间昂贵、扩容难的问题,而Qtum可以将共识、激励以及所有权归属等特性赋予IPFS。5 |" J7 ~+ q6 S1 O$ K: n2 P
1 E) g; w7 l+ p  V3 s# Z' ?5 @
    更细一步的说,Qtum通过EVM智能合约可以完美兼容ERC721标准,因此可以将NFT(Non-FungibleToken,非同质化代币)与IPFS结合,给予IPFS存储的内容独一无二的token属性和严格透明的所有权归属与转换功能。同时IPFS也将拓展NFT所能承载的内容,使其具有更加丰富的应用场景。
1 Z8 k( Q  E- X* {: Q  ~$ F5 C8 K4 k% L& j
    例如,我们将一个独具创意的艺术品(名画、雕塑等)的各种信息(图片、名称、创作时间、地点、创意等)上传至IPFS网络中存储,在Qtum上的NFT智能合约中创建一个token来唯一标示该艺术品的所有权,并赋予其所有权转换交易的属性,这样将极大地方便艺术品在虚拟世界的流通和交易,区块链的公开与透明也很大程度上杜绝了交易流转过程的暗箱操作。
% I3 W# K' k$ t2 \& P! u# M. b- b" r
* t$ p0 ~3 v! Q) z7 S    因此,我们正在考虑从以下几个方面出发:
+ h1 ^) A% H, ]+ ^2 K8 G6 O( d. c/ p
    在Qtum上将NFT和IPFS进行结合:1 W6 ?; v7 x6 c4 U9 u7 \

$ D  v# e! @, U/ [1 {, U1 i* l    用ERC721标准开发IPFS与NFT结合的demo;0 X, _8 R- y3 z, Y/ C5 Z2 S
5 s- [4 ]/ q- m# O# E3 m: h
    开发一键部署NFT合约与接入IPFS网络的工具;
1 J- [, d; `' A2 `0 O" J( s) b( w' A) Q; X" x
    搭建去中心化的NFT交易平台,提高NFT的展示效果与流通能力
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

Cherry95 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    2