Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

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

Cherry95
104 0 0
从比特币开始,区块链就被定义为“不可篡改”的数据库技术,当所有节点通过区块链来建立信任的时候,需要同步完整的区块信息。如果区块链允许用户上传大型数据,那么将会造成大量的存储和网络资源浪费。所以,各个区块链网络都会通过限制区块大小、高昂的gas费用等方式,指导用户只把更有价值的简短信息记录在区块链中,所以区块链网络也被成为“价值网络”。
' `" b0 v$ r+ g$ v% U0 I2 Q* Z% U. c6 F9 v
    IPFS[1](InterPlanetaryFileSystem,星际文件系统)完美解决了大型文件的去中心化存储问题。每一个上传到IPFS的大型文件将会被分成若干个大小为256KB的块,每个块在IPFS中都会做一次哈希计算,得到的运算结果作为块的地址。系统最终会给整个文件生成一个哈希值作为该文件的地址,IPFS网络中的任何节点都能通过该地址来下载整个文件。0 R& p/ _, {- L
  t3 U" x3 q/ y9 j
    区块链和IPFS的结合将会是未来去中心化应用的发展方向。把区块链作为数据库来存储结构化数据,把IPFS作为文件系统来存储图片、视频等大型文件,从而构建一个完整的去中心化应用。: h& F& |/ P- c0 w

) [+ r3 m# {: G7 ~    Qtum+IPFS
2 A6 K( }% h* v2 V
  N* [. f4 g. ~    本文介绍了基于Qtum[2]区块链和IPFS的去中心化应用解决方案,该方案首先将用户上传的文件存储到IPFS,文件IPFS地址记录在Qtum的智能合约中,实现了大型文件的去中心化存储和分享功能。代码已经上传到Github中[3],对于相关技术比较熟悉的开发人员可以直接前往Github进行使用。/ p" n# U) e8 k+ Z; Q* e
/ f; W' f8 b* T" N) g; u: }: M+ T
    背景
1 }$ @' S5 o2 Q/ v& U) l& W, {$ C+ f+ l0 ^) ^. [; i) x
    Qtum
3 h5 k5 m% r: H
8 \" D2 U) O- B# j4 B$ P! F    Qtum区块链,又称为量子链,是一个基于UTXO(UnspentTransactionOutput,未花费交易输出)、PoS(ProofofStake,权益证明)和EVM(EthereumVirtualMachine,太坊虚拟机)的区块链平台,融合了比特币和以太坊生态系统各自的优点。Qtum通过AAL(AccountAbstractionLayer,账户抽象层)技术把UTXO模型转换成可供EVM执行智能合约的账户模型,使得智能合约可以完美运行在比特币的区块链架构上,因而给系统带来了强大的兼容性。" x8 C: c( k! z7 k6 x1 R( u

, t% A' i" ~  m" d; Z, ^    IPFS
7 L. u* b, K% B9 Z2 I9 ?
9 A6 J" C" f' O  |    IPFS是一个旨在创建持久且分布式存储和共享文件的网络传输协议。存储的文件会被分割成多个部分并发送给多个节点。IPFS为每一个文件分配一个独一无二的哈希值作为文件的地址。当查询文件的时候,IPFS网络根据文件的哈希值进行查找。每个节点存储了一张哈希表,记录了文件存储所在的位置,从而用于文件的查询和下载。
! V0 \, F0 G- ^2 A1 _2 w7 P* f% v! I  R+ q& P) `
    区块链+IPFS的应用3 j; H* g; z/ O. Y2 H
8 Y3 e$ t! M& b- h2 o- W# F4 }8 ^
    IPFS官方Github[4]上介绍了很多IPFS的应用,在这里将给大家介绍其中的一些区块链和IPFS结合的应用。
2 W4 S8 n7 V! e3 q8 V/ D# O; I$ O- Q
    Akasha  n4 @& V) y7 Q1 b1 s7 G7 j
" O) X" i' m  [+ I* O( J- W/ ^
    由于所有上传到IPFS的文件都不可篡改,所以大家很容易就想到了互联网的信息获取自由,言论自由和隐私权。Akasha[5]是一个典型的应用,它是一个基于以太坊和IPFS的社交博客创作平台,用户创作的博客内容通过一个IPFS网络进行发布,而非中心服务器。同时,用户和以太坊钱包账户进行绑定,用户可以对优质内容进行ETH打赏,内容创作者能以此赚取ETH,如同人脑挖矿一样。它没有太多监管的限制,也没有中间商抽成,内容收益直接归创作者所有。
: \4 D7 s! ?! K3 z& `
- m0 @8 }- X/ D' ?7 E5 `' \    uPort
4 d; |+ a0 `: U4 q% {7 W1 I" E9 i. v# w/ k0 V' `
    在电子商务领域,身份认证一直是一个关键的痛点。uPort[6]是一个基于Ethereum和IPFS的身份认证应用。用户可以使用uPort提供的智能合约进行身份的注册,系统会将身份的详细信息记录在IPFS上。基于uPort,用户得以在拥有数字身份的同时保护自身隐私,并且只允许特定组织或个人访问、储存、分析或分享个人数据。
, z+ x# q9 }# u& n$ Z
, M5 d' X& n! y4 N1 Q    系统
) P- y% m; }4 K3 V; I: ~' m3 s9 D' q4 H  L1 P0 m/ I! V- s9 V3 N
    系统架构5 ~+ f7 Y3 _. [. _- z5 Z, O+ \

/ |  ^* H- l$ I7 e/ X: C& _6 ?* C! q    本系统可以分为上下两层:+ v  t# K5 z! ^6 H! x% p9 `
8 x- E0 s; n: g% h6 u, M) H
    上层:基于React框架,以HTML+JS的方式运行在浏览器中,用户可以通过网页访问本系统。上层系统通过QtumJS和JS-IPFS-API两个组件和下层进行通信。QtumJS通过call接口访问Qtum中的智能合约,通过sendto接口向智能合约发送交易;JS-IPFS-API通过add接口向IPFS网络中添加文件,通过get接口从IPFS网络中获取文件内容。3 s$ g3 y- ]3 c0 ~; T% g4 J5 e
) Q; ]" @0 Q8 U; @3 z$ k1 h+ K
    下层系统包括QTUM和IPFS两个部分:
* y8 b& c/ Y( u0 @' A+ {6 L1 L* G
" H" p5 d8 h( U    Qtum部分:部署了智能合约,用来存储文件的结构化数据(文件名,哈希值,添加时间等),通过合约的add接口写入数据,通过合约的getIndex和get接口获取合约中存储的文件相关信息,合约代码如下:$ F9 P" }  O) }
8 s- N5 r! b( h4 I4 H+ Y* b2 x0 L
    pragmasolidity^0.4.24;" T' x, V6 D6 P& L! s" w9 n

3 b* p# h0 `- x% u- G    contractIpfsRecord{
. M+ r$ t' [+ @( S) v8 p
+ H% N' a4 Y/ p3 J    string[]records;/ }9 M6 G5 Q6 N/ K3 X

1 V, F6 U- y3 K6 w- d" u    functionadd(stringdata)external{
$ Q5 G  B$ e5 U" [0 p8 A% ]" i* }2 s+ E. L
    records.push(data);
  I$ n& Y9 O. p' f+ _: x" B3 L9 y3 `8 s/ a$ H# Z
    }
* B5 T9 n! F9 P& i8 Q! j. S2 N1 M1 `& s8 T' k  R
    functiongetIndex()publicviewreturns(uint){
7 Z5 K) o* Q) `# u4 @8 ?5 h4 t; |. }7 Q6 L5 H
    returnrecords.length;. X4 B; ^" d6 @9 ^; ~

4 G; |$ k7 v5 A& Y# {    }. o2 ?# N1 k0 r9 E" E. B- ~

9 J- G8 o7 T) W    functionget(uintindex)publicviewreturns(string){9 r- o) b6 A6 y0 q- |

$ b3 {) _* Q, _* |1 i    returnrecords[index];1 ?. ~4 P+ |( X4 x% A" v  f  A; {( c
4 D1 M  M- {2 u" ]
    }" d" t* _: I/ E1 T) t* C; G
' `: J! @. f, J9 f
    }
2 l5 N# a" F% n  k4 Z) R4 A
- [) l8 f. A: L: J, t    IPFS部分:可以是本地节点或者远程节点,当收到JS-IPFS-API发送过来的add请求时负责存储文件内容并返回哈希值;当收到get请求时负责根据文件哈希值查询文件,并返回文件内容。
4 U/ a/ r/ Q1 L
* `' B6 L; S# _7 ~6 a- l    系统流程
# K% Q. y- n  T8 I! v
2 l# a0 Y* w: p% L7 L8 i: Z    用户上传文件
- M2 ^% C4 |2 L1 r$ i/ E6 z. F( U% o# R) S( |
    当用户点击UPLOAD按钮上传文件时,后端JS监听到UPLOAD按钮的点击动作,将文件转换成BUFFER类型,通过js-ipfs-api的add接口上传到IPFS节点,IPFS节点返回文件的哈希值给后端JS。JS将文件哈希值,发送者地址和当前时间拼接成字符串,再向Qtum区块链节点发送send请求,将数据记录在智能合约中,当交易确认之后,刷新页面即可在浏览器中查看此记录。
4 R) r2 i; n. b$ U9 z) s: F
0 W1 F3 U0 }7 J( G- a' n9 Z    流程图如下:
  \9 o6 Y" @1 O& X, h, H
: [& W( J& P& ^$ ^( b7 P    展现文件列表
8 c8 s  l  i$ }" q# k
8 O/ t: d+ s0 q$ J8 v    当用户通过浏览器访问网站时,React加载前端组件,后端开始初始化,连接Qtum节点和IPFS节点,并且通过qtumJS向Qtum区块链节点发送CALL请求,调用合约中的getIndex接口获取合约中的记录数index,再循环index次调用合约的get接口获取合约内容,最后将合约内容返回给前端展示。
! _* C5 q# [! s$ S* p; q' {5 B9 I6 t: c. R! Z' x1 D! Z' M1 b
    系统部署
+ x- p7 u/ Y! R9 z* {  G. e. h4 i$ j
    系统部署步骤简单概述如下:
; c+ V% f# c8 |, h, V
+ K& Z' l1 i- a" J, \) b    克隆代码,下载React前端依赖;8 |$ y3 x3 R2 x; E& D

% X" k+ a8 I: c; F+ q* U0 Z    我们需要将智能合约部署到区块链上,所以要下载Soliditycompiler和Solar;
- |- {  g, w$ L; Y8 n' `/ R
3 `6 b/ ]: H0 i# _7 u    启动本地IPFS节点或者在用infura远程节点;
# y$ |/ ?: Y3 J6 Q$ ^9 S/ I3 Z% F
; E5 _+ C( k, S7 S4 b- c    下载并启动Qtum节点,设置corsproxy代理;
* E; F* |2 d- O4 k
2 W7 n4 @3 |, j- u" l" L    部署智能合约(确保测试账户有足够的Token);
- N: T. ~) ^- D0 e' ?: R7 C
3 Z6 X4 M6 h3 R2 Z0 o    最后,启动系统。
" ~" V* G  e1 h& Q3 l5 o/ O& ^4 v3 A
    详细步骤可以参考[3]中的QuickStart。; Y- C7 ^) \' e, }1 ?, O

+ l' C( B  Z0 H* S- }3 n3 B    系统使用
& ]% J. e5 ^" `) V# T) d0 A
; J; \; i' D) t: Z- y  l    系统的使用很简单,当部署成果之后,只需要在浏览器中访问http://localhost:3000/,点击UPLOAD即可上传文件,按钮下方将显示为智能合约中的记录。& j  L% B9 h: J5 T2 H: [5 x

4 p) G  [4 q9 N1 A, w    未来工作  S* z6 @# v4 X. c, ?4 `7 o! U2 R

: ~9 |( Y/ _% {6 G% |    IPFS协议从本质出发,找出现有互联网最底层,即数据层存在的痛点,结合区块链技术,重新设计了该系统的架构。也许在不远的未来,任何地点访问网站轻松看超高清电影不会再是奢望了。* J5 ?: s' ~6 j' r

; {; y5 c% `4 T" P, ]    经过分析和论证,我们可以清晰地发现Qtum与IPFS之间的互补关系:IPFS可以极大地弥补区块链存储空间昂贵、扩容难的问题,而Qtum可以将共识、激励以及所有权归属等特性赋予IPFS。# {- b  f, v% ~5 t1 [3 y

* V& W) g2 K) `& x    更细一步的说,Qtum通过EVM智能合约可以完美兼容ERC721标准,因此可以将NFT(Non-FungibleToken,非同质化代币)与IPFS结合,给予IPFS存储的内容独一无二的token属性和严格透明的所有权归属与转换功能。同时IPFS也将拓展NFT所能承载的内容,使其具有更加丰富的应用场景。. p/ `( I# _7 {8 }& j

7 C* n) Q& l2 z0 Z9 c    例如,我们将一个独具创意的艺术品(名画、雕塑等)的各种信息(图片、名称、创作时间、地点、创意等)上传至IPFS网络中存储,在Qtum上的NFT智能合约中创建一个token来唯一标示该艺术品的所有权,并赋予其所有权转换交易的属性,这样将极大地方便艺术品在虚拟世界的流通和交易,区块链的公开与透明也很大程度上杜绝了交易流转过程的暗箱操作。+ C8 G' c& E1 J
' S  u" x& L- y/ ]
    因此,我们正在考虑从以下几个方面出发:3 J, d8 C/ k/ s" S3 A
8 w$ ~3 Y; i" {; U
    在Qtum上将NFT和IPFS进行结合:4 ]- @/ q+ o# i2 h
% t2 _: W  J- Z, k0 y. n
    用ERC721标准开发IPFS与NFT结合的demo;
$ w+ D9 ~( J( O# K
! ?9 W; T* w- N/ h8 q    开发一键部署NFT合约与接入IPFS网络的工具;9 Q. v/ h, l# f! Z$ L3 s
* p1 _7 N, V( b! P! b; [8 f
    搭建去中心化的NFT交易平台,提高NFT的展示效果与流通能力
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

Cherry95 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    2