Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

Qtum x86 虚拟机技术简介

9爱乐9
138 0 0
什么是虚拟机?6 E. g$ G/ u  g" W! R

  s; \/ j! f: M2 \1 [虚拟机是指通过软件模拟、具备完整硬件系统功能并运行在独立隔离环境下的完整计算机系统。比如虚拟化物理机 VMware、Java 虚拟机等。而 Qtum 虚拟机则是建立在Qtum 区块链上的代码运行环境,其主要作用是处理 Qtum 系统内的智能合约。
" m# t" Z( b: J& k8 b ! e  E: G  g# @4 |
简单来说,虚拟机是一个完全独立的沙盒,合约代码可对外完全隔离并在虚拟机内部运行。由于虚拟机分散储存在每个节点的计算机上,所以希望创建智能合约的公司可使用类似 JavaScript 和 Python 等编程语言创建运行程序;同时 Qtum 虚拟机又能与主网的其余部分隔离,运行时不影响主链的操作。" M3 _! E# _) C6 o

* `" {/ s) @# b0 V3 hQtum 已兼容 EVM,为何还需要 x86VM?
5 I( F) R# v) B# y: }; c# W  o6 g, h1 [6 x
虽然 EVM(以太坊虚拟机)是当下最流行的智能合约虚拟机,但正如绝大多数新生事物一样(比如 Javascript),它存在诸多缺点。并且由于它的设计比较非主流,很难有主流的编程语言能够移植到 EVM 上。这种设计可以说对于近50年来的大多数编程范例来说都不太友好,例如:
& g3 {' }/ Q9 b/ y% C6 F3 R7 f% ~0 c. Z
编程语言局限性(Solidity)9 A2 G) \. S% Z2 ]) u/ {: h1 r
缺少标准库6 U/ O* t$ E4 m
256bit 整数,大部分处理器不能原生支持,运行效率降低
( b+ S8 e5 ]4 a- S+ {3 j0 ?% PGas 模型不合理,难以估计 Gas 消耗
& |& o0 v0 e* Q' ~生成的 bytecode 较大,浪费区块存储资源  Z" y$ n! {; [% x1 v, f  q
难以测试和调试
1 E1 d' I3 @& t4 s) h, ^; U; W- ^; \% Y) {9 R: w* H) R
正因为 EVM 存在诸多缺陷,Qtum 决定开发自己的虚拟机。x86 虚拟机兼容了被工业界充分验证过的 x86 指令集,对基于 x86 架构之上的所有技术和基础设施都有很好的兼容性。Qtum-x86 的基本特性包括:: [. s# Y! W3 M4 V* E

7 h3 I% I, |7 b) M! K支持多种主流编程语言: C/C++/Go/Rust 等等
& U8 C# o1 C  a5 y* R% S" U) {丰富的标准库,提高开发效率
7 g8 c3 g0 P0 }8 O更加优化的Gas模型 : 为标准库函数设定合理的 gas 模型,可以准确估计 gas 消耗6 @  N2 h( t2 I7 Y6 r
解锁 AAL 的强大功能 :支持合约的 P2SH 交易,segwit 交易等. D2 o1 N- e6 X- }# V
冯·诺依曼结构,加强版的智能合约 :代码即数据,多任务协作,支持中断和恢复, @& S+ a. ^; q6 z2 S* B2 F
第一类预言机 :无需运行合约即可获得某些合约数据
. L: V2 K" Y) i8 e. a区块链动态分析 :更全面地分析区块链状态
% G/ k- [- m) X2 v5 T选择性数据存储 :节省宝贵的区块链上资源4 g4 t6 p8 u) L% ]0 E* d
清晰的依赖关系树 :有可能并行运行智能合约,降低 gas 费用8 n) v9 B2 k5 R6 U. X
) ?, |0 E' M6 Y9 J- Z
Qtum-x86 虚拟机将支持丰富的编程语言,操作系统与虚拟机解耦,旨在将智能合约开发推向主流。2 ?$ z# h/ o8 u. ~7 i( S( o
简介
1 Y/ W7 t& M, m$ l$ r' _- x: J8 U3 l, x' d+ c/ {
本系列连载文档主要讲述 Qtum x86 虚拟机,x86 虚拟机的开发工作在开发进程中,该文档仍是学习了解 Qtum x86 虚拟机重要参考,本篇为连载系列的第一篇,后续也将陆续更新。7 _3 A% r# g7 t- t& u+ [
什么是 Qtum-x86! U" T4 B9 z. U" D
. Z: z* E1 ~/ r
Qtum-x86 是 Qtum 正在开发的最新产品原型,包含了 x86 虚拟机。用户可以用 C 语言编写智能合约,未来将支持更多编程语言。目前这个原型只是一个预览版,合约接口和最终发布版可能会略有不同。
  u: o$ J4 ], }  h2 w' G. \. [2 B
' H4 w/ ?5 f" Z, Z# p该版本的 Qtum 目前有以下几项限制:
8 e, h1 J( r/ v必须从 Docker 中使用或从源代码编译
0 S( j) W* U8 a9 [7 R不支持以太坊虚拟机合约功能* Z* }  N5 t9 p& {- D4 ]
不支持测试网络和主网,只支持 regtest
' V, ^' Q7 N: V出现孤块及分叉将无法正常工作2 t/ Y. w& x6 l$ ^
x86 合约只支持命令行 RPC 接口,虽然理论上 GUI 仍可用# r/ a- D* V) K
8 ~. }  O' e; q" B/ j- R
01
1 L5 ~+ n, g" \# b) I. T工具链设置, u, {7 c$ N8 c6 e' y9 F

! z$ o, ]( }6 S2 Y由于代码经常需要更改,目前暂不提供编译好的 Qtum-x86 二进制文件。% w/ n8 j5 l5 ~* g

0 j+ Q  H/ O# G7 ?; O因此,工具链和 Qtum -x86 本身必须从源代码进行编译。dockerfile 可以极大地简化构建过程,否则构建过程会非常复杂,需要根据不同操作系统安装。6 D$ J  U: E  I# O; \  W, j4 s4 T
8 Q; D$ `5 n+ |/ g' l# q* O7 M
Docker 文件和一些实用程序可以从以下网址下载:& l1 r! V  l( Z2 O) N2 S0 U
https://github.com/qtumproject/qtum-docker/tree/master/proto-x863 ~1 g1 p' O0 G5 [4 h1 V

# Q, z8 z$ X# O6 }* T, B1 [构建 docker 镜像的步骤如下:
4 \! E+ ?% V5 F6 T$ M. ^1 X$ R9 Ddocker build -t qtumx86 -f Dockerfile ; @3 F3 ^+ Y3 i1 W/ O! ]- K, y
5 w* {5 |# x; ?$ `
大多数计算机上需要花费几个小时,因为它需要编译整个工具链,若要从头构建镜像(如更新版本等),请使用 --no-cache 操作指令:9 C7 W6 R1 |* o
docker build -t qtumx86 -f Dockerfile . --no-cache. s# n$ u3 j- v5 U$ ]4 T4 d( D# k3 N$ m

* W* h2 R: `1 O% H$ n+ n. b9 f一旦镜像构建完毕,接下来的使用就会比较简单了。为了简化操作,我们提供了一些辅助bash函数,它们将在本文档中被使用到,但并不是必须的。helpers.sh文件如下:
- I0 }) r2 u) z* b* c' Y: O#!/bin/bash7 G6 @4 H" a" G1 T. M
function qx86start() {) ~$ u) H  S5 y1 Y" P" O0 M/ ?$ I
    docker run --rm -v "${PWD}:/root/bind" --name qx86 -d qtumx86 qtum/src/qtumd -regtest -logevents
4 S# @8 y' s. X0 E1 ?/ m4 [}- Y- g, u, U6 D; i- V- Y  |3 r
export -f qx86start
$ @1 Q4 p/ Z4 `2 ^1 T) U2 C 1 F! Q6 x+ S4 M6 S' A
function qx86stop() {
& u9 G6 U  k0 N0 q$ K7 V% S    docker stop qx86  q, A9 [4 B/ \7 ^
}# V! K* V' j8 G# G4 }/ K
export -f qx86stop( T# ~8 w" L& c: j/ r! Q
  E% ^8 m/ J- w  E1 o9 D: p
alias qx86cli='docker exec qx86 qcli'" V6 O5 u9 b( A* ?, v/ n
* A3 m, |; s1 A8 M6 j
function qx86deploy() {- A* V" _3 J; S" g4 p& `" J( G. {( M
    docker exec -t qx86 deploy_contract `hexdump -e \"%x\" $1`
2 m( Z- f% V0 z. ~}
0 O1 ?9 u( o8 h9 C2 M3 ^export -f qx86deploy
; a" z: J5 X0 \. Q5 i, ` - |1 k" D! M* }$ f- x1 H
function qx86tb() {; e* l5 h% B! V) H1 U
    docker run --rm -v "${PWD}:/root/bind" qtumx86 x86tb
$ d# I# I( j. @! U3 m1 z7 q) e9 t  T}* [7 T  a. z: L3 N3 c8 M
export -f qx86tb, ?- o8 u+ E/ I3 t1 I
  R! S2 G2 O5 ?/ G  L
function qx86make() {( v3 M) J, k( K$ B! t8 O" H0 R
    docker run --rm -v "${PWD}:/root/bind" qtumx86 qmake "$@"9 N$ _  Y5 m. R6 N) H+ f6 q' q
}
% D( p8 R3 [' [3 j6 m" Wexport -f qx86make
1 \( E! P( l& o# Z1 J2 N9 [. W
, s( `' }; E* J开发者可以在当前的 bash 会话中使用该文件,只需执行:& \; u) X" E6 K6 {3 D, r  q/ \+ |
source helpers.sh
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

9爱乐9 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    1