Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

Qtum x86 虚拟机技术简介

9爱乐9
84 0 0
什么是虚拟机?; _/ A, Y3 [% h3 Y
- Z$ N: k0 {+ K$ ~6 @
虚拟机是指通过软件模拟、具备完整硬件系统功能并运行在独立隔离环境下的完整计算机系统。比如虚拟化物理机 VMware、Java 虚拟机等。而 Qtum 虚拟机则是建立在Qtum 区块链上的代码运行环境,其主要作用是处理 Qtum 系统内的智能合约。
& p# V! N9 v2 ?/ u
# t, I" u- O$ @0 \. y/ g: h简单来说,虚拟机是一个完全独立的沙盒,合约代码可对外完全隔离并在虚拟机内部运行。由于虚拟机分散储存在每个节点的计算机上,所以希望创建智能合约的公司可使用类似 JavaScript 和 Python 等编程语言创建运行程序;同时 Qtum 虚拟机又能与主网的其余部分隔离,运行时不影响主链的操作。
* i. t$ ~+ `6 B0 O
. |- D0 L6 Z' Y! _$ TQtum 已兼容 EVM,为何还需要 x86VM?
' A" y) k' W; A* z/ y3 E. \
( u! B& n# {( y+ Q! `3 t虽然 EVM(以太坊虚拟机)是当下最流行的智能合约虚拟机,但正如绝大多数新生事物一样(比如 Javascript),它存在诸多缺点。并且由于它的设计比较非主流,很难有主流的编程语言能够移植到 EVM 上。这种设计可以说对于近50年来的大多数编程范例来说都不太友好,例如:
/ {  s1 l8 |% ]/ E! s, D6 ]4 J5 ^  a7 ?
编程语言局限性(Solidity)
& j) y. c- R# Y) Y  H& u缺少标准库
  e3 u: V; b; }( Y4 v256bit 整数,大部分处理器不能原生支持,运行效率降低
: Y; z' @) E' u& \2 `- R8 i- n% sGas 模型不合理,难以估计 Gas 消耗
# p1 a$ {  U3 V7 Q$ N生成的 bytecode 较大,浪费区块存储资源- d- K6 v8 A& t( H* n& x
难以测试和调试% h) E, ^( k9 A0 L
8 `4 l  v+ H* z
正因为 EVM 存在诸多缺陷,Qtum 决定开发自己的虚拟机。x86 虚拟机兼容了被工业界充分验证过的 x86 指令集,对基于 x86 架构之上的所有技术和基础设施都有很好的兼容性。Qtum-x86 的基本特性包括:
& [9 z4 f  u+ c" c; u
' p" a# b2 A( C支持多种主流编程语言: C/C++/Go/Rust 等等
' \* B0 |# Z" \# I丰富的标准库,提高开发效率4 U7 T5 X2 q6 p$ t3 A! G
更加优化的Gas模型 : 为标准库函数设定合理的 gas 模型,可以准确估计 gas 消耗
, U7 L. N. H. L$ y解锁 AAL 的强大功能 :支持合约的 P2SH 交易,segwit 交易等3 w5 D. n+ r- k' @& y$ C  T
冯·诺依曼结构,加强版的智能合约 :代码即数据,多任务协作,支持中断和恢复
5 k3 ~# _/ ^5 U1 S' \8 D第一类预言机 :无需运行合约即可获得某些合约数据, W9 E2 Q  g- V4 `7 I
区块链动态分析 :更全面地分析区块链状态( {& a: ?1 U0 [# _, ^
选择性数据存储 :节省宝贵的区块链上资源
) ~5 s$ d" b4 a+ A清晰的依赖关系树 :有可能并行运行智能合约,降低 gas 费用0 W; D& s9 b4 g! o4 v1 j

) x: _( v7 ^9 z2 CQtum-x86 虚拟机将支持丰富的编程语言,操作系统与虚拟机解耦,旨在将智能合约开发推向主流。- C& q, c6 a$ L4 r; n2 E
简介
8 z9 T  I7 V. i( {; j: U
, O2 B: @' {+ T! @% U本系列连载文档主要讲述 Qtum x86 虚拟机,x86 虚拟机的开发工作在开发进程中,该文档仍是学习了解 Qtum x86 虚拟机重要参考,本篇为连载系列的第一篇,后续也将陆续更新。; ~, O; B1 x6 z
什么是 Qtum-x86
$ n& \$ e, w- U! q- ^0 `, @, R
7 T  r: p6 N$ tQtum-x86 是 Qtum 正在开发的最新产品原型,包含了 x86 虚拟机。用户可以用 C 语言编写智能合约,未来将支持更多编程语言。目前这个原型只是一个预览版,合约接口和最终发布版可能会略有不同。. h! R2 C$ d# M( t8 K
  V! s: I; C9 C( _# ?4 E  n4 Y
该版本的 Qtum 目前有以下几项限制:, v9 D% u) h* c6 N3 c. l! h- v
必须从 Docker 中使用或从源代码编译# h, ]+ C3 g' F
不支持以太坊虚拟机合约功能' u" S% m% G: J" o; y/ D' e4 T) q
不支持测试网络和主网,只支持 regtest: H+ @' l6 E" _$ f8 v
出现孤块及分叉将无法正常工作) q6 d$ s/ v4 \5 d/ `; z
x86 合约只支持命令行 RPC 接口,虽然理论上 GUI 仍可用
( r$ L7 M3 ]& K
) l; p6 r# k" N( z+ |# I, }" A4 H. Q01
4 Z  M/ Z& ~$ _8 g) I) t工具链设置( B2 }5 I  S6 q* q4 B8 a
% \1 I6 i# P- w; s, U% u
由于代码经常需要更改,目前暂不提供编译好的 Qtum-x86 二进制文件。: x4 q% U# ?: E  T- g
& I- i- \1 @$ I* y
因此,工具链和 Qtum -x86 本身必须从源代码进行编译。dockerfile 可以极大地简化构建过程,否则构建过程会非常复杂,需要根据不同操作系统安装。
9 y# y6 V6 Q% a+ \# Z8 W* ^! s& @) j8 b, y+ j% Y! O
Docker 文件和一些实用程序可以从以下网址下载:7 z( q1 ?, H6 i2 z
https://github.com/qtumproject/qtum-docker/tree/master/proto-x86  n0 y4 h4 S* c
6 ?7 \7 I! _6 U8 Z' T, U1 @4 ]
构建 docker 镜像的步骤如下:% S" V1 d: l) h. u0 g( a' A
docker build -t qtumx86 -f Dockerfile
! ~$ u! ^4 k  j5 [6 x" @1 N& P
5 F7 y! I9 w6 Y大多数计算机上需要花费几个小时,因为它需要编译整个工具链,若要从头构建镜像(如更新版本等),请使用 --no-cache 操作指令:! n' k* E  G( g. V( Z9 W
docker build -t qtumx86 -f Dockerfile . --no-cache. N0 Z% V" k% a5 [% l

9 n" `, ^/ Z7 E一旦镜像构建完毕,接下来的使用就会比较简单了。为了简化操作,我们提供了一些辅助bash函数,它们将在本文档中被使用到,但并不是必须的。helpers.sh文件如下:
0 Z" s! A1 X( n9 H, i#!/bin/bash
. ?7 s4 P9 R0 c- ^5 i  s' x7 G7 pfunction qx86start() {& K; m5 `. Z: `
    docker run --rm -v "${PWD}:/root/bind" --name qx86 -d qtumx86 qtum/src/qtumd -regtest -logevents
! Q9 ?5 Q" \& w8 N/ q) g1 B}
9 v+ Y8 \7 ]5 B* }: _3 L6 ^- k6 B' pexport -f qx86start
# o. E- E% {; z- { - C6 U/ n6 |4 u& e) c7 Q
function qx86stop() {
  G& k/ {. k9 E: h) k    docker stop qx86
2 \7 E0 Y8 C  L3 z}' z0 a) I, Q; _( n
export -f qx86stop
4 g1 o" ^3 m8 [( `3 }
- w9 C1 G% D3 R0 s; Ialias qx86cli='docker exec qx86 qcli'1 r' a' X/ C* G2 a- s) p0 L

$ a3 j3 v" g" Z3 tfunction qx86deploy() {: w3 G6 V% |1 @5 C+ o- t! I: q
    docker exec -t qx86 deploy_contract `hexdump -e \"%x\" $1` $ x9 ]( |: S3 u& X2 c' Q" k
}
  t. y$ j1 K% u. i! T8 e5 D* r8 {: Uexport -f qx86deploy) ]% e$ C9 Z. `, a

$ x2 G8 Z/ I% ifunction qx86tb() {
  ^! \' q0 b% ~: L# X: }    docker run --rm -v "${PWD}:/root/bind" qtumx86 x86tb% N% J6 H) N. R# V3 S: z; A+ f) J
}; g6 l) q1 m0 ], J( ]
export -f qx86tb
: K* A# Z3 G+ B$ K- b. ` / Y' v2 C$ y3 }, r; p7 u
function qx86make() {) k; y4 E( {, N3 M2 }% [0 p/ }# W* S
    docker run --rm -v "${PWD}:/root/bind" qtumx86 qmake "$@"
+ [' r8 b# n5 M3 I}
  E& E) o, ]' A4 W4 h" K# q8 ?1 ]5 kexport -f qx86make' H9 ]: J8 n/ a$ N1 z3 l/ \
; s$ K/ h4 b7 M+ @* @" D
开发者可以在当前的 bash 会话中使用该文件,只需执行:# f; Z; {( i8 T3 C! e+ e. l3 y
source helpers.sh
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

9爱乐9 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    1