Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
了解区块链技术的童鞋都知道以太坊的智能合约都是在沙箱(Sandbox)中运行的,那到底什么是沙箱呢?为什么要在沙箱中进行呢?下面本文就为大家一一介绍。5 b& J5 I7 `: U/ n
3 v3 x& v4 G1 b+ `4 B# h* j
    1.为什么需要沙箱机制?6 r4 ?+ D4 v! q9 O$ @' T; r
7 h1 L  X: P0 O- f1 }* T1 V3 V
    默认情况下,一个应用程序是可以访问机器上的所有资源的,比如CPU、内存、文件系统、网络等等。
1 h! m0 \7 D; G4 Z$ D
3 _/ \; J" X/ `* ^+ k& ]    但是这是不安全的,如果随意操作资源,有可能破坏其他应用程序正在使用的资源,或者造成数据泄漏。为了解决这个问题,一般有下面两种解决方案:
$ ~: G  N/ s2 ^* B% K8 Z, T+ c0 W
7 ?- X$ l3 A; E, s: G  c# |    (1)为程序分配一个限定权限的账号:利用操作系统的权限管理机制进行限制
* d2 f7 n7 }: i3 T2 @7 c6 E) z9 F7 h: F  k" ]) r3 D
    (2)为程序提供一个受限的运行环境:这就是沙箱机制
/ Y; q2 c8 }4 [2 X4 t$ V6 O3 C2 }, d' O: V2 {# B4 P. i2 c
    2.什么是沙箱机制?
& f8 q7 h) g0 t
, h, p* D6 H9 V" t4 Y# P( s    如上所述,沙箱就是一个限制应用程序对系统资源的访问的运行环境。. ], p, ^2 b  `5 n3 }

) t" M3 b+ w- ~    沙箱很多情况下都是实现在虚拟机(VM)中,比如Java的虚拟机JVM、Javascript的虚拟机V8引擎、Android中的虚拟机Dalvik/ART,以及以太坊的虚拟机EVM等等。具体的实现方式各有不同,本文重点分析一下JVM和EVM的沙箱机制实现。0 ?+ N. Y% p1 _
$ E  g8 [$ Q1 _3 I* V
    3.JVM的沙箱机制
5 e( m2 \" z: u; @) s* C* W. E
5 z+ m1 I- X4 o6 V4 s    第二层:字节码校验器
. k' D+ d# S- n  ~2 X( x. G5 j# X# p( r: W
    类字节码被加载后,需要在字节码层面进行检验,具体包括以下内容:
8 {/ b* z9 N, I) |* ^
' J% c/ H$ `0 m- b7 j- ^    (1)变量要在使用之前进行初始化
% e6 \0 H4 f3 M( E, N: Q/ N; C7 |4 i0 Z- Y
    (2)方法调用与对象引用类型之前要匹配
7 W$ Q$ P# @  ^& b/ L4 H9 k9 y; [4 G- `3 E$ Z
    (3)访问私有数据和方法的规则没有被违背0 C, g. j' L! m7 y3 _9 j
. X. e: @. C! D# }
    (4)对本地变量的访问落在运行时堆栈内0 j: ^) O! ]0 s: P. H# d

& ?, w: L$ I5 y- E/ O    (5)运行时堆栈没有溢出通过这一机制,可以确保字节码符合Java语言规范,避免访问无效访问或越界访问。4 G3 c* x# N- y' m4 }+ L4 ~' P. G
$ {8 C1 ~5 z0 O
    第二层:字节码校验器
) ^9 C- d" r' ^: \
) `; _2 ~. t% i: l2 X- [( M# Q+ H    类字节码被加载后,需要在字节码层面进行检验,具体包括以下内容:
/ A- o( g* [4 p; R' a2 j
$ H$ P% J/ g% e" I! L7 m    (1)变量要在使用之前进行初始化8 H* u. g8 N/ d5 |
$ x% \" Y- `' n8 u5 l
    (2)方法调用与对象引用类型之前要匹配0 s( ~9 C# h1 [. \0 U4 P
, i. D- a" P  O) @  U
    (3)访问私有数据和方法的规则没有被违背' S+ z5 t. S% n- m0 E8 ^) [

. x8 C8 z$ D) s  U! ?    (4)对本地变量的访问落在运行时堆栈内
- g* H+ G3 ]1 Y" @/ }5 E. F
4 M4 b( W8 q( \  `    (5)运行时堆栈没有溢出通过这一机制,可以确保字节码符合Java语言规范,避免访问无效访问或越界访问。
+ ^1 \2 t/ l  e$ ~% T
4 H6 m8 b# b+ z4 q    4.EVM的沙箱机制0 V' v" y3 X! m/ ^; M
- B# ~# ~+ J* C! k; F( g
    EVM本身是一个相对封闭的环境,不支持对网络和文件系统的直接访问,从这个层面来说已经起到一部分沙箱的功能了:
$ v  C$ G+ K/ s) K9 w) M; A
: `* ~2 Q$ z1 H: t0 d    另外,在智能合约之间互相调用时,EVM会重新分配堆栈和内存空间,在一个全新的环境中运行新合约,即使出现问题也不会破坏原有执行环境,从而为智能合约的执行提供了一个沙箱环境。
$ ]# r2 _& \, H7 R9 z+ j; y8 s5 N
    最后,每个智能合约的存储也是相互独立的,开发者可以根据需求,限制合约可以访问的存储空间,避免未授权的访问或修改。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

扯题范儿 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    1