使用pytonlib在TON发送交易时遇ExternalMessageNotAccepted错误求助
TON网络发送交易被拒绝的原因及修复方案
错误信息
pytonlib.tonlibjson.ExternalMessageNotAccepted: LITE_SERVER_UNKNOWN: 无法将外部消息应用到当前状态:外部消息未被接受 无法在账户上运行消息:入站外部消息被交易13FB696E8CD9B2F71C7B034A2BB629A14DA4F16143B6395969150C0CDF15F732拒绝: exitcode=0, steps=0, gas_used=0
触发错误的代码
query = wallet.create_transfer_message( to_addr=new_wallet.address.to_string(), amount=to_nano(0.05, "ton"), seqno=seqno, state_init=None # 或者完全移除 ) await client.raw_send_message(query["message"].to_boc(False))
问题分析与修复方案
从错误的exitcode=0, steps=0可以看出,消息根本没进入执行环节,直接在验证阶段被拒绝。结合你已做的检查,重点排查以下几点:
1. SeqNo是否实时有效
你确认的SeqNo=85143可能是本地缓存的旧值,而非链上最新状态。TON钱包的SeqNo必须严格匹配链上当前值,否则消息会被直接拒绝。
修复:不要用固定值,实时从链上获取SeqNo:
seqno = await wallet.get_seqno()
用这个实时值生成交易消息再尝试发送。
2. 消息签名是否合法
如果钱包初始化时使用的私钥不正确,或者create_transfer_message生成的消息签名无效,也会触发该错误。
修复:检查钱包实例的私钥是否正确,可尝试重新初始化钱包,或用该私钥签名测试数据后验证有效性。
3. 目标地址格式是否正确
确认new_wallet.address.to_string()返回的是标准TON地址(以EQ/UQ开头),地址格式错误会导致消息无法被正确路由和验证。
修复:打印目标地址值,核对格式是否符合要求,若地址生成逻辑有问题,重新生成合法地址。
4. 连接节点是否同步正常
若你连接的TON节点未同步到最新链上状态,会导致消息验证失败。
修复:切换到官方维护的LITE服务器节点,确保节点数据是最新的。
内容的提问来源于stack exchange,提问作者NEARyou
相关产品推荐
相关产品推荐

