Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

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

扯题范儿
122 0 0
了解区块链技术的童鞋都知道以太坊的智能合约都是在沙箱(Sandbox)中运行的,那到底什么是沙箱呢?为什么要在沙箱中进行呢?下面本文就为大家一一介绍。
% j) t" `* m% K4 x: \8 c
. Y9 v6 h4 q" I    1.为什么需要沙箱机制?8 j  j4 M& y1 s5 z

3 S7 p# l2 }3 K. Y3 q; G2 h    默认情况下,一个应用程序是可以访问机器上的所有资源的,比如CPU、内存、文件系统、网络等等。
9 N- b/ g; C) v) J9 Y" G" X" v8 m1 T+ D6 K
    但是这是不安全的,如果随意操作资源,有可能破坏其他应用程序正在使用的资源,或者造成数据泄漏。为了解决这个问题,一般有下面两种解决方案:
1 V, P. L- u, ~* w7 l" [
" Y3 k) j5 |- f: ~9 ~' g4 k    (1)为程序分配一个限定权限的账号:利用操作系统的权限管理机制进行限制8 g! T; l, S0 z! ~9 J# d
2 a6 Y' _( p! k2 G- Y. e3 H$ Q
    (2)为程序提供一个受限的运行环境:这就是沙箱机制7 V# h+ U/ G7 ?
( T/ G% H0 d. ~1 O
    2.什么是沙箱机制?% ?; k5 I, }4 K7 r  S+ c9 N) _
1 d4 u, [# i- g+ R
    如上所述,沙箱就是一个限制应用程序对系统资源的访问的运行环境。
/ Y/ o  X1 V: ~! O$ g" x& y/ f0 ]  |4 a
    沙箱很多情况下都是实现在虚拟机(VM)中,比如Java的虚拟机JVM、Javascript的虚拟机V8引擎、Android中的虚拟机Dalvik/ART,以及以太坊的虚拟机EVM等等。具体的实现方式各有不同,本文重点分析一下JVM和EVM的沙箱机制实现。
2 z# B- D: P: B$ r- K* S& h& d2 \- H8 F
    3.JVM的沙箱机制; w6 X& R; a/ v

9 a5 _% `0 d0 [* e    第二层:字节码校验器
+ |9 }( s1 b( [* c9 g7 N0 J7 G2 U& J1 U( e7 {
    类字节码被加载后,需要在字节码层面进行检验,具体包括以下内容:
1 }+ X' m+ M+ Q
- x5 j# u$ D6 n' o    (1)变量要在使用之前进行初始化
$ [  M, w; G. Y, L: L8 W0 @+ i; Q: P- U2 ~+ V
    (2)方法调用与对象引用类型之前要匹配( I8 v; t0 t3 O; l% n- Q
0 X. X5 b% ]  R" `, \3 T5 C
    (3)访问私有数据和方法的规则没有被违背* p$ a  C# n6 L% X' e

1 R5 Y. \3 m1 S; [. M: U3 Y    (4)对本地变量的访问落在运行时堆栈内
  g5 P1 Y- N2 O7 ^$ q( D$ d7 K1 O8 J6 r5 o: k
    (5)运行时堆栈没有溢出通过这一机制,可以确保字节码符合Java语言规范,避免访问无效访问或越界访问。
0 e2 F# T+ d2 l# ^8 v
* H# c! r( t: _7 u1 ~4 a    第二层:字节码校验器
) u7 x" B! B' o0 K1 A& w5 {" |) ^2 [# O9 J) v
    类字节码被加载后,需要在字节码层面进行检验,具体包括以下内容:
' Y* x& s2 D, _6 w# L$ b
4 l- v- G$ j: s7 Y+ [2 D1 \+ R    (1)变量要在使用之前进行初始化
$ {0 s# \7 C3 ]( s) J3 E
4 V% T/ v4 S, C# v+ L8 K, y% J    (2)方法调用与对象引用类型之前要匹配
9 o0 m3 l; W8 i* N5 F" }6 h: X1 o+ V6 ?3 j! V3 W
    (3)访问私有数据和方法的规则没有被违背
( ~' Q$ N1 Y2 t! G' d) _
$ Q5 _/ u5 w; a6 n! Y    (4)对本地变量的访问落在运行时堆栈内, c; R. l( C: k6 Q+ m
* \# C% B! \+ U
    (5)运行时堆栈没有溢出通过这一机制,可以确保字节码符合Java语言规范,避免访问无效访问或越界访问。
( \  d% K" `# p& R2 q3 v7 g3 ~# x
" Y- O6 I' b# A    4.EVM的沙箱机制
/ i7 [/ x+ N* J; V0 l
7 O* Z: |4 M* K    EVM本身是一个相对封闭的环境,不支持对网络和文件系统的直接访问,从这个层面来说已经起到一部分沙箱的功能了:
9 j" V8 G% {5 i; p8 n0 n: W% k& [! C& ]! L
    另外,在智能合约之间互相调用时,EVM会重新分配堆栈和内存空间,在一个全新的环境中运行新合约,即使出现问题也不会破坏原有执行环境,从而为智能合约的执行提供了一个沙箱环境。0 ]# a. h/ k/ V% R; q0 R
/ Z3 h, M) W; V: x- ?* b+ k8 U
    最后,每个智能合约的存储也是相互独立的,开发者可以根据需求,限制合约可以访问的存储空间,避免未授权的访问或修改。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

扯题范儿 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    1