Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
了解区块链技术的童鞋都知道以太坊的智能合约都是在沙箱(Sandbox)中运行的,那到底什么是沙箱呢?为什么要在沙箱中进行呢?下面本文就为大家一一介绍。
6 M8 Z, |" b, V
" U% Z/ x* r  L& @8 r! B    1.为什么需要沙箱机制?8 u9 K8 S$ |, Q+ h& ^' v& a( a+ P2 n3 V
3 B. k" Q$ \" J2 n3 Q) t" ]! d! Q
    默认情况下,一个应用程序是可以访问机器上的所有资源的,比如CPU、内存、文件系统、网络等等。
; x$ p" T2 R5 Z8 c$ q
% `6 @4 `1 T5 Y' M0 e& V: L    但是这是不安全的,如果随意操作资源,有可能破坏其他应用程序正在使用的资源,或者造成数据泄漏。为了解决这个问题,一般有下面两种解决方案:
& ^/ O; k8 S7 b! P7 i
8 i5 N& w8 b$ N: Z* _% u    (1)为程序分配一个限定权限的账号:利用操作系统的权限管理机制进行限制; }% }* _' g# D1 R: p

- v+ L% q$ r, [* ~4 @1 n" A' [3 |    (2)为程序提供一个受限的运行环境:这就是沙箱机制
. \$ V; W0 ]: n" D( w$ e$ N
1 B3 a6 g- Z/ m0 Z9 A- y' R2 ^9 ^* q    2.什么是沙箱机制?( E4 @) Q5 B1 x' `6 J0 k9 p
, l$ J" j: y  U$ O* x* O. O/ z
    如上所述,沙箱就是一个限制应用程序对系统资源的访问的运行环境。
/ @! g+ S, l0 u
$ W6 N" B& L' g7 k% O+ d% w* P    沙箱很多情况下都是实现在虚拟机(VM)中,比如Java的虚拟机JVM、Javascript的虚拟机V8引擎、Android中的虚拟机Dalvik/ART,以及以太坊的虚拟机EVM等等。具体的实现方式各有不同,本文重点分析一下JVM和EVM的沙箱机制实现。9 W; M8 u. ?$ v# {& O/ t  ]- ^

0 d2 w3 |: A+ C* r    3.JVM的沙箱机制
5 u, u0 m2 r0 y
7 y+ N! |$ l" ^1 {7 }4 k    第二层:字节码校验器
" g; f5 c. k, m- W
0 m; g8 o6 A- W* m1 t% S    类字节码被加载后,需要在字节码层面进行检验,具体包括以下内容:" d  l$ j/ R/ I/ T1 d+ U, T
6 {9 a( k  ^1 S' G' w
    (1)变量要在使用之前进行初始化
/ o0 p. D& U* f* w( u
$ H. c& Q7 b3 y/ r1 p3 Y    (2)方法调用与对象引用类型之前要匹配
  Y9 G$ r3 J0 C, |  ?& G' O. ]: [* i5 L
    (3)访问私有数据和方法的规则没有被违背2 T7 d  Y* Q8 ?4 y2 H% W( ]

' ]) g+ ?, s3 n    (4)对本地变量的访问落在运行时堆栈内1 @" j. t& L0 [, g* A  `3 [
' l3 J$ ]. ~6 j+ b9 U* n) X
    (5)运行时堆栈没有溢出通过这一机制,可以确保字节码符合Java语言规范,避免访问无效访问或越界访问。
9 Z  g  m) h  A7 \( X7 g7 a0 Q1 d3 A$ G+ Y- }5 |1 U' t
    第二层:字节码校验器8 q  H# ?! O- E: O! ?6 ]* C
' q. E) t# J! }
    类字节码被加载后,需要在字节码层面进行检验,具体包括以下内容:7 o0 |( u6 V2 r  g2 |6 H; L, S
" |; a! z3 g) S# G. }& M9 k# H% Z
    (1)变量要在使用之前进行初始化: f% g6 n, k0 }* d3 L  k* D

- a$ B0 \8 t  G    (2)方法调用与对象引用类型之前要匹配- m6 m+ j2 r+ I9 Z0 q! f

! d1 D) [; l  B% }    (3)访问私有数据和方法的规则没有被违背
; x4 M5 ^; k2 ~+ J8 v/ l: Y
& E' x$ C( D9 c+ V    (4)对本地变量的访问落在运行时堆栈内( g% Q+ P0 w/ S$ K9 F
7 `4 \2 `$ ^7 |/ a7 ]' G6 x
    (5)运行时堆栈没有溢出通过这一机制,可以确保字节码符合Java语言规范,避免访问无效访问或越界访问。
+ D: e! N, S( M; O3 _$ t1 d& d, N7 P
    4.EVM的沙箱机制
0 r0 o' c4 d3 U# g6 c: L2 e. @; ?4 K' s3 |+ Q- [0 y' j
    EVM本身是一个相对封闭的环境,不支持对网络和文件系统的直接访问,从这个层面来说已经起到一部分沙箱的功能了:% J, f) ?: U& [  j

# {! y' P7 r6 r6 S& f    另外,在智能合约之间互相调用时,EVM会重新分配堆栈和内存空间,在一个全新的环境中运行新合约,即使出现问题也不会破坏原有执行环境,从而为智能合约的执行提供了一个沙箱环境。  m- c9 |$ Q! v8 P# _  \" K

8 L* t4 l/ B# K" v; n. Q( o- J" [    最后,每个智能合约的存储也是相互独立的,开发者可以根据需求,限制合约可以访问的存储空间,避免未授权的访问或修改。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

扯题范儿 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    1