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

如何在Tact中从私钥获取公钥?TON智能合约开发问询

在Tact合约中实现私钥转公钥的可行方案

核心实现思路

由于目前没有直接适配Tact的密钥推导库,你可以借助TonoxDeFi/open-contracts中的funC实现,通过Tact对funC的原生兼容能力来完成功能。以下是具体操作步骤:

1. 提取目标funC函数

从TonoxDeFi/open-contracts库中找到负责Ed25519私钥转公钥的funC函数代码,将其保存为独立的.fc文件(比如命名为key_utils.fc)。

2. 在Tact合约中导入并调用funC函数

Tact支持直接导入funC代码,只需在合约头部添加导入语句,然后在目标方法中完成类型转换并调用:

// 导入funC工具文件
import "./key_utils.fc";

get fun get_public_key_from_private_key(private_key: String): String {
    // 将Tact字符串转换为funC兼容的slice类型
    let private_key_slice = private_key.asSlice();
    // 调用funC中的私钥转公钥函数
    let public_key_slice = get_public_key(private_key_slice);
    // 将转换后的slice转回Tact字符串返回
    return public_key_slice.asString();
}

3. 关键注意事项

  • 安全风险警示:绝对不要在链上合约中处理私钥!链上所有数据都是公开可查的,私钥一旦传入合约就会完全泄露,这类密钥推导逻辑必须放在链下客户端执行。
  • 类型转换校验:确保Tact与funC之间的类型转换正确,尤其是字符串与slice的互转,避免出现数据截断或格式错误。
  • 本地测试验证:在TON本地测试环境中反复验证转换结果,确保推导的公钥与客户端生成的一致,避免逻辑错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 12:01:06