Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

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

Cherry95
108 0 0
从比特币开始,区块链就被定义为“不可篡改”的数据库技术,当所有节点通过区块链来建立信任的时候,需要同步完整的区块信息。如果区块链允许用户上传大型数据,那么将会造成大量的存储和网络资源浪费。所以,各个区块链网络都会通过限制区块大小、高昂的gas费用等方式,指导用户只把更有价值的简短信息记录在区块链中,所以区块链网络也被成为“价值网络”。
( C% l1 N$ N% _. ^5 q6 z8 b, x
8 ~- b4 m6 ^/ Y. W; b$ y    IPFS[1](InterPlanetaryFileSystem,星际文件系统)完美解决了大型文件的去中心化存储问题。每一个上传到IPFS的大型文件将会被分成若干个大小为256KB的块,每个块在IPFS中都会做一次哈希计算,得到的运算结果作为块的地址。系统最终会给整个文件生成一个哈希值作为该文件的地址,IPFS网络中的任何节点都能通过该地址来下载整个文件。' X0 e% U* |5 N$ m: H
. K4 Q8 \/ n% ]. N: M" v
    区块链和IPFS的结合将会是未来去中心化应用的发展方向。把区块链作为数据库来存储结构化数据,把IPFS作为文件系统来存储图片、视频等大型文件,从而构建一个完整的去中心化应用。3 j9 G9 j# m  Z
/ B- x- c) F( x: g+ D
    Qtum+IPFS6 l- {$ N, v" L7 |; K6 V& Y6 q

$ @0 M3 i8 K/ u5 p    本文介绍了基于Qtum[2]区块链和IPFS的去中心化应用解决方案,该方案首先将用户上传的文件存储到IPFS,文件IPFS地址记录在Qtum的智能合约中,实现了大型文件的去中心化存储和分享功能。代码已经上传到Github中[3],对于相关技术比较熟悉的开发人员可以直接前往Github进行使用。
, H7 y8 i2 `. ^5 H$ Y8 \- U; J; N+ V5 }. a
    背景4 J# n4 c1 e" o- ?
% R4 k1 M& t/ J2 v; O
    Qtum6 O/ Q" M- _: j, F! Q6 f

7 v& ]. m- a; r( p( J- K    Qtum区块链,又称为量子链,是一个基于UTXO(UnspentTransactionOutput,未花费交易输出)、PoS(ProofofStake,权益证明)和EVM(EthereumVirtualMachine,太坊虚拟机)的区块链平台,融合了比特币和以太坊生态系统各自的优点。Qtum通过AAL(AccountAbstractionLayer,账户抽象层)技术把UTXO模型转换成可供EVM执行智能合约的账户模型,使得智能合约可以完美运行在比特币的区块链架构上,因而给系统带来了强大的兼容性。7 e3 K% k1 S' U$ V4 {' e
: k% ?. n/ G- p- L( {8 v7 A: F
    IPFS
! A* Y0 F- t$ [* c+ Z8 ~, L" m
* V2 F, |: D! P7 d  e    IPFS是一个旨在创建持久且分布式存储和共享文件的网络传输协议。存储的文件会被分割成多个部分并发送给多个节点。IPFS为每一个文件分配一个独一无二的哈希值作为文件的地址。当查询文件的时候,IPFS网络根据文件的哈希值进行查找。每个节点存储了一张哈希表,记录了文件存储所在的位置,从而用于文件的查询和下载。  l3 K9 n" k% j4 Z, z
# y; q7 r5 W6 \+ U# K! W6 }% ~3 ^
    区块链+IPFS的应用! ]4 {/ J( ^; |. P0 d* w; p

7 X! k2 Q' M/ w3 Q5 h  i' I' V. ]    IPFS官方Github[4]上介绍了很多IPFS的应用,在这里将给大家介绍其中的一些区块链和IPFS结合的应用。$ p3 R5 N2 q- H7 V; A" C! K
% w+ i0 v6 b1 H% z3 q- v3 M9 U
    Akasha+ H% G4 X0 S' R8 E

4 M3 x; C* C- B    由于所有上传到IPFS的文件都不可篡改,所以大家很容易就想到了互联网的信息获取自由,言论自由和隐私权。Akasha[5]是一个典型的应用,它是一个基于以太坊和IPFS的社交博客创作平台,用户创作的博客内容通过一个IPFS网络进行发布,而非中心服务器。同时,用户和以太坊钱包账户进行绑定,用户可以对优质内容进行ETH打赏,内容创作者能以此赚取ETH,如同人脑挖矿一样。它没有太多监管的限制,也没有中间商抽成,内容收益直接归创作者所有。& k) _9 V$ A# J6 ]! u2 |3 l
/ @6 z1 d# z  x+ F! E2 e9 F
    uPort! U" }8 ^7 G* G& Y5 v

1 s; U8 k- l, ~4 m2 H    在电子商务领域,身份认证一直是一个关键的痛点。uPort[6]是一个基于Ethereum和IPFS的身份认证应用。用户可以使用uPort提供的智能合约进行身份的注册,系统会将身份的详细信息记录在IPFS上。基于uPort,用户得以在拥有数字身份的同时保护自身隐私,并且只允许特定组织或个人访问、储存、分析或分享个人数据。$ I% |, M8 {8 r( _4 c% u

9 \9 z( y# p4 X' K* t, t    系统
5 C5 \6 k0 C8 E8 E, [+ {! n& I! R6 E. M$ s  _; u7 `
    系统架构: k# c! ?$ K5 l$ h' a

& c$ @' J. h  ~% s! y    本系统可以分为上下两层:
% ~+ [* o# M1 ^  O; P+ {; D( E( V5 a  C$ y& m2 J; y! u
    上层:基于React框架,以HTML+JS的方式运行在浏览器中,用户可以通过网页访问本系统。上层系统通过QtumJS和JS-IPFS-API两个组件和下层进行通信。QtumJS通过call接口访问Qtum中的智能合约,通过sendto接口向智能合约发送交易;JS-IPFS-API通过add接口向IPFS网络中添加文件,通过get接口从IPFS网络中获取文件内容。
& f# j% \4 a0 U1 P! _' N6 r' ?% A7 Z9 q9 A
    下层系统包括QTUM和IPFS两个部分:7 O: x% {" r5 y. ^

* O4 X4 T$ Y/ v$ n4 ?7 E% l    Qtum部分:部署了智能合约,用来存储文件的结构化数据(文件名,哈希值,添加时间等),通过合约的add接口写入数据,通过合约的getIndex和get接口获取合约中存储的文件相关信息,合约代码如下:
5 X: g! U( k0 \/ U+ k) ]7 s; [) ?3 v; a0 ~0 z: t- _" C+ y) i0 D
    pragmasolidity^0.4.24;  u1 A" \' F+ Q0 b8 ^, R1 |

# x/ b! d+ `$ T" u* V1 g. E! s    contractIpfsRecord{
" n. s! {0 z8 z% S
3 H% x3 E0 _4 s% r% @    string[]records;
, W8 A* A0 H/ S" h: D" {( r8 `" A6 v. d
    functionadd(stringdata)external{
2 P8 z' l. k+ ~
6 l% F/ ~5 n" I/ Q5 m' S    records.push(data);
5 }  e; E6 h2 y) ^$ y1 L7 R% O- c) r" ~  i
    }
0 L) k& F* m5 V6 U" ~( u5 h2 h& G1 B' y1 Z
    functiongetIndex()publicviewreturns(uint){2 `6 v# `' A: v9 a) f3 ?% ^

$ i- q; h0 e2 g) Q    returnrecords.length;  |0 L0 h  Q  u* G

2 A" P( \# k, G9 y    }
( n8 U  D- |& ]+ U3 `# q; n' l$ z1 P' w+ E2 n) }7 D
    functionget(uintindex)publicviewreturns(string){  p7 Q7 U) g) v9 o
0 o) p9 f: @/ J. g
    returnrecords[index];/ Y/ |+ ?6 {, y+ G7 W

6 G4 U" q6 {& [  |& e. j) ^$ j    }8 i1 |, Z+ K& x6 m6 q6 \0 R

% k1 y) R. L( u5 O; N    }5 O1 a% D! p) r; u  L
; ?6 {' {& g8 O5 D1 O- ?# W
    IPFS部分:可以是本地节点或者远程节点,当收到JS-IPFS-API发送过来的add请求时负责存储文件内容并返回哈希值;当收到get请求时负责根据文件哈希值查询文件,并返回文件内容。
- w7 q7 C' I; a: z. c' {
6 Q3 J9 J$ c) ^/ n4 A0 _    系统流程
8 ?% V3 W5 {# t7 P2 P8 X# h% X
8 h  I3 @3 m0 R  @. O) f    用户上传文件: |1 m1 p; Y8 p: W2 Z1 x% H" S

6 F; [  S4 ?3 \% r9 s! M! `    当用户点击UPLOAD按钮上传文件时,后端JS监听到UPLOAD按钮的点击动作,将文件转换成BUFFER类型,通过js-ipfs-api的add接口上传到IPFS节点,IPFS节点返回文件的哈希值给后端JS。JS将文件哈希值,发送者地址和当前时间拼接成字符串,再向Qtum区块链节点发送send请求,将数据记录在智能合约中,当交易确认之后,刷新页面即可在浏览器中查看此记录。8 i7 q+ p' T8 U4 W' K
. l$ U8 x2 x- E0 u+ q& J
    流程图如下:' O. b7 F1 J( q" N
# d( @. V# W( l) X" B
    展现文件列表
( I. ?3 G7 |5 {9 G- C9 r
5 z& q) G/ O3 j) p* G    当用户通过浏览器访问网站时,React加载前端组件,后端开始初始化,连接Qtum节点和IPFS节点,并且通过qtumJS向Qtum区块链节点发送CALL请求,调用合约中的getIndex接口获取合约中的记录数index,再循环index次调用合约的get接口获取合约内容,最后将合约内容返回给前端展示。
/ |3 F9 R5 G4 I3 F: c' S6 p$ \/ r: J/ {
    系统部署
/ r  v0 m4 _8 U7 c  A7 Q+ r0 J+ M& I* A5 x7 ]. m
    系统部署步骤简单概述如下:  r6 X! Q9 M2 r% M# r, k5 E" p- A

0 J5 J- q& a4 Y. m$ v, Z    克隆代码,下载React前端依赖;9 Z9 E" t8 E: d/ H  c

3 d7 m/ B" t# j- c9 V' r. y- P    我们需要将智能合约部署到区块链上,所以要下载Soliditycompiler和Solar;* H+ f9 J6 W0 ?& e1 e: [! Z; q7 ]

, y  U, S2 v) R& U    启动本地IPFS节点或者在用infura远程节点;3 k& }+ O& d4 V9 n% B  t' W
( ?' z) c  o2 V! t6 j
    下载并启动Qtum节点,设置corsproxy代理;/ Z! V2 `# n% o7 U! f0 y. c
: {& ~$ y$ b3 H! t! W3 w
    部署智能合约(确保测试账户有足够的Token);# n( m) p+ H' F6 x/ D3 `

) J; D' e2 `% V2 W    最后,启动系统。- I$ m4 z5 T* b6 y1 o$ m
" W8 _  w! J$ k+ M3 G
    详细步骤可以参考[3]中的QuickStart。
2 l( {% G- h8 u1 s2 V3 o; e3 ?0 I- A0 Z5 j
    系统使用
0 |# l" I% \/ e, l( ?) J' z7 _( t8 I3 f# q$ @& B. E
    系统的使用很简单,当部署成果之后,只需要在浏览器中访问http://localhost:3000/,点击UPLOAD即可上传文件,按钮下方将显示为智能合约中的记录。! w, h1 a/ d1 `( F

9 {2 ^2 M" O0 r% D% j7 c3 _. x    未来工作
' S6 c8 V+ _+ N- h! |3 l
* S7 a7 N+ v# d! ]8 S( Q# H    IPFS协议从本质出发,找出现有互联网最底层,即数据层存在的痛点,结合区块链技术,重新设计了该系统的架构。也许在不远的未来,任何地点访问网站轻松看超高清电影不会再是奢望了。, _2 S7 z' v* m- \+ {. Q
8 F- J& ~8 b; y5 N8 T
    经过分析和论证,我们可以清晰地发现Qtum与IPFS之间的互补关系:IPFS可以极大地弥补区块链存储空间昂贵、扩容难的问题,而Qtum可以将共识、激励以及所有权归属等特性赋予IPFS。
* R" q$ |8 Z/ b, V. O( G
! D4 x! V! B# q, I* M6 B2 `( b    更细一步的说,Qtum通过EVM智能合约可以完美兼容ERC721标准,因此可以将NFT(Non-FungibleToken,非同质化代币)与IPFS结合,给予IPFS存储的内容独一无二的token属性和严格透明的所有权归属与转换功能。同时IPFS也将拓展NFT所能承载的内容,使其具有更加丰富的应用场景。/ E+ [9 B) A5 ]' r# B
2 w) l8 X) B( N8 \; O# n
    例如,我们将一个独具创意的艺术品(名画、雕塑等)的各种信息(图片、名称、创作时间、地点、创意等)上传至IPFS网络中存储,在Qtum上的NFT智能合约中创建一个token来唯一标示该艺术品的所有权,并赋予其所有权转换交易的属性,这样将极大地方便艺术品在虚拟世界的流通和交易,区块链的公开与透明也很大程度上杜绝了交易流转过程的暗箱操作。
# P5 n0 w$ y! f5 C+ V, B% \
' c+ w: [% v' D7 P' D/ V6 z/ F  d    因此,我们正在考虑从以下几个方面出发:- q( R4 I! ?1 u3 }% z

, z0 \4 {. @8 B  Q: S    在Qtum上将NFT和IPFS进行结合:3 X2 z! r; J8 ^
, H( C5 c( m2 v6 |0 [. ?$ O
    用ERC721标准开发IPFS与NFT结合的demo;. w7 t3 Z  k; l! Y
! ]$ D3 V" a# h' B3 p
    开发一键部署NFT合约与接入IPFS网络的工具;
: D& M3 F' s: F; z2 ]2 Y  R* M
0 H/ m3 l2 `! V2 i$ d$ s    搭建去中心化的NFT交易平台,提高NFT的展示效果与流通能力
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

Cherry95 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    2