如何在不部署至测试网/主网的情况下于Chainweaver中测试合约
问题根因
Chainweaver内置Pact REPL默认启动空白沙箱环境,不会自动加载主网/测试网的预部署核心模块。coin、kip.poly-fungible-v2都属于链上预置生态合约,未提前加载到本地REPL环境时,就会触发cannot resolve coin.transfer、Module not found类报错。
本地无部署测试配置步骤
- 提前准备目标模块及依赖的Pact源码
本地先整理好所有需要调用的外部模块源码,版本和你目标测试网络的线上部署版本完全对齐:- 加载
coin模块前,需先准备其依赖的fungible-v2、fungible-xchain-v1、gas-payer-v1、ns模块源码 - 加载
kip.poly-fungible-v2模块前,需先准备其依赖的fungible-v2、kip.token-policy-v2模块源码
- 加载
- 编写REPL环境初始化脚本
在你的测试合约工作目录下,新建init-local.repl初始化文件,严格按照「依赖优先、上层模块在后」的顺序编写加载指令,示例:
脚本中所有;; 加载核心通用依赖 (load "fungible-v2.pact") (load "fungible-xchain-v1.pact") (load "gas-payer-v1.pact") (load "ns.pact") ;; 加载coin模块 (load "coin.pact") ;; 加载KIP协议相关模块 (load "kip.token-policy-v2.pact") (load "kip.poly-fungible-v2.pact").pact文件的路径要和你本地源码存放路径匹配,同目录下直接写文件名即可。 - 启动REPL后先加载初始化环境
打开Chainweaver的REPL面板,切换到本地测试工作目录,首先执行初始化脚本:
执行后控制台无报错、输出各模块加载成功提示,即代表外部模块已经部署到本地临时沙箱中。(load "init-local.repl") - 执行本地测试逻辑
初始化完成后即可直接在REPL中调用coin.transfer、kip.poly-fungible-v2的所有公开接口,全程无需连接测试网/主网,所有逻辑在本地沙箱闭环运行。
常见注意事项
- 严格遵守加载顺序:Pact加载模块时会校验依赖项,必须先加载所有底层依赖,再加载上层业务模块,否则会触发依赖不存在报错
- 版本对齐:不要使用未正式上线的开发版合约源码做本地测试,避免出现本地测试结果和链上实际运行逻辑不一致的问题
- REPL环境无持久化:每次重启Chainweaver、重置REPL状态后,之前加载的模块都会被清空,需要重新执行一次初始化脚本
- 链上交互模拟:涉及区块高度、时间、交易签名、手续费扣除等链上逻辑,可以通过REPL内置的
env-系列指令模拟,不需要连接真实网络即可覆盖全测试场景
内容的提问来源于stack exchange,提问作者Ilario
相关产品推荐
相关产品推荐

