首页 > 其他分享 >Ton 区块链 Minter与Wallet的合约部署关联细节

Ton 区块链 Minter与Wallet的合约部署关联细节

时间:2024-06-12 13:44:31浏览次数:13  
标签:wallet 部署 Wallet Minter Ton address 合约

作者:林冠宏 / 指尖下的幽灵。转载者,请: 务必标明出处。

GitHub : https://github.com/af913337456/

出版的书籍:


Ton 区块链 Minter与Wallet的合约部署关联细节

Ton 区块链的其他系列文章:Ton 区块链的官方 类ERC20-Token 智能合约代码-Transfer部分解析

在上一篇文章中,我介绍到 Ton 区块链的合约是分片的,尤其体现在 Token 经济合约中。那么既然有关联关系的话,在部署的时候是怎样的把这种关系绑定的呢?这是这篇文章要讲解的点。

假设现在 A Token 的合约是由 Minter 合约和 Wallet 合约组成的,根据官方的 Token 合约例子,可以知道在 Minter 合约中的 LoadData 函数的最后一个返回是 Wallet 合约的 Code 代码,如下:

(int, slice, cell, cell) load_data() inline {
  slice ds = get_data().begin_parse();
  return (
      ds~load_coins(), ;; total_supply
      ds~load_msg_addr(), ;; admin_address 就是 jetton_master_address
      ds~load_ref(), ;; content
      ds~load_ref()  ;; jetton_wallet_code 就是这个
  );
}

提示: 上面代码中的 admin_address 就是 Wallet 合约中的 jetton_master_address

意味着,在部署 Minter 合约的时候,使用客户端的部署代码中,要把 WalletCode 作为参数传递到部署方法中,这一点在官方的 Js 部署代码中可以得到考证,如下:

const content = jettonContentToCell({type:1,uri:contentUrl});

    // wallet 合约的代码。在合约编译后就能获取了,不需要上链
    const wallet_code = await compile('JettonWallet'); 

    const minter  = JettonMinter.createFromConfig({admin,
                                                  content,
                                                  wallet_code, // wallet code
                                                  }, 
                                                  await compile('JettonMinter')); // Minter 合约的代码
    // 这里的部署就等于把这个 Minter 的和 wallet 的绑定上了
    await provider.deploy(minter, toNano('0.05')); // deploy 部署

部署操作的链上存储函数是下面这个,对应 LoadData 的 SaveData,也是 Minter 合约中的。

() save_data(int total_supply, slice admin_address, cell content, cell jetton_wallet_code) impure inline {
  set_data(begin_cell()
            .store_coins(total_supply)
            .store_slice(admin_address)
            .store_ref(content)
            .store_ref(jetton_wallet_code) // Wallet 合约 code
           .end_cell()
          );
}

综上,我们不难得出结论:即 Minter 和 Wallet 的绑定,是在部署 Minter 合约的时候,把 Wallet 的合约编译后的 Code 作为参数传递到部署函数中,最后被存储到链上的 Minter 合约中,完成绑定的。

上面的 Wallet 的 Code 在 Minter 合约中的核心作用是参与计算出用户的 Wallet 合约地址。也就是前个文章中所提到的和用户一一对应 Wallet 合约。在 Minter 下面的代码片段中可以看出:

slice get_wallet_address(slice owner_address) method_id {
    (int total_supply, slice admin_address, cell content, cell jetton_wallet_code) = load_data();
    return calculate_user_jetton_wallet_address(owner_address, my_address(), jetton_wallet_code);
}

get_wallet_address 函数对应到客户端的 API 调用,它将使用 owner_address 即参数过来的客户端钱包地址计算出这个客户的 wallet_address 然后返回给客户端。客户端在拿到这个地址后,便可进行 Wallet 合约的调用,实现 Transfer 转账操作了,这里也和上个文章的源码部分对应上了。

那么 Wallet 合约是否需要部署?

答案是不需要的,根据官方文章的描述,是不需要的,用户在使用这个 Token 的时候,会被自动创建一份对应的 Wallet 合约。但也可以部署,之所以不需要是因为在部署 Minter 合约的时候已经把 Wallet 的 Code 数据传递上链了。

至此。Minter合约 和 Wallet合约部署关联细节结束。

标签:wallet,部署,Wallet,Minter,Ton,address,合约
From: https://www.cnblogs.com/linguanh/p/18243797

相关文章

  • Ton 区块链的官方 类ERC20-Token 智能合约代码-Transfer部分解析
    作者:林冠宏/指尖下的幽灵。转载者,请:务必标明出处。掘金:https://juejin.im/user/1785262612681997GitHub:https://github.com/af913337456/出版的书籍:《1.0-区块链DApp开发实战》《2.0-区块链DApp开发:基于公链》Ton区块链的官方类ERC20-Token智能合约代码-Trans......
  • [ToneTuneToolkit][023]UGUI的去色,使UI元素变为灰色
    #regionEnvironmentWindows1022H2Unity2022.3.30f1LTSVSCode1.90.0//ToneTuneToolkit下载地址// https://github.com/MirzkisD1Ex0/ToneTuneToolkit.git#endregion 把UGUI的元素去色!变成灰色!!!超级方便!//该项功能已包含至ToneTuneToolkit插件  01.新建场景,新建......
  • WPF RepeatButton
    是一个特殊的按钮,用于在用户长按或连续点击时重复执行特定动作。它通常用于需要重复执行某个操作的场景。常用属性描述Delay用于获取或设置RepeatButton在开始重复之前被按下时等待的时间(以毫秒为单位)。该值必须为非负数。Interval用于获取或设置开始重复后重复之......
  • WPF button mouseover background change color
    <Applicationx:Class="WpfApp142.App"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="clr-nam......
  • 视频监控管理平台LntonCVS视频汇聚平台充电桩视频监控应用方案
    随着新能源汽车的广泛使用,公众对充电设施的安全性和可靠性日益重视。为了提高充电桩的安全管理和站点运营效率,LntonCVS公司推出了一套全面的新能源汽车充电桩视频监控与管理解决方案。该方案通过安装高分辨率摄像头,对充电桩及其周边区域进行不间断监控,确保充电环境的安全无虞......
  • 详细介绍视频汇聚共享平台LntonCVS视频存储平台支持的多种视频流协议
    LntonCVS国标视频综合管理平台是一款以视频为核心的智慧物联应用平台。它基于分布式、负载均衡等流媒体技术进行开发,提供广泛兼容、安全可靠、开放共享的视频综合服务。该平台具备多种功能,包括视频直播、录像、回放、检索、云存储、告警上报、语音对讲、集群、智能AI分析以及平......
  • 安防监控视频平台LntonCVS统一视频接入平台建筑工地安防监控应用方案
    随着科技的高速发展,视频信号经过数字压缩后,可以通过互联网宽带或者移动4G网络进行传输,从而实现远程视频监控功能。将这一功能应用于施工现场安全管理,将大大提高管理效率并提升监管水平。LntonCVS监控系统能够实现这些目标,使得施工企业能够跃上新的管理平台,同时政府的监管力度也......
  • 视频监控管理平台LntonCVS视频汇聚平台充电桩视频监控应用方案
    随着新能源汽车的广泛使用,公众对充电设施的安全性和可靠性日益重视。为了提高充电桩的安全管理和站点运营效率,LntonCVS公司推出了一套全面的新能源汽车充电桩视频监控与管理解决方案。该方案通过安装高分辨率摄像头,对充电桩及其周边区域进行不间断监控,确保充电环境的安全无虞......
  • tkinter的button命令为什么要加lambda标签
    续上一篇,添加一个button打印功能,很意外,怎么我明明没点击button啊,怎么command的代码就运行了呢,这个问题的答案在猿友网解决了,真是匪夷所思,偏要加上lambda:才屏蔽初始化运行。https://www.w3cschool.cn/article/32403450.html其此是打印问题,试了又试,发现通过win32print获取到handl......
  • 【Pyhton】异常处理
    异常是什么?  软件程序在运行过程中,非常可能遇到刚刚提到的这些问题,我们称之为异常,英文是:Exception,意思是例外。遇到这些例外情况,或者叫异常,我们怎么让写的程序做出合理的理,安全的退出,而不至于程序崩溃呢?工作中,程序遇到的情况不可能完美。比如:程序要打开某个文件,这......