Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

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

Cherry95
105 0 0
从比特币开始,区块链就被定义为“不可篡改”的数据库技术,当所有节点通过区块链来建立信任的时候,需要同步完整的区块信息。如果区块链允许用户上传大型数据,那么将会造成大量的存储和网络资源浪费。所以,各个区块链网络都会通过限制区块大小、高昂的gas费用等方式,指导用户只把更有价值的简短信息记录在区块链中,所以区块链网络也被成为“价值网络”。& O2 i; Q" o" T3 [1 r
3 }$ ]1 {$ N( e" V  T4 T$ D
    IPFS[1](InterPlanetaryFileSystem,星际文件系统)完美解决了大型文件的去中心化存储问题。每一个上传到IPFS的大型文件将会被分成若干个大小为256KB的块,每个块在IPFS中都会做一次哈希计算,得到的运算结果作为块的地址。系统最终会给整个文件生成一个哈希值作为该文件的地址,IPFS网络中的任何节点都能通过该地址来下载整个文件。# P# P3 o/ b( [1 j
- {3 Z+ z' x0 {3 ^! x
    区块链和IPFS的结合将会是未来去中心化应用的发展方向。把区块链作为数据库来存储结构化数据,把IPFS作为文件系统来存储图片、视频等大型文件,从而构建一个完整的去中心化应用。
: v4 q% s. ]- X+ s8 a; o' x/ J. @1 u0 ~3 X
    Qtum+IPFS
$ ~' i; n" c. P+ R: @3 P( ~* `1 G$ a4 R6 \( ]$ }
    本文介绍了基于Qtum[2]区块链和IPFS的去中心化应用解决方案,该方案首先将用户上传的文件存储到IPFS,文件IPFS地址记录在Qtum的智能合约中,实现了大型文件的去中心化存储和分享功能。代码已经上传到Github中[3],对于相关技术比较熟悉的开发人员可以直接前往Github进行使用。# [  z& y# ^3 I
; C: {8 T+ K+ {! M' v
    背景
; r9 ]; t# h6 Q  s5 }! c. n% G9 R  O8 i* h% e2 a' v2 g
    Qtum, ^2 @, F, o6 Q* k: G
" T+ |; V& h" n; ^8 m- m- o) {5 ~& z% K
    Qtum区块链,又称为量子链,是一个基于UTXO(UnspentTransactionOutput,未花费交易输出)、PoS(ProofofStake,权益证明)和EVM(EthereumVirtualMachine,太坊虚拟机)的区块链平台,融合了比特币和以太坊生态系统各自的优点。Qtum通过AAL(AccountAbstractionLayer,账户抽象层)技术把UTXO模型转换成可供EVM执行智能合约的账户模型,使得智能合约可以完美运行在比特币的区块链架构上,因而给系统带来了强大的兼容性。
. e4 C/ U; H1 `" q- T( c) q7 v  l# j$ S4 o+ u# P4 H* K" K. \
    IPFS) w: f6 ]4 W! w7 X- ~

' S+ Q8 b' ]+ J    IPFS是一个旨在创建持久且分布式存储和共享文件的网络传输协议。存储的文件会被分割成多个部分并发送给多个节点。IPFS为每一个文件分配一个独一无二的哈希值作为文件的地址。当查询文件的时候,IPFS网络根据文件的哈希值进行查找。每个节点存储了一张哈希表,记录了文件存储所在的位置,从而用于文件的查询和下载。+ B0 j6 J* `8 a9 i& X5 a2 q1 `

0 L. w7 K( N! E* V: }) \    区块链+IPFS的应用
2 M' P0 D- v$ V
! @2 }( Y$ e/ v- k, V8 d7 D    IPFS官方Github[4]上介绍了很多IPFS的应用,在这里将给大家介绍其中的一些区块链和IPFS结合的应用。6 k& {* j+ J5 t4 p* b' W

& M' S, @6 w$ T  r' F9 l( i    Akasha
* Y. T* r# w) C. `6 w  B8 s2 ]. `$ V) |% J! w
    由于所有上传到IPFS的文件都不可篡改,所以大家很容易就想到了互联网的信息获取自由,言论自由和隐私权。Akasha[5]是一个典型的应用,它是一个基于以太坊和IPFS的社交博客创作平台,用户创作的博客内容通过一个IPFS网络进行发布,而非中心服务器。同时,用户和以太坊钱包账户进行绑定,用户可以对优质内容进行ETH打赏,内容创作者能以此赚取ETH,如同人脑挖矿一样。它没有太多监管的限制,也没有中间商抽成,内容收益直接归创作者所有。1 ?/ N6 J; v" M% J3 n. }' q
/ s7 w# {, Z4 E0 B
    uPort
3 f. S: H" K- n1 k1 O2 Z
+ X3 |5 e% y8 k8 |6 S    在电子商务领域,身份认证一直是一个关键的痛点。uPort[6]是一个基于Ethereum和IPFS的身份认证应用。用户可以使用uPort提供的智能合约进行身份的注册,系统会将身份的详细信息记录在IPFS上。基于uPort,用户得以在拥有数字身份的同时保护自身隐私,并且只允许特定组织或个人访问、储存、分析或分享个人数据。
1 b" B9 j) J. e. {# ^- q6 z6 x3 f
  }* t6 y% A  \" t0 V    系统
3 }/ V+ Y9 C. ?% P$ j5 V( M5 s( v" V
% {  N! `- p1 L) w6 N    系统架构
, t' Z1 v/ J0 v- W4 I8 A( y9 H$ O2 n% V; O% @6 F
    本系统可以分为上下两层:8 D' j, X% T+ d* O7 f

( D' p2 G% {+ J& [    上层:基于React框架,以HTML+JS的方式运行在浏览器中,用户可以通过网页访问本系统。上层系统通过QtumJS和JS-IPFS-API两个组件和下层进行通信。QtumJS通过call接口访问Qtum中的智能合约,通过sendto接口向智能合约发送交易;JS-IPFS-API通过add接口向IPFS网络中添加文件,通过get接口从IPFS网络中获取文件内容。
6 o! r8 N6 S' J* {
8 `9 _& M  L1 ~# Q2 R    下层系统包括QTUM和IPFS两个部分:
, k( U% o! }% W( i/ Z" L2 a, l. O& h
" r1 V$ w0 p! @    Qtum部分:部署了智能合约,用来存储文件的结构化数据(文件名,哈希值,添加时间等),通过合约的add接口写入数据,通过合约的getIndex和get接口获取合约中存储的文件相关信息,合约代码如下:- K0 d* S+ k7 U$ f$ Z

; I' B3 j5 ^" U' t    pragmasolidity^0.4.24;0 a: k* E6 T" u& x  r. G

  ~* n  \* Q. G8 s8 l$ {    contractIpfsRecord{
2 W# M% n* ?1 x
+ p3 q, u+ N' W) ~: @! W8 I    string[]records;
0 W% o0 _# x$ M6 b) r; Y
5 s0 |% o$ T2 \: k% w7 l    functionadd(stringdata)external{5 Z/ P, @5 j( M+ ]2 G

( n2 g, T0 [6 g) }    records.push(data);- T1 \' G# a8 A  W3 r# t1 _3 n' v

9 Y- [" J/ V3 \- P! B- l6 o    }5 j7 i4 l% v* g* {- ~$ w

) c/ d0 D; z7 [7 r7 Q$ l    functiongetIndex()publicviewreturns(uint){- x, H0 Q+ F* V) \: T
$ {  D2 K" _/ E7 \7 A; l& e" E; f
    returnrecords.length;
$ E( Z6 e" h! ]
9 M' W5 l' g9 o4 Q$ Z: ]- t    }9 d6 }! G. [9 T- q) o8 k
# i- [# p- y- b* y$ F' E
    functionget(uintindex)publicviewreturns(string){' j5 t0 i6 G! H5 O: v7 x
6 p) E% q9 o1 O' X* [: t2 k
    returnrecords[index];
$ @; z! o6 d6 R7 @# a! l- e$ \
    }5 u" \: e/ K0 |' Y0 f$ F1 f
* I6 o4 K' P9 F! q
    }0 b, e/ S& D8 P

! m1 D7 R% N  E2 N, `    IPFS部分:可以是本地节点或者远程节点,当收到JS-IPFS-API发送过来的add请求时负责存储文件内容并返回哈希值;当收到get请求时负责根据文件哈希值查询文件,并返回文件内容。5 O8 Y/ V- z8 A' C; }) d

( a1 G# ?# B: F- F% G2 B$ o    系统流程) @7 D, j/ f" J5 w

3 D% _: [5 ?5 }+ X5 e    用户上传文件9 X7 A7 c( `. X; A

3 s% J7 V. Q1 I, {    当用户点击UPLOAD按钮上传文件时,后端JS监听到UPLOAD按钮的点击动作,将文件转换成BUFFER类型,通过js-ipfs-api的add接口上传到IPFS节点,IPFS节点返回文件的哈希值给后端JS。JS将文件哈希值,发送者地址和当前时间拼接成字符串,再向Qtum区块链节点发送send请求,将数据记录在智能合约中,当交易确认之后,刷新页面即可在浏览器中查看此记录。
" R6 D# m1 H( Q* N4 Q& u5 L% f8 k/ k  z( l, y
    流程图如下:
# n7 _0 I; s: s3 \% D. O3 d/ l6 }7 z
    展现文件列表- ?# a/ n0 m0 d! Q7 d' o0 d  B
/ c1 R7 {8 O: m5 w) `# j+ C
    当用户通过浏览器访问网站时,React加载前端组件,后端开始初始化,连接Qtum节点和IPFS节点,并且通过qtumJS向Qtum区块链节点发送CALL请求,调用合约中的getIndex接口获取合约中的记录数index,再循环index次调用合约的get接口获取合约内容,最后将合约内容返回给前端展示。
( H0 a/ K2 |2 D0 y# U9 L7 u1 q" Z. _) `; u/ e4 b
    系统部署7 p3 n; q% P2 N: x6 t

% j& d: f, b/ A# x  y    系统部署步骤简单概述如下:
, W4 e6 T( x5 w) A  e) i# @2 d- N% N6 u: ]( ]4 }# v2 L) P
    克隆代码,下载React前端依赖;1 x' e3 {9 z7 T: \( c1 ]
' U1 A/ c. X. V# a2 U0 m
    我们需要将智能合约部署到区块链上,所以要下载Soliditycompiler和Solar;6 M7 h( y: u- L0 G7 l
/ f. I) Q, |; x" {3 V! \1 ^$ @/ U
    启动本地IPFS节点或者在用infura远程节点;
0 H: H, t! \3 b# {+ j' t9 o, m6 j& B9 b# |& x: A
    下载并启动Qtum节点,设置corsproxy代理;% b7 B  p% [& {* ?8 x% ^+ l4 ~" V6 S4 A5 J
# C$ w0 Y9 \$ `+ }9 e1 M  c
    部署智能合约(确保测试账户有足够的Token);" E1 O( {( V+ W; G, g8 V+ U2 i
8 H# {" o2 l, [9 O. L8 o* ~! F
    最后,启动系统。# R' H  I# Q) X* K2 ^5 O; e$ g
- |7 _, T- d( r/ w. S0 O
    详细步骤可以参考[3]中的QuickStart。0 c; R* w$ B/ {
% p+ N$ D" Z+ v% N- ^4 W" S
    系统使用; B: \8 m4 z) ?8 g. H0 W

. C" q$ _1 W; w- ?* r    系统的使用很简单,当部署成果之后,只需要在浏览器中访问http://localhost:3000/,点击UPLOAD即可上传文件,按钮下方将显示为智能合约中的记录。+ C7 V. k# d( [
( B$ m4 }& E; J
    未来工作2 u" D6 l' X6 `- e

" `" ]! P5 |8 j6 V( _    IPFS协议从本质出发,找出现有互联网最底层,即数据层存在的痛点,结合区块链技术,重新设计了该系统的架构。也许在不远的未来,任何地点访问网站轻松看超高清电影不会再是奢望了。  o3 Z: q8 W2 B+ e! ]+ w5 C4 x
! N/ s# d7 v+ C; J# i3 m
    经过分析和论证,我们可以清晰地发现Qtum与IPFS之间的互补关系:IPFS可以极大地弥补区块链存储空间昂贵、扩容难的问题,而Qtum可以将共识、激励以及所有权归属等特性赋予IPFS。. @' m6 P9 k7 b6 ~( N8 v& [

- d, e" R) v7 H1 F) R    更细一步的说,Qtum通过EVM智能合约可以完美兼容ERC721标准,因此可以将NFT(Non-FungibleToken,非同质化代币)与IPFS结合,给予IPFS存储的内容独一无二的token属性和严格透明的所有权归属与转换功能。同时IPFS也将拓展NFT所能承载的内容,使其具有更加丰富的应用场景。
, p8 t; j2 J( W' h* `( A" g( w9 u- f) L: C
    例如,我们将一个独具创意的艺术品(名画、雕塑等)的各种信息(图片、名称、创作时间、地点、创意等)上传至IPFS网络中存储,在Qtum上的NFT智能合约中创建一个token来唯一标示该艺术品的所有权,并赋予其所有权转换交易的属性,这样将极大地方便艺术品在虚拟世界的流通和交易,区块链的公开与透明也很大程度上杜绝了交易流转过程的暗箱操作。# y, R* I8 Y1 }; h6 D) b
& h% A0 m; R" c, J- U
    因此,我们正在考虑从以下几个方面出发:9 ?$ R" R0 a6 Y+ P" T# f

# y0 [0 e1 I$ ^. G    在Qtum上将NFT和IPFS进行结合:
" t( H5 q; M$ A9 V3 D
" o# l( g/ @, d" T! e    用ERC721标准开发IPFS与NFT结合的demo;
4 O8 t( t! M$ N5 n. L! a' S' y; H3 [$ J
    开发一键部署NFT合约与接入IPFS网络的工具;
' h* E3 d2 \% ?( }! K$ a$ J" U, u
    搭建去中心化的NFT交易平台,提高NFT的展示效果与流通能力
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

Cherry95 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    2