> ## Documentation Index
> Fetch the complete documentation index at: https://docs.chaintable.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 沙箱限制

> Function 跑在隔离沙箱里，有几条限制现在必须遵守。

Function 由远端 worker 在隔离沙箱里执行，不是在你 Notebook 的主进程里跑的。这带来两条现在必须遵守的限制。

<Warning>
  这两条是当前实现的限制，不是你能通过配置绕开的选项——写错了会在 worker 侧直接报错。
</Warning>

## 不能引用函数体外的变量

沙箱只会把函数体本身发给 worker，函数外定义的常量、辅助函数、导入的模块都不会一起带过去。

```python theme={null}
ADDR_ZERO = "0x0000000000000000000000000000000000dead"   # ❌ 函数体外定义

def to_transfer(record, chain_id):
    if record["to_addr"] == ADDR_ZERO:   # worker 侧拿不到 ADDR_ZERO，会报错
        return None
    ...
```

**改法：把用到的常量和辅助逻辑都写进函数体内。**

```python theme={null}
def to_transfer(record, chain_id):
    ADDR_ZERO = "0x0000000000000000000000000000000000dead"   # ✅ 写在函数体内
    if record["to_addr"] == ADDR_ZERO:
        return None
    ...
```

## 用到的模块要在函数体内重新 import

同理，函数体外的 `import` 也不会被带到 worker。任何在函数里用到的模块，都要在函数体内部重新 `import` 一次：

```python theme={null}
def to_transfer(record, chain_id):
    import json   # ✅ 在函数体内 import

    params = json.loads(record["params"])
    ...
```

## 沙箱里实际可用的库

Notebook 运行时目前带了这些三方库，函数体内可以直接 `import`：

| 库           | 用途                         |
| ----------- | -------------------------- |
| `web3`      | 与以太坊交互、Keccak-256 哈希等密码学工具 |
| `eth_abi`   | ABI 编解码                    |
| `eth_utils` | 地址、哈希等常用工具函数               |
| `hexbytes`  | 十六进制字节处理                   |
| `requests`  | 发 HTTP 请求                  |
| `urllib3`   | HTTP 底层库                   |
| `igraph`    | 图计算                        |

以及完整的 Python 标准库（`json`、`datetime`、`re` 等）。

<Warning>
  **没有 `pandas`，没有 `numpy`。** 如果你的转换逻辑依赖这两个库，需要改用标准库或者上面列出的库重写，或者把这部分计算挪到 [数据分析](/data-catalog/analytics/overview) 阶段用 SQL 做。
</Warning>
