Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
了解区块链技术的童鞋都知道以太坊的智能合约都是在沙箱(Sandbox)中运行的,那到底什么是沙箱呢?为什么要在沙箱中进行呢?下面本文就为大家一一介绍。
9 j- M4 X5 b8 y2 N" s* p# _. G$ r+ Z; w: V7 S( f
    1.为什么需要沙箱机制?
& _& }0 N2 e9 K. h8 ^- y0 M6 z: G& j, U+ C: K% _
    默认情况下,一个应用程序是可以访问机器上的所有资源的,比如CPU、内存、文件系统、网络等等。
& J* g4 B; `" l- p+ C9 J6 W" A) q5 l5 r( m3 _+ Y0 _* d* L
    但是这是不安全的,如果随意操作资源,有可能破坏其他应用程序正在使用的资源,或者造成数据泄漏。为了解决这个问题,一般有下面两种解决方案:
9 T* i! {+ u: G& _8 {
! O1 M. ~; V9 `+ h' g" P    (1)为程序分配一个限定权限的账号:利用操作系统的权限管理机制进行限制
# m! d  j! h9 F: s* T3 C7 \6 ^: b: U7 M3 L6 D4 }
    (2)为程序提供一个受限的运行环境:这就是沙箱机制& a1 O3 P  y2 z% h+ `) ^4 ^
' H% O0 m" c8 I. p% i/ ~
    2.什么是沙箱机制?
0 t+ X8 N! r% ?0 Y9 a: u
' P* n# j$ d" W  W1 c( x    如上所述,沙箱就是一个限制应用程序对系统资源的访问的运行环境。$ E4 z5 a5 N1 T4 Y

6 P* y' ^' c& m. b. s2 R8 z    沙箱很多情况下都是实现在虚拟机(VM)中,比如Java的虚拟机JVM、Javascript的虚拟机V8引擎、Android中的虚拟机Dalvik/ART,以及以太坊的虚拟机EVM等等。具体的实现方式各有不同,本文重点分析一下JVM和EVM的沙箱机制实现。: }, k7 u" @' M* K  W

. ~) J1 J7 |0 ^8 A& M    3.JVM的沙箱机制8 l! q+ [5 ~( b% ^

1 \* N- k! S3 f2 v" E8 i    第二层:字节码校验器. C7 I% m" b9 [
( q3 j, J. v7 q# t5 S: V
    类字节码被加载后,需要在字节码层面进行检验,具体包括以下内容:
: j* I" L' O/ b! [
: \( f6 b; V8 q" x0 F    (1)变量要在使用之前进行初始化
. e4 N; X9 l" p  W" L  D& t% \) q; J2 p
    (2)方法调用与对象引用类型之前要匹配
& s$ I+ Q0 ~% w- H  G
8 M8 \% E8 \/ z( L" [$ o    (3)访问私有数据和方法的规则没有被违背6 C/ E5 ?7 x/ y3 M' \* I4 p2 A
4 B: h5 H. S7 v& B/ F  j$ w
    (4)对本地变量的访问落在运行时堆栈内' P! E: Z1 J' t) m/ J* L& r( @

: B  U1 G! x. j4 D, H% Z3 `- Q# a0 J    (5)运行时堆栈没有溢出通过这一机制,可以确保字节码符合Java语言规范,避免访问无效访问或越界访问。8 x8 {$ ~" h- o5 |5 Z

7 Z) j0 i! o7 c2 L( H- j    第二层:字节码校验器4 \0 r: ~" I3 y: x+ C" i
8 @+ \8 R, X; N: v3 ~; J/ O
    类字节码被加载后,需要在字节码层面进行检验,具体包括以下内容:# w1 D7 G8 X  G7 N

$ o4 {0 S) v+ H7 j7 ^! X- N    (1)变量要在使用之前进行初始化5 _9 Y, @6 X6 P* v! p

$ e+ b  h" \! P+ w( D    (2)方法调用与对象引用类型之前要匹配
0 }: }, B+ j9 \- f6 o" S  o! `1 Q1 \* y0 ^8 k2 r
    (3)访问私有数据和方法的规则没有被违背
+ d+ x( I$ n) B1 m4 o% [( T# i4 z* ^5 o
    (4)对本地变量的访问落在运行时堆栈内
$ J! h0 D  x) {- I# j) Z3 T& a! O  d- G% @& Z) N1 j$ G6 Y/ {
    (5)运行时堆栈没有溢出通过这一机制,可以确保字节码符合Java语言规范,避免访问无效访问或越界访问。, t5 }' M( R) i

5 S" e3 ~( p. l    4.EVM的沙箱机制9 t8 B1 \% r7 X7 S6 M

8 M6 K" U, \$ `  t: o8 l6 J. X    EVM本身是一个相对封闭的环境,不支持对网络和文件系统的直接访问,从这个层面来说已经起到一部分沙箱的功能了:$ ?" t! d- g$ n7 W; N/ R2 I

5 Q- W0 t& t3 P- v$ q$ M    另外,在智能合约之间互相调用时,EVM会重新分配堆栈和内存空间,在一个全新的环境中运行新合约,即使出现问题也不会破坏原有执行环境,从而为智能合约的执行提供了一个沙箱环境。" S. s3 @, T, R" G8 e! b6 r' s9 m
- i5 M  L5 D. [+ k* D; J; F
    最后,每个智能合约的存储也是相互独立的,开发者可以根据需求,限制合约可以访问的存储空间,避免未授权的访问或修改。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

扯题范儿 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    1