Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

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

Cherry95
122 0 0
从比特币开始,区块链就被定义为“不可篡改”的数据库技术,当所有节点通过区块链来建立信任的时候,需要同步完整的区块信息。如果区块链允许用户上传大型数据,那么将会造成大量的存储和网络资源浪费。所以,各个区块链网络都会通过限制区块大小、高昂的gas费用等方式,指导用户只把更有价值的简短信息记录在区块链中,所以区块链网络也被成为“价值网络”。
, @* h1 O# l" T7 ?. w
+ g7 b2 g: e9 D    IPFS[1](InterPlanetaryFileSystem,星际文件系统)完美解决了大型文件的去中心化存储问题。每一个上传到IPFS的大型文件将会被分成若干个大小为256KB的块,每个块在IPFS中都会做一次哈希计算,得到的运算结果作为块的地址。系统最终会给整个文件生成一个哈希值作为该文件的地址,IPFS网络中的任何节点都能通过该地址来下载整个文件。
1 A8 D6 A0 C7 V6 s0 z3 W
7 _) q1 k9 I  a$ P1 c4 P3 M3 N    区块链和IPFS的结合将会是未来去中心化应用的发展方向。把区块链作为数据库来存储结构化数据,把IPFS作为文件系统来存储图片、视频等大型文件,从而构建一个完整的去中心化应用。# \, j2 \. f. X2 a, ^* \

( A8 g  q- o! F: I9 o7 P: B    Qtum+IPFS5 e2 N9 L& E$ P0 ~- l2 K, A
" i! P' B3 R( e* J  r; s
    本文介绍了基于Qtum[2]区块链和IPFS的去中心化应用解决方案,该方案首先将用户上传的文件存储到IPFS,文件IPFS地址记录在Qtum的智能合约中,实现了大型文件的去中心化存储和分享功能。代码已经上传到Github中[3],对于相关技术比较熟悉的开发人员可以直接前往Github进行使用。2 s# w' J3 K0 i4 G( Y" E6 E

2 V' e* g# O/ z/ G' N) S4 `& {    背景: Z' ]9 o4 P% q0 [4 j6 L
5 @, s9 V5 x# C7 q3 c' P' }
    Qtum
7 P/ [- x% T3 L) s5 Y7 m5 c1 h8 M4 z7 D. t# F8 L
    Qtum区块链,又称为量子链,是一个基于UTXO(UnspentTransactionOutput,未花费交易输出)、PoS(ProofofStake,权益证明)和EVM(EthereumVirtualMachine,太坊虚拟机)的区块链平台,融合了比特币和以太坊生态系统各自的优点。Qtum通过AAL(AccountAbstractionLayer,账户抽象层)技术把UTXO模型转换成可供EVM执行智能合约的账户模型,使得智能合约可以完美运行在比特币的区块链架构上,因而给系统带来了强大的兼容性。4 _7 ]' Z+ U: E9 D
; z! e) s" G! q) s5 k
    IPFS. ]8 [( d( }, S) S. }3 o

& U, M: {4 {6 D7 c3 d8 ]    IPFS是一个旨在创建持久且分布式存储和共享文件的网络传输协议。存储的文件会被分割成多个部分并发送给多个节点。IPFS为每一个文件分配一个独一无二的哈希值作为文件的地址。当查询文件的时候,IPFS网络根据文件的哈希值进行查找。每个节点存储了一张哈希表,记录了文件存储所在的位置,从而用于文件的查询和下载。3 C7 q" l) S5 r3 i

9 D8 ?! u0 h. _    区块链+IPFS的应用1 C$ G5 G7 b: G

$ ~) p: ~, J" y0 S/ {- S) H    IPFS官方Github[4]上介绍了很多IPFS的应用,在这里将给大家介绍其中的一些区块链和IPFS结合的应用。
3 B  i( h# A' W2 S4 R# O) E5 C; |! g6 j/ m
    Akasha
6 Q6 ^  b, b$ c" C- @5 {# [4 S( H, B3 m  F$ Q
    由于所有上传到IPFS的文件都不可篡改,所以大家很容易就想到了互联网的信息获取自由,言论自由和隐私权。Akasha[5]是一个典型的应用,它是一个基于以太坊和IPFS的社交博客创作平台,用户创作的博客内容通过一个IPFS网络进行发布,而非中心服务器。同时,用户和以太坊钱包账户进行绑定,用户可以对优质内容进行ETH打赏,内容创作者能以此赚取ETH,如同人脑挖矿一样。它没有太多监管的限制,也没有中间商抽成,内容收益直接归创作者所有。
. o$ b+ {! s, u6 C
, d' ^9 x  W9 z! p1 Z! c    uPort- I! h6 c/ ]) H; w) ]
. y2 V2 k; N2 A9 R5 H1 d- X. K* n
    在电子商务领域,身份认证一直是一个关键的痛点。uPort[6]是一个基于Ethereum和IPFS的身份认证应用。用户可以使用uPort提供的智能合约进行身份的注册,系统会将身份的详细信息记录在IPFS上。基于uPort,用户得以在拥有数字身份的同时保护自身隐私,并且只允许特定组织或个人访问、储存、分析或分享个人数据。
$ X3 y$ o$ y. T* b' Y" L2 y) J. l) t9 R
    系统1 S% H- n6 ?) {2 K) B  ^

( g8 j2 O) s! R    系统架构
  j' v8 _5 S! q- N, O
; a/ c; m! Q4 x1 U* J) k0 E6 `    本系统可以分为上下两层:. e+ }& b3 V5 u4 U# z$ `% c5 C% G
$ i' u* J' [, v
    上层:基于React框架,以HTML+JS的方式运行在浏览器中,用户可以通过网页访问本系统。上层系统通过QtumJS和JS-IPFS-API两个组件和下层进行通信。QtumJS通过call接口访问Qtum中的智能合约,通过sendto接口向智能合约发送交易;JS-IPFS-API通过add接口向IPFS网络中添加文件,通过get接口从IPFS网络中获取文件内容。
1 h; P4 @1 y" H$ i8 R* c$ b0 E0 a  z4 }: {. K9 g
    下层系统包括QTUM和IPFS两个部分:
5 Z' o( n9 b% P6 \( t- G5 o0 J" X9 W( f1 R$ M
    Qtum部分:部署了智能合约,用来存储文件的结构化数据(文件名,哈希值,添加时间等),通过合约的add接口写入数据,通过合约的getIndex和get接口获取合约中存储的文件相关信息,合约代码如下:
( J4 j4 ^' I( F" Y  C& }+ d, |0 X' [5 k  ]& e  W
    pragmasolidity^0.4.24;  N' Z+ Z6 t% ]. |! D2 j

3 ?* G7 b4 n7 P2 K9 Z    contractIpfsRecord{/ w- t/ @- e* P3 b5 J9 s

" L6 n8 c& J! H. O' @! X/ w    string[]records;
9 z2 |$ w6 `" `, L5 K# ]
3 k' C. v: M5 H" c+ I$ [    functionadd(stringdata)external{+ O6 U, R; i" d  F  ~" x. P

2 ^# N& b: p7 F* J, l    records.push(data);1 K7 G2 e" I9 w$ i" O6 I
# q$ b5 f- y) f/ q
    }
; i0 \2 a$ j' j5 B( q2 @
: ^, O6 l; ~: }2 L* N; F    functiongetIndex()publicviewreturns(uint){9 ]. H8 F+ S5 y% L! `% t. G

1 s0 D9 R4 F+ e3 K    returnrecords.length;
6 ^/ h. d6 n2 F; ?/ ^1 s- W
+ h0 B2 @( r/ R2 f    }& {2 J6 _( }" \5 c1 S6 L
) R1 j$ Q6 g* T
    functionget(uintindex)publicviewreturns(string){
/ c0 o8 R; R7 }* z6 L3 |
# s+ m' ]3 i, a  V    returnrecords[index];2 I! L1 b" o0 D8 {

/ r& J  J8 V! ~) B; I    }" ]+ I% w, i2 x3 u

# I4 g( I9 j/ W, _8 F: B    }- h! z% g9 Q( u2 U1 O7 \9 _

( p; C( K* G2 d% N; |) o4 f    IPFS部分:可以是本地节点或者远程节点,当收到JS-IPFS-API发送过来的add请求时负责存储文件内容并返回哈希值;当收到get请求时负责根据文件哈希值查询文件,并返回文件内容。
( p* s/ x' A: e3 A6 |! U6 p6 R) p
; d. r" B1 }. m; ?, x    系统流程
: s+ A! J2 V9 X4 }  F* B7 M  M! O# h1 H- S/ Q  @
    用户上传文件
' L- ?8 K- c% [( h7 l: f9 p2 E/ V1 u/ }
    当用户点击UPLOAD按钮上传文件时,后端JS监听到UPLOAD按钮的点击动作,将文件转换成BUFFER类型,通过js-ipfs-api的add接口上传到IPFS节点,IPFS节点返回文件的哈希值给后端JS。JS将文件哈希值,发送者地址和当前时间拼接成字符串,再向Qtum区块链节点发送send请求,将数据记录在智能合约中,当交易确认之后,刷新页面即可在浏览器中查看此记录。
1 `( x2 n2 s! v8 s1 _. v
+ f9 z! V: z1 m; T1 J$ m$ B& p    流程图如下:0 @: [4 q9 O: ~: ?' J6 B  U8 E( i

  U1 T2 U5 z9 c, r    展现文件列表
$ k5 ~3 r3 j7 W8 [2 Z# P2 J1 I, ]& s: ]. ]4 ^3 G0 Z( D) G
    当用户通过浏览器访问网站时,React加载前端组件,后端开始初始化,连接Qtum节点和IPFS节点,并且通过qtumJS向Qtum区块链节点发送CALL请求,调用合约中的getIndex接口获取合约中的记录数index,再循环index次调用合约的get接口获取合约内容,最后将合约内容返回给前端展示。/ H& r7 u6 ~( h" {

8 V' b1 A: V1 `' r1 |% d    系统部署+ E! f$ A" S7 X% F% ?$ y4 K
# c9 V* e: V6 z$ r0 G
    系统部署步骤简单概述如下:5 G( Q# H+ V  l. g1 W" N
! }; Q0 q' s1 k* S" M. c. j
    克隆代码,下载React前端依赖;
( z8 `' z8 _$ q, }; Q/ T/ t8 s
( S- N9 O; I! |* n; V6 V! ]    我们需要将智能合约部署到区块链上,所以要下载Soliditycompiler和Solar;
- U) \0 s/ K9 F- ^, T. b8 e4 C7 p6 Q- f& S+ d' m% Z
    启动本地IPFS节点或者在用infura远程节点;
& A  c' X( a% x8 k0 {8 [: j. o2 t4 W# U
    下载并启动Qtum节点,设置corsproxy代理;
& b* N# c7 o; N1 G. P5 Z* ?6 w' C) L- z) t: V
    部署智能合约(确保测试账户有足够的Token);
% U& t" x2 A- n0 M" W2 g( d0 g9 s7 W- l
    最后,启动系统。1 q  D! m+ y# k& D8 J( O

9 V$ Q( q: y9 V) P$ D8 e9 O    详细步骤可以参考[3]中的QuickStart。( S- F$ Q" r$ y  i

2 m, X& h! L8 n9 W6 ~) r# [    系统使用
( K& l; {* c/ b% C4 {
' S% v2 N" Y; N' D# B" @8 h- [4 ?- D    系统的使用很简单,当部署成果之后,只需要在浏览器中访问http://localhost:3000/,点击UPLOAD即可上传文件,按钮下方将显示为智能合约中的记录。; C; ~7 z. X0 X9 f

% @3 d; _' [! V( h6 u    未来工作; j/ V, G* G  H' E! g, G! Z: j$ ^2 K
; ^3 H0 m7 H! n, D4 }
    IPFS协议从本质出发,找出现有互联网最底层,即数据层存在的痛点,结合区块链技术,重新设计了该系统的架构。也许在不远的未来,任何地点访问网站轻松看超高清电影不会再是奢望了。  D0 S- N" F; d6 g2 e1 p

7 b7 k& O4 f4 [8 }4 k" j% {5 C    经过分析和论证,我们可以清晰地发现Qtum与IPFS之间的互补关系:IPFS可以极大地弥补区块链存储空间昂贵、扩容难的问题,而Qtum可以将共识、激励以及所有权归属等特性赋予IPFS。# X- I7 m8 w: k6 F
) o- z) C9 t  E  w4 T2 p% B0 a
    更细一步的说,Qtum通过EVM智能合约可以完美兼容ERC721标准,因此可以将NFT(Non-FungibleToken,非同质化代币)与IPFS结合,给予IPFS存储的内容独一无二的token属性和严格透明的所有权归属与转换功能。同时IPFS也将拓展NFT所能承载的内容,使其具有更加丰富的应用场景。
( Y* @7 z& O9 n" i' _* y) J
+ H" ^6 A( }1 x- |  k    例如,我们将一个独具创意的艺术品(名画、雕塑等)的各种信息(图片、名称、创作时间、地点、创意等)上传至IPFS网络中存储,在Qtum上的NFT智能合约中创建一个token来唯一标示该艺术品的所有权,并赋予其所有权转换交易的属性,这样将极大地方便艺术品在虚拟世界的流通和交易,区块链的公开与透明也很大程度上杜绝了交易流转过程的暗箱操作。- [' M4 @% I6 Q" w2 J8 A: f( r/ D2 H
" N+ ]3 u8 @8 I0 w7 C, o% C
    因此,我们正在考虑从以下几个方面出发:2 s" S% i+ v9 S+ o( w0 b! V( Q

) ?- g" E: y$ U    在Qtum上将NFT和IPFS进行结合:
8 u  a% a$ M# O" q1 o" p/ F. A) ?1 U$ g: A' @- B3 r
    用ERC721标准开发IPFS与NFT结合的demo;
5 I, L* q9 q+ d- {
* D' N) K1 A* m, u    开发一键部署NFT合约与接入IPFS网络的工具;
* @6 Z2 c8 q4 C" `8 Q% U. z2 t# K3 a- B
    搭建去中心化的NFT交易平台,提高NFT的展示效果与流通能力
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

Cherry95 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    2