Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
了解区块链技术的童鞋都知道以太坊的智能合约都是在沙箱(Sandbox)中运行的,那到底什么是沙箱呢?为什么要在沙箱中进行呢?下面本文就为大家一一介绍。
& a5 y' }& P3 o( \# P9 e4 T+ M
" d. T9 u1 V5 B    1.为什么需要沙箱机制?
- n; f/ _( s) x( n
4 ^/ z( S7 a0 G" x6 W0 \2 w7 K* c    默认情况下,一个应用程序是可以访问机器上的所有资源的,比如CPU、内存、文件系统、网络等等。; T0 Z  b* j/ D. b
, i& C3 _, H. `5 E# T5 o
    但是这是不安全的,如果随意操作资源,有可能破坏其他应用程序正在使用的资源,或者造成数据泄漏。为了解决这个问题,一般有下面两种解决方案:
5 K) B: |" \0 |# k6 ~; s1 ]$ z; n/ V* e9 W& `; \
    (1)为程序分配一个限定权限的账号:利用操作系统的权限管理机制进行限制
6 G! o+ F* N, j4 V- J3 F. k: E; J7 c3 b* H7 \5 o; j
    (2)为程序提供一个受限的运行环境:这就是沙箱机制
; Q, `' E$ j. O
# k6 A- ?- Z5 q; w: P% j( \    2.什么是沙箱机制?
% X1 N+ R( v& N7 p" _6 L" R5 d1 }9 y  F
    如上所述,沙箱就是一个限制应用程序对系统资源的访问的运行环境。
  S; f& N5 Z1 l* D0 \* f
# y2 d1 G' v0 F$ z+ [    沙箱很多情况下都是实现在虚拟机(VM)中,比如Java的虚拟机JVM、Javascript的虚拟机V8引擎、Android中的虚拟机Dalvik/ART,以及以太坊的虚拟机EVM等等。具体的实现方式各有不同,本文重点分析一下JVM和EVM的沙箱机制实现。- Q/ u! o1 N( n

+ ]0 F6 r8 V9 ^+ A" H" k# T/ f5 M    3.JVM的沙箱机制
% A: p2 D' E3 p( r' y
: g1 D% f8 `1 x; z# m& {$ B    第二层:字节码校验器: \9 j7 S1 g: d7 y3 w
! P# C+ K, E4 _- F: F
    类字节码被加载后,需要在字节码层面进行检验,具体包括以下内容:
- f; f  I# s1 F; m/ |' a; c2 b, m: `! ]$ F- ^
    (1)变量要在使用之前进行初始化
' v% V% @* ?8 M* L/ z! [) X% S' r9 x  ]6 r; P  s$ _
    (2)方法调用与对象引用类型之前要匹配' Q/ |  V- W; R4 {! }: P
0 R7 s/ d5 ^5 r- U( u
    (3)访问私有数据和方法的规则没有被违背2 j  z, |% f/ J6 @8 n: L3 a

  [7 Q! E% ]4 n    (4)对本地变量的访问落在运行时堆栈内# _  |! ~/ U$ `" X
/ n; F( Q1 v, N6 A, k4 h
    (5)运行时堆栈没有溢出通过这一机制,可以确保字节码符合Java语言规范,避免访问无效访问或越界访问。
) d. e6 q! |4 ]) k) v& g- _) L" s+ R
: O7 ^8 @% e9 E    第二层:字节码校验器
7 p; L* W: N  l+ _0 Q: E* c5 p5 N/ v6 C% E. x4 S4 E; A
    类字节码被加载后,需要在字节码层面进行检验,具体包括以下内容:
5 _+ {+ K) H$ [8 @
/ h5 K9 p: U5 `+ b    (1)变量要在使用之前进行初始化+ ?& O8 D5 b5 i0 G) Q3 Q1 I

' x; L7 ~1 x5 f  k* s    (2)方法调用与对象引用类型之前要匹配
8 \; {+ ~' E. O! T5 S9 r
* g0 P% B# w8 @) {    (3)访问私有数据和方法的规则没有被违背
7 l0 Y; c$ P3 c$ A# ]4 W) W
& t' P8 e% {2 m7 V" b    (4)对本地变量的访问落在运行时堆栈内
6 l( m  B& v) ^
3 {& x8 I: j3 N9 n& P    (5)运行时堆栈没有溢出通过这一机制,可以确保字节码符合Java语言规范,避免访问无效访问或越界访问。
0 O( I. `4 h8 r6 p) ?1 _8 R2 T! C0 H  @" |) d6 B! f2 Z
    4.EVM的沙箱机制' g# A2 d5 c' l4 G( w$ @7 V  E
' k# g' J7 m9 R
    EVM本身是一个相对封闭的环境,不支持对网络和文件系统的直接访问,从这个层面来说已经起到一部分沙箱的功能了:% P8 C: q% Y  F4 i

& i6 o3 D6 c: I$ \/ X- R    另外,在智能合约之间互相调用时,EVM会重新分配堆栈和内存空间,在一个全新的环境中运行新合约,即使出现问题也不会破坏原有执行环境,从而为智能合约的执行提供了一个沙箱环境。8 h0 P- W5 t4 ?+ Z5 X/ @

$ D  V9 Y0 K8 F6 I7 n" ]  h3 w, f! a    最后,每个智能合约的存储也是相互独立的,开发者可以根据需求,限制合约可以访问的存储空间,避免未授权的访问或修改。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

扯题范儿 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    1