Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

Qtum x86 虚拟机技术简介

9爱乐9
83 0 0
什么是虚拟机?3 p  C1 X5 ~& ?" u

9 E$ {- r! o) N' N5 j9 b: U9 U虚拟机是指通过软件模拟、具备完整硬件系统功能并运行在独立隔离环境下的完整计算机系统。比如虚拟化物理机 VMware、Java 虚拟机等。而 Qtum 虚拟机则是建立在Qtum 区块链上的代码运行环境,其主要作用是处理 Qtum 系统内的智能合约。
! _' x' Z6 Z* N4 y( Z8 {
) A2 B1 U/ X( h5 h" i简单来说,虚拟机是一个完全独立的沙盒,合约代码可对外完全隔离并在虚拟机内部运行。由于虚拟机分散储存在每个节点的计算机上,所以希望创建智能合约的公司可使用类似 JavaScript 和 Python 等编程语言创建运行程序;同时 Qtum 虚拟机又能与主网的其余部分隔离,运行时不影响主链的操作。( X/ |# r- q9 F1 b

0 ^' S% r$ E0 a* [5 P5 h- vQtum 已兼容 EVM,为何还需要 x86VM?
- ~% ^" G8 U* S; b2 D) }, E7 x+ w8 T$ e7 U8 Z
虽然 EVM(以太坊虚拟机)是当下最流行的智能合约虚拟机,但正如绝大多数新生事物一样(比如 Javascript),它存在诸多缺点。并且由于它的设计比较非主流,很难有主流的编程语言能够移植到 EVM 上。这种设计可以说对于近50年来的大多数编程范例来说都不太友好,例如:
9 ], B! ]$ k+ ~! y" n5 X3 o
- w5 T. S9 L% \9 ^编程语言局限性(Solidity)
( \! H) O8 j& q+ [缺少标准库# B) S) ?3 ?# k4 M: H6 S& W8 R
256bit 整数,大部分处理器不能原生支持,运行效率降低
' H. Y2 o2 K  c( ~Gas 模型不合理,难以估计 Gas 消耗
# c8 R! e8 U1 i2 w- ^6 n6 M生成的 bytecode 较大,浪费区块存储资源! ^) m) K2 @  H% y
难以测试和调试1 o4 F- s( N9 Q8 s

7 x  U  q4 S/ j8 Y% |正因为 EVM 存在诸多缺陷,Qtum 决定开发自己的虚拟机。x86 虚拟机兼容了被工业界充分验证过的 x86 指令集,对基于 x86 架构之上的所有技术和基础设施都有很好的兼容性。Qtum-x86 的基本特性包括:. Y. Q+ h9 ^) C0 R+ f

7 L1 e' u  m, K. ^% C支持多种主流编程语言: C/C++/Go/Rust 等等  w6 P% O3 [9 ~- F0 L% A+ g2 d
丰富的标准库,提高开发效率( @; T4 H. M" H: T) L
更加优化的Gas模型 : 为标准库函数设定合理的 gas 模型,可以准确估计 gas 消耗4 d, F6 a( A' C$ l4 p& G1 ]+ B
解锁 AAL 的强大功能 :支持合约的 P2SH 交易,segwit 交易等! b- ]3 x1 z( e9 V) H+ y
冯·诺依曼结构,加强版的智能合约 :代码即数据,多任务协作,支持中断和恢复) i! h2 o( e. O, F  Q% R
第一类预言机 :无需运行合约即可获得某些合约数据
9 V2 F2 d' m4 N, ^# W) r区块链动态分析 :更全面地分析区块链状态& V* P* f5 P! }) H" i, r
选择性数据存储 :节省宝贵的区块链上资源
. y- ^+ f( Z; O! r1 E; t1 f* ^& `' A清晰的依赖关系树 :有可能并行运行智能合约,降低 gas 费用
; _% ]+ f4 z1 p# n7 L1 |
& |# ^7 C1 x) Q9 M2 u$ LQtum-x86 虚拟机将支持丰富的编程语言,操作系统与虚拟机解耦,旨在将智能合约开发推向主流。# I! l4 w8 w) v0 k* J. k9 v
简介; w& b3 }; Z8 T" ^' i  \

# t" w/ U) V1 J/ M: C本系列连载文档主要讲述 Qtum x86 虚拟机,x86 虚拟机的开发工作在开发进程中,该文档仍是学习了解 Qtum x86 虚拟机重要参考,本篇为连载系列的第一篇,后续也将陆续更新。
, n. k" ?/ t% b# ^" d- ?, y 什么是 Qtum-x86
1 o, R" v3 V9 d# t) n! E, M2 m+ Y- g8 r
Qtum-x86 是 Qtum 正在开发的最新产品原型,包含了 x86 虚拟机。用户可以用 C 语言编写智能合约,未来将支持更多编程语言。目前这个原型只是一个预览版,合约接口和最终发布版可能会略有不同。/ g7 ~6 U. @2 X7 o

( ]6 @3 k6 X1 g9 S该版本的 Qtum 目前有以下几项限制:  M9 _) y' i% z$ F6 @( t" V
必须从 Docker 中使用或从源代码编译/ g. d! {4 N$ P
不支持以太坊虚拟机合约功能
  j+ P# p6 w  h不支持测试网络和主网,只支持 regtest
5 v. F' `/ d( X; g出现孤块及分叉将无法正常工作" K. O3 S3 j( Z
x86 合约只支持命令行 RPC 接口,虽然理论上 GUI 仍可用
: I9 O( ~+ F' k0 k3 F! ]( x; J( I3 @% V
" I" k0 Q2 ~; j01- H0 Y& ~' B$ R3 m/ ^) F
工具链设置
. w3 V' z1 z* X- ]& l. d/ F0 P
* L5 p/ F, u3 S! A. e0 g- V由于代码经常需要更改,目前暂不提供编译好的 Qtum-x86 二进制文件。
# A9 H7 r) W' r  {2 h
  J/ R" e/ S$ ^/ t+ B% ]' E3 c因此,工具链和 Qtum -x86 本身必须从源代码进行编译。dockerfile 可以极大地简化构建过程,否则构建过程会非常复杂,需要根据不同操作系统安装。+ i# q# C/ k2 |# I/ [
$ I3 e1 W' C& I
Docker 文件和一些实用程序可以从以下网址下载:
; W) E* U) t! f" o) Xhttps://github.com/qtumproject/qtum-docker/tree/master/proto-x86
9 t: S9 _: h: J/ j+ a2 c4 H" k% }+ T5 @5 k) w6 C
构建 docker 镜像的步骤如下:
6 J% z3 t, N/ r* y/ Kdocker build -t qtumx86 -f Dockerfile
' x* c! K) L& c1 @$ V( B' C/ J# q  [1 R' k# ~) b: P$ d+ ]
大多数计算机上需要花费几个小时,因为它需要编译整个工具链,若要从头构建镜像(如更新版本等),请使用 --no-cache 操作指令:. O3 s: ^( W+ Q
docker build -t qtumx86 -f Dockerfile . --no-cache* M/ V/ Q6 w3 w5 Z7 n) u7 y
  p) T9 t9 O) P3 s) Z% y/ j. a
一旦镜像构建完毕,接下来的使用就会比较简单了。为了简化操作,我们提供了一些辅助bash函数,它们将在本文档中被使用到,但并不是必须的。helpers.sh文件如下:) G9 y' F0 s) W( ?# s8 u0 s! v
#!/bin/bash
2 f5 ?, N6 K# ~) m# afunction qx86start() {, a5 c/ b- ?+ ^: y) f- Z* f
    docker run --rm -v "${PWD}:/root/bind" --name qx86 -d qtumx86 qtum/src/qtumd -regtest -logevents, D0 W8 T# Y, \5 p: d
}6 E( ^' V2 P1 d! X5 v; N/ g+ i
export -f qx86start
& g. ?# ?5 S* \! x" B2 f1 j; D
, i) j% u2 D# G( h8 M# bfunction qx86stop() {
+ @6 d6 J2 [' q2 H' X    docker stop qx86
) `% r4 \9 o5 u% {}
- T. V# k% e7 Q( N/ @5 Mexport -f qx86stop
6 f( o" y5 _0 S. K9 v8 `4 N) r1 V
; D) Q0 c. U$ A, i' f$ Nalias qx86cli='docker exec qx86 qcli'0 ]/ K" K1 \8 E/ I' P7 h! f4 {7 }
# _- s+ o' y2 u& h
function qx86deploy() {
* v+ M+ q. G) F. T    docker exec -t qx86 deploy_contract `hexdump -e \"%x\" $1` & w  n0 x$ Q- J  p& g
}! O# _1 P7 C# v" x# m& J2 H
export -f qx86deploy9 }! ^; e( y$ T% N& m
( S0 k: b5 |2 u- v4 R
function qx86tb() {: M! x( L' Z+ q3 e) ?
    docker run --rm -v "${PWD}:/root/bind" qtumx86 x86tb' M" M: Y6 W' d  {5 B
}) Z& S- |1 ^+ F$ w. f! A) \. u
export -f qx86tb
8 Q7 Z- O" R( z- `
( I2 p9 a* ]8 L- `& E6 P" Y+ vfunction qx86make() {9 @5 w9 o, D/ N: n& b+ Z5 V
    docker run --rm -v "${PWD}:/root/bind" qtumx86 qmake "$@"
! I5 O% o; `) T0 V3 b" l}
' @# `* F$ ?0 i0 kexport -f qx86make
) }8 Q% X& E7 ]/ [! i9 B: N
9 ]- ?  S" v6 p7 b- ^1 o& G: i开发者可以在当前的 bash 会话中使用该文件,只需执行:; B: U. A7 b) [
source helpers.sh
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

9爱乐9 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    1