首页 > 其他分享 >理解TON合约中的消息发送结构

理解TON合约中的消息发送结构

时间:2024-10-12 18:10:34浏览次数:6  
标签:body 32 发送 TON 消息 message 合约 storeUint

在开发TON合约时,消息的发送格式非常关键。特别是在使用TypeScript与TON合约交互时,我们会遇到这样的代码片段:

async send(provider: ContractProvider, via: Sender, args: { value: bigint, bounce?: boolean | null | undefined }, message: string | Deploy) {
    let body: Cell | null = null;
    if (typeof message === 'string') {
        body = beginCell().storeUint(0, 32).storeStringTail(message).endCell();
    }
    if (message && typeof message === 'object' && !(message instanceof Slice) && message.$$type === 'Deploy') {
        body = beginCell().store(storeDeploy(message)).endCell();
    }
    if (body === null) { throw new Error('Invalid message type'); }
    
    await provider.internal(via, { ...args, body: body });
}

为什么需要storeUint(0, 32)

  1. 消息结构

    • TON的消息遵循特定的格式,确保发送的信息可以被接收方正确解析。使用beginCell().storeUint(0, 32)来定义消息的类型或标识符。
  2. 类型标识

    • 在这里,storeUint(0, 32)通常表示消息的类型。接收合约可以通过检查这个标识符来判断如何处理后续的数据。例如,值为0可能表示这是一个普通的字符串消息。
  3. 可扩展性

    • 这种结构使得消息在未来可以灵活扩展。如果后续需要增加更多的信息或类型,只需改变storeUint的值或增加更多字段即可。
  4. 遵循协议规范

    • TON的消息传递有其特定的协议和规范,遵循这些规范可以确保合约之间的兼容性和可预测的行为。

结论

在发送字符串消息时,使用storeUint(0, 32)不仅仅是一个技术细节,它在消息的解码和处理过程中起着至关重要的作用。理解这些细节有助于我们在开发TON合约时编写更加高效、可靠的代码。希望这个解读能帮助你更好地理解TON合约中的消息结构!

标签:body,32,发送,TON,消息,message,合约,storeUint
From: https://www.cnblogs.com/zhanchenjin/p/18461150

相关文章

  • 抖音直播间自动发送评论-唯一客服浏览器插件
    应用场景主流直播平台后台评论自动回复与循环发送话术某些客服平台网页端咨询消息自动回复功能介绍这是一个电脑端浏览器插件扩展,实现模拟人工收发消息,解放双手,摆脱重复工作利用浏览器多开,可以在一台电脑上运行多个浏览器,每个浏览器登录不同账号,同时运行插件。插件不限制直播或......
  • Spring Boot 集成 RabbitMQ 多个 Broker 发送、消费消息
    1.SpringBoot集成RabbitMQ多个Broker发送、消费消息1.1.版本说明1.2.概述1.3.RabbitMQ信息1.4.Spring配置1.5.定义常量1.6.定义配置属性1.7.定义两个ConnectionFactory1.8.定义两个RabbitTemplate1.9.定义两个SimpleRabbitListenerContainerFacto......
  • 第四十一章 发送方码率预估揭秘
    WebRTC使用的是GoogleCongestionControl(简称GCC)拥塞控制,目前有两种实现:旧的实现是接收方根据收到的音视频RTP报文,预估码率,并使用REMBRTCP报文反馈回发送方。*新的实现是在发送方根据接收方反馈的TransportFeedbackRTCP报文,预估码率。基于延迟的拥塞控制原理先来......
  • SUI Move官方示例合约实践——FT类:篮子代币(basket)
    SUIMove官方示例合约实践——FT类:篮子代币(basket)1合约说明1.1功能介绍本合约是一个由一篮子代币合成的同质化代币合约,本示例中一篮子代币是由SUI和MANAGED代币1:1组成,但这种方法适用于创建任意资产和比例的篮子。提供了2个写入接口mint:铸造篮子代币,通过存入特定比例......
  • 【信创问题】解决东方通(TongWeb)报错 java.lang.NoClassDefFoundError: javax/persis
    写在前边今天帮现场同事定位问题,情况是项目同事使用东方通(TongWeb7.0)部署公司项目时,出现以下报错导致服务启动失败。简单排查了下发现:war包内WEB-INF/lib/javax.persistence-api-2.2.jar中包含javax.persistence.spi.PersistenceProvider这个接口,不应该报这个错误呀。Causedby......
  • The Bitter Lesson from Rich Sutton
    originThebiggestlessonthatcanbereadfrom70yearsofAIresearchisthatgeneralmethodsthatleveragecomputationareultimatelythemosteffective,andbyalargemargin.TheultimatereasonforthisisMoore'slaw,orratheritsgeneralizat......
  • 鸿蒙发送消息通知
    注意:发送消息通知要开启设置中的消息通知importnotifyfrom'@ohos.notificationManager'importimagefrom'@ohos.multimedia.image'import{BusinessError}from'@kit.BasicServicesKit'@Entry@ComponentstructNotificationPage{//全局任务id......
  • 多行输入enter发送,enter+shif换行
    <textarea--><!--id="input-id"--><!--class="transparent-input1"--><!--:rows="2"--><!--placeholder="请输入内容,Shift+Enter换行"--><!--......
  • rabbitmq 发送端和消费端 dotnet
    #RabbitMQ发送端usingSystem.Text;usingRabbitMQ.Client;varfactory=newConnectionFactory();factory.HostName="127.0.0.1";//RabbitMQ服务器地址factory.DispatchConsumersAsync=true;stringexchangeName="exchange1";//交换机的名字string......
  • tp6发送邮件功能如何实现?tp6的使用教程?
    tp6发送邮件有哪些技巧?tp6发送邮件步骤与设置指南?tp6(ThinkPHP6)作为一款流行的PHP框架,提供了强大的邮件发送功能,使得开发者能够轻松实现这一需求。AokSend将详细介绍如何在tp6中实现邮件发送功能。tp6发送邮件:模板管理在实际应用中,邮件内容通常需要根据不同的场景进行定制......