Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
了解区块链技术的童鞋都知道以太坊的智能合约都是在沙箱(Sandbox)中运行的,那到底什么是沙箱呢?为什么要在沙箱中进行呢?下面本文就为大家一一介绍。+ h5 O" t- s8 @9 c: i8 M

( E9 o! Y3 R  R5 p( X7 t- k9 n    1.为什么需要沙箱机制?
( Z8 Y0 M# U# n! t
2 O* f" {8 t/ Y; ~( U+ T    默认情况下,一个应用程序是可以访问机器上的所有资源的,比如CPU、内存、文件系统、网络等等。
9 i3 J* M% _. K1 W, t$ t+ S' c$ P6 W: K8 E6 p4 t, Y9 M9 y  c4 i
    但是这是不安全的,如果随意操作资源,有可能破坏其他应用程序正在使用的资源,或者造成数据泄漏。为了解决这个问题,一般有下面两种解决方案:- l2 d  M4 L4 a* M. }

( l9 o$ [! N% O( K$ m5 a7 _% f    (1)为程序分配一个限定权限的账号:利用操作系统的权限管理机制进行限制/ N/ L( O8 N; m: \; x4 f- u# R- K( N! V/ m

; c& ]9 g: }; k1 J    (2)为程序提供一个受限的运行环境:这就是沙箱机制
( s2 E) r, S% E$ h6 N- o8 b' A5 @) Z9 u3 Q# I
    2.什么是沙箱机制?
8 h6 |, O/ r8 f0 f7 \3 R  R" \) b4 @$ T- s0 \0 w  o. p
    如上所述,沙箱就是一个限制应用程序对系统资源的访问的运行环境。0 s5 v  @+ E3 g3 ?0 [0 ]
. }5 ]3 w* ]0 p5 ~: t
    沙箱很多情况下都是实现在虚拟机(VM)中,比如Java的虚拟机JVM、Javascript的虚拟机V8引擎、Android中的虚拟机Dalvik/ART,以及以太坊的虚拟机EVM等等。具体的实现方式各有不同,本文重点分析一下JVM和EVM的沙箱机制实现。8 v; ~( X7 Q3 t' h8 S! I, `

: n4 [6 j4 V6 n1 E; _    3.JVM的沙箱机制
& h3 b& J& k0 u4 f
( W, U. _; @5 M  ~; Q    第二层:字节码校验器) }! @/ k+ S$ D3 D
6 e( Z6 `& S* `* W% b; H5 t+ d4 z
    类字节码被加载后,需要在字节码层面进行检验,具体包括以下内容:
, |, G( Z0 `- q5 V3 C6 B! t; Q0 Y
    (1)变量要在使用之前进行初始化
4 H+ q5 K& T' G" D
. Z2 G1 D. }) {3 K! B" j& w; t/ F% w    (2)方法调用与对象引用类型之前要匹配5 d- a$ c5 _% Z5 t
- a  c5 v' S' Y% |2 i
    (3)访问私有数据和方法的规则没有被违背
; V& |. [9 D, j8 [4 R9 \
1 ]* |  |5 }; E$ c0 H    (4)对本地变量的访问落在运行时堆栈内: E' _( [" p7 s# m/ d8 J! ]

! |7 m- d" E$ n9 G: A% f    (5)运行时堆栈没有溢出通过这一机制,可以确保字节码符合Java语言规范,避免访问无效访问或越界访问。
& s. [3 e* P" _: b
; c: b+ G9 f/ ^    第二层:字节码校验器
8 ~. V4 t, N# ]+ R' v
, n8 \+ [! k) |; l3 T    类字节码被加载后,需要在字节码层面进行检验,具体包括以下内容:( T5 u  ?* H  J2 A+ i: U# P, ?, }% H
) @8 O5 Y% p; O* b: `: H2 ~
    (1)变量要在使用之前进行初始化% {) \9 ^5 K9 B9 e. s* d

  p; [( d; U1 G7 O) i- c    (2)方法调用与对象引用类型之前要匹配  T- M4 u8 w+ t( e

0 C) W4 a7 l4 J    (3)访问私有数据和方法的规则没有被违背; c/ D  d3 }+ S% M3 v

" V' l$ W1 I) Q" K+ t* J    (4)对本地变量的访问落在运行时堆栈内& k$ e' C4 n. {- r% `' x) v
$ r7 W9 B" a$ n+ E
    (5)运行时堆栈没有溢出通过这一机制,可以确保字节码符合Java语言规范,避免访问无效访问或越界访问。$ V* v+ c% f# t' G* O2 Y: ?
$ G( p! j% l& e9 H+ {2 J6 i
    4.EVM的沙箱机制
, I: q5 N; Z, Q+ Q( v/ x2 U3 R
    EVM本身是一个相对封闭的环境,不支持对网络和文件系统的直接访问,从这个层面来说已经起到一部分沙箱的功能了:5 G. k+ x2 c: {3 I# n- f

! o) |- A  U0 ]9 S/ J$ m    另外,在智能合约之间互相调用时,EVM会重新分配堆栈和内存空间,在一个全新的环境中运行新合约,即使出现问题也不会破坏原有执行环境,从而为智能合约的执行提供了一个沙箱环境。$ U1 T( N- E) ^2 |2 a2 {, S  Z

3 T. S; G: B. \) G0 s. p- m9 P    最后,每个智能合约的存储也是相互独立的,开发者可以根据需求,限制合约可以访问的存储空间,避免未授权的访问或修改。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

扯题范儿 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    1