Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

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

扯题范儿
109 0 0
了解区块链技术的童鞋都知道以太坊的智能合约都是在沙箱(Sandbox)中运行的,那到底什么是沙箱呢?为什么要在沙箱中进行呢?下面本文就为大家一一介绍。; g: U4 A+ H9 z  _. d

1 t- U% V6 Z% e  s    1.为什么需要沙箱机制?1 y1 ]% u' V$ N! r+ l4 M1 U

5 G5 V, L/ Q% }/ @! m. v5 h$ c    默认情况下,一个应用程序是可以访问机器上的所有资源的,比如CPU、内存、文件系统、网络等等。
0 ]+ s! J) F. Y) Z5 P* M# a: N7 d  s/ H" F2 _/ Y3 Y
    但是这是不安全的,如果随意操作资源,有可能破坏其他应用程序正在使用的资源,或者造成数据泄漏。为了解决这个问题,一般有下面两种解决方案:. b# _, C. v' _2 H4 A6 }+ d5 J
8 O: b$ x9 h2 I7 R
    (1)为程序分配一个限定权限的账号:利用操作系统的权限管理机制进行限制3 t8 a) Q% M+ N, b/ X

: p/ J2 x2 h  ~' o# n    (2)为程序提供一个受限的运行环境:这就是沙箱机制
- s( R, Y+ z. N" v1 K9 U- X& E
' {# T, g( S$ R1 F    2.什么是沙箱机制?
, l  d2 g/ I0 w* G: I" j
( E+ _( e4 H/ u8 `4 V    如上所述,沙箱就是一个限制应用程序对系统资源的访问的运行环境。
4 E0 V9 w8 o! P
1 p0 q( z- a) x* q    沙箱很多情况下都是实现在虚拟机(VM)中,比如Java的虚拟机JVM、Javascript的虚拟机V8引擎、Android中的虚拟机Dalvik/ART,以及以太坊的虚拟机EVM等等。具体的实现方式各有不同,本文重点分析一下JVM和EVM的沙箱机制实现。
2 O9 S$ a. M7 R$ n5 ?" K6 `# @
6 b3 I/ j# E* Z( K) L+ P    3.JVM的沙箱机制
3 o# R8 t- J* S4 ^0 |2 }: c$ ^- _8 Z2 L
    第二层:字节码校验器6 z( ]+ `+ v# n4 {. c

) r# R- U) Z  w$ g2 f8 r0 r    类字节码被加载后,需要在字节码层面进行检验,具体包括以下内容:$ w# r4 V# J1 R2 C0 M; s9 \( j
! R7 v5 X+ H# T5 p; e
    (1)变量要在使用之前进行初始化* ^6 n2 g" C+ J2 Z  c, y( @0 Q* u& @

' U7 X) |# |; u2 D8 M    (2)方法调用与对象引用类型之前要匹配
% C3 f! Z& V6 Q, `1 F% c7 I! s3 z/ p0 \: p- X& e
    (3)访问私有数据和方法的规则没有被违背
! I( M2 M$ h1 Y+ B. ^3 L; P/ g4 A- `$ W- x# k' D4 w* ?
    (4)对本地变量的访问落在运行时堆栈内
0 M' H, ~8 b, c: `) V
. @- F1 D( T  y+ f8 @/ Y! W, a    (5)运行时堆栈没有溢出通过这一机制,可以确保字节码符合Java语言规范,避免访问无效访问或越界访问。
8 V: I8 _- D# ?$ a1 R! y. a
  f! e* F' B  H" t( J2 c0 |    第二层:字节码校验器6 k* q( o# b" o5 i. \
  Z% L$ j: h' l1 ~5 i
    类字节码被加载后,需要在字节码层面进行检验,具体包括以下内容:6 Y  e- Q8 G$ z

5 z3 [& L" Q) Y1 }0 o$ F- e    (1)变量要在使用之前进行初始化
' z/ @# Y" a( W3 U+ W* F- \: N* a8 n# G5 ~9 Q! u# e, R
    (2)方法调用与对象引用类型之前要匹配
9 W$ L" }% B7 Z3 z9 Z; B$ j* }) W* v# c3 Y
    (3)访问私有数据和方法的规则没有被违背
1 d# Q$ ^+ [4 L$ {% n
) A- e1 k2 L+ K- p8 f6 ~    (4)对本地变量的访问落在运行时堆栈内. ?7 A' T3 f5 _3 X. s5 M9 ?
3 G. i& z- u1 z- D8 r; h5 [
    (5)运行时堆栈没有溢出通过这一机制,可以确保字节码符合Java语言规范,避免访问无效访问或越界访问。1 t' X) t' _* W6 _* h9 y9 T

2 Q: J  ?: }) a5 W3 j9 H4 G- @    4.EVM的沙箱机制2 @/ b- A" L- t. z: o8 F$ P

; f4 ?/ P5 @/ [0 s7 x9 f9 n    EVM本身是一个相对封闭的环境,不支持对网络和文件系统的直接访问,从这个层面来说已经起到一部分沙箱的功能了:; B7 O, b6 `* ~! I9 j3 v* X

7 q. Q. C5 I( S" d8 x    另外,在智能合约之间互相调用时,EVM会重新分配堆栈和内存空间,在一个全新的环境中运行新合约,即使出现问题也不会破坏原有执行环境,从而为智能合约的执行提供了一个沙箱环境。
: \& T6 F2 U$ [) n  e
. D& C  N# l) @) O' m    最后,每个智能合约的存储也是相互独立的,开发者可以根据需求,限制合约可以访问的存储空间,避免未授权的访问或修改。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

扯题范儿 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    1