Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

Qtum x86 虚拟机技术简介

9爱乐9
127 0 0
什么是虚拟机?3 t+ P: f/ q2 H& S, G- Y
' }( N& j/ `& z3 J; u0 J
虚拟机是指通过软件模拟、具备完整硬件系统功能并运行在独立隔离环境下的完整计算机系统。比如虚拟化物理机 VMware、Java 虚拟机等。而 Qtum 虚拟机则是建立在Qtum 区块链上的代码运行环境,其主要作用是处理 Qtum 系统内的智能合约。
8 y8 j+ ~+ L$ R3 Q, G ( C4 G% G+ ^$ w  I) n7 S
简单来说,虚拟机是一个完全独立的沙盒,合约代码可对外完全隔离并在虚拟机内部运行。由于虚拟机分散储存在每个节点的计算机上,所以希望创建智能合约的公司可使用类似 JavaScript 和 Python 等编程语言创建运行程序;同时 Qtum 虚拟机又能与主网的其余部分隔离,运行时不影响主链的操作。
: B* b4 V+ m; Q% s. k
8 g; k# U+ X6 a& d' I( O" P. LQtum 已兼容 EVM,为何还需要 x86VM?
) u' X  U+ e1 L. c; i4 N  P! }6 j7 j6 s4 W
虽然 EVM(以太坊虚拟机)是当下最流行的智能合约虚拟机,但正如绝大多数新生事物一样(比如 Javascript),它存在诸多缺点。并且由于它的设计比较非主流,很难有主流的编程语言能够移植到 EVM 上。这种设计可以说对于近50年来的大多数编程范例来说都不太友好,例如:. C; e1 z5 ^4 ?! @& N3 ]+ z9 d
- [9 \' x+ K3 e
编程语言局限性(Solidity)
8 T3 k" q& _" i" Z+ K' h缺少标准库' a4 }/ E1 E& Z  ~1 n
256bit 整数,大部分处理器不能原生支持,运行效率降低
* g% Y, V* P) Q. J- z+ Q; A- f7 CGas 模型不合理,难以估计 Gas 消耗
% d/ R$ [. Z- i3 M+ x7 j' F生成的 bytecode 较大,浪费区块存储资源
( W0 p2 a5 b: G9 @" K/ v! J9 p难以测试和调试$ {+ c- \  s2 K4 A3 ?- O
) F. o2 x# m  S9 o& l8 {
正因为 EVM 存在诸多缺陷,Qtum 决定开发自己的虚拟机。x86 虚拟机兼容了被工业界充分验证过的 x86 指令集,对基于 x86 架构之上的所有技术和基础设施都有很好的兼容性。Qtum-x86 的基本特性包括:+ {/ J* `3 L* _

( `/ b, o4 J6 [/ V5 [* N2 f: Y* X& r支持多种主流编程语言: C/C++/Go/Rust 等等6 w4 J) {" q4 w8 e; x# r
丰富的标准库,提高开发效率8 b% _1 L$ g+ H
更加优化的Gas模型 : 为标准库函数设定合理的 gas 模型,可以准确估计 gas 消耗
* h; E4 U5 _* [. I1 |解锁 AAL 的强大功能 :支持合约的 P2SH 交易,segwit 交易等! C: c6 O( u# c
冯·诺依曼结构,加强版的智能合约 :代码即数据,多任务协作,支持中断和恢复3 O* K6 v; J: j
第一类预言机 :无需运行合约即可获得某些合约数据
; L: g: p' K+ a  u+ n/ ?4 |( j区块链动态分析 :更全面地分析区块链状态
( _1 ]" g8 v6 d) h9 _( r选择性数据存储 :节省宝贵的区块链上资源
% Q/ v0 n% J2 x( }" U清晰的依赖关系树 :有可能并行运行智能合约,降低 gas 费用
( d. _: q7 [- D. ~/ b% Z
3 `: b3 P  ]+ N& u, M) ^Qtum-x86 虚拟机将支持丰富的编程语言,操作系统与虚拟机解耦,旨在将智能合约开发推向主流。. P3 n, g% t: ~6 \' o
简介$ g7 C& [2 p3 A- f4 j4 z. o

% i+ R& @, n6 K  g% r1 n0 M8 J4 O本系列连载文档主要讲述 Qtum x86 虚拟机,x86 虚拟机的开发工作在开发进程中,该文档仍是学习了解 Qtum x86 虚拟机重要参考,本篇为连载系列的第一篇,后续也将陆续更新。4 s/ p* P0 Z& w7 z4 Z# T& z
什么是 Qtum-x86
; D' A% b- B3 [/ n6 }9 S8 J/ O4 t- x! p2 g* \* G
Qtum-x86 是 Qtum 正在开发的最新产品原型,包含了 x86 虚拟机。用户可以用 C 语言编写智能合约,未来将支持更多编程语言。目前这个原型只是一个预览版,合约接口和最终发布版可能会略有不同。
. `9 t0 H- [3 I( i- _1 f$ j) P( l1 g . Z2 k7 X- U& w
该版本的 Qtum 目前有以下几项限制:5 x1 ^. h4 t! e/ S, i7 S9 E
必须从 Docker 中使用或从源代码编译
/ D$ m5 X4 X# J4 c7 x8 M, C不支持以太坊虚拟机合约功能
+ J' l6 X+ ~1 G5 P% A) I不支持测试网络和主网,只支持 regtest
2 e/ _! j! e/ A6 q2 c' b; S出现孤块及分叉将无法正常工作" a: x8 j# K  e( }/ a$ T! m: E
x86 合约只支持命令行 RPC 接口,虽然理论上 GUI 仍可用
5 E. J) ^% k7 g: g7 ^+ n6 j3 I3 S# a, Z) [: I, H5 `
01
7 j& w$ g  L3 m2 }7 t* ~工具链设置( |. s8 c% c3 P& p# n% X
! X5 P: t# F% Y7 {! i, I7 J8 H6 j
由于代码经常需要更改,目前暂不提供编译好的 Qtum-x86 二进制文件。
2 D# j! W# b0 m+ B" [
6 X/ X+ D* N7 z9 m因此,工具链和 Qtum -x86 本身必须从源代码进行编译。dockerfile 可以极大地简化构建过程,否则构建过程会非常复杂,需要根据不同操作系统安装。" I. K+ K  D7 p% [4 Y3 ]( q

7 q8 S0 X, P% jDocker 文件和一些实用程序可以从以下网址下载:
" Q3 B+ K; W, y6 X8 ?" B; uhttps://github.com/qtumproject/qtum-docker/tree/master/proto-x86: X: ^4 X# E9 j4 H1 \
- w+ I2 j6 F6 _7 H% Z' H5 r, c) Y: {
构建 docker 镜像的步骤如下:
- k+ D0 e: p# [: g) C8 Ndocker build -t qtumx86 -f Dockerfile 1 A2 a, _+ M( c- w  D* A+ _- X

2 A- k# c# h8 j0 K. n4 i大多数计算机上需要花费几个小时,因为它需要编译整个工具链,若要从头构建镜像(如更新版本等),请使用 --no-cache 操作指令:
4 n/ s. D2 S) {1 J* Wdocker build -t qtumx86 -f Dockerfile . --no-cache
, l8 Y/ N: `; Y/ m8 u$ Q4 i2 A  r& d1 m/ x" M; b/ O9 s
一旦镜像构建完毕,接下来的使用就会比较简单了。为了简化操作,我们提供了一些辅助bash函数,它们将在本文档中被使用到,但并不是必须的。helpers.sh文件如下:
4 [4 o# L" {, M#!/bin/bash. h! t9 F& i& [% v( a0 n
function qx86start() {
) i$ E0 R9 {, t# u! s, o8 c    docker run --rm -v "${PWD}:/root/bind" --name qx86 -d qtumx86 qtum/src/qtumd -regtest -logevents
3 R1 w2 H% O1 E0 i) t. b/ L}
2 E' y8 ^- w' C$ O  H2 Z# qexport -f qx86start
  ^) ]5 }/ Y4 j : a4 N$ M+ [( o. s
function qx86stop() {
8 X- m  E0 ~$ ?9 l& k& ^# q    docker stop qx86+ U- G& f7 |$ ~
}" e9 o5 b# j* _7 b
export -f qx86stop( b% ^4 A2 h, d0 ~
$ m. V! G8 k" T
alias qx86cli='docker exec qx86 qcli'
9 q# I, ]& r: q1 z
4 B4 P  z% ]: e' H+ N  sfunction qx86deploy() {" w3 ]- i5 l% r! F" u) ?. \# T4 s/ X  e9 U
    docker exec -t qx86 deploy_contract `hexdump -e \"%x\" $1`
+ X) P6 `; y( m, x: k3 W}1 {, m0 C" g9 l! x
export -f qx86deploy1 v4 G  u  T) Y* j

, }: d+ `9 z6 V+ O4 u/ q" Qfunction qx86tb() {
% m  |) l& T. m0 k( b    docker run --rm -v "${PWD}:/root/bind" qtumx86 x86tb
$ ~# m6 \) n: t}& h: C& d6 J' k& ^( i' @8 T4 a
export -f qx86tb- f* n' k9 w6 j" D$ \

9 R! F( t- f/ h: rfunction qx86make() {$ J# a! Z  h( W6 L% \  h; C
    docker run --rm -v "${PWD}:/root/bind" qtumx86 qmake "$@"
4 q4 R9 J# t) C+ K. d/ G1 u}
7 N8 g. }* N& @export -f qx86make
# ]& |$ P% ]' t1 T5 ^; h. Y
- H6 {6 Y' d, J开发者可以在当前的 bash 会话中使用该文件,只需执行:. D& w  B  E2 I1 g. D/ I) L" {, I
source helpers.sh
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

9爱乐9 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    1