Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
了解区块链技术的童鞋都知道以太坊的智能合约都是在沙箱(Sandbox)中运行的,那到底什么是沙箱呢?为什么要在沙箱中进行呢?下面本文就为大家一一介绍。
, C. W" T" c( g, T7 y; X8 |5 [; p
+ b4 V% p/ t. t6 j8 M    1.为什么需要沙箱机制?
; m" o; v9 f7 r4 C: c# Z* g( G
: a; E: `6 r2 F1 H0 {    默认情况下,一个应用程序是可以访问机器上的所有资源的,比如CPU、内存、文件系统、网络等等。7 P8 J# G0 S- {

. ^' T3 p9 o- H: `- }9 t0 s    但是这是不安全的,如果随意操作资源,有可能破坏其他应用程序正在使用的资源,或者造成数据泄漏。为了解决这个问题,一般有下面两种解决方案:
! S' Q7 [; L5 }
3 f$ D& o/ q5 P. [    (1)为程序分配一个限定权限的账号:利用操作系统的权限管理机制进行限制
- L* a/ Z) N$ I$ t" ^( i! y8 n2 \
1 N* [$ `# \3 y; T! B    (2)为程序提供一个受限的运行环境:这就是沙箱机制) r3 P9 |5 _! Y( Z6 S5 o5 ^$ Z6 w

6 v& l; C; b+ r0 M) |" N3 v8 q    2.什么是沙箱机制?4 G1 N, H) w4 U9 j5 ?+ k5 v! O) h

; E* }% X, ?/ H$ U# c* b    如上所述,沙箱就是一个限制应用程序对系统资源的访问的运行环境。
6 _) |8 i' p6 W7 f8 V2 W2 }7 B* S: o: e; n1 A# }
    沙箱很多情况下都是实现在虚拟机(VM)中,比如Java的虚拟机JVM、Javascript的虚拟机V8引擎、Android中的虚拟机Dalvik/ART,以及以太坊的虚拟机EVM等等。具体的实现方式各有不同,本文重点分析一下JVM和EVM的沙箱机制实现。
3 M9 O+ o/ T, x0 C" J( B8 p0 Z/ [6 h5 _1 k+ b$ k
    3.JVM的沙箱机制
1 c5 z; H! Z, W1 I( F. b. c. c. A6 i& E# d2 z
    第二层:字节码校验器1 ^4 b0 X0 C! f0 a1 l8 v7 H

1 ]! z- n$ z! H4 D    类字节码被加载后,需要在字节码层面进行检验,具体包括以下内容:1 B/ j8 f0 F( e4 z2 R) e# I
& j$ t) V. U/ x4 T! v
    (1)变量要在使用之前进行初始化
- y  m3 e/ N% @- v2 K+ O1 a$ T+ y+ M, T/ I% i+ H4 P- t
    (2)方法调用与对象引用类型之前要匹配; b2 w- }- T  l+ w! K5 q4 ]3 r- m

( ?: k& _% ~% R6 i" z    (3)访问私有数据和方法的规则没有被违背
# C- Q5 X" G9 e: B; _. i4 y* M5 k: u1 P' [7 u3 p
    (4)对本地变量的访问落在运行时堆栈内# j% a6 S; a7 Z/ x
5 B8 w0 y0 z/ w! _& Y2 J
    (5)运行时堆栈没有溢出通过这一机制,可以确保字节码符合Java语言规范,避免访问无效访问或越界访问。
. z; t1 I$ X2 f' e; [8 ?
% U; c) q7 c7 Z6 L  O    第二层:字节码校验器; |. c+ g* E& I) I
  q% k. P( a* L) K; H# E
    类字节码被加载后,需要在字节码层面进行检验,具体包括以下内容:
2 _$ _- U" E3 w) [1 G
! j( q1 L$ ~9 S8 T    (1)变量要在使用之前进行初始化
' i( y1 b# ~/ U. {6 h) ^
) c4 n0 S+ j7 o$ q    (2)方法调用与对象引用类型之前要匹配/ g$ {: r0 n" A9 Y3 p% L6 t

/ _: ]6 [5 R4 ]3 t7 e. E    (3)访问私有数据和方法的规则没有被违背+ s9 p6 [3 o6 M; _/ m! I/ o! Y

0 Q& c& k' R. ?! t    (4)对本地变量的访问落在运行时堆栈内6 _, z$ k  Y9 p! u$ M- X
( t. E  A) P# V/ y7 c5 |7 G" m) o
    (5)运行时堆栈没有溢出通过这一机制,可以确保字节码符合Java语言规范,避免访问无效访问或越界访问。3 S5 ]; J6 u+ ]2 L
3 ^4 ]3 |, S7 b$ P3 ~
    4.EVM的沙箱机制$ N4 U: v, U+ U# V( V0 G' ~

. x$ H$ w& g( r. m$ m, [    EVM本身是一个相对封闭的环境,不支持对网络和文件系统的直接访问,从这个层面来说已经起到一部分沙箱的功能了:
# O& D% s+ z2 ]0 {. A. ]: b2 |- s* }' n" ?! s. O$ u
    另外,在智能合约之间互相调用时,EVM会重新分配堆栈和内存空间,在一个全新的环境中运行新合约,即使出现问题也不会破坏原有执行环境,从而为智能合约的执行提供了一个沙箱环境。
; O/ W0 N7 C& W6 a2 A0 W
% K% ~7 Y  i/ b* b! |    最后,每个智能合约的存储也是相互独立的,开发者可以根据需求,限制合约可以访问的存储空间,避免未授权的访问或修改。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

扯题范儿 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    1