首页 > 其他分享 >ton tact合约中的map采用go的调用方式

ton tact合约中的map采用go的调用方式

时间:2024-10-17 13:43:39浏览次数:8  
标签:map keys tact value tlb values ton Uint32

tact中的map结构:

struct RoundInfo {
  // Purchase records
  quotient: map<Int as uint32, BuyInfo>; // key is sequence number
  // Order anti-duplication records, key is order number, value is sequence number
  orders: map<Int as uint32, Int as uint16>;
}

go调用的时候需要采用这种结构体进行对应:

type BatchSyncOrderMsg3 struct {
	RoundId  uint32
	Quotient tlb.HashmapE[tlb.Uint32, tlb.Ref[BuyInfo]] // 订单序列号:购买信息
	Orders   tlb.HashmapE[tlb.Uint32, tlb.Uint16]       // 订单号码: 订单序列号
}

调用方式:把go map转成tlb.HashmapE形式

func (t TonApiServiceImpl) BatchSyncOrder3(ctx context.Context, roundId uint32, orders map[uint32]uint16, quotient map[uint32]chainservice.BuyInfo, roundContractConfig *chainservice.RoundContractConfig) (string, error) {
	if roundContractConfig == nil {
		roundContractConfig = t.defaultRoundContractConfig
	}

	msg := BatchSyncOrderMsg3{
		RoundId: roundId,
	}
	{
		var keys []tlb.Uint32
		var values []tlb.Uint16
		for key, value := range orders {
			keys = append(keys, tlb.Uint32(key))
			values = append(values, tlb.Uint16(value))
		}
		msg.Orders = tlb.NewHashmapE(keys, values)
	}

	{
		var keys []tlb.Uint32
		var values []tlb.Ref[BuyInfo]
		for key, value := range quotient {
			keys = append(keys, tlb.Uint32(key))
			tonAddress := tongo.MustParseAddress(value.Address)
			values = append(values, tlb.Ref[BuyInfo]{
				Value: BuyInfo{
					StartLuckNum: value.StartLuckNum,
					Amount:       value.NifiNum,
					Address:      tonAddress.ID.ToMsgAddress(),
				},
			})
		}
		msg.Quotient = tlb.NewHashmapE(keys, values)
	}

	return t.InvokeContract(ctx, roundContractConfig.ContractAddress, BatchSyncOrderMethodId, msg, 51_000_000)
}

 

标签:map,keys,tact,value,tlb,values,ton,Uint32
From: https://www.cnblogs.com/zhanchenjin/p/18472064

相关文章

  • ThreeJS入门(123):THREE.Skeleton 知识详解,示例代码
    作者:还是大剑师兰特,曾为美国某知名大学计算机专业研究生,现为国内GIS领域高级前端工程师,CSDN知名博主,深耕openlayers、leaflet、mapbox、cesium,webgl,ThreeJS,canvas,echarts等技术开发,欢迎加微信(gis-dajianshi),一起交流。查看本专栏目录-本文是第123篇入门文章......
  • weakmap、weakset、内存泄漏
    weakmap、weakset都是ES6的新增的数据结构WeakMapWeakMap对象是键值对的集合,提供了一种键值对的存储机制。它的键必须是对象类型,值可以是任意类型。它的键被弱保持,也就是说,当其键所指对象没有其他地方引用的时候,它会被GC回收掉。WeakMap提供的接口与Map相同。与Map......
  • nmap扫描
    nmap常用参数参数意义-sPping扫描(不扫描端口)-p-ping扫描(扫描端口)-p(-p80-p80,3389-p1-65535)指定端口扫描-O目标主机系统版本-sV显示服务的详细版本-A全面扫描-oN将扫描的结果保存成txt格式nmap-A-p-192.168.1.1-oN/tmp/info.txt-o......
  • Map集合中的具体子类TreeMap
    一、TreeMap元素是一个键值对,可以去重并进行排序1.先编写一个Dog2类publicclassDog2{privateStringname;privateintage;publicDog2(){}publicDog2(Stringname,intage){this.name=name;......
  • Java算法竞赛之HashMap常用API--哈西表!
    在Java算法竞赛中,HashMap是一个非常重要的数据结构,它提供了许多有用的API来方便地进行键值对的存储、检索和更新。除了getOrDefault方法外,HashMap还有其他一些常用的API。以下是一些主要的HashMapAPI及其在算法竞赛中的常见用法:put(Kkey,Vvalue)作用:将指定的键与值放入H......
  • Map中的具体实现子类HashMap
    一、HashMapHashMap<Student3,String>Map的唯一性指的是键的唯一性,HashMap中需要键的类型要重写hashCode()方法和equals方法二、HashMap的使用1.编写Student3类,里面需要重写hashCode()方法和equals方法importjava.util.Objects;publicclassStudent3{privateStrin......
  • Map集合
    一、Map集合的特点1.元素是键值对构成的2.在同一个Map集合中,键是唯一的3.在同一个Map集合中,值可以发生重复4.一对键值,代表集合中的元素二、Map集合的方法1.Vput(Kkey,Vvalue)向Map集合中添加元素2.Vremove(object0)移除一个键值对3.voidclear()清空Map集合4.boolea......
  • 关于Gmap.Net在WPF中的运用笔记(二)地图标注及几种图形的绘制
    通过第一篇,我们已经成功的加载了高德地图:https://www.cnblogs.com/zhouxiao123/p/18469933现在,我们来往地图上加点东西。Gmap.Net中,提供了标注类GmapMarker,通过创建标注,在将其添加到地图上,可以实现在地图上标点的功能。准备一张地图标注图,推荐去阿里矢量图库选取,有不少免费的......
  • 关于Gmap.Net在WPF中的运用笔记(一)初步加载高德地图
    一、前言最近公司需要开发一个车辆在途轨迹追踪的软件,结合现有系统和技术体系,最终敲定使用WPF+Gmap.Net来实现,这里将一些坑踩一下,做个笔记记录一下。二、项目搭建本项目基于.Net6.0+Gmap.Net.Core+Gmap.Net.WinPresentation,前面是用到的框架版本,后面则是需要用到的地图包,可通......
  • Java遍历Map集合的方法
    Java中遍历  Map 集合的常用方式主要有以下几种:1.使用 keySet()方法遍历 遍历Map的key集合,然后通过key获取value。Map<String,Integer>map=newHashMap<>();map.put("one",1);map.put("two",2);map.put("three",3);for(Stringkey......