Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

Qtum x86 虚拟机技术简介

9爱乐9
71 0 0
什么是虚拟机?& X0 N2 F; l0 S0 @

3 `3 q0 d- Y" u$ k. {! r) T虚拟机是指通过软件模拟、具备完整硬件系统功能并运行在独立隔离环境下的完整计算机系统。比如虚拟化物理机 VMware、Java 虚拟机等。而 Qtum 虚拟机则是建立在Qtum 区块链上的代码运行环境,其主要作用是处理 Qtum 系统内的智能合约。
+ n/ G6 {# h" D  d4 Z( N' h* k
8 l) N- h' _9 t简单来说,虚拟机是一个完全独立的沙盒,合约代码可对外完全隔离并在虚拟机内部运行。由于虚拟机分散储存在每个节点的计算机上,所以希望创建智能合约的公司可使用类似 JavaScript 和 Python 等编程语言创建运行程序;同时 Qtum 虚拟机又能与主网的其余部分隔离,运行时不影响主链的操作。" T6 I9 Q5 h1 c( N! x8 t0 Q

0 S% X( R0 w) [* W, z  hQtum 已兼容 EVM,为何还需要 x86VM?
7 ?' |% {' n1 t( q+ F: \8 b7 \; L5 U& B: L0 c
虽然 EVM(以太坊虚拟机)是当下最流行的智能合约虚拟机,但正如绝大多数新生事物一样(比如 Javascript),它存在诸多缺点。并且由于它的设计比较非主流,很难有主流的编程语言能够移植到 EVM 上。这种设计可以说对于近50年来的大多数编程范例来说都不太友好,例如:" e/ i6 i) [: ]. V
+ V1 ]0 P' A# b5 G" J
编程语言局限性(Solidity); B% n2 y0 g* x6 _$ N
缺少标准库
3 |  y! B. G( F5 c- g; C7 |256bit 整数,大部分处理器不能原生支持,运行效率降低
! q8 d& N& W- m* @) ]+ ~: w; @  aGas 模型不合理,难以估计 Gas 消耗
8 I# U5 i# ~7 c3 t: J  ^生成的 bytecode 较大,浪费区块存储资源; E& L7 ^# p# `9 C5 d; p* R" E6 W
难以测试和调试: O5 }1 g7 \$ {3 N

: G# p8 \. b& O1 M正因为 EVM 存在诸多缺陷,Qtum 决定开发自己的虚拟机。x86 虚拟机兼容了被工业界充分验证过的 x86 指令集,对基于 x86 架构之上的所有技术和基础设施都有很好的兼容性。Qtum-x86 的基本特性包括:
- b' K, t* ]( ?
/ H5 b1 r- e% X6 c& E1 z/ w支持多种主流编程语言: C/C++/Go/Rust 等等
6 J+ Z  {! X  o+ Q* o丰富的标准库,提高开发效率8 c. h8 ^5 E6 c# A/ m6 d* I
更加优化的Gas模型 : 为标准库函数设定合理的 gas 模型,可以准确估计 gas 消耗) t) |/ Q7 i2 o0 C. Q7 ~1 O2 V
解锁 AAL 的强大功能 :支持合约的 P2SH 交易,segwit 交易等
9 F# R1 |, ?, D* T& f2 ~1 [  A冯·诺依曼结构,加强版的智能合约 :代码即数据,多任务协作,支持中断和恢复0 T1 N! P. j' _+ j4 v0 W* u
第一类预言机 :无需运行合约即可获得某些合约数据
5 }) E  H. ^" ~& V6 ]区块链动态分析 :更全面地分析区块链状态
" x; M- K: l) l9 e1 a选择性数据存储 :节省宝贵的区块链上资源
6 H2 l4 t( o' c* B: }. B# \清晰的依赖关系树 :有可能并行运行智能合约,降低 gas 费用
( e+ ~4 q3 n$ U. O7 t6 c6 X$ J) `$ I; o) |  k8 [
Qtum-x86 虚拟机将支持丰富的编程语言,操作系统与虚拟机解耦,旨在将智能合约开发推向主流。, `0 I" A) l- o1 |
简介
' b+ u( @& _. B7 m; P9 g" N- b, n1 a- b0 w# T; \
本系列连载文档主要讲述 Qtum x86 虚拟机,x86 虚拟机的开发工作在开发进程中,该文档仍是学习了解 Qtum x86 虚拟机重要参考,本篇为连载系列的第一篇,后续也将陆续更新。, _! g& i) `6 m" U2 [
什么是 Qtum-x86# \& f5 X3 O, n  g  A4 C) `

& o+ y, z6 _* g! A) f8 @3 z6 ^- JQtum-x86 是 Qtum 正在开发的最新产品原型,包含了 x86 虚拟机。用户可以用 C 语言编写智能合约,未来将支持更多编程语言。目前这个原型只是一个预览版,合约接口和最终发布版可能会略有不同。$ S  ]% O$ v" Q# }: v  x8 B* |4 S
( O8 D, H4 y5 u2 L0 j8 j) N' A" Z
该版本的 Qtum 目前有以下几项限制:
" w& F$ k$ i/ Y+ H$ }6 x0 \必须从 Docker 中使用或从源代码编译- G$ c7 n$ v9 X5 f+ D: e* [& \+ g
不支持以太坊虚拟机合约功能; P5 D" N) _( h9 R4 F6 H1 Q
不支持测试网络和主网,只支持 regtest
( J' R, U( z: I3 I! _) ?& M出现孤块及分叉将无法正常工作1 q: I9 k4 }4 k( @( D" s4 V" H( Q
x86 合约只支持命令行 RPC 接口,虽然理论上 GUI 仍可用/ Q9 l3 K0 L8 z  x$ D: I! b. [
8 f/ u% e( g; Y, S2 [
01. h0 S3 K% L) y' }6 P, A
工具链设置
8 Z5 `! ?8 l  C) _. K9 |& E# [
5 ?" l8 _* [, a) |, B由于代码经常需要更改,目前暂不提供编译好的 Qtum-x86 二进制文件。' @; W& \, o; U( e# p

, x$ u/ s  y& P: u6 t% A# ?因此,工具链和 Qtum -x86 本身必须从源代码进行编译。dockerfile 可以极大地简化构建过程,否则构建过程会非常复杂,需要根据不同操作系统安装。# I3 v" d3 m/ F: H* ^" H
' w/ o" @0 M1 n
Docker 文件和一些实用程序可以从以下网址下载:9 i: ?9 B1 w: q0 Q& v$ l: K
https://github.com/qtumproject/qtum-docker/tree/master/proto-x86
2 W2 O7 g. ?' [' l- Z  a; m. W) V# H
构建 docker 镜像的步骤如下:
$ n2 n7 l! o1 L1 c. D; ldocker build -t qtumx86 -f Dockerfile 6 D3 }1 C% E! c. Z
+ l# _# P8 ]" X; |! @' _1 o0 y
大多数计算机上需要花费几个小时,因为它需要编译整个工具链,若要从头构建镜像(如更新版本等),请使用 --no-cache 操作指令:( H- Q7 n, F% S) d7 R( S4 k( N& |
docker build -t qtumx86 -f Dockerfile . --no-cache
) X' D" Z' d; b4 W- |6 K; _, C" T4 K  @, e
一旦镜像构建完毕,接下来的使用就会比较简单了。为了简化操作,我们提供了一些辅助bash函数,它们将在本文档中被使用到,但并不是必须的。helpers.sh文件如下:
' H8 J7 o  o$ U& [. ^8 E) b#!/bin/bash
9 T+ P4 B) U" l8 V' efunction qx86start() {# @0 q- `& W/ l  D
    docker run --rm -v "${PWD}:/root/bind" --name qx86 -d qtumx86 qtum/src/qtumd -regtest -logevents
' P/ A/ s8 Q4 i2 r: w8 V! [0 y4 L" I% |8 g}
9 ?( w$ z& A' D) N; t) Z7 @export -f qx86start
9 n/ _( c9 Q) ^. j8 B . d; m$ [- x; ?5 Y( Y& ]) f
function qx86stop() {+ \2 i% M1 m/ C1 [8 N; ?2 {/ [
    docker stop qx86
: D8 X& [. T7 l/ p' T" h}
" G( r- R9 g# S- R2 ?export -f qx86stop
. ^6 ]' Q$ @. W6 a" v. K" I
$ f% A) W$ T# k6 Halias qx86cli='docker exec qx86 qcli', E: N6 ~" K! n( p5 f, @
0 y: e0 f3 N- M6 A1 o
function qx86deploy() {' E6 }+ x- H6 }5 v7 X; h
    docker exec -t qx86 deploy_contract `hexdump -e \"%x\" $1` ( ]: Z$ n4 i: o) F" a0 \
}
$ K$ m/ t2 R& ~2 z3 i1 F2 sexport -f qx86deploy' [5 S( }2 k* G7 V4 v9 Y
/ Z4 l' i6 q( P' Z
function qx86tb() {
9 E6 D: a5 Z% ~& l& k+ `' u1 H    docker run --rm -v "${PWD}:/root/bind" qtumx86 x86tb- |( Z- ~& Y; Z& Q' L
}
' k/ ^  _; S' E1 W6 rexport -f qx86tb/ ~" z; z( A. Z/ z( R/ ?9 ^

  P- B1 ]- y$ K+ |5 {' S' t' Jfunction qx86make() {
$ q  s3 y0 x- C9 H    docker run --rm -v "${PWD}:/root/bind" qtumx86 qmake "$@"  n$ @0 v3 B1 j7 ?# |' T. a
}
- ~3 O9 K# f$ o' H$ m# k+ n# d5 ~export -f qx86make
3 e- T4 l# m" Y8 ? 7 J* ?% @+ F- U/ d
开发者可以在当前的 bash 会话中使用该文件,只需执行:1 M6 V$ y# J) d8 ]. l$ ^' l( U% Z
source helpers.sh
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

9爱乐9 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    1