Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

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

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

+ b' u) V6 D, y! ^% Y    IPFS[1](InterPlanetaryFileSystem,星际文件系统)完美解决了大型文件的去中心化存储问题。每一个上传到IPFS的大型文件将会被分成若干个大小为256KB的块,每个块在IPFS中都会做一次哈希计算,得到的运算结果作为块的地址。系统最终会给整个文件生成一个哈希值作为该文件的地址,IPFS网络中的任何节点都能通过该地址来下载整个文件。9 s; D/ r" s( G8 p# e# `

  W; y3 o, p2 c3 s3 R    区块链和IPFS的结合将会是未来去中心化应用的发展方向。把区块链作为数据库来存储结构化数据,把IPFS作为文件系统来存储图片、视频等大型文件,从而构建一个完整的去中心化应用。. }( `  C/ X' M, r) T

7 c% p* l0 I, L2 x: Y    Qtum+IPFS* q) U, s% R6 q
) z9 V+ f; ]6 t
    本文介绍了基于Qtum[2]区块链和IPFS的去中心化应用解决方案,该方案首先将用户上传的文件存储到IPFS,文件IPFS地址记录在Qtum的智能合约中,实现了大型文件的去中心化存储和分享功能。代码已经上传到Github中[3],对于相关技术比较熟悉的开发人员可以直接前往Github进行使用。5 W. r. u8 Y/ M8 _, u4 o
+ k  ^2 |3 t' }  E' o
    背景3 I/ ^# z4 N9 Q3 m6 i
. C2 t- `- l3 K$ }
    Qtum
5 k' X& |. K, B3 `) G
: p/ v+ G% m* v) \7 d4 O0 D    Qtum区块链,又称为量子链,是一个基于UTXO(UnspentTransactionOutput,未花费交易输出)、PoS(ProofofStake,权益证明)和EVM(EthereumVirtualMachine,太坊虚拟机)的区块链平台,融合了比特币和以太坊生态系统各自的优点。Qtum通过AAL(AccountAbstractionLayer,账户抽象层)技术把UTXO模型转换成可供EVM执行智能合约的账户模型,使得智能合约可以完美运行在比特币的区块链架构上,因而给系统带来了强大的兼容性。: m. B2 M9 O7 l( ~

9 F# R" }- N. ?! d6 }4 g    IPFS
5 z0 D4 W! ?. Z7 h7 s8 \  M6 i0 Z% m) ]$ ~$ y1 ?
    IPFS是一个旨在创建持久且分布式存储和共享文件的网络传输协议。存储的文件会被分割成多个部分并发送给多个节点。IPFS为每一个文件分配一个独一无二的哈希值作为文件的地址。当查询文件的时候,IPFS网络根据文件的哈希值进行查找。每个节点存储了一张哈希表,记录了文件存储所在的位置,从而用于文件的查询和下载。9 H/ O% ]2 g- e8 p5 Z  Y# O

' l- b# [- x) U' u, q4 I( I    区块链+IPFS的应用; l. t- }$ |0 V' }

2 U" f( U; c; o8 N( D    IPFS官方Github[4]上介绍了很多IPFS的应用,在这里将给大家介绍其中的一些区块链和IPFS结合的应用。
& d/ {8 ]# N% U, U: f# b8 Y; W3 w3 Y* \7 Y
    Akasha
# g2 s& w1 y6 n
3 C+ N6 B! d, y4 v7 `7 F/ P3 Z    由于所有上传到IPFS的文件都不可篡改,所以大家很容易就想到了互联网的信息获取自由,言论自由和隐私权。Akasha[5]是一个典型的应用,它是一个基于以太坊和IPFS的社交博客创作平台,用户创作的博客内容通过一个IPFS网络进行发布,而非中心服务器。同时,用户和以太坊钱包账户进行绑定,用户可以对优质内容进行ETH打赏,内容创作者能以此赚取ETH,如同人脑挖矿一样。它没有太多监管的限制,也没有中间商抽成,内容收益直接归创作者所有。
! ^% X( e3 L7 [1 D$ k3 a/ W& w7 u
: R' m1 h5 A& @5 _    uPort
( X& i1 p% T: ?+ @" M3 F. @
+ [3 A  C+ H! f' c$ x    在电子商务领域,身份认证一直是一个关键的痛点。uPort[6]是一个基于Ethereum和IPFS的身份认证应用。用户可以使用uPort提供的智能合约进行身份的注册,系统会将身份的详细信息记录在IPFS上。基于uPort,用户得以在拥有数字身份的同时保护自身隐私,并且只允许特定组织或个人访问、储存、分析或分享个人数据。' {) S6 h/ v+ {! Z6 I+ k0 L
+ v5 M$ |1 z# Z6 a8 _7 J: Z; K7 c# V
    系统
! V7 n* C  ]! k2 n8 [/ L- B
+ O# b4 d2 y* J9 R( W  D3 [    系统架构# L9 H$ H' }, g. I4 w! w1 C
5 \: J' @) s- v  j2 h
    本系统可以分为上下两层:+ O) T  C0 j* a& V+ t- N

" X5 I5 W  H/ @5 a5 A- h    上层:基于React框架,以HTML+JS的方式运行在浏览器中,用户可以通过网页访问本系统。上层系统通过QtumJS和JS-IPFS-API两个组件和下层进行通信。QtumJS通过call接口访问Qtum中的智能合约,通过sendto接口向智能合约发送交易;JS-IPFS-API通过add接口向IPFS网络中添加文件,通过get接口从IPFS网络中获取文件内容。
* f/ E& z3 p8 ?, B/ `; V) g4 Z* w, [8 l  Z
    下层系统包括QTUM和IPFS两个部分:
' S8 T. u! ^, K/ Z# h
$ g4 W( S/ T" ~0 i- \    Qtum部分:部署了智能合约,用来存储文件的结构化数据(文件名,哈希值,添加时间等),通过合约的add接口写入数据,通过合约的getIndex和get接口获取合约中存储的文件相关信息,合约代码如下:
( W  T" l+ U, \9 J
2 t2 h7 C4 E% ]    pragmasolidity^0.4.24;
: w& M: F0 P/ i, ^7 c; O$ q, n& D* l9 s. A, i9 P
    contractIpfsRecord{$ s3 l0 D! t- o% i/ u7 I3 R
; P$ m* U' n! o9 T  J+ Y; ^
    string[]records;
% @+ v, u) ~/ D+ _& [
+ o  s& d: R$ t8 m    functionadd(stringdata)external{  ]# s$ y7 z  h/ R& ^, G

/ z. s# \4 N" }: B    records.push(data);
: m; x. g. u0 t. w1 w+ T+ [3 d+ i7 ^4 V' y: }& G) }  t3 R, }, k, S, }% G
    }
" ^) u7 K  P3 T* }: M/ `  t  P
2 ]( \. S1 Y8 d/ t, ^    functiongetIndex()publicviewreturns(uint){
  \7 a3 I; [* C2 ?5 G/ H8 ]) V
% J' c7 ^2 l% z* b0 ^0 j: U" x    returnrecords.length;
: m2 ^: ?) H3 v  s/ ~
2 L0 C0 t  m+ q) A, B* v$ t0 V    }
. l5 W3 V& b3 h% Z8 }2 s/ i3 q, r+ H1 [: D
    functionget(uintindex)publicviewreturns(string){
% U4 z% F" t1 ^& G
9 I3 a2 O0 x  X$ w8 x, H* |7 m    returnrecords[index];1 q0 X: w4 ~. s/ l; f6 Q8 t

1 I. R; x, _; n    }, `7 J+ _8 E. l' ^
& E6 O* |6 q' C8 s1 b9 ?
    }! z1 j5 x! ~1 l, P2 A

) _; C- ~: V# Z5 D# H3 H0 Q    IPFS部分:可以是本地节点或者远程节点,当收到JS-IPFS-API发送过来的add请求时负责存储文件内容并返回哈希值;当收到get请求时负责根据文件哈希值查询文件,并返回文件内容。
. l0 m" R5 Z- m7 g, {& j6 m2 J( D4 m3 b1 v2 r  J( j
    系统流程; O  _& l; R' a* Y' |1 `
, c# I* b3 n$ B- ?1 G3 [
    用户上传文件
6 ^2 B# z; B; H) A& d4 [. j
( @) t& [( i6 C    当用户点击UPLOAD按钮上传文件时,后端JS监听到UPLOAD按钮的点击动作,将文件转换成BUFFER类型,通过js-ipfs-api的add接口上传到IPFS节点,IPFS节点返回文件的哈希值给后端JS。JS将文件哈希值,发送者地址和当前时间拼接成字符串,再向Qtum区块链节点发送send请求,将数据记录在智能合约中,当交易确认之后,刷新页面即可在浏览器中查看此记录。4 O* |7 G  }, y
' V% _# H8 ]9 w0 C4 y1 [
    流程图如下:
! W8 K, I$ r, m; X: Q  I0 v3 C* B$ I
9 u# X5 j  I3 `( S' W& _3 p0 y    展现文件列表
$ a6 u, y* y! U, U0 s
. C2 a0 ~) m4 L2 j7 g    当用户通过浏览器访问网站时,React加载前端组件,后端开始初始化,连接Qtum节点和IPFS节点,并且通过qtumJS向Qtum区块链节点发送CALL请求,调用合约中的getIndex接口获取合约中的记录数index,再循环index次调用合约的get接口获取合约内容,最后将合约内容返回给前端展示。
$ p% Q' q0 @2 f1 R$ o7 \
8 W/ ]: L; x' H3 `) B) a! T( q    系统部署
" k+ l# i# t5 J! y8 e# [% O+ m5 ^" s/ }  p1 \. @
    系统部署步骤简单概述如下:% g" C. q8 e% j" R! S" ^" N

- B) }% T: E: s" K" g" f. t    克隆代码,下载React前端依赖;
4 Q8 `6 b; D" C7 L  `# A* V
- a1 Y3 `& n( [6 ]/ M5 i$ Q    我们需要将智能合约部署到区块链上,所以要下载Soliditycompiler和Solar;; F* d' R% \9 H" h
! h# U" z9 P- l7 M
    启动本地IPFS节点或者在用infura远程节点;
/ p8 [: G! ^& B
6 }" |5 S/ P) ]! b    下载并启动Qtum节点,设置corsproxy代理;
: K9 `7 W3 n( D' G: L
6 y+ n7 v! x- y# e# }) X    部署智能合约(确保测试账户有足够的Token);
0 @2 O+ R  p3 k+ l" K+ m
' k: T, J2 S, g: `" f- p7 ^9 [    最后,启动系统。
# Q5 L8 F8 g3 d) k* v/ e9 }+ M: f' p
    详细步骤可以参考[3]中的QuickStart。
. a9 b; a# n) {3 r; d# I0 L( |& r- j2 |/ P1 _, _2 X! N1 ^  P+ z1 L4 j0 v5 n
    系统使用" \& s0 w3 c7 y

4 V: N9 s" i8 _# m, {/ `" F' G5 W    系统的使用很简单,当部署成果之后,只需要在浏览器中访问http://localhost:3000/,点击UPLOAD即可上传文件,按钮下方将显示为智能合约中的记录。- Z5 Y2 `" L1 o0 P# u2 k% x; Z
4 W% L7 Q$ ^4 g4 m, o
    未来工作( C9 n$ J0 h1 X
; x* I7 [( y2 N1 {
    IPFS协议从本质出发,找出现有互联网最底层,即数据层存在的痛点,结合区块链技术,重新设计了该系统的架构。也许在不远的未来,任何地点访问网站轻松看超高清电影不会再是奢望了。
$ v4 ~6 n5 `2 p, m9 q. b3 {7 `3 Y5 P; ~0 n; s/ x1 P
    经过分析和论证,我们可以清晰地发现Qtum与IPFS之间的互补关系:IPFS可以极大地弥补区块链存储空间昂贵、扩容难的问题,而Qtum可以将共识、激励以及所有权归属等特性赋予IPFS。9 q' P* z, }# F! _7 Z* t

6 P6 e' o0 F9 a/ Z; J0 J/ a/ F+ U7 u    更细一步的说,Qtum通过EVM智能合约可以完美兼容ERC721标准,因此可以将NFT(Non-FungibleToken,非同质化代币)与IPFS结合,给予IPFS存储的内容独一无二的token属性和严格透明的所有权归属与转换功能。同时IPFS也将拓展NFT所能承载的内容,使其具有更加丰富的应用场景。
% q. M5 f  R7 W, b+ {9 `7 O: v, L9 ]/ `4 v! Q6 B7 f7 r3 L$ E
    例如,我们将一个独具创意的艺术品(名画、雕塑等)的各种信息(图片、名称、创作时间、地点、创意等)上传至IPFS网络中存储,在Qtum上的NFT智能合约中创建一个token来唯一标示该艺术品的所有权,并赋予其所有权转换交易的属性,这样将极大地方便艺术品在虚拟世界的流通和交易,区块链的公开与透明也很大程度上杜绝了交易流转过程的暗箱操作。
6 j% f/ Q" ~7 A+ y; v; p/ M$ f9 u" Q- {/ |, n
    因此,我们正在考虑从以下几个方面出发:/ S: Z' j3 H# T
5 `1 Z% r. N( X* c7 V# ~/ k" l  c
    在Qtum上将NFT和IPFS进行结合:1 x5 F5 h+ j: ?/ I8 t% s! ?6 S% g
2 e2 X" a6 ]5 ]4 w, S3 j& E! P: L
    用ERC721标准开发IPFS与NFT结合的demo;; f" c3 q, O9 f* s  n
0 ~- y/ q: f" E- O, c! C
    开发一键部署NFT合约与接入IPFS网络的工具;- U  O. b- D* c! }( J& @* v
+ g( o9 g, U- J( D
    搭建去中心化的NFT交易平台,提高NFT的展示效果与流通能力
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

Cherry95 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    2