Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

Qtum x86 虚拟机技术简介

9爱乐9
81 0 0
什么是虚拟机?5 H% q4 l( ?3 `7 ]1 S: `+ W

9 P/ c! p% r& c4 ^2 w$ Y虚拟机是指通过软件模拟、具备完整硬件系统功能并运行在独立隔离环境下的完整计算机系统。比如虚拟化物理机 VMware、Java 虚拟机等。而 Qtum 虚拟机则是建立在Qtum 区块链上的代码运行环境,其主要作用是处理 Qtum 系统内的智能合约。
6 W  h2 K% x. J  k' S$ l : R0 T* F5 t# u! i# X
简单来说,虚拟机是一个完全独立的沙盒,合约代码可对外完全隔离并在虚拟机内部运行。由于虚拟机分散储存在每个节点的计算机上,所以希望创建智能合约的公司可使用类似 JavaScript 和 Python 等编程语言创建运行程序;同时 Qtum 虚拟机又能与主网的其余部分隔离,运行时不影响主链的操作。3 c) b3 S2 G  [0 ?6 U7 ~; ~: e

1 ]0 q0 q9 Z/ `6 oQtum 已兼容 EVM,为何还需要 x86VM?: K. L9 i! b" E, y" p% t7 U9 V, X3 Q

( K  d3 I  V* U6 G+ r虽然 EVM(以太坊虚拟机)是当下最流行的智能合约虚拟机,但正如绝大多数新生事物一样(比如 Javascript),它存在诸多缺点。并且由于它的设计比较非主流,很难有主流的编程语言能够移植到 EVM 上。这种设计可以说对于近50年来的大多数编程范例来说都不太友好,例如:
2 E& ~1 B' F' D  f# \
6 S' L7 e+ K, u7 T9 F$ V. y0 z; Q! }* I编程语言局限性(Solidity)8 \$ O, Y& s9 R7 I' R+ c+ p# l
缺少标准库% s# p; R0 ^/ l: Z
256bit 整数,大部分处理器不能原生支持,运行效率降低, j$ H6 K( o6 H, p& e- r
Gas 模型不合理,难以估计 Gas 消耗  ]' r. D, L. V9 S5 v# ?
生成的 bytecode 较大,浪费区块存储资源/ p8 z8 q, P/ u
难以测试和调试
% L7 H6 p- e' s% a' a. E
) V/ o" }7 i  Z# u/ z' n1 X正因为 EVM 存在诸多缺陷,Qtum 决定开发自己的虚拟机。x86 虚拟机兼容了被工业界充分验证过的 x86 指令集,对基于 x86 架构之上的所有技术和基础设施都有很好的兼容性。Qtum-x86 的基本特性包括:
0 L4 H6 d  ?' e. i. D2 l: Y! W
! U$ p; e% ^& Q# a7 Z8 p5 g8 C% s支持多种主流编程语言: C/C++/Go/Rust 等等+ Q3 U4 t  \! i
丰富的标准库,提高开发效率  Q" u6 C3 E9 }4 Z
更加优化的Gas模型 : 为标准库函数设定合理的 gas 模型,可以准确估计 gas 消耗
5 \1 C7 o2 u! C/ g$ v解锁 AAL 的强大功能 :支持合约的 P2SH 交易,segwit 交易等2 y7 ?6 e& U1 R( \! d
冯·诺依曼结构,加强版的智能合约 :代码即数据,多任务协作,支持中断和恢复9 z( k, ^  }0 Y8 t7 W* d0 c9 f
第一类预言机 :无需运行合约即可获得某些合约数据
; B3 M; u; r1 l. v( \1 [区块链动态分析 :更全面地分析区块链状态
. k$ Y* g) f6 Y- g- B% Y$ ?选择性数据存储 :节省宝贵的区块链上资源' `3 E( k9 V5 r# ^8 ?
清晰的依赖关系树 :有可能并行运行智能合约,降低 gas 费用) q/ O5 t4 ]/ }7 Q7 y7 s4 {+ N

7 {# Y) C, E* T: u$ [/ yQtum-x86 虚拟机将支持丰富的编程语言,操作系统与虚拟机解耦,旨在将智能合约开发推向主流。7 O3 N0 h9 V4 X. r. B. v
简介
* l6 n2 w! o% W0 v5 L, ~6 w- S9 r+ L0 ~+ n+ H9 H1 V
本系列连载文档主要讲述 Qtum x86 虚拟机,x86 虚拟机的开发工作在开发进程中,该文档仍是学习了解 Qtum x86 虚拟机重要参考,本篇为连载系列的第一篇,后续也将陆续更新。6 w  g" y8 w  W. C! G
什么是 Qtum-x86  h/ D: `1 ]0 q$ N4 t9 z

7 n, L* O0 ]; D$ t; LQtum-x86 是 Qtum 正在开发的最新产品原型,包含了 x86 虚拟机。用户可以用 C 语言编写智能合约,未来将支持更多编程语言。目前这个原型只是一个预览版,合约接口和最终发布版可能会略有不同。
; D% n+ K0 R" i" k" [4 Y* `& S
  O4 h0 e( s$ s) ?9 x( P! G+ `该版本的 Qtum 目前有以下几项限制:
/ |6 _+ `& ?7 ?6 g必须从 Docker 中使用或从源代码编译, h8 o2 ?: l, k
不支持以太坊虚拟机合约功能
1 a; K- P2 W# R8 g) e( s2 Q! |9 t不支持测试网络和主网,只支持 regtest4 ?( |- a# W2 s0 N& e. f. t
出现孤块及分叉将无法正常工作
( D/ T; u& o# i6 Y( jx86 合约只支持命令行 RPC 接口,虽然理论上 GUI 仍可用0 m8 a- q9 ?' l' M

+ Q$ ^, P# x+ s1 t01
: c& ?8 S4 O8 s7 H4 s工具链设置
: `+ _1 s0 ]; B3 h8 f% d9 o1 _$ W7 O$ a/ d+ D0 ^
由于代码经常需要更改,目前暂不提供编译好的 Qtum-x86 二进制文件。2 w$ e( y* u6 r
. |+ e1 p8 c% \/ [* p! k8 ?
因此,工具链和 Qtum -x86 本身必须从源代码进行编译。dockerfile 可以极大地简化构建过程,否则构建过程会非常复杂,需要根据不同操作系统安装。
0 V# j2 |* W# U) |& c5 a; P
0 e" h' P; N8 g: ~" M) eDocker 文件和一些实用程序可以从以下网址下载:
/ F; S9 E8 L7 Q1 p  d  U$ bhttps://github.com/qtumproject/qtum-docker/tree/master/proto-x86' {& {' }- H  K! j( q( d

# s  V# E8 H- @" l. N6 i) d构建 docker 镜像的步骤如下:
+ H$ z8 G6 y0 f. `docker build -t qtumx86 -f Dockerfile ) i" d0 W3 c! M4 J9 W
: z- d* T' b  p+ K6 ?% i
大多数计算机上需要花费几个小时,因为它需要编译整个工具链,若要从头构建镜像(如更新版本等),请使用 --no-cache 操作指令:
8 M! f" [, Q+ m8 G9 xdocker build -t qtumx86 -f Dockerfile . --no-cache
9 o: v# _, q3 |
* k7 F  K. a% e4 G7 j- w: U. M% s一旦镜像构建完毕,接下来的使用就会比较简单了。为了简化操作,我们提供了一些辅助bash函数,它们将在本文档中被使用到,但并不是必须的。helpers.sh文件如下:) b0 }; Z. a) A8 I$ |) ]
#!/bin/bash2 {+ A7 @$ m$ @% ~  P
function qx86start() {% @/ I+ t* D" q8 k5 I% R
    docker run --rm -v "${PWD}:/root/bind" --name qx86 -d qtumx86 qtum/src/qtumd -regtest -logevents6 O2 h/ Z' `2 H$ T7 e# w4 E
}
! ]' t1 R* {" B8 \- ~+ X# Dexport -f qx86start
7 u6 o! B8 P, E9 y. Z
- m; P2 t2 A6 B- J- y' [( Zfunction qx86stop() {
) D  U/ l4 [1 \1 {6 T    docker stop qx86
: ~* R6 d  C2 l3 G5 u$ C/ J}
9 G0 U: s8 U9 u: v) v$ rexport -f qx86stop+ Y2 f* s3 [& w$ [7 i" V- V
$ H  L3 y% \7 \; q- r* |
alias qx86cli='docker exec qx86 qcli'1 h8 |( s0 }; Q
9 y# H2 d& L) A+ R4 P
function qx86deploy() {  E5 P7 t8 Q# {! U$ Z
    docker exec -t qx86 deploy_contract `hexdump -e \"%x\" $1`
0 m3 F. U/ h4 W, U3 I  `* ^8 [2 b/ h}
, J( A1 [2 t% K, }export -f qx86deploy
* o" w% T, z8 t/ e6 I * S. l- k4 r; J
function qx86tb() {
. g& a1 o! v( Q4 K4 B! l% ]    docker run --rm -v "${PWD}:/root/bind" qtumx86 x86tb
! B* r! e. l* d4 s6 d}- `' \  l. V1 X3 }2 d; e  S
export -f qx86tb
% O) ^  q) X1 a8 t1 s8 ~! E" c: h
0 o$ l" B8 o6 F( C0 A. mfunction qx86make() {, Q, U6 q- \: N
    docker run --rm -v "${PWD}:/root/bind" qtumx86 qmake "$@"8 S* W0 \+ l& w5 ]
}
4 s8 i& `$ n( kexport -f qx86make
1 M- Y/ P+ @% Q' v! L- F7 V8 o
- M! p% `9 K- l& R开发者可以在当前的 bash 会话中使用该文件,只需执行:
5 f. m$ f% T  N: Msource helpers.sh
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

9爱乐9 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    1