Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
了解区块链技术的童鞋都知道以太坊的智能合约都是在沙箱(Sandbox)中运行的,那到底什么是沙箱呢?为什么要在沙箱中进行呢?下面本文就为大家一一介绍。
/ O* m5 l7 ]8 B  f* Q6 a, m. L, }- Z" O' a5 k% n& X
    1.为什么需要沙箱机制?% D2 h, l- f0 J3 Y8 d7 s

& X  q% X5 ?% Z+ H" H) L$ O( i    默认情况下,一个应用程序是可以访问机器上的所有资源的,比如CPU、内存、文件系统、网络等等。
3 h( ~: C, x" D# j: K* b4 N1 [3 `/ F$ o8 W1 g" F, \: F) @
    但是这是不安全的,如果随意操作资源,有可能破坏其他应用程序正在使用的资源,或者造成数据泄漏。为了解决这个问题,一般有下面两种解决方案:# j# y+ ?' f; M# r! }9 t2 L
5 {, f; y% j! R6 ^! r( G: K2 B
    (1)为程序分配一个限定权限的账号:利用操作系统的权限管理机制进行限制
/ m0 Z9 _+ s5 g" z& @: h8 \$ ]5 k3 d3 N0 X
    (2)为程序提供一个受限的运行环境:这就是沙箱机制1 a' R& S3 w  N3 x0 b4 k

4 B. j- a2 D2 R    2.什么是沙箱机制?, t. P& ]5 N: b  {: ?
2 L+ V* ]. a: M! p) `2 N
    如上所述,沙箱就是一个限制应用程序对系统资源的访问的运行环境。
  R" J6 h! ^) b% i. P5 l3 e
$ ~  i6 S- y( M7 C$ k- ?# P    沙箱很多情况下都是实现在虚拟机(VM)中,比如Java的虚拟机JVM、Javascript的虚拟机V8引擎、Android中的虚拟机Dalvik/ART,以及以太坊的虚拟机EVM等等。具体的实现方式各有不同,本文重点分析一下JVM和EVM的沙箱机制实现。5 s$ ~' B( v* _, m

, N' y  F/ M' e: C2 P5 T2 G    3.JVM的沙箱机制
, q: D, o# n- X+ Y7 V& s) `) V/ M! \' X0 W' G5 ~3 b4 t
    第二层:字节码校验器- t5 ]/ b# U! }) _4 @! r! P7 j: w

8 n6 s9 h  t4 ~* C( q9 k1 X# @    类字节码被加载后,需要在字节码层面进行检验,具体包括以下内容:: Q' ?$ l4 C+ D: F( s  C- p
# q0 B" p! ?. B: ]9 L9 z
    (1)变量要在使用之前进行初始化
# Y- X+ w- z% L
% V/ h5 Z( J3 t5 z) w. R    (2)方法调用与对象引用类型之前要匹配
' W/ Q$ q( A  z: j( {7 F5 I$ z  v6 a/ a, T
    (3)访问私有数据和方法的规则没有被违背- F9 O/ z8 k6 w1 A2 I" J1 i5 @
9 F! @4 \1 R4 u; U/ O  A
    (4)对本地变量的访问落在运行时堆栈内
0 a6 g* \0 e& ~/ G$ [
: b/ F3 s# r0 h4 T$ o* t    (5)运行时堆栈没有溢出通过这一机制,可以确保字节码符合Java语言规范,避免访问无效访问或越界访问。+ t: A  a* r" w! S( ]

1 i* J, c; B: _2 @; X4 E    第二层:字节码校验器
7 X: Z% g8 |0 W7 a0 j" U* `! s. }
    类字节码被加载后,需要在字节码层面进行检验,具体包括以下内容:$ P. P  O$ ?( D2 C1 I
  Q' B1 K( b6 [0 B! r
    (1)变量要在使用之前进行初始化$ j& z( l) x4 O
# l; Q; Y) S4 F5 F4 u0 R  V- r% w' O2 P
    (2)方法调用与对象引用类型之前要匹配  @. F  m* z" S8 X& \
1 a" Z  `1 @8 s7 o' O+ t
    (3)访问私有数据和方法的规则没有被违背
( v9 o8 c/ Q, D1 m: ]# x
8 D! b, t" T, a    (4)对本地变量的访问落在运行时堆栈内
8 x9 [0 y8 L* H, [+ D. l' E% J7 h, z  S, f) {8 A# l7 @
    (5)运行时堆栈没有溢出通过这一机制,可以确保字节码符合Java语言规范,避免访问无效访问或越界访问。+ G, |! V8 z( J4 c- {1 Q! F
- r# Y2 p) g  {& G3 G
    4.EVM的沙箱机制
* m- R- s7 W+ o
, a5 c- T, U# j% G/ O* q; s    EVM本身是一个相对封闭的环境,不支持对网络和文件系统的直接访问,从这个层面来说已经起到一部分沙箱的功能了:
+ A# r0 o: P- b4 u8 G, V0 D- O! ~0 y
4 |3 J" `! r+ y' k4 X0 Y    另外,在智能合约之间互相调用时,EVM会重新分配堆栈和内存空间,在一个全新的环境中运行新合约,即使出现问题也不会破坏原有执行环境,从而为智能合约的执行提供了一个沙箱环境。
: D, w" Z) `1 K7 h
) k1 t! h) l! L    最后,每个智能合约的存储也是相互独立的,开发者可以根据需求,限制合约可以访问的存储空间,避免未授权的访问或修改。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

扯题范儿 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    1