Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

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

扯题范儿
117 0 0
了解区块链技术的童鞋都知道以太坊的智能合约都是在沙箱(Sandbox)中运行的,那到底什么是沙箱呢?为什么要在沙箱中进行呢?下面本文就为大家一一介绍。% x; g* o- V5 q$ B
$ U4 Z2 k, E- ~3 I1 X
    1.为什么需要沙箱机制?
7 j7 k; z* U* o# V& n3 r: j! c5 ]# ?1 p0 `) D2 H  c: Z
    默认情况下,一个应用程序是可以访问机器上的所有资源的,比如CPU、内存、文件系统、网络等等。# w# J8 w& e/ `- e0 h, d

) {0 }7 x% U* V# F    但是这是不安全的,如果随意操作资源,有可能破坏其他应用程序正在使用的资源,或者造成数据泄漏。为了解决这个问题,一般有下面两种解决方案:% U" ^" ?3 T: B0 N- p
3 T1 g6 Y% S" q# a3 t: e
    (1)为程序分配一个限定权限的账号:利用操作系统的权限管理机制进行限制
: o6 e& G4 }2 J( W4 V3 [+ ?
5 E" w% a: M% r& Y" Y    (2)为程序提供一个受限的运行环境:这就是沙箱机制. P5 x' Q, e: r2 p8 q, M7 e
( B- b" T9 h4 E4 Y# D
    2.什么是沙箱机制?; k/ i0 f1 ]0 P2 k+ E

, z9 c; [5 g) [# U$ J1 \6 C3 D9 _    如上所述,沙箱就是一个限制应用程序对系统资源的访问的运行环境。
9 m, K3 u1 P( ~/ N5 M
  X$ m2 X. x8 z7 W7 w6 u+ E    沙箱很多情况下都是实现在虚拟机(VM)中,比如Java的虚拟机JVM、Javascript的虚拟机V8引擎、Android中的虚拟机Dalvik/ART,以及以太坊的虚拟机EVM等等。具体的实现方式各有不同,本文重点分析一下JVM和EVM的沙箱机制实现。" w! t4 U1 |& Z/ V7 d

2 I3 U! X& v! f5 O5 e    3.JVM的沙箱机制+ A* [% B+ C) f  z

+ C+ B5 z; E7 F6 v) V. t    第二层:字节码校验器
$ q+ f% }& i) N* M  Z4 C: H- h$ D- W, A
    类字节码被加载后,需要在字节码层面进行检验,具体包括以下内容:
9 B1 \7 Q7 i- W6 m0 C1 @9 W* T! Y9 w& ?- p, {
    (1)变量要在使用之前进行初始化5 n# i; j5 \% n" a3 j# u: R1 D
0 n1 r# v& a4 ?& D' S- @2 N; N
    (2)方法调用与对象引用类型之前要匹配
& d1 R" J1 O4 j+ H8 k# O! I' Y) {, F- L+ Q: i: r
    (3)访问私有数据和方法的规则没有被违背
# I: Z" H; Z9 [! e2 K/ X+ R* x  Q" n5 [2 E# H' P
    (4)对本地变量的访问落在运行时堆栈内
( |4 l$ S' G2 n: x. ]! f4 }' ]) q
$ m  h* A+ m2 @6 l7 O' u    (5)运行时堆栈没有溢出通过这一机制,可以确保字节码符合Java语言规范,避免访问无效访问或越界访问。
% y' {3 Q  A+ C! e% _  @' K! ^& @2 p# C/ U1 r
    第二层:字节码校验器9 s" ^/ }6 t8 N/ V  T8 m+ q# F2 c. E/ U
4 L2 d7 J1 k; l8 m$ s4 N
    类字节码被加载后,需要在字节码层面进行检验,具体包括以下内容:
, _1 A4 K1 _+ i5 i, {
" ~2 J" Q! |. C/ F    (1)变量要在使用之前进行初始化' G% a: x( y$ B0 l" u

3 C1 p3 v' k' j3 a- {' J    (2)方法调用与对象引用类型之前要匹配6 ?" Q9 P7 j$ ]* K: m
0 g! V% X$ o' I: _. L) C: K
    (3)访问私有数据和方法的规则没有被违背
# W; T, |5 v7 i8 M( O% s6 L1 v, v2 e2 p  y- h
    (4)对本地变量的访问落在运行时堆栈内
' G; e% C+ g0 x, S" ]
* W3 w4 U& @& @: W% V3 P4 _2 @, f    (5)运行时堆栈没有溢出通过这一机制,可以确保字节码符合Java语言规范,避免访问无效访问或越界访问。6 g8 I! g1 ~% ]: w+ \
* I: {% O$ M7 q! T
    4.EVM的沙箱机制- M# @7 ?* w8 H  Z: A2 W! x
' @9 Q1 x9 W3 c7 o" M4 [; W1 b
    EVM本身是一个相对封闭的环境,不支持对网络和文件系统的直接访问,从这个层面来说已经起到一部分沙箱的功能了:. l6 A% s8 {5 c' M: u) G
- S5 I2 u1 @, x" G1 g" o6 }, e
    另外,在智能合约之间互相调用时,EVM会重新分配堆栈和内存空间,在一个全新的环境中运行新合约,即使出现问题也不会破坏原有执行环境,从而为智能合约的执行提供了一个沙箱环境。' \9 J* p; K) e* N* z
5 J- L! N& G1 M
    最后,每个智能合约的存储也是相互独立的,开发者可以根据需求,限制合约可以访问的存储空间,避免未授权的访问或修改。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

扯题范儿 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    1