Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

Qtum x86 虚拟机技术简介

9爱乐9
102 0 0
什么是虚拟机?, ^; E* Q% N% u4 ?7 u( T/ b
* c* b% {; {/ z2 o6 @4 g
虚拟机是指通过软件模拟、具备完整硬件系统功能并运行在独立隔离环境下的完整计算机系统。比如虚拟化物理机 VMware、Java 虚拟机等。而 Qtum 虚拟机则是建立在Qtum 区块链上的代码运行环境,其主要作用是处理 Qtum 系统内的智能合约。. b% O! A- p; N% W5 q

9 S# p$ s3 N6 W简单来说,虚拟机是一个完全独立的沙盒,合约代码可对外完全隔离并在虚拟机内部运行。由于虚拟机分散储存在每个节点的计算机上,所以希望创建智能合约的公司可使用类似 JavaScript 和 Python 等编程语言创建运行程序;同时 Qtum 虚拟机又能与主网的其余部分隔离,运行时不影响主链的操作。+ d" R1 C+ @7 F2 Z

1 E" E0 m* h1 w- lQtum 已兼容 EVM,为何还需要 x86VM?
! e4 i2 k. F& y0 E) P/ H1 e( j: F* T5 G% E) I$ x' E
虽然 EVM(以太坊虚拟机)是当下最流行的智能合约虚拟机,但正如绝大多数新生事物一样(比如 Javascript),它存在诸多缺点。并且由于它的设计比较非主流,很难有主流的编程语言能够移植到 EVM 上。这种设计可以说对于近50年来的大多数编程范例来说都不太友好,例如:$ F0 {0 Y/ e2 l9 U& G+ I& d

0 D" }4 p/ S% B, T. \编程语言局限性(Solidity)
* C6 {6 f$ c6 B: p2 i; C缺少标准库# ~8 @: u& Z7 \! c4 G# r& R! Y
256bit 整数,大部分处理器不能原生支持,运行效率降低
% i6 f! Z6 Z# e; k! u/ tGas 模型不合理,难以估计 Gas 消耗& f" |* C  J( h  Z( G$ \6 T) x
生成的 bytecode 较大,浪费区块存储资源& ~% J8 Z4 c2 @$ _) l/ x
难以测试和调试8 ]* B, K" Y6 G

1 S, L3 s! x# \正因为 EVM 存在诸多缺陷,Qtum 决定开发自己的虚拟机。x86 虚拟机兼容了被工业界充分验证过的 x86 指令集,对基于 x86 架构之上的所有技术和基础设施都有很好的兼容性。Qtum-x86 的基本特性包括:+ {8 I$ ^. P! ^- ^! a# m

( l2 v8 B+ v. L  K1 R$ f支持多种主流编程语言: C/C++/Go/Rust 等等# U8 D! ~; o7 f4 ~7 r+ @7 l
丰富的标准库,提高开发效率1 M' C% t. t  F8 }! k
更加优化的Gas模型 : 为标准库函数设定合理的 gas 模型,可以准确估计 gas 消耗# B- l6 u' D- E( e) s
解锁 AAL 的强大功能 :支持合约的 P2SH 交易,segwit 交易等
- s5 y! V, J' f% l5 m6 e' s- ?冯·诺依曼结构,加强版的智能合约 :代码即数据,多任务协作,支持中断和恢复
3 h3 n5 S! i! L& n第一类预言机 :无需运行合约即可获得某些合约数据" X3 b* `3 f( T4 _2 n# L( e
区块链动态分析 :更全面地分析区块链状态
) f+ y# Y- G0 U  m' e1 v6 X' Z; {- E4 a% b选择性数据存储 :节省宝贵的区块链上资源$ H8 e/ v  L7 _2 u) s8 E% `
清晰的依赖关系树 :有可能并行运行智能合约,降低 gas 费用
, A  H6 u& _4 n) c9 ?' S1 K" Z. I
Qtum-x86 虚拟机将支持丰富的编程语言,操作系统与虚拟机解耦,旨在将智能合约开发推向主流。' i5 z# W" r' H- a0 W2 `/ j- e  H& r
简介
! ~4 I/ @* c% b' v) A% N# J% I* h
; x$ M2 m5 m" v0 Q本系列连载文档主要讲述 Qtum x86 虚拟机,x86 虚拟机的开发工作在开发进程中,该文档仍是学习了解 Qtum x86 虚拟机重要参考,本篇为连载系列的第一篇,后续也将陆续更新。5 a2 Y) V% }, s5 X, A; W
什么是 Qtum-x86& a! A; m5 G  X  s
- l; q8 D- w0 Z9 b
Qtum-x86 是 Qtum 正在开发的最新产品原型,包含了 x86 虚拟机。用户可以用 C 语言编写智能合约,未来将支持更多编程语言。目前这个原型只是一个预览版,合约接口和最终发布版可能会略有不同。
! w* G3 j( n6 P, s& z" I5 s
" u! d; L! P5 \4 _' y. {该版本的 Qtum 目前有以下几项限制:
) ]# U6 K+ o2 J必须从 Docker 中使用或从源代码编译
4 n1 A8 ?8 o$ \2 L8 w. y8 v1 Q不支持以太坊虚拟机合约功能) V" |' G2 z, ~
不支持测试网络和主网,只支持 regtest
/ a* o, \5 X) u, j" ]" r8 Z出现孤块及分叉将无法正常工作
9 c( Q6 x* {) q5 W$ m3 ~x86 合约只支持命令行 RPC 接口,虽然理论上 GUI 仍可用
$ o6 Z0 t1 I: I# \: t) V  U% x5 l) Y+ j( w9 [  t" W" q
01
/ |# W* [7 g/ h+ Q9 P工具链设置
+ s! k6 ~; d5 t% V  q
. a: ?0 C2 K- l1 h$ ^  [; \( k$ M由于代码经常需要更改,目前暂不提供编译好的 Qtum-x86 二进制文件。0 E9 j/ r/ t$ `
$ C0 N3 g* K+ e1 Z, ^  R6 q4 A
因此,工具链和 Qtum -x86 本身必须从源代码进行编译。dockerfile 可以极大地简化构建过程,否则构建过程会非常复杂,需要根据不同操作系统安装。  j/ C: K) p! H4 M' [

0 @/ b& s0 Z! U. v: c6 B' ?8 UDocker 文件和一些实用程序可以从以下网址下载:% g0 g# D; I" g/ n
https://github.com/qtumproject/qtum-docker/tree/master/proto-x86* F$ J+ I! A7 `# ?- I
9 K2 m/ W# S, |( N5 g
构建 docker 镜像的步骤如下:
5 d  b- x+ ~& N& s: {3 S; n9 n( ?( j0 ]docker build -t qtumx86 -f Dockerfile 2 E; Z' }( |: F2 o! m
. J! u4 Z$ d# F& \% l8 {
大多数计算机上需要花费几个小时,因为它需要编译整个工具链,若要从头构建镜像(如更新版本等),请使用 --no-cache 操作指令:
$ @1 V+ c; p6 e) sdocker build -t qtumx86 -f Dockerfile . --no-cache5 Z- x. x( \4 S7 S* `
9 G% @5 n- m4 L- w! r1 l
一旦镜像构建完毕,接下来的使用就会比较简单了。为了简化操作,我们提供了一些辅助bash函数,它们将在本文档中被使用到,但并不是必须的。helpers.sh文件如下:. u3 T7 S- K4 |7 j' K. g- e  y
#!/bin/bash
! ?6 I# J* }, j$ l% u7 Afunction qx86start() {( o8 ^, U5 y% O* p
    docker run --rm -v "${PWD}:/root/bind" --name qx86 -d qtumx86 qtum/src/qtumd -regtest -logevents
) H) R* V$ ^; g$ M# d}3 K: i9 t6 H7 Z
export -f qx86start: N$ S% N! I, L# a: M* M( I

3 r4 P  }  a' B/ \) }function qx86stop() {" A% w4 `. a% o, O; K. O
    docker stop qx86* M# ^/ U) s, T: [# I. Y
}
: B8 y& M+ r! Fexport -f qx86stop
, W3 \6 L; P6 \, T+ M% e0 W
( C* c, E" D8 ^3 walias qx86cli='docker exec qx86 qcli'
: `$ H6 t7 N1 u6 {) y+ v
  x, W3 P. ?5 x; g" J) u0 o+ Rfunction qx86deploy() {. a6 k" }& y  ^9 |$ H) U% C" H
    docker exec -t qx86 deploy_contract `hexdump -e \"%x\" $1` $ v. P5 j6 J9 R! Y" V6 K
}0 ~% B/ v+ j9 l  \
export -f qx86deploy1 p9 K9 v- \5 e/ O% @8 x8 r

2 s. |  n* N% @" n3 W; s( cfunction qx86tb() {
; @  c5 R% u& u# ^" r- F    docker run --rm -v "${PWD}:/root/bind" qtumx86 x86tb
$ U, c7 S0 i  {* y4 Q) b6 ~}
" Q& Y) i6 k1 \/ `9 J8 F$ d( Fexport -f qx86tb/ _, h1 F8 s2 Z" q$ U/ |
9 ^* F8 l( P3 O9 b
function qx86make() {
; `+ w  _& ~5 Z    docker run --rm -v "${PWD}:/root/bind" qtumx86 qmake "$@", I8 f$ p! W$ a/ Y$ C; i4 [6 j
}: `6 C0 l- ?8 y7 `/ t
export -f qx86make/ {: z% k) \) V$ ~" W8 L0 s+ @

* R! Q+ c( K2 k/ M开发者可以在当前的 bash 会话中使用该文件,只需执行:) o  n: n6 u8 W. O+ j5 f# K( }) w7 t
source helpers.sh
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

9爱乐9 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    1