Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

Qtum x86 虚拟机技术简介

9爱乐9
97 0 0
什么是虚拟机?
$ r  P4 Z7 L( ~! Z' T9 t( o
0 }. M6 S8 k$ Q/ i, \虚拟机是指通过软件模拟、具备完整硬件系统功能并运行在独立隔离环境下的完整计算机系统。比如虚拟化物理机 VMware、Java 虚拟机等。而 Qtum 虚拟机则是建立在Qtum 区块链上的代码运行环境,其主要作用是处理 Qtum 系统内的智能合约。" c; P( ]) w, I. U0 x7 C$ g

' {- }3 U5 X9 y简单来说,虚拟机是一个完全独立的沙盒,合约代码可对外完全隔离并在虚拟机内部运行。由于虚拟机分散储存在每个节点的计算机上,所以希望创建智能合约的公司可使用类似 JavaScript 和 Python 等编程语言创建运行程序;同时 Qtum 虚拟机又能与主网的其余部分隔离,运行时不影响主链的操作。8 _+ n: O* N  h# U* y
4 `# z/ F/ w! o  u
Qtum 已兼容 EVM,为何还需要 x86VM?
6 W. o( j% [" \: n2 I7 K
1 x/ W, M7 t3 C虽然 EVM(以太坊虚拟机)是当下最流行的智能合约虚拟机,但正如绝大多数新生事物一样(比如 Javascript),它存在诸多缺点。并且由于它的设计比较非主流,很难有主流的编程语言能够移植到 EVM 上。这种设计可以说对于近50年来的大多数编程范例来说都不太友好,例如:
- F6 A3 m/ h# P: W; |
) k' D  R% B% Y编程语言局限性(Solidity)
0 l( B  p1 e1 \6 N7 V6 w3 q/ z缺少标准库
$ T' P. g  {! z) {256bit 整数,大部分处理器不能原生支持,运行效率降低  J; E2 H' q; F6 `% a. P
Gas 模型不合理,难以估计 Gas 消耗" T8 E4 F5 j* Q- [1 c. ~9 S9 r: |
生成的 bytecode 较大,浪费区块存储资源
* x1 V# ?$ ?4 m% T2 F' y难以测试和调试5 J3 l' O& [% V5 v8 i. B4 y2 [

; W- h& L0 O' T& _5 w正因为 EVM 存在诸多缺陷,Qtum 决定开发自己的虚拟机。x86 虚拟机兼容了被工业界充分验证过的 x86 指令集,对基于 x86 架构之上的所有技术和基础设施都有很好的兼容性。Qtum-x86 的基本特性包括:6 p, G, c7 N- `4 M

3 d, [6 d; A& x7 U% d1 J% U$ f支持多种主流编程语言: C/C++/Go/Rust 等等
0 D: S% B& \: y丰富的标准库,提高开发效率
, {8 y+ o  @" d' m4 H4 R: F8 y更加优化的Gas模型 : 为标准库函数设定合理的 gas 模型,可以准确估计 gas 消耗
$ c. e+ I" i2 y* F解锁 AAL 的强大功能 :支持合约的 P2SH 交易,segwit 交易等7 _  w" t0 U" H; ^2 A4 F! q4 E
冯·诺依曼结构,加强版的智能合约 :代码即数据,多任务协作,支持中断和恢复
, o5 W  p. u& ]- y; p# E! N第一类预言机 :无需运行合约即可获得某些合约数据
7 A% k4 |1 `: d1 O区块链动态分析 :更全面地分析区块链状态: {0 y7 i  a8 a  l) j
选择性数据存储 :节省宝贵的区块链上资源0 z' j! v. X) E. Y  u- ~1 A
清晰的依赖关系树 :有可能并行运行智能合约,降低 gas 费用
/ l; J# O* b1 E9 E% Y) k# k# V1 ]
, S+ q3 m8 z8 a+ Q. SQtum-x86 虚拟机将支持丰富的编程语言,操作系统与虚拟机解耦,旨在将智能合约开发推向主流。3 T: M' a: b9 r) q8 n+ P
简介& P% \6 s! i; i" S& h8 W

3 z8 X5 l% n! S5 Z本系列连载文档主要讲述 Qtum x86 虚拟机,x86 虚拟机的开发工作在开发进程中,该文档仍是学习了解 Qtum x86 虚拟机重要参考,本篇为连载系列的第一篇,后续也将陆续更新。
7 ?1 }& i2 Z1 V5 x1 v 什么是 Qtum-x86
* M' m" j1 b$ r2 {6 j+ @, u# F3 C
Qtum-x86 是 Qtum 正在开发的最新产品原型,包含了 x86 虚拟机。用户可以用 C 语言编写智能合约,未来将支持更多编程语言。目前这个原型只是一个预览版,合约接口和最终发布版可能会略有不同。
# n; ]; p' J! |" V
) e! o' ?! ?) @9 i该版本的 Qtum 目前有以下几项限制:
& ]5 Z8 M# l' Y* S  z必须从 Docker 中使用或从源代码编译: q$ w8 I3 I7 {) b
不支持以太坊虚拟机合约功能
9 u; S' n2 ?3 l! |$ S2 z不支持测试网络和主网,只支持 regtest
, H! V" A; [: x9 s" v* R出现孤块及分叉将无法正常工作
$ r" C2 c3 F, e: x7 k3 J, L+ \x86 合约只支持命令行 RPC 接口,虽然理论上 GUI 仍可用% x5 D3 N& O  q" t4 [! G7 ~

0 R& ^7 q/ L7 I' Q1 J01- }1 R" y% t* E" c8 w& g  ]
工具链设置  j7 k* {% G( t+ e

% G' H0 B' `0 b- Q由于代码经常需要更改,目前暂不提供编译好的 Qtum-x86 二进制文件。( ^0 ?% Q8 i5 x' z" L; O  u

, c3 [& o$ O/ v. r9 H  ?因此,工具链和 Qtum -x86 本身必须从源代码进行编译。dockerfile 可以极大地简化构建过程,否则构建过程会非常复杂,需要根据不同操作系统安装。
2 ?6 P! ?5 v' L2 t' Y
; L' s* m3 u: E* ADocker 文件和一些实用程序可以从以下网址下载:
1 g( B* x0 k( g/ t7 f- zhttps://github.com/qtumproject/qtum-docker/tree/master/proto-x862 r! l# i  @7 |* ?6 B' N" e* M
- T, c7 I' U, w# Z6 {
构建 docker 镜像的步骤如下:
, g9 s9 q3 t0 {" f, Q* g8 Fdocker build -t qtumx86 -f Dockerfile
. `) l" w5 z+ y
6 z1 |% |/ U+ ~大多数计算机上需要花费几个小时,因为它需要编译整个工具链,若要从头构建镜像(如更新版本等),请使用 --no-cache 操作指令:1 H& W) p; J/ Z9 i$ x- E' F
docker build -t qtumx86 -f Dockerfile . --no-cache
, Y* o, K: g" w' K
7 M) b! D# }6 ]) q一旦镜像构建完毕,接下来的使用就会比较简单了。为了简化操作,我们提供了一些辅助bash函数,它们将在本文档中被使用到,但并不是必须的。helpers.sh文件如下:
/ g- `" O- G8 x0 @  C  N#!/bin/bash. B% ?0 B. D+ @: b
function qx86start() {
! v! c, ~7 S& N5 C& f    docker run --rm -v "${PWD}:/root/bind" --name qx86 -d qtumx86 qtum/src/qtumd -regtest -logevents5 T" G! L9 M/ u$ ?& x) r7 Z
}$ j5 X2 j4 p8 V4 _" B- Y5 I
export -f qx86start
4 D+ u+ t& B0 D3 I" W# a, Z' Q# Z + h9 V9 [3 B. H) e7 R9 H, I! B
function qx86stop() {
- L# y) n# B# H1 e7 x% U0 y    docker stop qx86
- a: G: D4 t( j$ W}) Z* [: j0 g1 N" s
export -f qx86stop- E8 M& _% o" p) z* X
. j1 {1 ?2 `5 p; P3 g2 w7 g3 J2 u
alias qx86cli='docker exec qx86 qcli'
- ~  z# k( r7 u* b & g- q) A0 S0 R! R
function qx86deploy() {. ]4 O) C& k5 g8 `. I$ M, ^
    docker exec -t qx86 deploy_contract `hexdump -e \"%x\" $1`
! ]/ S) S2 j3 m1 i9 z4 Z7 Q}- b, C4 L  E" `' F6 N$ N. r
export -f qx86deploy* t: k' o+ T2 t* O
5 D& Q& ^0 A0 ]$ E$ Q# x- B
function qx86tb() {+ T+ }8 J! n# Z* P
    docker run --rm -v "${PWD}:/root/bind" qtumx86 x86tb  x* K7 u6 j; v5 S, f
}0 T2 W  G, I' c) D2 L
export -f qx86tb! U- }9 ^% }5 F7 R1 q. X+ e5 P2 i
" h; [8 Z+ i: t, I( j
function qx86make() {
4 O& ?% w- Q& ?9 T1 V" Y    docker run --rm -v "${PWD}:/root/bind" qtumx86 qmake "$@"
  f3 K! O) m. Q0 D}+ c/ U, E5 `9 H* `* j% B- x; [7 i7 A: i
export -f qx86make
- @7 {- D0 m& S0 B
) u2 t. |% o8 A9 f+ z开发者可以在当前的 bash 会话中使用该文件,只需执行:
8 L0 _% f1 d! K5 [# osource helpers.sh
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

9爱乐9 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    1