Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

浅析智能合约中的沙箱(Sandbox)机制

扯题范儿
118 0 0
了解区块链技术的童鞋都知道以太坊的智能合约都是在沙箱(Sandbox)中运行的,那到底什么是沙箱呢?为什么要在沙箱中进行呢?下面本文就为大家一一介绍。
, }; D- D4 i  ?9 i. ]$ r' W  g0 s: {
    1.为什么需要沙箱机制?. h2 y* L1 q5 g3 n4 F# b* C
% D. J# h# m/ |9 m0 x4 v- Y# J
    默认情况下,一个应用程序是可以访问机器上的所有资源的,比如CPU、内存、文件系统、网络等等。
# P7 W, B% s2 c8 f/ D8 G9 x# `$ f( j. P8 \) b  L
    但是这是不安全的,如果随意操作资源,有可能破坏其他应用程序正在使用的资源,或者造成数据泄漏。为了解决这个问题,一般有下面两种解决方案:  C! A- i! J/ w/ n& S* L. e' f9 b8 a; Q

! O9 R- J# `4 H* F    (1)为程序分配一个限定权限的账号:利用操作系统的权限管理机制进行限制( ?2 D- b" C! r, g- _
0 A/ z$ }) u, I) m
    (2)为程序提供一个受限的运行环境:这就是沙箱机制  a; B2 p: U- ?1 r, [/ w+ T
. N9 T9 y; X! m, K6 k  i
    2.什么是沙箱机制?
0 x9 x- I1 O. A/ I" J2 I7 G! D; h1 Y
    如上所述,沙箱就是一个限制应用程序对系统资源的访问的运行环境。9 u* o: d3 L& \0 ?9 J
' S. c0 K( {5 S, E8 @( Y0 g0 J
    沙箱很多情况下都是实现在虚拟机(VM)中,比如Java的虚拟机JVM、Javascript的虚拟机V8引擎、Android中的虚拟机Dalvik/ART,以及以太坊的虚拟机EVM等等。具体的实现方式各有不同,本文重点分析一下JVM和EVM的沙箱机制实现。
# N1 V* A: A8 S
2 y5 @" h7 t# D1 _  p    3.JVM的沙箱机制6 l: f3 J" ^; R- M7 o1 e
: E! g5 K/ O4 R9 g% M2 K
    第二层:字节码校验器( V0 l7 x6 L* k: J' `# P1 m$ \/ E5 m( v
/ h" x/ Z4 i" d* b; S- M7 u7 c  i
    类字节码被加载后,需要在字节码层面进行检验,具体包括以下内容:5 ?2 x  _- V, I- r

4 K0 V2 ]: Y5 X$ z+ H; D    (1)变量要在使用之前进行初始化) Q* B: J$ Z2 t; R7 e4 M
  j$ C- G! d; ?5 ?" j% D  H/ I
    (2)方法调用与对象引用类型之前要匹配
- S* p1 h9 l( _2 ~. V9 x  Y4 T" o& d  I' ^
    (3)访问私有数据和方法的规则没有被违背4 J/ h3 y( D" v

1 E& h. J; f( v1 r+ u& i    (4)对本地变量的访问落在运行时堆栈内5 k) i, E1 }* m1 d" O$ f1 v

7 H  r$ X0 q# p3 ]0 e- N1 G    (5)运行时堆栈没有溢出通过这一机制,可以确保字节码符合Java语言规范,避免访问无效访问或越界访问。$ o4 j/ Z1 ~  c9 D' B# ?
3 r3 f3 T- B  v, W: n
    第二层:字节码校验器
# a1 T4 R, B7 }) c+ N0 H. W8 N" l, F# ~+ ~
    类字节码被加载后,需要在字节码层面进行检验,具体包括以下内容:, X( U9 b# a" H% n9 p

# j2 G/ \* m5 w    (1)变量要在使用之前进行初始化
4 d5 f) N0 ~( p4 e5 v/ X* U; ~& O2 ]3 P) G/ O1 a3 g) _2 s0 c
    (2)方法调用与对象引用类型之前要匹配
; E0 K, f' |9 `3 Q( S" S+ t; r: M) _" u8 H8 Q* [) N" u
    (3)访问私有数据和方法的规则没有被违背+ p7 {4 t8 F+ i% k  s

0 j) X) c) e8 y/ ?% u    (4)对本地变量的访问落在运行时堆栈内
3 v( \1 \7 s) s( d4 c! T5 o- h) B, R
# Y: c: _( f' H% f" {% m! W2 [    (5)运行时堆栈没有溢出通过这一机制,可以确保字节码符合Java语言规范,避免访问无效访问或越界访问。& _4 i+ A8 x( n8 i

& s0 d/ E5 C6 f4 n& b    4.EVM的沙箱机制$ ]$ V6 T/ G: ^9 t8 s4 b& D

, z1 R  B, g8 f% q) ?( D    EVM本身是一个相对封闭的环境,不支持对网络和文件系统的直接访问,从这个层面来说已经起到一部分沙箱的功能了:
/ D* v; b' J' R7 X6 c
; e3 t4 A. P. V2 U5 F    另外,在智能合约之间互相调用时,EVM会重新分配堆栈和内存空间,在一个全新的环境中运行新合约,即使出现问题也不会破坏原有执行环境,从而为智能合约的执行提供了一个沙箱环境。/ @5 ^6 U5 |3 V6 B- q

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

本版积分规则

成为第一个吐槽的人

扯题范儿 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    1