Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

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

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

+ j: h) \. D1 x0 a3 G    IPFS[1](InterPlanetaryFileSystem,星际文件系统)完美解决了大型文件的去中心化存储问题。每一个上传到IPFS的大型文件将会被分成若干个大小为256KB的块,每个块在IPFS中都会做一次哈希计算,得到的运算结果作为块的地址。系统最终会给整个文件生成一个哈希值作为该文件的地址,IPFS网络中的任何节点都能通过该地址来下载整个文件。' h# z4 v" D8 t5 W" I8 {
. K$ x* }$ ^4 F
    区块链和IPFS的结合将会是未来去中心化应用的发展方向。把区块链作为数据库来存储结构化数据,把IPFS作为文件系统来存储图片、视频等大型文件,从而构建一个完整的去中心化应用。" ~" n8 F- c# S- s- ~! V

  F# q1 M% G: K  Y, Z( S    Qtum+IPFS
5 F, F  ]! V' b  C/ P1 r" ?) m. P* A' f  H: n
    本文介绍了基于Qtum[2]区块链和IPFS的去中心化应用解决方案,该方案首先将用户上传的文件存储到IPFS,文件IPFS地址记录在Qtum的智能合约中,实现了大型文件的去中心化存储和分享功能。代码已经上传到Github中[3],对于相关技术比较熟悉的开发人员可以直接前往Github进行使用。; ?. d9 p; Z7 E0 M# r2 r

  \0 q/ E/ G' z! Q) _, h8 x5 j4 ?    背景) l. {2 L1 \9 C
# b7 o. a) d/ J0 o' L. a) T. N
    Qtum
6 p+ U8 r7 ^7 {+ A8 C, j4 O9 ?. Y, C: W
    Qtum区块链,又称为量子链,是一个基于UTXO(UnspentTransactionOutput,未花费交易输出)、PoS(ProofofStake,权益证明)和EVM(EthereumVirtualMachine,太坊虚拟机)的区块链平台,融合了比特币和以太坊生态系统各自的优点。Qtum通过AAL(AccountAbstractionLayer,账户抽象层)技术把UTXO模型转换成可供EVM执行智能合约的账户模型,使得智能合约可以完美运行在比特币的区块链架构上,因而给系统带来了强大的兼容性。! n0 t- Z# E5 B7 n% b7 l
$ F. e; ^. z  o3 }2 B6 Q( L. `
    IPFS! c) L: G+ |8 @

& G0 `& j' \  t: z7 `    IPFS是一个旨在创建持久且分布式存储和共享文件的网络传输协议。存储的文件会被分割成多个部分并发送给多个节点。IPFS为每一个文件分配一个独一无二的哈希值作为文件的地址。当查询文件的时候,IPFS网络根据文件的哈希值进行查找。每个节点存储了一张哈希表,记录了文件存储所在的位置,从而用于文件的查询和下载。# x$ N/ x& z9 I, |; F2 }+ R; Q

8 u+ Q: u  \" w" C/ x. h: y    区块链+IPFS的应用
4 _, n" W5 [' i* {3 X3 H- X
% ~% {: {4 N7 d" I: m    IPFS官方Github[4]上介绍了很多IPFS的应用,在这里将给大家介绍其中的一些区块链和IPFS结合的应用。/ r, d9 k! Z- n! W
, D, W8 N9 c$ m  ?4 K
    Akasha8 K% V9 K- `$ N; u
" c( }  z5 `8 U
    由于所有上传到IPFS的文件都不可篡改,所以大家很容易就想到了互联网的信息获取自由,言论自由和隐私权。Akasha[5]是一个典型的应用,它是一个基于以太坊和IPFS的社交博客创作平台,用户创作的博客内容通过一个IPFS网络进行发布,而非中心服务器。同时,用户和以太坊钱包账户进行绑定,用户可以对优质内容进行ETH打赏,内容创作者能以此赚取ETH,如同人脑挖矿一样。它没有太多监管的限制,也没有中间商抽成,内容收益直接归创作者所有。
5 D8 K0 u+ C6 h& L
% x. @/ U& D- k9 J& b% B) ^0 p    uPort; H% c/ p" x4 [: [

8 V  C9 Z1 c  K; \    在电子商务领域,身份认证一直是一个关键的痛点。uPort[6]是一个基于Ethereum和IPFS的身份认证应用。用户可以使用uPort提供的智能合约进行身份的注册,系统会将身份的详细信息记录在IPFS上。基于uPort,用户得以在拥有数字身份的同时保护自身隐私,并且只允许特定组织或个人访问、储存、分析或分享个人数据。
/ v# R+ x$ J8 W. n2 c& P
" n7 V; C: q0 k; p    系统
2 d- I) o4 b& w* G: {* k/ q9 ^1 B: ?6 e- W! n+ v
    系统架构
" }) J8 C2 [; P) f* H; S+ b
5 ~4 T5 G1 k& B+ J) j# I    本系统可以分为上下两层:2 Q* E, i7 g' C2 i+ ^

% ^1 n$ U2 V8 _3 R& Z    上层:基于React框架,以HTML+JS的方式运行在浏览器中,用户可以通过网页访问本系统。上层系统通过QtumJS和JS-IPFS-API两个组件和下层进行通信。QtumJS通过call接口访问Qtum中的智能合约,通过sendto接口向智能合约发送交易;JS-IPFS-API通过add接口向IPFS网络中添加文件,通过get接口从IPFS网络中获取文件内容。
% w! j5 I8 E4 E% Z4 Z! P! h9 N% [" ]0 o7 B, @- V$ D0 E  U7 {
    下层系统包括QTUM和IPFS两个部分:6 f4 x) c5 g  H" C- R. B
5 q) E2 `. B; h% p" Y" S
    Qtum部分:部署了智能合约,用来存储文件的结构化数据(文件名,哈希值,添加时间等),通过合约的add接口写入数据,通过合约的getIndex和get接口获取合约中存储的文件相关信息,合约代码如下:
+ N8 y3 w+ ^9 w  Z$ U' Z" F7 \
5 ?# f$ i7 E2 }2 I, U- o0 \2 {    pragmasolidity^0.4.24;
, m) b6 l; b9 P5 H% d# y6 I8 b0 ~1 h! J. t
    contractIpfsRecord{0 N- B) z( O4 X3 Y

$ D! U7 o" m$ C/ A3 A, ?    string[]records;6 G6 H. D$ W7 W7 Y, ^0 _

3 |0 Q) O8 {  B& N4 e5 S, |% F    functionadd(stringdata)external{" \/ ?+ ]6 l+ s4 R9 s  J; j
' ~8 l; O" g2 ?( w' v
    records.push(data);
, q2 G, f* P7 Q; T* h  R
. O8 B5 Y5 A: Q. `    }, p- b7 B, i$ L( W* e* ?: S0 H
. p/ B: P3 K9 {! M' m9 x% e
    functiongetIndex()publicviewreturns(uint){: F$ S/ \! J0 y" e/ e- C; o) h3 l

6 ?# @+ p; o5 U- e0 ~    returnrecords.length;
" G& I4 z3 P- ]7 Q( \# y$ ?/ {1 L  O3 W2 J1 o9 ]" u* d
    }' `; B7 l- j! {

8 {7 [6 a/ j# Z) L" u    functionget(uintindex)publicviewreturns(string){
: x' r. U& N( Z9 Z/ q( U: ^% t1 P" L7 s% M5 Q( w) a
    returnrecords[index];0 U2 n! a$ Q' s2 n  }
7 v  k2 s# C! W8 h4 w6 C
    }
' g5 [- f2 L( d( G& k9 M' l. d& i" d) Y1 r1 `
    }
* m( T7 b  C3 y: [2 K1 R5 W. }' j. [3 b' H3 u
    IPFS部分:可以是本地节点或者远程节点,当收到JS-IPFS-API发送过来的add请求时负责存储文件内容并返回哈希值;当收到get请求时负责根据文件哈希值查询文件,并返回文件内容。- y% o7 e2 J0 H1 c
: K+ y% t7 ?* a+ J- F  k* r
    系统流程0 _6 F0 M4 I& ^) A

& p% R& j- F  Z  |1 Z" F3 F' V    用户上传文件
, s. ~$ M" _% X( o' i8 X
" n# x4 ]% G* K; E# V9 Q( E    当用户点击UPLOAD按钮上传文件时,后端JS监听到UPLOAD按钮的点击动作,将文件转换成BUFFER类型,通过js-ipfs-api的add接口上传到IPFS节点,IPFS节点返回文件的哈希值给后端JS。JS将文件哈希值,发送者地址和当前时间拼接成字符串,再向Qtum区块链节点发送send请求,将数据记录在智能合约中,当交易确认之后,刷新页面即可在浏览器中查看此记录。: f  U8 a9 Z; B* z

- D. l( |" c4 q    流程图如下:+ p% Y1 K4 J! z4 A, c+ W9 O

# K+ g3 v  ^1 N# q4 m! Q# T    展现文件列表
: P) l( V/ R3 R- M2 w; |) j' Y& }) k: T6 w) @3 o
    当用户通过浏览器访问网站时,React加载前端组件,后端开始初始化,连接Qtum节点和IPFS节点,并且通过qtumJS向Qtum区块链节点发送CALL请求,调用合约中的getIndex接口获取合约中的记录数index,再循环index次调用合约的get接口获取合约内容,最后将合约内容返回给前端展示。
2 s4 `& E, }% E& I
. p) r: {- j7 |+ N. _    系统部署
- t0 h8 P# [! E& q
6 t# u4 l! z$ a/ Y$ u* f6 y1 F    系统部署步骤简单概述如下:  @0 B& R, b; _/ R! a3 F

/ ^, o; B% f  b: R    克隆代码,下载React前端依赖;6 e9 b$ A& A3 i- i* Z
; v3 q) W% V2 \
    我们需要将智能合约部署到区块链上,所以要下载Soliditycompiler和Solar;3 \- V( v9 H" J& l: J! N* D

& q1 l3 F' v4 t- n: {    启动本地IPFS节点或者在用infura远程节点;$ H( O! x  ]- Z
2 d+ M1 K+ n- i- H( u( b8 y4 S* N
    下载并启动Qtum节点,设置corsproxy代理;7 ~' U9 m  H3 K! L; R9 X: F0 [
, j: \7 ?) u* s$ Z# {$ q. N5 _
    部署智能合约(确保测试账户有足够的Token);
# G, j- V' ]* I$ q3 A3 f" a% ]- n7 E" h& a. |2 R, z6 ~: R
    最后,启动系统。4 X' q6 E9 k9 R* S% ^, i

1 i; ?0 _# i" M3 d0 [    详细步骤可以参考[3]中的QuickStart。& V* p3 j1 [8 W9 l
( D: p7 L, l  {- t  P
    系统使用
7 Y1 P/ e9 S- f9 u% j
! [2 v% [' s& n* o! l1 G- E    系统的使用很简单,当部署成果之后,只需要在浏览器中访问http://localhost:3000/,点击UPLOAD即可上传文件,按钮下方将显示为智能合约中的记录。
, I+ \+ c2 E- y
; L  ^' b  b7 {/ K% p    未来工作* p. b+ v. O& P& H
. S9 p# @  r* e% G8 W) i. R3 |
    IPFS协议从本质出发,找出现有互联网最底层,即数据层存在的痛点,结合区块链技术,重新设计了该系统的架构。也许在不远的未来,任何地点访问网站轻松看超高清电影不会再是奢望了。
7 q6 ?0 C, w( ^  {5 F/ E& K  @
# `" m  R6 e! V2 j1 ]    经过分析和论证,我们可以清晰地发现Qtum与IPFS之间的互补关系:IPFS可以极大地弥补区块链存储空间昂贵、扩容难的问题,而Qtum可以将共识、激励以及所有权归属等特性赋予IPFS。
8 {7 L8 q3 x& N) `1 U1 F# [9 U; R0 P, R' D! q
    更细一步的说,Qtum通过EVM智能合约可以完美兼容ERC721标准,因此可以将NFT(Non-FungibleToken,非同质化代币)与IPFS结合,给予IPFS存储的内容独一无二的token属性和严格透明的所有权归属与转换功能。同时IPFS也将拓展NFT所能承载的内容,使其具有更加丰富的应用场景。
9 E; c; A9 B# G+ D7 a1 |, H8 L  o; ~* `3 F2 _
    例如,我们将一个独具创意的艺术品(名画、雕塑等)的各种信息(图片、名称、创作时间、地点、创意等)上传至IPFS网络中存储,在Qtum上的NFT智能合约中创建一个token来唯一标示该艺术品的所有权,并赋予其所有权转换交易的属性,这样将极大地方便艺术品在虚拟世界的流通和交易,区块链的公开与透明也很大程度上杜绝了交易流转过程的暗箱操作。
9 P- I4 W( o6 ^. G* s  K9 T' H. ~# N' ]" A
    因此,我们正在考虑从以下几个方面出发:  v* w( M( P) F1 i$ H. g
9 ^2 C3 Y1 w! M, a* p2 }
    在Qtum上将NFT和IPFS进行结合:4 n: H, }/ M/ T# Q( \1 n% r' N8 k  n

* W% @4 Q+ Q% Y1 Q+ K    用ERC721标准开发IPFS与NFT结合的demo;3 B' q% b/ t; M2 \6 }: c* }
+ b0 U) N4 l% {: V- f: C( M
    开发一键部署NFT合约与接入IPFS网络的工具;
/ V8 a9 G% F$ v% L3 w: u' B% j/ j  V2 f# j8 X
    搭建去中心化的NFT交易平台,提高NFT的展示效果与流通能力
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

Cherry95 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    2