Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

Qtum x86 虚拟机技术简介

9爱乐9
85 0 0
什么是虚拟机?
# G/ j- {" Q1 x8 e  j+ ]5 N* @* q) E
4 j$ |- D7 n" o# z( m虚拟机是指通过软件模拟、具备完整硬件系统功能并运行在独立隔离环境下的完整计算机系统。比如虚拟化物理机 VMware、Java 虚拟机等。而 Qtum 虚拟机则是建立在Qtum 区块链上的代码运行环境,其主要作用是处理 Qtum 系统内的智能合约。9 y; _- w, P2 }: g. S

  |4 b9 l9 O% m' h7 q: A简单来说,虚拟机是一个完全独立的沙盒,合约代码可对外完全隔离并在虚拟机内部运行。由于虚拟机分散储存在每个节点的计算机上,所以希望创建智能合约的公司可使用类似 JavaScript 和 Python 等编程语言创建运行程序;同时 Qtum 虚拟机又能与主网的其余部分隔离,运行时不影响主链的操作。
: \! J/ P, D# `! D 1 f* l3 J, V8 f$ W; S+ W% E0 c! e- d# T
Qtum 已兼容 EVM,为何还需要 x86VM?
, t1 q' L/ s$ E7 c- ?$ W3 J# f
& A: D! S- P; m. I  @( A8 h虽然 EVM(以太坊虚拟机)是当下最流行的智能合约虚拟机,但正如绝大多数新生事物一样(比如 Javascript),它存在诸多缺点。并且由于它的设计比较非主流,很难有主流的编程语言能够移植到 EVM 上。这种设计可以说对于近50年来的大多数编程范例来说都不太友好,例如:
( x& ~9 _: V1 t
9 u- _6 _9 M8 i& u4 R编程语言局限性(Solidity)
4 c4 [, J$ W" W  x) s+ T& m缺少标准库
3 s+ D8 X- E3 S. p# b3 _256bit 整数,大部分处理器不能原生支持,运行效率降低- f! {$ {1 k/ O) Z, r5 {
Gas 模型不合理,难以估计 Gas 消耗
' t' I; N) k3 v( }* G# }生成的 bytecode 较大,浪费区块存储资源! Y. m! L$ l1 b) K' c8 x
难以测试和调试
7 G, T* I; O# l* s) H  K7 V) M
2 ?# d, o1 f8 j+ _; l/ ]" d) h正因为 EVM 存在诸多缺陷,Qtum 决定开发自己的虚拟机。x86 虚拟机兼容了被工业界充分验证过的 x86 指令集,对基于 x86 架构之上的所有技术和基础设施都有很好的兼容性。Qtum-x86 的基本特性包括:* N9 K) x( i& R5 C& `: t

/ u; @# D# K* Z) p8 s2 a9 b支持多种主流编程语言: C/C++/Go/Rust 等等
" a& j8 s- A- \丰富的标准库,提高开发效率  a5 W' O  p1 |3 r' Z, N- m4 x, m
更加优化的Gas模型 : 为标准库函数设定合理的 gas 模型,可以准确估计 gas 消耗! Z" G1 |5 R7 j5 X2 _* B, X
解锁 AAL 的强大功能 :支持合约的 P2SH 交易,segwit 交易等( \, s( C- A0 k  v
冯·诺依曼结构,加强版的智能合约 :代码即数据,多任务协作,支持中断和恢复: ~& d* A: n, F  i) N+ o, b# j/ c% c
第一类预言机 :无需运行合约即可获得某些合约数据
) k$ ?" ]; r* h3 ^4 w区块链动态分析 :更全面地分析区块链状态+ @  e2 B. l7 B" N7 q) G- M# Y) D
选择性数据存储 :节省宝贵的区块链上资源1 ^4 H5 Z4 ^# R5 D( E1 u
清晰的依赖关系树 :有可能并行运行智能合约,降低 gas 费用
. i& a' q7 Y1 R
: U- c7 Q, n3 N$ `9 m9 mQtum-x86 虚拟机将支持丰富的编程语言,操作系统与虚拟机解耦,旨在将智能合约开发推向主流。+ ~  u. }6 L2 `0 u3 N
简介
( `# f$ {; Z/ U+ U5 o; C
$ p5 @' V* x- w/ J6 k本系列连载文档主要讲述 Qtum x86 虚拟机,x86 虚拟机的开发工作在开发进程中,该文档仍是学习了解 Qtum x86 虚拟机重要参考,本篇为连载系列的第一篇,后续也将陆续更新。
; ]/ J" C" d; m4 f" n 什么是 Qtum-x86* G9 f$ \7 O3 v' k
- n+ V. O3 c! a9 y3 n6 ^2 L# L
Qtum-x86 是 Qtum 正在开发的最新产品原型,包含了 x86 虚拟机。用户可以用 C 语言编写智能合约,未来将支持更多编程语言。目前这个原型只是一个预览版,合约接口和最终发布版可能会略有不同。) M* B! z2 X: l: @
6 Y& P% H7 H" G+ X  X. Y+ y
该版本的 Qtum 目前有以下几项限制:$ x( b9 t9 Y. w/ z5 Z( y7 ?6 N& c
必须从 Docker 中使用或从源代码编译
. P" a  o+ g" Z! m: R不支持以太坊虚拟机合约功能
  k# p: F# ?2 I. R/ \- ~2 u4 Q不支持测试网络和主网,只支持 regtest$ y" _: t) ~5 i$ X3 ~
出现孤块及分叉将无法正常工作
$ a1 y4 d/ Q: g$ O/ @7 g/ Hx86 合约只支持命令行 RPC 接口,虽然理论上 GUI 仍可用
8 j, y! W5 p. d0 R& `' C
& q( Y: E. `0 X3 @: S5 X) O01+ o( X/ C1 [6 L7 A5 b  b4 b
工具链设置
( A! h- h. H% w$ ~9 j  |) o
! ]8 I8 A& _7 O$ u( \. W  j  l由于代码经常需要更改,目前暂不提供编译好的 Qtum-x86 二进制文件。
& d! _) ]% s' Q: I/ Y& C1 c' c2 y8 }& c
因此,工具链和 Qtum -x86 本身必须从源代码进行编译。dockerfile 可以极大地简化构建过程,否则构建过程会非常复杂,需要根据不同操作系统安装。
/ {* h3 X  t0 Z/ G* w+ t$ h" b: a7 k5 \/ y, z
Docker 文件和一些实用程序可以从以下网址下载:
, ?9 L8 G# B2 L  L1 Jhttps://github.com/qtumproject/qtum-docker/tree/master/proto-x86
7 H& b2 E$ p/ [
3 t4 B. J0 `8 I# r) q( x) q( S2 \构建 docker 镜像的步骤如下:
$ G% }4 a, V/ j/ {/ odocker build -t qtumx86 -f Dockerfile 4 p$ C) N  s( M. t# u
% y+ H+ O6 W! @/ t& v3 F2 ^+ m
大多数计算机上需要花费几个小时,因为它需要编译整个工具链,若要从头构建镜像(如更新版本等),请使用 --no-cache 操作指令:5 A% g% A2 @% P, m+ c0 Z, p5 n
docker build -t qtumx86 -f Dockerfile . --no-cache
& K/ P+ p* C% g7 J5 t% {# R% E2 ]( t
一旦镜像构建完毕,接下来的使用就会比较简单了。为了简化操作,我们提供了一些辅助bash函数,它们将在本文档中被使用到,但并不是必须的。helpers.sh文件如下:
, y6 p6 L2 K8 {, R( d' W# o( K#!/bin/bash+ D/ h, B0 g) a* m! X4 I
function qx86start() {: R+ v) a5 R5 P4 L6 C: B
    docker run --rm -v "${PWD}:/root/bind" --name qx86 -d qtumx86 qtum/src/qtumd -regtest -logevents. U8 v, k% u: }0 y; P8 J
}
1 G" N6 V( P$ y6 b- N. lexport -f qx86start
! G/ v& m$ E( M4 R% e# ]5 z( T
' h. E& ], ^* `function qx86stop() {
2 \1 M, b" M- F0 {. V( q    docker stop qx86: Y* `6 t! x$ d9 A
}
1 b- x% u. x4 t. hexport -f qx86stop
" V4 Q- x* K1 {% B5 B. [ 9 h! R  J' d- ~( `$ @
alias qx86cli='docker exec qx86 qcli'2 H2 P- ~8 x5 ?/ o& M; E
1 L  T$ M- }0 J  J( b0 x+ S
function qx86deploy() {
! T; k4 w% u) @1 a# A( t( M$ ]    docker exec -t qx86 deploy_contract `hexdump -e \"%x\" $1`
1 Z, g  ~) ?' A}/ z& W& C5 b: W" s* B* o
export -f qx86deploy) C, c! m( x) @, N' |1 C
2 n4 j& v5 M* U. R. ~
function qx86tb() {
; Q6 F9 @! n$ d: C( N# L1 }    docker run --rm -v "${PWD}:/root/bind" qtumx86 x86tb  h& p* @; E" U" d( d" q
}, |( P& b4 e! U/ J/ X
export -f qx86tb1 }% z# J9 i+ @, K

# H; }! ?: h2 l2 x! {9 H, y  c, Q5 qfunction qx86make() {
# v& Z! Z" S' A2 K    docker run --rm -v "${PWD}:/root/bind" qtumx86 qmake "$@"& K- F+ M6 Y$ I- `& p
}
" R3 r% k, `" p) }' Mexport -f qx86make0 I( Z/ s+ L/ P' A

( }' U$ H  W6 g6 t9 `- n) Q开发者可以在当前的 bash 会话中使用该文件,只需执行:2 ~2 U( Q5 y0 p0 q5 E  O
source helpers.sh
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

9爱乐9 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    1