Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

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

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

- B) @. P8 E! p; N; @7 ^    IPFS[1](InterPlanetaryFileSystem,星际文件系统)完美解决了大型文件的去中心化存储问题。每一个上传到IPFS的大型文件将会被分成若干个大小为256KB的块,每个块在IPFS中都会做一次哈希计算,得到的运算结果作为块的地址。系统最终会给整个文件生成一个哈希值作为该文件的地址,IPFS网络中的任何节点都能通过该地址来下载整个文件。6 i* M/ O( L* W  l+ z) c% P* J+ c. Y9 ^
- g7 O' d3 x2 ]
    区块链和IPFS的结合将会是未来去中心化应用的发展方向。把区块链作为数据库来存储结构化数据,把IPFS作为文件系统来存储图片、视频等大型文件,从而构建一个完整的去中心化应用。2 D  L- W' {: b1 d5 @; A. m) `: b# I

5 ?% L) n! y5 @8 ?$ H# M9 V    Qtum+IPFS
: ~( X  U  Y1 _, H* a6 q$ w# E! q
    本文介绍了基于Qtum[2]区块链和IPFS的去中心化应用解决方案,该方案首先将用户上传的文件存储到IPFS,文件IPFS地址记录在Qtum的智能合约中,实现了大型文件的去中心化存储和分享功能。代码已经上传到Github中[3],对于相关技术比较熟悉的开发人员可以直接前往Github进行使用。4 e) j9 \: j3 x% b8 ?

% v7 ^7 X5 r, r8 z" T4 f4 E    背景1 |1 X9 C% L3 h) S$ C" Z, D
% o; F4 S) W% X7 Y/ S$ t  Z# v
    Qtum
; x/ o$ ?, ?" |
' `. z2 b6 C8 s8 M) G/ e% b    Qtum区块链,又称为量子链,是一个基于UTXO(UnspentTransactionOutput,未花费交易输出)、PoS(ProofofStake,权益证明)和EVM(EthereumVirtualMachine,太坊虚拟机)的区块链平台,融合了比特币和以太坊生态系统各自的优点。Qtum通过AAL(AccountAbstractionLayer,账户抽象层)技术把UTXO模型转换成可供EVM执行智能合约的账户模型,使得智能合约可以完美运行在比特币的区块链架构上,因而给系统带来了强大的兼容性。4 ]$ @9 n; @3 d' S9 z
- G' }5 `8 X' L7 |& @& `" W
    IPFS+ X2 ~5 D3 V! n; k3 D+ {! R0 ]4 N
4 M# T5 F, N% s9 s2 i7 J3 g3 O5 }
    IPFS是一个旨在创建持久且分布式存储和共享文件的网络传输协议。存储的文件会被分割成多个部分并发送给多个节点。IPFS为每一个文件分配一个独一无二的哈希值作为文件的地址。当查询文件的时候,IPFS网络根据文件的哈希值进行查找。每个节点存储了一张哈希表,记录了文件存储所在的位置,从而用于文件的查询和下载。9 p2 V5 d2 Q  r4 i! E/ \) G

# v, y, [# ?( R' m& q  R+ x4 b    区块链+IPFS的应用; j7 `7 Z% E9 {: a

1 q8 F# Y, J8 J( U+ R6 z    IPFS官方Github[4]上介绍了很多IPFS的应用,在这里将给大家介绍其中的一些区块链和IPFS结合的应用。
3 w: L, Y: \, o/ A8 h: o# E# W( U8 ^$ l% q
    Akasha$ \5 Z5 k2 H+ Y* |: @- K% c
/ U) |' O; G/ e2 ]  y
    由于所有上传到IPFS的文件都不可篡改,所以大家很容易就想到了互联网的信息获取自由,言论自由和隐私权。Akasha[5]是一个典型的应用,它是一个基于以太坊和IPFS的社交博客创作平台,用户创作的博客内容通过一个IPFS网络进行发布,而非中心服务器。同时,用户和以太坊钱包账户进行绑定,用户可以对优质内容进行ETH打赏,内容创作者能以此赚取ETH,如同人脑挖矿一样。它没有太多监管的限制,也没有中间商抽成,内容收益直接归创作者所有。
# u) y) J- x8 U6 V6 j
3 C1 F, b3 J8 E0 h' K    uPort
& s+ V5 t# N1 J; l
- |  D" W& U0 b% c    在电子商务领域,身份认证一直是一个关键的痛点。uPort[6]是一个基于Ethereum和IPFS的身份认证应用。用户可以使用uPort提供的智能合约进行身份的注册,系统会将身份的详细信息记录在IPFS上。基于uPort,用户得以在拥有数字身份的同时保护自身隐私,并且只允许特定组织或个人访问、储存、分析或分享个人数据。
; B8 C, `) }0 W; P( V! i; j# b' e
  g, g- A/ R- C0 n; ~  A( o& Q- s    系统8 G, Z: T! k& C( K
% q5 J2 e4 s1 o/ z5 l- c3 J5 k3 z7 M8 e: V
    系统架构
9 v' S( p# \! B+ M; H, ~5 T9 t0 F& a/ O: B$ u
    本系统可以分为上下两层:
  c7 y" r% O# r$ l* t- [# }, l- o$ v: x( [& \
    上层:基于React框架,以HTML+JS的方式运行在浏览器中,用户可以通过网页访问本系统。上层系统通过QtumJS和JS-IPFS-API两个组件和下层进行通信。QtumJS通过call接口访问Qtum中的智能合约,通过sendto接口向智能合约发送交易;JS-IPFS-API通过add接口向IPFS网络中添加文件,通过get接口从IPFS网络中获取文件内容。
' L, a, b, p$ ]2 p/ [, H* o6 M9 I/ }6 V# C/ C" {& K$ j1 A. B$ ^
    下层系统包括QTUM和IPFS两个部分:$ f) n  q/ q6 z9 L. X$ U% f1 a, y& M/ L

) }& t! |8 E, o+ h) g& ~    Qtum部分:部署了智能合约,用来存储文件的结构化数据(文件名,哈希值,添加时间等),通过合约的add接口写入数据,通过合约的getIndex和get接口获取合约中存储的文件相关信息,合约代码如下:
* ]9 q& j: i2 F2 s  f3 Q1 ]- _# j
" m' m3 V* |4 H+ \    pragmasolidity^0.4.24;
! R  T& a, u. d$ l% B5 ~4 d* p6 c/ p* W+ u
    contractIpfsRecord{& j% G& |- `: I$ U: I
9 s6 h2 ?5 _  s2 j
    string[]records;$ W; y1 W7 ~: X/ _( j, x
8 J* u, W1 N! A
    functionadd(stringdata)external{! H# G% Q+ z1 Q- C
& n1 i( U! ]- D; Q! S
    records.push(data);
2 w* @! m( `4 k3 h4 g/ k2 r! O" E, a: _' w
    }# w# T4 Q* Y/ `: {0 R
5 t" y0 q- |  R
    functiongetIndex()publicviewreturns(uint){
' j: c; R3 q* k7 i* l: S" V8 Q' t* ?( ]2 g
    returnrecords.length;
1 y- W# Z: N! B- R% m+ N
1 ^% {; x) `5 q. x7 l. t( e    }5 f9 d5 x, W9 J

# ~/ V7 b/ _5 E, Q' m# t7 S/ L8 ~3 [  J9 x    functionget(uintindex)publicviewreturns(string){1 ?5 g; J0 c. j! `7 Z

" O3 Q6 Y  ~" D- l    returnrecords[index];
  p0 |" a+ b8 g
  d  Q: W' Z2 [8 C2 o    }
' H3 z  W" l5 e: e% s
! T' a& n# w* T$ ~0 c$ l% F    }
$ G* U0 v  \% o/ b' [+ S
1 D5 Q9 _' f2 O    IPFS部分:可以是本地节点或者远程节点,当收到JS-IPFS-API发送过来的add请求时负责存储文件内容并返回哈希值;当收到get请求时负责根据文件哈希值查询文件,并返回文件内容。
+ M* H8 i  k3 P" |9 V' l" w$ c+ k2 i1 l
    系统流程
; l" S8 U, b0 B% N% o  B8 j: H  ^0 O2 B# P& s' B6 f+ ]2 V
    用户上传文件
4 h, r* C' j* @7 C; D4 l+ U# m- i# @$ E* ]8 x0 r' G
    当用户点击UPLOAD按钮上传文件时,后端JS监听到UPLOAD按钮的点击动作,将文件转换成BUFFER类型,通过js-ipfs-api的add接口上传到IPFS节点,IPFS节点返回文件的哈希值给后端JS。JS将文件哈希值,发送者地址和当前时间拼接成字符串,再向Qtum区块链节点发送send请求,将数据记录在智能合约中,当交易确认之后,刷新页面即可在浏览器中查看此记录。
; k0 i/ {/ G8 L2 o8 `3 E3 q" Y+ J& z- R: d' }, }. b4 q
    流程图如下:
, O$ w) R1 f8 u& |6 O4 |/ S& ?, ^! t; D
    展现文件列表0 k  k6 t2 a  _7 W! Y$ V, L

+ j! o9 N0 [* S    当用户通过浏览器访问网站时,React加载前端组件,后端开始初始化,连接Qtum节点和IPFS节点,并且通过qtumJS向Qtum区块链节点发送CALL请求,调用合约中的getIndex接口获取合约中的记录数index,再循环index次调用合约的get接口获取合约内容,最后将合约内容返回给前端展示。
( q# h- E: Z2 b$ B' T0 r. P! I/ x+ T2 L7 k& [' x
    系统部署
, J0 A! w1 u" [+ Z
( x. D1 _, Q$ A$ R1 [$ m; A    系统部署步骤简单概述如下:
( D( c/ P6 d& A8 p" o& a; ~2 l6 z" x2 l( e9 c0 {' |9 j3 h( c
    克隆代码,下载React前端依赖;
4 `  Z+ L: u, p( p7 ?; j
& r6 C2 x; d2 m) Y( }2 {    我们需要将智能合约部署到区块链上,所以要下载Soliditycompiler和Solar;& H5 ^* h# C4 T
+ U$ ~3 |- m: F& k  N" l! c+ s
    启动本地IPFS节点或者在用infura远程节点;& `3 r3 L& q2 ?- u2 O8 ~& |

4 A# g" [4 X4 b( t9 X+ P    下载并启动Qtum节点,设置corsproxy代理;& z* @' ?- ]1 M9 X% r& f8 Y: C8 v
2 W0 P  p* O3 t% f
    部署智能合约(确保测试账户有足够的Token);5 v# l7 H, i& m& {% N% z

8 E9 q: a9 H/ _* x; x# M    最后,启动系统。! `6 ~4 F$ N9 T9 d& _

# Z( z# u4 V8 \; a3 {+ l    详细步骤可以参考[3]中的QuickStart。
7 c7 f" x5 ^% I0 E
* t2 |, M; I2 r: S1 J: R5 b1 i) i    系统使用
6 s2 |) |, H* A- l' [# Q. Y/ \% R" ?; T+ W
    系统的使用很简单,当部署成果之后,只需要在浏览器中访问http://localhost:3000/,点击UPLOAD即可上传文件,按钮下方将显示为智能合约中的记录。
6 y' N6 b4 l* I3 |) p
+ _6 \8 V8 n7 d% E    未来工作4 T9 ]; i% [5 L, ~) }

; Q( o* K, @% u$ @) ~    IPFS协议从本质出发,找出现有互联网最底层,即数据层存在的痛点,结合区块链技术,重新设计了该系统的架构。也许在不远的未来,任何地点访问网站轻松看超高清电影不会再是奢望了。
, h$ q8 T7 X% B5 y8 V, U$ j: M; W
    经过分析和论证,我们可以清晰地发现Qtum与IPFS之间的互补关系:IPFS可以极大地弥补区块链存储空间昂贵、扩容难的问题,而Qtum可以将共识、激励以及所有权归属等特性赋予IPFS。
& C* H/ t' `" x  L2 c2 H7 ~/ ^3 q" e; d8 I; n
    更细一步的说,Qtum通过EVM智能合约可以完美兼容ERC721标准,因此可以将NFT(Non-FungibleToken,非同质化代币)与IPFS结合,给予IPFS存储的内容独一无二的token属性和严格透明的所有权归属与转换功能。同时IPFS也将拓展NFT所能承载的内容,使其具有更加丰富的应用场景。2 t# Q, A# p3 e+ r

' s. L  _( n, P2 h, r" }  ^1 w5 \    例如,我们将一个独具创意的艺术品(名画、雕塑等)的各种信息(图片、名称、创作时间、地点、创意等)上传至IPFS网络中存储,在Qtum上的NFT智能合约中创建一个token来唯一标示该艺术品的所有权,并赋予其所有权转换交易的属性,这样将极大地方便艺术品在虚拟世界的流通和交易,区块链的公开与透明也很大程度上杜绝了交易流转过程的暗箱操作。
7 Z7 `3 q- n' }0 b- o
7 F0 V+ g9 T6 v  D$ P' w+ b    因此,我们正在考虑从以下几个方面出发:$ K' v) N- `' T7 |: g2 [
. y5 n0 Z" q$ [8 i9 d3 g
    在Qtum上将NFT和IPFS进行结合:
9 B; _/ ~  S' R% F* [7 R  v# k9 E5 N3 u8 k. J' ~4 X0 d
    用ERC721标准开发IPFS与NFT结合的demo;
8 O. p; _' |3 o# y6 ], O" _% w( t  p+ s- ]/ Q8 s4 E4 R" |7 R
    开发一键部署NFT合约与接入IPFS网络的工具;
5 h7 W9 X$ P4 [) T. w! h+ Z" ^( |) I9 I2 ?
    搭建去中心化的NFT交易平台,提高NFT的展示效果与流通能力
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

Cherry95 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    2