派链PIL/NFT/LP/DAPP/DEFI代币智能合约流动性质押挖矿分红系统开发详细方案及源码逻辑

简介: withSyncResult:是否同步获取交易执行结果当为true时,若成功调用,common.TxResponse.ContractResult.Result为common.TransactionInfo当为false时,若成功调用,common.TxResponse.ContractResult为空,可以通过common.TxResponse.TxId查询交易结果

  1.合约调用

  参数说明

  contractName:合约名称

  method:合约方法

  txId:交易ID格式要求:长度为64字节,字符在a-z0-9可为空,若为空字符串,将自动生成txId

  kvs:合约参数

  timeout:超时时间,单位:s,若传入-1,将使用默认超时时间:10s

  withSyncResult:是否同步获取交易执行结果当为true时,若成功调用,common.TxResponse.ContractResult.Result为common.TransactionInfo当为false时,若成功调用,common.TxResponse.ContractResult为空,可以通过common.TxResponse.TxId查询交易结果

  limit:transaction limitation,执行交易时的资源消耗上限,设为nil则不设置上限

  2.部署wasm合约

  下文,将演示通过sdk部署wasm合约,

  sdk_user_contract_claim_test.go

  
  func testUserContractClaimCreate(ttesting.T,clientChainClient,admin1,admin2,admin3,admin4*ChainClient,withSyncResult bool,isIgnoreSameContract bool){resp,err:=createUserContract(client,admin1,admin2,admin3,admin4,claimContractName,claimVersion,claimByteCodePath,common.RuntimeType_WASMER,

  []common.KeyValuePair{},withSyncResult)if!isIgnoreSameContract{require.Nil(t,err)}fmt.Printf("CREATE claim contract resp:%+vn",resp)}func createUserContract(clientChainClient,admin1,admin2,admin3,admin4ChainClient,contractName,version,byteCodePath string,runtime common.RuntimeType,kvs[]common.KeyValuePair,withSyncResult bool)(*common.TxResponse,error){payloadBytes,err:=

  client.CreateContractCreatePayload(contractName,version,byteCodePath,runtime,kvs)if err!=nil{return nil,err}//各组织Admin权限用户签名signedPayloadBytes1,err:=admin1.SignContractManagePayload(payloadBytes)if err!=nil{return nil,err}signedPayloadBytes2,err:=admin2.SignContractManagePayload(payloadBytes)if err!=nil{return nil,err}signedPayloadBytes3,err:=

  admin3.SignContractManagePayload(payloadBytes)if err!=nil{return nil,err}signedPayloadBytes4,err:=admin4.SignContractManagePayload(payloadBytes)if err!=nil{return nil,err}//收集并合并签名mergeSignedPayloadBytes,err:=client.MergeContractManageSignedPayload([][]byte{signedPayloadBytes1,signedPayloadBytes2,signedPayloadBytes3,signedPayloadBytes4})if err!=nil{return nil,err}//发送创建合约请求resp,err:=

  client.SendContractManageRequest(mergeSignedPayloadBytes,createContractTimeout,withSyncResult)if err!=nil{return nil,err}err=checkProposalRequestResp(resp,true)if err!=nil{return nil,err}return resp,nil

  3.调用wasm合约

  下文,将演示通过sdk调用wasm合约,

  sdk_user_contract_claim_test.go

  func testUserContractClaimInvoke(clientChainClient,method string,withSyncResult bool)(string,error){curTime:=fmt.Sprintf("%d",CurrentTimeMillisSeconds())fileHash:=uuid.GetUUID()params:=map[string]string{"time":curTime,"file_hash":fileHash,"file_name":fmt.Sprintf("file_%s",curTime),}err:=invokeUserContract(client,claimContractName,method,"",params,withSyncResult)if err!=nil{return"",err}return fileHash,nil}func invokeUserContract(clientChainClient,contractName,method,txId string,params map[string]string,withSyncResult bool)error{resp,err:=client.InvokeContract(contractName,method,txId,params,-1,withSyncResult)if err!=nil{return err}if resp.Code!=common.TxStatusCode_SUCCESS{return fmt.Errorf("invoke contract failed,[code:%d]/[msg:%s]n",resp.Code,resp.Message)}if!withSyncResult{fmt.Printf("invoke contract success,resp:[code:%d]/[msg:%s]/[txId:%s]n",resp.Code,resp.Message,resp.ContractResult.Result)}else{fmt.Printf("invoke contract success,resp:[code:%d]/[msg:%s]/[contractResult:%s]n",resp.Code,resp.Message,resp.ContractResult)}return nil}

  4.创建及调用evm合约

  sdk-go/examples/user_contract_evm_balance/main.go(https://git.chainmaker.org.cn/chainmaker/sdk-go/-/blob/master/examples/user_contract_evm_balance/main.go)

  5.更多示例和用法

  更多示例和用法,请参看单元测试用例

  功能单测代码用户合约sdk_user_contract_test.go系统合约sdk_system_contract_test.go链配置sdk_chain_config_test.go证书管理sdk_cert_manage_test.go消息订阅sdk_subscribe_test.go

相关文章
|
9月前
|
人工智能 编解码
ReCamMaster:视频运镜AI革命!单镜头秒变多机位,AI重渲染颠覆创作
ReCamMaster 是由浙江大学与快手科技联合推出的视频重渲染框架,能够根据用户指定的相机轨迹重新生成视频内容,广泛应用于视频创作、后期制作、教育等领域,提升创作自由度和质量。
645 0
|
12月前
|
弹性计算 运维 监控
云资源运维难?阿里云免费工具来帮忙
阿里云推出免费运维工具——云服务诊断,帮助用户提升对云资源的运维效率、降低门槛、减轻负担。其核心功能包括「健康状态」和「诊断」。通过「健康状态」可实时查看云资源是否正常;「诊断」功能则能快速排查网络、配置、安全等问题,并提供修复建议,助您迅速恢复业务。体验评测活动火热进行中,参与即有机会赢取索尼头戴耳机、小米背包等好礼。活动链接:https://developer.aliyun.com/topic/cloud-health。
923 24
|
C语言
【C语言】:动态内存管理函数malloc,calloc,realloc和free的介绍的介绍
【C语言】:动态内存管理函数malloc,calloc,realloc和free的介绍的介绍
251 0
|
自动驾驶 物联网 5G
|
存储
[数据结构] -- 单链表
[数据结构] -- 单链表
119 1
|
安全 KVM 虚拟化
OpenEuler 中配置 KVM 虚拟化环境指南
本文档详细介绍了如何在OpenEuler系统中配置和管理KVM虚拟化环境,包括环境准备、组件安装、虚拟机安装及管理命令等,适合初学者和有经验的用户。内容覆盖了从桥接网卡配置到虚拟机的安装与管理,以及常见问题的解决方法,帮助用户高效利用虚拟化技术。
1366 0
|
SQL 分布式计算 DataWorks
DataWorks产品使用合集之批量空间添加成员如何实现
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
算法 数据安全/隐私保护 计算机视觉
定量分析图像渲染质量
通常都是由人眼来主观判断图像的质量高低,能否通过数学度量对判定图像的质量呢?比如通过图片的像素/亮度/边缘数量来判断图像是清晰还是模糊
731 0
|
JavaScript 前端开发 索引
往数组添加对象的方法
往数组添加对象的方法
212 0