You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TON平台FunC Jetton合约测试报错:调用非活跃合约get方法

解决TON Jetton合约测试中“Trying to run get method on non-active contract”错误

核心问题分析

这个错误的本质是:调用合约get方法时,目标合约地址在测试链上还处于未激活状态——要么部署交易没被确认,要么合约根本没被正确部署(比如Jetton Wallet是Minter动态创建的,没触发创建逻辑)。

针对性修复步骤

1. 部署Minter后必须等待交易确认

TypeScript测试里,部署合约后不能立刻调用get方法,必须等交易上链确认。示例代码:

// 部署Minter合约
const minter = await deployMinter(...);
// 等待合约部署完成(用TON测试框架的内置方法)
await minter.waitForDeploy();
// 或者直接等待交易处理结束
await provider.waitForTransaction(minter.address);

2. 正确触发Jetton Wallet的创建逻辑

Jetton Wallet是由Minter通过internal_transfer或mint操作动态创建的,直接调用Wallet的get方法会因为合约不存在报错。正确流程:

  • 先调用Minter的get_wallet_address获取目标Wallet地址
  • 触发Minter的mint操作(内部转账会自动创建Wallet),或者给Wallet地址转小额TON激活
  • 等待Wallet合约创建完成后,再调用其get方法

示例代码片段:

// 获取用户的Jetton Wallet地址
const walletAddress = await minter.getWalletAddress(userAddress);
// 执行Mint操作触发Wallet创建
await minter.sendMint(userAddress, amount);
// 等待Wallet合约激活
await provider.waitForTransaction(walletAddress);
// 现在可以正常调用Wallet的get方法
const jettonWallet = new JettonWallet(provider, walletAddress);
const balance = await jettonWallet.getBalance();

3. 验证测试链状态

  • 确保用的是本地TON节点(如ton-local-node)或测试网(testnet.ton.org),且节点同步正常
  • 检查部署交易的状态,确认已上链:
const txStatus = await provider.getTransaction(txHash);
if (txStatus.status !== 'finalized') {
  throw new Error('部署交易未完成确认');
}

4. 检查合约初始化逻辑

  • 确认Minter合约的init函数正确初始化了Jetton参数(名称、符号、供应量等),没有导致部署失败
  • 检查Wallet合约的recv_internal函数是否正确处理Minter的创建调用,确保合约能正常激活

完整测试流程示例

// 1. 初始化测试环境
const provider = new TonProvider(...);
const userWallet = await provider.openWallet(userPrivateKey);

// 2. 部署Minter并等待确认
const minterCode = await compileFunc('minter.fc');
const minter = new MinterContract(provider, minterCode);
const deployTx = await minter.deploy(userWallet.sender);
await provider.waitForTransaction(deployTx.hash);

// 3. 执行Mint操作,触发Wallet创建
const mintAmount = toNano('1000');
const mintTx = await minter.sendMint(userWallet.address, mintAmount, userWallet.sender);
await provider.waitForTransaction(mintTx.hash);

// 4. 获取并访问Jetton Wallet
const jettonWalletAddress = await minter.getWalletAddress(userWallet.address);
const jettonWallet = new JettonWallet(provider, jettonWalletAddress);

// 5. 调用get方法验证
const balance = await jettonWallet.getBalance();
console.log(`用户Jetton余额: ${fromNano(balance)}`);

内容的提问来源于stack exchange,提问作者Aditya Thakkar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 19:57:13