# java-executor-avm **Repository Path**: chenhonghua/java-executor-avm ## Basic Information - **Project Name**: java-executor-avm - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-24 - **Last Updated**: 2026-03-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Java Executor AVM Java Executor AVM 是一个基于 [Aion 虚拟机](https://github.com/aionnetwork/AVM.git) 的动态代码执行框架,支持在运行时动态编译和执行 Java 代码块。该项目类似于 Janino Executor,但使用了 AVM 作为底层执行引擎,提供了更高的安全性和隔离性。 ## 项目特性 - **动态编译**: 支持运行时动态编译 Java 源代码 - **沙箱执行**: 使用 AVM 提供安全的代码执行环境 - **合约管理**: 支持智能合约的创建、部署和调用 - **导入控制**: 提供可配置的 import 白名单机制 - **能量管理**: 支持执行能量限制和管理 ## 技术栈 - **Java 版本**: Java 21 - **构建工具**: Maven - **核心依赖**: - ASM 9.9.1 (字节码操作) - Aion AVM (Aion 虚拟机) - EdDSA 0.3.0 (加密库) - SpongyCastle 1.58.0.0 (密码学库) ## 项目结构 ``` java-executor-avm/ ├── src/main/java/ │ ├── com/synctech/executor/avm/ # 核心执行器模块 │ │ ├── Executor.java # 代码执行器 │ │ ├── Manager.java # 管理器(合约注册和管理) │ │ ├── CodeDefinition.java # 代码定义和编译器 │ │ ├── ByteArrayClassLoader.java # 字节数组类加载器 │ │ └── Constant.java # 常量定义 │ ├── org/aion/ # Aion AVM 核心库 │ ├── p/avm/ # AVM API 封装 │ ├── s/java/ # Shadow Java 类库 │ └── i/ # 接口和工具类 └── src/test/ # 测试代码 ``` ## 快速开始 ### 1. 环境要求 - JDK 21 或更高版本 - Maven 3.6+ ### 2. 安装依赖 ```bash mvn clean install ``` ### 3. 基本使用示例 #### 添加合约 ```java import com.synctech.executor.avm.Manager; // 注册一个合约 String creatorAddress = "0x1234567890abcdef..."; // 创建者地址(32 字节 hex) String contractAddress = "0xfedcba0987654321..."; // 合约地址(32 字节 hex) String code = "..."; // Java 源代码 Manager.add(creatorAddress, contractAddress, code); ``` #### 执行合约 ```java import com.synctech.executor.avm.Executor; import org.aion.avm.core.FutureResult; // 调用合约方法 FutureResult[] results = Executor.invoke( senderAddress, // 发送者地址 contractAddress, // 合约地址 methodName, // 方法名 arg1, arg2, ... // 参数 ); ``` ## 核心组件说明 ### Executor(执行器) `Executor` 类提供代码执行的静态方法: - `invoke(String senderAddress, String contractAddress, String methodName, Object... arguments)` - 执行指定合约的方法 - 返回 `FutureResult[]` 结果数组 ### Manager(管理器) `Manager` 类负责合约的管理和 AVM 实例管理: - `add(String creatorAddress, String contractAddress, String code)` - 添加合约 - `get(String contractAddress)` - 获取合约定义 - `clear()` - 清除所有合约 - `contains(String contractAddress)` - 检查合约是否存在 - `getAvmInstance()` - 获取 AVM 实例 ### CodeDefinition(代码定义) `CodeDefinition` 类处理代码的编译和打包: - 自动将代码片段包装为完整的 Java 类 - 编译 Java 源代码为字节码 - 构建包含 Manifest 的 JAR 文件 - 生成 AVM 合约字节码 ## 安全特性 ### Import 白名单 项目通过 `Constant.ALLOWED_IMPORTS` 控制允许导入的包,防止不安全的代码访问。可以在 `Constant.java` 中配置允许的包前缀。 ### 沙箱隔离 所有代码都在 AVM 沙箱中执行,与主机系统隔离,确保: - 无法直接访问文件系统 - 无法访问网络资源 - 受限的内存使用 - 可控的执行能量 ## 配置说明 ### Maven 配置 在 `pom.xml` 中已配置以下关键设置: ```xml 21 UTF-8 9.9.1 ``` ### 编译配置 项目使用 Maven 编译插件,配置了 Java 21 源和目标版本: ```xml org.apache.maven.plugins maven-compiler-plugin ${java.version} ${java.version} UTF-8 ``` ## 使用场景 1. **智能合约平台**: 部署和执行用户提交的智能合约 2. **规则引擎**: 动态加载业务规则并执行 3. **脚本引擎**: 支持用户自定义脚本逻辑 4. **插件系统**: 热插拔的插件架构 5. **代码评测系统**: 安全的代码提交和执行环境 ## 注意事项 ### 地址格式 所有地址必须为 32 字节的十六进制字符串,使用 `Helpers.hexStringToBytes()` 进行转换。 ### 能量限制 默认执行能量限制为 5,000,000,可在调用时调整。 ### 类加载 使用自定义的 `ByteArrayClassLoader` 加载动态编译的类,确保类的隔离性。 ## 开发指南 ### 编写合约代码 合约代码应为完整的 Java 类,例如: ```java import org.aion.avm.userlib.*; public class MyContract { public static Object execute(Object[] args) { // 业务逻辑 return result; } } ``` ### 错误处理 执行失败时会抛出异常,建议捕获并处理: ```java try { FutureResult[] results = Executor.invoke(...); // 处理结果 } catch (Exception e) { // 处理异常 } ``` ## 许可证 本项目基于 Aion AVM 构建,遵循相应的开源许可证。 ## 贡献 欢迎提交 Issue 和 Pull Request! ## 联系方式 - 项目组织:Synctech - 项目邮箱:(待补充) - 问题反馈:(待补充) --- **注意**: 这是一个技术预览版本,某些 API 可能会在未来版本中发生变化。在生产环境使用前,请充分测试和评估。