ton 合约map批量同步和go调用

news/2024/10/19 17:26:40

tact代码:

import "@stdlib/deploy";
import "@stdlib/ownable";
struct RoundInfo {orders: map<Int as uint32, BuyInfo>; sum: Int as uint16;                arrLength: Int as uint16;           
}
struct BuyInfo {startLuckyNum: Int as uint16;    nifiNum: Int as uint16;            message BatchSyncOrderMsg {round: Int as uint32;orders: map<Int as uint32, BuyInfo>;
}contract Contract {rounds: map<Int as uint32, RoundInfo>;receive(msg: BatchSyncOrderMsg) {self.requireOwner();  let roundInfo: RoundInfo = self.rounds.get(msg.round)!!; let totalNifiNum: Int = 0;foreach (orderNumber, buyInfo in msg.orders) {roundInfo.orders.set(orderNumber, buyInfo);totalNifiNum += buyInfo.nifiNum;roundInfo.sequence += 1;}}

go调用代码:

type BatchSyncOrderMsg struct {RoundId uint32Orders  tlb.HashmapE[tlb.Uint32, tlb.Ref[chainservice.BuyInfo]] 
}
func (t TonApiServiceImpl) BatchSyncOrder(ctx context.Context, roundId uint32, orders map[uint32]chainservice.BuyInfo) (string, error) {msg := BatchSyncOrderMsg3{RoundId: roundId,}var keys []tlb.Uint32var values []tlb.Ref[chainservice.BuyInfo]for key, value := range orders {keys = append(keys, tlb.Uint32(key))values = append(values, tlb.Ref[chainservice.BuyInfo]{Value: value})}msg.Orders = tlb.NewHashmapE(keys, values)return t.InvokeContract(ctx, roundContractConfig.ContractAddress, BatchSyncOrderMethodId, msg, 51_000_000)
}func TestTonApiServiceImpl_BatchSyncOrder(t *testing.T) {var boughtRoundNum uint16 = 0var startLuckNum uint16 = 1orders := make(map[uint32]chainservice.BuyInfo)for i := 1; i <= int(ordersMax); i++ {buyNum := maxRoundNum / uint16(ordersMax)if boughtRoundNum+buyNum > maxRoundNum {buyNum = maxRoundNum - boughtRoundNum}if buyNum == 0 {break}orderID := StartOrderID + uint32(i)orders[orderID] = chainservice.BuyInfo{StartLuckNum: startLuckNum,Amount:       buyNum,}startLuckNum += buyNumboughtRoundNum += buyNum}txHash, err := tonService.BatchSyncOrder(context.Background(), RoundId, orders, nil)if err != nil {t.Error(err)}fmt.Println("txHash:", txHash)}

这边截取部分代码,

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/73507.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

南沙C++信奥赛陈老师解一本通题 1286:怪盗基德的滑翔翼

​ 【题目描述】怪盗基德是一个充满传奇色彩的怪盗,专门以珠宝为目标的超级盗窃犯。而他最为突出的地方,就是他每次都能逃脱中村警部的重重围堵,而这也很大程度上是多亏了他随身携带的便于操作的滑翔翼。 有一天,怪盗基德像往常一样偷走了一颗珍贵的钻石,不料却被柯南小朋…

web端ant-design-vue-Anchor锚点组件使用小节(2)

项目开发中有幸遇到了更细化的页面滚动问题,详情中我有多个履约节点子模块,除了正常的锚点和页面联动之外,客户希望我从列表中点击某个履约模块子节点,跳转到选中的履约模块子节点下面;如果没有子节点模块,则跳转到父级履约节点模块。实现这个功能大概这么两步,1、在子节…

netcore grpc

netcore grpc 一、solution创建空解决方案 > dotnet new sln -n Apricot.Grpc二、Grpc.Server创建Apricot.Grpc类库项目 > dotnet new classlib -n Apricot.Grpc# 解决方案添加类库项目> dotnet sln add Apricot.Grpc/Apricot.Grpc.csproj安装依赖 > dotnet add pa…

NOIP 计划 R15

NOIP 计划 R15 \(\def\EZ{\textcolor{#51af44}{\text{EZ}}}\EZ\) 表示简单,10分钟内就能想到。 \(\def\HD{\textcolor{#3173b3}{\text{HD}}}\HD\) 表示中等,能独立想出 \(\def\IN{\textcolor{#be2d23}{\text{IN}}}\IN\) 表示困难,独立思考能想到 \(50\%\) 以上 \(\def\AT{\t…

星际战甲 - 武器配卡

题记部分 一、主武器二、副武器三、近战武器 3.1、弧光蓄电重锤 — 业精于勤荒于嬉,行成于思毁于随 —

web端ant-design-vue-Anchor锚点组件使用小节(1)

web端ant-design-vue-Anchor锚点组件使用小节。项目开发中如果要实现前端页面平滑滚动到指定的位置,Anchor组件是一个好的选择,灵活且平滑,能满足常见的项目需求。最近开发中幸运的用到这个组件,从此对她爱不释手。下面就把开发中遇到的一些问题及源码整理出来,供以后查看…

高等数学 6.2 定积分在几何学上的应用

目录一、平面图形的面积1.直角坐标情形2.极坐标情形二、体积1.旋转体体积2.平行截面面积为已知的立体的体积三、平面曲线的弧长 一、平面图形的面积 1.直角坐标情形 我们已经知道,由曲线 \(y = f(x) (f(x) \geqslant 0)\) 及直线 \(x = a, x = b (a < b)\) 与 \(x\) 轴所围…

Ubuntu 16.04 编译安装Python 2.7.18

安装python 2.7.18(注)使用apt install python安装的版本是2.7.10,该版本对部分项目存在兼容性问题,因此需要手动编译安装 安装python编译环境sudo apt install python-dev pkg-config libreadline-dev libc6-dev libncursesw5-dev build-essential gdb pkg-config libbz2-…