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

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

时间:2024-10-17 13:43:39浏览次数:12  
标签: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篇入门文章......
  • 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;......
  • 关于Gmap.Net在WPF中的运用笔记(二)地图标注及几种图形的绘制
    通过第一篇,我们已经成功的加载了高德地图:https://www.cnblogs.com/zhouxiao123/p/18469933现在,我们来往地图上加点东西。Gmap.Net中,提供了标注类GmapMarker,通过创建标注,在将其添加到地图上,可以实现在地图上标点的功能。准备一张地图标注图,推荐去阿里矢量图库选取,有不少免费的......