Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

Qtum x86 虚拟机技术简介

9爱乐9
115 0 0
什么是虚拟机?
2 N# i+ q) B8 M3 X" y2 }4 t
8 o7 }. X9 b' ^. z. @. ?' r虚拟机是指通过软件模拟、具备完整硬件系统功能并运行在独立隔离环境下的完整计算机系统。比如虚拟化物理机 VMware、Java 虚拟机等。而 Qtum 虚拟机则是建立在Qtum 区块链上的代码运行环境,其主要作用是处理 Qtum 系统内的智能合约。
! Z9 p% y) H4 w- w" }   v3 r( D) U0 n8 r, H
简单来说,虚拟机是一个完全独立的沙盒,合约代码可对外完全隔离并在虚拟机内部运行。由于虚拟机分散储存在每个节点的计算机上,所以希望创建智能合约的公司可使用类似 JavaScript 和 Python 等编程语言创建运行程序;同时 Qtum 虚拟机又能与主网的其余部分隔离,运行时不影响主链的操作。' o7 y( A+ N+ V

. Y# g8 m- T2 e. Q0 z6 ZQtum 已兼容 EVM,为何还需要 x86VM?, E8 x9 \* B5 P0 R! p# L( L4 h6 ^

; w3 g. Z# M& e8 t9 H, k7 n: h虽然 EVM(以太坊虚拟机)是当下最流行的智能合约虚拟机,但正如绝大多数新生事物一样(比如 Javascript),它存在诸多缺点。并且由于它的设计比较非主流,很难有主流的编程语言能够移植到 EVM 上。这种设计可以说对于近50年来的大多数编程范例来说都不太友好,例如:
! l. L* L( l  w+ \, I7 V$ n1 L% \7 G) g4 d
编程语言局限性(Solidity)
3 |( V1 q2 q' N: o6 V% O缺少标准库3 m, b8 N' c) ^5 C$ s
256bit 整数,大部分处理器不能原生支持,运行效率降低
( _3 a/ F! p' @9 I6 iGas 模型不合理,难以估计 Gas 消耗
+ n8 B6 C5 q5 E: n; ?8 C生成的 bytecode 较大,浪费区块存储资源# m' x, M( \4 v8 Z! J4 B3 a) C' i
难以测试和调试
+ v2 Q2 h# F! `, j# H
, z6 ]! ^) N; k' U1 O7 O正因为 EVM 存在诸多缺陷,Qtum 决定开发自己的虚拟机。x86 虚拟机兼容了被工业界充分验证过的 x86 指令集,对基于 x86 架构之上的所有技术和基础设施都有很好的兼容性。Qtum-x86 的基本特性包括:1 A. O3 x: U# F2 |

5 L' T0 ]; o2 w5 E3 G- r# p8 Q支持多种主流编程语言: C/C++/Go/Rust 等等
* R0 i% m2 c5 i3 `7 I丰富的标准库,提高开发效率
  P$ D! a- f8 |更加优化的Gas模型 : 为标准库函数设定合理的 gas 模型,可以准确估计 gas 消耗3 L8 `0 T1 c, N, O: @  U2 P
解锁 AAL 的强大功能 :支持合约的 P2SH 交易,segwit 交易等
4 f( W# N3 X7 t冯·诺依曼结构,加强版的智能合约 :代码即数据,多任务协作,支持中断和恢复9 @0 Z6 k; t9 E* N& P/ ]
第一类预言机 :无需运行合约即可获得某些合约数据
5 O- E9 q; @* X6 X区块链动态分析 :更全面地分析区块链状态* }" K9 E, P  f9 F; A2 V
选择性数据存储 :节省宝贵的区块链上资源4 m4 F8 H# U) n  }/ ~
清晰的依赖关系树 :有可能并行运行智能合约,降低 gas 费用
* @$ R- g: M1 S' j2 r! W
. S% y& e4 o  ]9 s3 {' x& K7 ]. YQtum-x86 虚拟机将支持丰富的编程语言,操作系统与虚拟机解耦,旨在将智能合约开发推向主流。
' K: f3 `6 R( X5 T5 b简介, z: Q8 i4 ~6 W' u

- [% R! j5 Y3 G. k9 K  Q0 ]( X本系列连载文档主要讲述 Qtum x86 虚拟机,x86 虚拟机的开发工作在开发进程中,该文档仍是学习了解 Qtum x86 虚拟机重要参考,本篇为连载系列的第一篇,后续也将陆续更新。  d- z2 I' O$ B; T2 l5 X+ j
什么是 Qtum-x86- r8 Z, }2 M4 \1 @1 J
+ b% C; w! b* z1 _$ z1 {
Qtum-x86 是 Qtum 正在开发的最新产品原型,包含了 x86 虚拟机。用户可以用 C 语言编写智能合约,未来将支持更多编程语言。目前这个原型只是一个预览版,合约接口和最终发布版可能会略有不同。
/ r/ A) J4 |1 s0 K & [0 Q) Q; {8 k& r) l: E
该版本的 Qtum 目前有以下几项限制:
  A+ O/ v) q6 b9 t必须从 Docker 中使用或从源代码编译
' N' Q* o# b8 D6 y% t; l不支持以太坊虚拟机合约功能
7 z( c" p' R7 D  }1 d不支持测试网络和主网,只支持 regtest
  Y, C3 B4 o7 O' {出现孤块及分叉将无法正常工作* v0 p5 `! e: T3 w0 E3 {( ~
x86 合约只支持命令行 RPC 接口,虽然理论上 GUI 仍可用& |- P2 j) b8 u; y2 I2 V

$ `5 W, {/ l7 H01
4 D# a9 O' Q6 A! l4 U9 u, A' S- v工具链设置
; {8 P4 N" \1 z, m3 F
) P$ Q  ^: ^5 G' a  D! ?由于代码经常需要更改,目前暂不提供编译好的 Qtum-x86 二进制文件。
, G2 a% {! b8 r0 f7 X2 a2 ?
: o! z0 \3 g) L因此,工具链和 Qtum -x86 本身必须从源代码进行编译。dockerfile 可以极大地简化构建过程,否则构建过程会非常复杂,需要根据不同操作系统安装。
2 C1 V6 U1 L5 d; L( s' }3 t5 C% ]( b
Docker 文件和一些实用程序可以从以下网址下载:
$ M! l( [# V( `& A( A; {https://github.com/qtumproject/qtum-docker/tree/master/proto-x86
+ W$ I4 @* u: m% m1 x: V5 u; @" ?- l8 M
构建 docker 镜像的步骤如下:4 @5 I1 K* |8 L: H# {6 I
docker build -t qtumx86 -f Dockerfile
/ W6 u- V* [) o& H
  z9 E2 M& g; E3 S大多数计算机上需要花费几个小时,因为它需要编译整个工具链,若要从头构建镜像(如更新版本等),请使用 --no-cache 操作指令:
9 A" `. |; E+ I. d# R- Ldocker build -t qtumx86 -f Dockerfile . --no-cache6 L/ h( p% f. v1 s* k9 T% q

5 a9 {+ R& e* J0 M6 q一旦镜像构建完毕,接下来的使用就会比较简单了。为了简化操作,我们提供了一些辅助bash函数,它们将在本文档中被使用到,但并不是必须的。helpers.sh文件如下:% K6 [6 K+ b7 D) Q# G6 d* Y- O
#!/bin/bash
. b$ E4 s" P; c/ a, T5 S0 a; ^) d+ mfunction qx86start() {
: B' F: {3 Y) \    docker run --rm -v "${PWD}:/root/bind" --name qx86 -d qtumx86 qtum/src/qtumd -regtest -logevents2 m' W$ N7 H, r( Y  l) D1 S
}
7 |6 u3 e% Y1 P" fexport -f qx86start
' l+ Q' U' ^. f& y5 f
, a$ n6 M$ C) K5 Rfunction qx86stop() {# g& `7 O# p" }
    docker stop qx86
0 y- w5 z7 O( B% V5 ?' D}
9 A% G( W2 r# S3 @' {- I* C2 h; Gexport -f qx86stop
1 k0 d! T+ G; ~$ d1 |% `) ^# U ' G3 o+ }% v' k/ {9 Y/ T1 d
alias qx86cli='docker exec qx86 qcli'5 }* D$ P6 X1 U+ ]5 F& ]

" o# C4 Y' R- T+ Z. v. C1 ~5 ~function qx86deploy() {9 |6 u6 b" U2 Z' f# d1 i8 t
    docker exec -t qx86 deploy_contract `hexdump -e \"%x\" $1` ( u9 E! J9 \; w/ c  T- X3 L% b" P; _. v
}
2 s; j6 M, k, {/ G6 j+ e  xexport -f qx86deploy% c% T5 o2 ?. o  k8 I$ A8 N- T  h
- A. Z  x* A; H9 S$ U1 M6 X3 b
function qx86tb() {, \+ e! w  r. P1 p0 n
    docker run --rm -v "${PWD}:/root/bind" qtumx86 x86tb) L( R: i/ |: R9 S1 G
}0 Q2 Y0 [3 p% K3 V3 J3 |
export -f qx86tb& Z  I1 \. U9 k4 T+ A$ w* S+ T

3 A* Q0 T$ m8 C0 v; d  J/ ffunction qx86make() {
+ M; _9 f2 v; v! y& K+ _( d' _    docker run --rm -v "${PWD}:/root/bind" qtumx86 qmake "$@"
- _9 p. M: b& h6 L}* b" x7 W, b* a
export -f qx86make0 P2 q8 F" [7 c; Q# X5 t4 ]$ [( H; Q
6 b6 d; C0 O* U5 l# ]) G
开发者可以在当前的 bash 会话中使用该文件,只需执行:
9 [- I: a: {- u( ^! zsource helpers.sh
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

9爱乐9 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    1