Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

Qtum x86 虚拟机技术简介

9爱乐9
86 0 0
什么是虚拟机?
/ \5 H* ?9 h% U1 ]! S, P( @$ a: |: y6 l# X( S' `, G
虚拟机是指通过软件模拟、具备完整硬件系统功能并运行在独立隔离环境下的完整计算机系统。比如虚拟化物理机 VMware、Java 虚拟机等。而 Qtum 虚拟机则是建立在Qtum 区块链上的代码运行环境,其主要作用是处理 Qtum 系统内的智能合约。
  o/ M; F8 T. k) u1 A2 ?# M6 s+ a 2 I& y! K% S  J
简单来说,虚拟机是一个完全独立的沙盒,合约代码可对外完全隔离并在虚拟机内部运行。由于虚拟机分散储存在每个节点的计算机上,所以希望创建智能合约的公司可使用类似 JavaScript 和 Python 等编程语言创建运行程序;同时 Qtum 虚拟机又能与主网的其余部分隔离,运行时不影响主链的操作。) \6 E' l) [0 j2 k6 F4 S
- @, i& A' U" p
Qtum 已兼容 EVM,为何还需要 x86VM?7 B) ]; {2 w; F+ Q8 f) l2 Y/ Y

! g2 j* u) O5 _$ `虽然 EVM(以太坊虚拟机)是当下最流行的智能合约虚拟机,但正如绝大多数新生事物一样(比如 Javascript),它存在诸多缺点。并且由于它的设计比较非主流,很难有主流的编程语言能够移植到 EVM 上。这种设计可以说对于近50年来的大多数编程范例来说都不太友好,例如:
/ {! F' I; O( \5 G3 A7 R& T# j4 y8 W( k) `% Y6 m& Y( r
编程语言局限性(Solidity)
( l/ d3 T  S& V0 }缺少标准库
8 M+ ^7 r5 j, b, [  u) w! \3 F256bit 整数,大部分处理器不能原生支持,运行效率降低
. M4 D2 ^' c  Y/ kGas 模型不合理,难以估计 Gas 消耗- z1 Q, g8 B" R" N9 x/ o4 s8 p
生成的 bytecode 较大,浪费区块存储资源) q' N' B' D& i/ o
难以测试和调试
& j7 b6 g) p+ C0 Y! S3 j; I$ x1 r: b! Y! K+ Q* \2 F
正因为 EVM 存在诸多缺陷,Qtum 决定开发自己的虚拟机。x86 虚拟机兼容了被工业界充分验证过的 x86 指令集,对基于 x86 架构之上的所有技术和基础设施都有很好的兼容性。Qtum-x86 的基本特性包括:
! s0 D7 I& B3 q0 E! G6 n: x
/ p/ k* P, G# W7 G/ u8 q4 K  Q支持多种主流编程语言: C/C++/Go/Rust 等等4 O! ]2 z9 D. [& H. _! a* v$ h
丰富的标准库,提高开发效率
9 O" A2 k  Z% j9 \更加优化的Gas模型 : 为标准库函数设定合理的 gas 模型,可以准确估计 gas 消耗/ c6 T* H. i' |  A7 L4 f4 f& N
解锁 AAL 的强大功能 :支持合约的 P2SH 交易,segwit 交易等# j  t# j9 |9 g4 K, N
冯·诺依曼结构,加强版的智能合约 :代码即数据,多任务协作,支持中断和恢复, h& X- L' `7 O' _4 G
第一类预言机 :无需运行合约即可获得某些合约数据
) n. j  I7 X" _0 P3 H% K5 v区块链动态分析 :更全面地分析区块链状态3 D: |4 U, ~& N. G* {0 }1 b) W
选择性数据存储 :节省宝贵的区块链上资源  x! ]/ c0 T. Z% g+ k6 u7 F
清晰的依赖关系树 :有可能并行运行智能合约,降低 gas 费用
6 w! P- H, N% \& O# U, e  o, l& f( B7 |+ `6 x4 `
Qtum-x86 虚拟机将支持丰富的编程语言,操作系统与虚拟机解耦,旨在将智能合约开发推向主流。
1 p; L$ g+ g3 j简介
8 l' e% u" v# ?
' p% n& o2 U' |' ?, h* A. k& W7 p! U7 O本系列连载文档主要讲述 Qtum x86 虚拟机,x86 虚拟机的开发工作在开发进程中,该文档仍是学习了解 Qtum x86 虚拟机重要参考,本篇为连载系列的第一篇,后续也将陆续更新。' B5 g- [( a3 o: x; \( Z6 H. ?
什么是 Qtum-x86( P+ c" j3 O! x, I
! Q/ r6 M) o$ X7 b8 c8 b
Qtum-x86 是 Qtum 正在开发的最新产品原型,包含了 x86 虚拟机。用户可以用 C 语言编写智能合约,未来将支持更多编程语言。目前这个原型只是一个预览版,合约接口和最终发布版可能会略有不同。; r" z; X. o! W* X( C" ]
2 _) |" Z6 y4 x, i
该版本的 Qtum 目前有以下几项限制:( U- N5 j9 }2 a& A; I0 w+ P4 z
必须从 Docker 中使用或从源代码编译
# Q' h$ P# F8 D* E不支持以太坊虚拟机合约功能
' W9 k* d$ n8 u0 H4 n不支持测试网络和主网,只支持 regtest
5 V+ Z# d! ]$ V1 _# \$ ?  V$ w# f出现孤块及分叉将无法正常工作$ T  V  }$ R  j- w4 K9 a
x86 合约只支持命令行 RPC 接口,虽然理论上 GUI 仍可用& |- K4 R) c: n* ~5 L8 u

6 a3 i6 T! v% W. z3 W01
9 p9 @7 R' c% u5 \; r3 x: l工具链设置
" ~  W  W( v" e: ]9 i- W9 }2 e! B9 m4 |- _4 c. v& V- M% _
由于代码经常需要更改,目前暂不提供编译好的 Qtum-x86 二进制文件。
+ `9 W2 N2 J! F
& B$ G+ {# {5 ^/ ]2 J' F因此,工具链和 Qtum -x86 本身必须从源代码进行编译。dockerfile 可以极大地简化构建过程,否则构建过程会非常复杂,需要根据不同操作系统安装。
7 q  Y& x* X, }$ E9 r) s; J$ x# }3 U$ D0 r: c9 {" r3 D
Docker 文件和一些实用程序可以从以下网址下载:
, Y1 |& Y5 O% Whttps://github.com/qtumproject/qtum-docker/tree/master/proto-x86' V6 \4 p% V* k/ v
7 s/ d( g0 M; C4 l+ D% s$ i
构建 docker 镜像的步骤如下:
# c, v" |" a  hdocker build -t qtumx86 -f Dockerfile
7 n9 N- K/ \( ^+ E, v6 o( b# v2 E, p! |+ U' l+ E4 ^
大多数计算机上需要花费几个小时,因为它需要编译整个工具链,若要从头构建镜像(如更新版本等),请使用 --no-cache 操作指令:
% }; \+ U8 |7 Fdocker build -t qtumx86 -f Dockerfile . --no-cache
' X% c( a2 \& ^& y2 r# E
7 u1 H/ d5 E. ]0 F3 {6 ]) d0 {( ~4 g一旦镜像构建完毕,接下来的使用就会比较简单了。为了简化操作,我们提供了一些辅助bash函数,它们将在本文档中被使用到,但并不是必须的。helpers.sh文件如下:8 u/ w: O& V/ K, u9 {
#!/bin/bash( `9 z3 x  V5 V
function qx86start() {
8 X. l: L0 _/ Z) ]# r2 U. t9 C" q7 w2 \3 N    docker run --rm -v "${PWD}:/root/bind" --name qx86 -d qtumx86 qtum/src/qtumd -regtest -logevents! V7 Y4 _/ g" v' c8 c
}
% {( k8 S( Q* n) |6 {export -f qx86start0 X! j3 F. R5 o% O+ Z' Y

+ h) a9 U! Z* A3 P- Cfunction qx86stop() {
/ d! W. p  G: t0 D6 ]    docker stop qx86
3 j: h5 W& K+ s, M}
' {) e8 n. V' `# nexport -f qx86stop8 m6 k  f& P0 y7 E: d( H. c. t
' L$ g9 }& T* R5 A' R
alias qx86cli='docker exec qx86 qcli'5 x: F  P2 O6 B" s" H" C' D

! R( {* ?+ Z. O& N3 n& Jfunction qx86deploy() {3 W7 B" ~1 H3 q( W% h, ~( H
    docker exec -t qx86 deploy_contract `hexdump -e \"%x\" $1`   N! e6 l. d* q/ z' N8 j1 _4 Q5 F
}) t3 J  P$ P9 L, q
export -f qx86deploy4 E- i6 p3 i+ p3 X7 d; `" a
; C, x* A0 E" ?  G/ j2 \. X9 N
function qx86tb() {
5 a* N- q) R' ~% g! f, c9 P: ~/ z    docker run --rm -v "${PWD}:/root/bind" qtumx86 x86tb6 s& ]- S% |+ V1 S) R5 e4 v2 I7 L
}% g' @- y2 c, |$ J6 |6 Y
export -f qx86tb! d9 m* n% g$ u4 Y) y

& H6 ?) E' l9 s+ Lfunction qx86make() {
+ V2 h8 q; u7 i( O! Q, [    docker run --rm -v "${PWD}:/root/bind" qtumx86 qmake "$@"
; t/ ]% f8 \' h; ^2 D# \}
/ R8 `' V$ w) B0 [* x( hexport -f qx86make
9 n  x5 u( [( e, E6 S! K4 e
/ y3 m! U8 L. R! |0 y6 l( ~开发者可以在当前的 bash 会话中使用该文件,只需执行:
6 ?8 [0 L6 p- i- y" ^) j( S* |source helpers.sh
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

9爱乐9 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    1