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

如何在Tact智能合约中捕获Jetton转账并识别对应代币?

在Tact合约中处理Jetton转账并识别代币类型

1. 捕获Jetton转账

用户向你的合约转账Jetton时,实际流程是:用户调用自身Jetton钱包的transfer方法,随后该Jetton钱包会向你的合约发送内部消息携带转账详情。你需要在合约中实现对应消息处理逻辑来捕获这个转账。

在Tact中,使用@receive注解定义处理内部消息的函数,匹配Jetton转账的标准消息格式即可。Jetton内部转账消息的操作码固定为0x178d4519,解析该消息即可获取转账核心参数。

示例代码片段:

import "@stdlib/jetton/JettonUtils";

contract YourContract {
    // 存储已处理的消息ID,防止重复执行
    processed: Set<Int>;

    @receive(priority: 1)
    fun onJettonInternalTransfer(msg: InternalMsg) {
        let body = msg.body.beginParse();
        let op = body.loadUint(32);
        
        // 匹配Jetton内部转账操作码
        if (op == 0x178d4519) {
            let queryId = body.loadUint(64);
            let amount = body.loadCoins();
            let sender = body.loadAddress();
            let responseDestination = body.loadAddress();
            let customPayload = body.loadMaybeRef();
            let forwardAmount = body.loadCoins();
            let forwardPayload = body.loadMaybeRef();
            
            // 去重处理
            if (!processed.has(msg.id)) {
                processed.add(msg.id);
                
                // 这里添加你的业务逻辑,比如记录转账、触发后续操作
                // ...
            }
        }
    }
}

2. 识别Jetton代币类型

要区分不同Jetton,核心是获取Jetton主合约地址——每个Jetton都有唯一的主合约地址,以此作为代币标识。

最通用可靠的方式是通过发送消息的Jetton钱包地址,反向查询对应的Jetton主合约地址,利用Tact标准库的JettonUtils工具类即可实现:

// 在onJettonInternalTransfer函数中添加以下逻辑
let jettonWallet = msg.sender;
// 通过Jetton钱包地址获取对应主合约地址
let jettonMaster = JettonUtils.getJettonMasterAddress(jettonWallet);

// 可对比已知Jetton地址做针对性处理
let TONCOIN_JETTON_MASTER = address("EQ..."); // 替换为目标Jetton主合约地址
if (jettonMaster == TONCOIN_JETTON_MASTER) {
    // 处理该特定Jetton的转账逻辑
}

补充注意事项

  • 可选增强安全性:可调用Jetton钱包的get_jetton_data方法,验证其返回的主合约地址与推导地址一致
  • 处理转发逻辑:若转账包含forwardAmount和forwardPayload,需按要求将对应金额转发至指定地址
  • 消息去重必须实现:链上可能存在消息重放,通过processed集合记录已处理的消息ID避免重复执行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 10:17:13