Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

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

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

/ [: x' X% K" o0 @8 ]    IPFS[1](InterPlanetaryFileSystem,星际文件系统)完美解决了大型文件的去中心化存储问题。每一个上传到IPFS的大型文件将会被分成若干个大小为256KB的块,每个块在IPFS中都会做一次哈希计算,得到的运算结果作为块的地址。系统最终会给整个文件生成一个哈希值作为该文件的地址,IPFS网络中的任何节点都能通过该地址来下载整个文件。1 t5 ]2 }8 l9 i4 a5 D
7 E6 a' J3 q! I( J, }# Y& E
    区块链和IPFS的结合将会是未来去中心化应用的发展方向。把区块链作为数据库来存储结构化数据,把IPFS作为文件系统来存储图片、视频等大型文件,从而构建一个完整的去中心化应用。
/ f1 \" r1 e# o9 |2 r
4 K5 }& R) M8 V" r' k4 Z+ d    Qtum+IPFS
8 \' g; ^/ r1 z/ Y4 q: j
2 k- ~% Y# g5 W# f& M$ K1 V& r    本文介绍了基于Qtum[2]区块链和IPFS的去中心化应用解决方案,该方案首先将用户上传的文件存储到IPFS,文件IPFS地址记录在Qtum的智能合约中,实现了大型文件的去中心化存储和分享功能。代码已经上传到Github中[3],对于相关技术比较熟悉的开发人员可以直接前往Github进行使用。
0 h( J/ H+ r4 x( f6 m) T2 o0 N( C1 z
    背景4 b2 s0 b; q: S
! X- l" w/ I4 j/ x6 s' |: `1 @
    Qtum
! {+ F8 e/ {$ S' ^4 `8 p2 @4 r
; q. |9 I6 u% e5 `8 `    Qtum区块链,又称为量子链,是一个基于UTXO(UnspentTransactionOutput,未花费交易输出)、PoS(ProofofStake,权益证明)和EVM(EthereumVirtualMachine,太坊虚拟机)的区块链平台,融合了比特币和以太坊生态系统各自的优点。Qtum通过AAL(AccountAbstractionLayer,账户抽象层)技术把UTXO模型转换成可供EVM执行智能合约的账户模型,使得智能合约可以完美运行在比特币的区块链架构上,因而给系统带来了强大的兼容性。
. D7 s0 [7 J; c' {1 [+ K8 H/ [; ^, E( n) M' I/ o; Y* _3 c
    IPFS
- q& n8 _7 ?# D6 a8 M$ C& q! B$ i  I1 _7 p5 c
    IPFS是一个旨在创建持久且分布式存储和共享文件的网络传输协议。存储的文件会被分割成多个部分并发送给多个节点。IPFS为每一个文件分配一个独一无二的哈希值作为文件的地址。当查询文件的时候,IPFS网络根据文件的哈希值进行查找。每个节点存储了一张哈希表,记录了文件存储所在的位置,从而用于文件的查询和下载。
; z; d+ U& W. A! n& j3 b; B  B2 j9 a9 f1 d
    区块链+IPFS的应用1 }; m: u3 ?( l: F

. c2 n3 s3 Q7 C% E    IPFS官方Github[4]上介绍了很多IPFS的应用,在这里将给大家介绍其中的一些区块链和IPFS结合的应用。
4 N" V# a% n& V/ ~0 k: r) S6 Z# m
/ t, {0 u0 S" |& x    Akasha  c4 H/ B. r" T
) z% E" ]# K9 F9 b7 [& H% C
    由于所有上传到IPFS的文件都不可篡改,所以大家很容易就想到了互联网的信息获取自由,言论自由和隐私权。Akasha[5]是一个典型的应用,它是一个基于以太坊和IPFS的社交博客创作平台,用户创作的博客内容通过一个IPFS网络进行发布,而非中心服务器。同时,用户和以太坊钱包账户进行绑定,用户可以对优质内容进行ETH打赏,内容创作者能以此赚取ETH,如同人脑挖矿一样。它没有太多监管的限制,也没有中间商抽成,内容收益直接归创作者所有。
3 M! @2 t) h% {# Z" ^2 ^4 }* n: l8 Q! ~1 A) l! T$ W) @2 R
    uPort
$ z" Q) T. |8 M4 U- B( u. o. p! r% O; v. q; H4 m3 @) t
    在电子商务领域,身份认证一直是一个关键的痛点。uPort[6]是一个基于Ethereum和IPFS的身份认证应用。用户可以使用uPort提供的智能合约进行身份的注册,系统会将身份的详细信息记录在IPFS上。基于uPort,用户得以在拥有数字身份的同时保护自身隐私,并且只允许特定组织或个人访问、储存、分析或分享个人数据。
8 l6 q/ B' X# M: s' X! z/ r- ]* Z+ ~/ {
    系统9 u7 S& Q3 G9 b% \& ^
0 q4 S3 Q1 ?" b9 X" p. M
    系统架构
1 l0 n9 a, M* ~% c8 k) k0 j9 _4 F) u. {6 e2 g& F
    本系统可以分为上下两层:* }: y/ v5 r" d# j) p" Q' R
% Q5 ~0 d8 _7 M0 z0 [2 t: \6 ^" W
    上层:基于React框架,以HTML+JS的方式运行在浏览器中,用户可以通过网页访问本系统。上层系统通过QtumJS和JS-IPFS-API两个组件和下层进行通信。QtumJS通过call接口访问Qtum中的智能合约,通过sendto接口向智能合约发送交易;JS-IPFS-API通过add接口向IPFS网络中添加文件,通过get接口从IPFS网络中获取文件内容。
+ H( |& M! {, F& p& j* o$ B) \4 u& j+ A, A: \' u' C
    下层系统包括QTUM和IPFS两个部分:$ q& o# j# e) q+ P$ W; ]

0 R9 u( |1 v+ Y8 E2 C0 e3 f    Qtum部分:部署了智能合约,用来存储文件的结构化数据(文件名,哈希值,添加时间等),通过合约的add接口写入数据,通过合约的getIndex和get接口获取合约中存储的文件相关信息,合约代码如下:
8 B: J2 |9 e  M
5 @% Y9 h; D& |* A' }( O    pragmasolidity^0.4.24;5 D6 U& e: b; q/ O3 d( U
! h9 N: D  J; }6 y. A
    contractIpfsRecord{' c# N% k' i5 {( ]% L/ a. H

1 M+ d6 }4 M% p3 n8 a* t! d* W    string[]records;8 J, L0 Y1 f- u7 Y3 [- g: C9 O

% g+ K" \1 o1 A5 v6 ^    functionadd(stringdata)external{
$ p0 ?3 U! c% G3 w( `, d9 E7 F  o1 e) ^% J
    records.push(data);' K5 e; U' V6 t2 V$ I
; L' G/ `# T5 {6 e
    }& k* I. [1 v+ w7 ]8 A0 {3 k
7 w" O  W/ n2 b$ u1 m4 N6 P
    functiongetIndex()publicviewreturns(uint){% {# a5 g) D, b; G; z
& \9 K7 w, M0 D. B" ]
    returnrecords.length;
! t! R% e$ B/ W2 B1 K5 R
3 K; d# e( \8 m" W% \1 B" a    }7 o# n4 K+ K# @: Y$ A0 b
. q4 J6 x% x: [. k. P1 n
    functionget(uintindex)publicviewreturns(string){
* x7 l( ^( t6 E% Q3 J5 M: ]
! q% f3 c2 a$ E+ b4 a    returnrecords[index];. W4 q1 S2 h6 B( z
* ~. V( M3 C* z0 T) U6 v5 H4 q+ R% `
    }# O" M$ k+ ~  ~6 m! }8 D
( N1 I# _) i  a* o
    }
& l; }8 g7 g  I9 P. @5 q6 a& {3 h
    IPFS部分:可以是本地节点或者远程节点,当收到JS-IPFS-API发送过来的add请求时负责存储文件内容并返回哈希值;当收到get请求时负责根据文件哈希值查询文件,并返回文件内容。6 r2 c" n) d4 F3 u) n

+ ^" D7 _# K5 O+ R2 Z: b7 Q1 a4 z    系统流程4 @, x( A; k/ s/ E

- j* O6 ~! |$ P; ]0 s- b    用户上传文件
# d2 ?8 O9 G2 \7 M9 @" O% K$ k6 P; {! G* N6 x9 }9 ]& r
    当用户点击UPLOAD按钮上传文件时,后端JS监听到UPLOAD按钮的点击动作,将文件转换成BUFFER类型,通过js-ipfs-api的add接口上传到IPFS节点,IPFS节点返回文件的哈希值给后端JS。JS将文件哈希值,发送者地址和当前时间拼接成字符串,再向Qtum区块链节点发送send请求,将数据记录在智能合约中,当交易确认之后,刷新页面即可在浏览器中查看此记录。7 x5 }7 r1 G/ m: `. U" b8 K" t
  v( S7 J3 S, ^- n5 V- C  @. w
    流程图如下:
3 x! |, ?9 n* I2 {: K
% g; _' g5 z0 R+ |/ k& ^% E    展现文件列表0 k9 f& c, E8 w# y$ c& N, w4 M8 G3 B

4 g1 C2 u. ?/ ~) _3 t- u    当用户通过浏览器访问网站时,React加载前端组件,后端开始初始化,连接Qtum节点和IPFS节点,并且通过qtumJS向Qtum区块链节点发送CALL请求,调用合约中的getIndex接口获取合约中的记录数index,再循环index次调用合约的get接口获取合约内容,最后将合约内容返回给前端展示。
* u) ~2 @, ]; {  p8 k! P+ f/ Y8 }: \/ w2 H' `& m
    系统部署8 [: W8 T: G3 Y3 e2 J, I

; n, f; o0 H) q1 ^& \( D/ L# i9 P! D    系统部署步骤简单概述如下:" Z% K( c& L) n+ A

2 T6 K. `3 s; v    克隆代码,下载React前端依赖;$ c) g: Q$ d5 Y

8 j: H* L9 u  ~/ h3 e& D    我们需要将智能合约部署到区块链上,所以要下载Soliditycompiler和Solar;
7 S5 C0 A1 K2 e6 ~1 z% X, E5 I, N6 j* u1 i) I9 I# g( u6 X
    启动本地IPFS节点或者在用infura远程节点;  v% j% O  M) i& J8 \4 G  R
0 o# m% S0 n  w0 b
    下载并启动Qtum节点,设置corsproxy代理;+ R- W3 f1 u* F- b( B

0 m) }' G- T* Q* z' k% ?    部署智能合约(确保测试账户有足够的Token);
  e- a- E9 ?/ }7 Q
6 D1 T* u5 S9 Q7 w# k  z8 o    最后,启动系统。8 `' {- r+ G% d+ v( [

5 r6 X% _1 v( j    详细步骤可以参考[3]中的QuickStart。" l/ Q4 B2 |" Q% W
# b7 K3 a4 S/ C  J# |( K
    系统使用- j0 y2 J! `. n* n& K

& K5 x( q3 I9 j  u+ b7 B    系统的使用很简单,当部署成果之后,只需要在浏览器中访问http://localhost:3000/,点击UPLOAD即可上传文件,按钮下方将显示为智能合约中的记录。
" k. m0 z% d' y0 l: \* h' c+ x. M1 G- C
    未来工作. y7 O2 R8 w- v/ Z$ a" h- B: z

, C& j9 I  S) v0 |9 e/ H    IPFS协议从本质出发,找出现有互联网最底层,即数据层存在的痛点,结合区块链技术,重新设计了该系统的架构。也许在不远的未来,任何地点访问网站轻松看超高清电影不会再是奢望了。
4 M5 Z1 \" E  \2 m/ P5 k2 V% u5 G  P" l8 A
    经过分析和论证,我们可以清晰地发现Qtum与IPFS之间的互补关系:IPFS可以极大地弥补区块链存储空间昂贵、扩容难的问题,而Qtum可以将共识、激励以及所有权归属等特性赋予IPFS。% X7 ?, @0 r# E+ \5 {

5 ?' N7 ^) I. L' X" o    更细一步的说,Qtum通过EVM智能合约可以完美兼容ERC721标准,因此可以将NFT(Non-FungibleToken,非同质化代币)与IPFS结合,给予IPFS存储的内容独一无二的token属性和严格透明的所有权归属与转换功能。同时IPFS也将拓展NFT所能承载的内容,使其具有更加丰富的应用场景。
# G! C6 o5 u( t9 ]( j# X; a# t% U; A* r
    例如,我们将一个独具创意的艺术品(名画、雕塑等)的各种信息(图片、名称、创作时间、地点、创意等)上传至IPFS网络中存储,在Qtum上的NFT智能合约中创建一个token来唯一标示该艺术品的所有权,并赋予其所有权转换交易的属性,这样将极大地方便艺术品在虚拟世界的流通和交易,区块链的公开与透明也很大程度上杜绝了交易流转过程的暗箱操作。
, n4 f- B, o6 |; L0 G( `5 h& X- K) L( }: g3 Y* }
    因此,我们正在考虑从以下几个方面出发:( G1 d) ?9 ~( E2 b0 \
9 p" w& |, W% G2 M$ ~  e
    在Qtum上将NFT和IPFS进行结合:
% B  G. C. s  p7 I. [2 k# Q) ^$ X1 G. G$ \+ B
    用ERC721标准开发IPFS与NFT结合的demo;
  M) D' _! Q" t! E% V3 y# n- r4 x! r- \+ Z
    开发一键部署NFT合约与接入IPFS网络的工具;& l* ?2 s- D, ?; [! f# u: j

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

本版积分规则

成为第一个吐槽的人

Cherry95 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    2