区块链技术链游NFT元宇宙链游系统开发项目介绍(solidity程序语言)

简介: 区块链技术链游NFT元宇宙链游系统开发项目介绍(solidity程序语言)

  ChainMaker Solidity语言版本智能合约完全兼容EVM,更多长安链证书与EVM地址的转换详情可参见EVM地址说明。

  在“证书管理”界面申请证书后,可根据获得的用户证书文件user_sign.crt获取该用户的EVM地址,代码示例如下:

  import(

  "encoding/hex"

  "encoding/pem"

  "fmt"

  "io/ioutil"

  "chainmaker.org/chainmaker-go/common/crypto/x509"

  "chainmaker.org/chainmaker-go/common/evmutils"

  "github.com/ethereum/go-ethereum/accounts/abi"

  )

  func MakeAddrAndSkiFromCrtFilePath(){

  crtFilePath:="./user_sign.crt"

  crtBytes,err:=ioutil.ReadFile(crtFilePath)

  if err!=nil{

  fmt.Printf("fail to read the crt file:%v",err)

  }

  blockCrt,_:=pem.Decode(crtBytes)

  crt,err:=x509.ParseCertificate(blockCrt.Bytes)

  if err!=nil{

  fmt.Printf("fail to parse certificate:%v",err)

  }

  ski:=hex.EncodeToString(crt.SubjectKeyId)

  addrInt,err:=evmutils.MakeAddressFromHex(ski)

  if err!=nil{

  fmt.Printf("fail to make address from hex:%v",err)

  }

  //证书SKI

  fmt.Printf("clientAddrSki:%sn",ski)

  //EVM地址(十进制)

  fmt.Printf("clientAddrInt:%sn",addrInt.String())

  //EVM地址

  fmt.Printf("clientEthAddr:0x%xn",addrInt.AsStringKey())

  }

  成功运行可以查看到如下图输出:

  ABI编码示例

  ChainMake Solidity语言版本智能合约完全兼容EVM,更多ABI编码的详情可参见Solidity官方文档。

  合约初始化

  以Token合约为例,对合约初始化参数进行ABI编码。代码示例如下:

  import(

  "encoding/hex"

  "fmt"

  "io/ioutil"

  "math/big"

  "strings"

  "chainmaker.org/chainmaker-go/common/evmutils"

  "github.com/ethereum/go-ethereum/accounts/abi"

  )

  const(

  //编译合约后获取的abi文件的路径

  tokenABIPath="./testdata/token-evm-demo/token.abi"

  //合约安装时调用constructor,调用方法设为空字符串

  function=""

  //入参1:发行EVM地址,可根据用户证书转换取得

  clientAddr="0x89f4090e315621696d6936453661ec4b9795ad27"

  )

  func testUserContractTokenEVMConstructor(){

  abiJson,err:=ioutil.ReadFile(tokenABIPath)

  if err!=nil{

  fmt.Printf("fail to read the abi file:%v",err)

  }

  myAbi,err:=abi.JSON(strings.NewReader(string(abiJson)))

  if err!=nil{

  fmt.Printf("fail to get abi object:%v",err)

  }

  addr:=evmutils.BigToAddress(evmutils.FromHexString(clientAddr[2:]))

  dataByte,err:=myAbi.Pack(function,addr)

  if err!=nil{

  fmt.Printf("fail to pack contract input:%v",err)

  }

  data:=hex.EncodeToString(dataByte)

  pairs:=map[string]string{

  "data":data,

  }

  //编码后的参数

  fmt.Printf("FuncParam%vn",pairs)

  }

  输出结果如下:

  FuncParam map[data:00000000000000000000000089f4090e315621696d6936453661ec4b9795ad27]

  通过TBaaS控制台安装合约并填写对应初始化参数:

  key取值:data

  value取值:00000000000000000000000089f4090e315621696d6936453661ec4b9795ad27

  合约调用

  以Token合约为例,对transfer函数的函数名及调用参数进行ABI编码。代码示例如下:

  import(

  "encoding/hex"

  "fmt"

  "io/ioutil"

  "math/big"

  "strings"

  "chainmaker.org/chainmaker-go/common/evmutils"

  "github.com/ethereum/go-ethereum/accounts/abi"

  )

  const(

  //编译合约后获取的abi文件的路径

  tokenABIPath="./testdata/token-evm-demo/token.abi"

  //调用方法

  function="transfer"

  //入参1:转账EVM地址,可根据用户证书转换取得

  clientAddr="0xa55f1e0cb68b0cc589906078237094bdb9715bfd"

  //入参2:转账金额

  amount=200

  )

  func testUserContractTokenEVMTransfer(){

  abiJson,err:=ioutil.ReadFile(tokenABIPath)

  if err!=nil{

  fmt.Printf("fail to read the abi file:%v",err)

  }

  myAbi,err:=abi.JSON(strings.NewReader(string(abiJson)))

  if err!=nil{

  fmt.Printf("fail to get abi object:%v",err)

  }

  addr:=evmutils.BigToAddress(evmutils.FromHexString(clientAddr[2:]))

  dataByte,err:=myAbi.Pack(function,addr,big.NewInt(amount))

  if err!=nil{

  fmt.Printf("fail to pack contract input:%v",err)

  }

  data:=hex.EncodeToString(dataByte)

  method:=data[0:8]

  pairs:=map[string]string{

  "data":data,

  }

  //编码后的函数名

  fmt.Printf("FuncName:%sn",method)

  //编码后的参数

  fmt.Printf("FuncParam%vn",pairs)

  }

  输出结果如下:

  FuncName:a9059cbb

  FuncParam map[data:a9059cbb000000000000000000000000a55f1e0cb68b0cc589906078237094bdb9715bfd00000000000000000000000000000000000000000000000000000000000000c8]

  长安链SDK调用示例

  将ABI编码后的函数名及调用参数分别作为method与params,代码示例如下:

  method:="a9059cbb"

  params:=map[string]string{

  "data":"a9059cbb000000000000000000000000a55f1e0cb68b0cc589906078237094bdb9715bfd00000000000000000000000000000000000000000000000000000000000000c8",

  }

  resp,err:=client.InvokeContract("fact",method,"",params,-1,true)

  if err!=nil{

  fmt.Printf("fail to invoke contract:%v",err)

  }

  云API调用示例

  将ABI编码后的函数名及调用参数分别填入FuncName与FuncParam字段,代码示例如下:

  action_params={

  "ClusterId":"chainmaker-txtxtxtxtx",

  "ChainId":"chain_txtxt",

  "ContractName":"fact",

  "FuncName":"a9059cbb",

  "FuncParam":"{"data":"a9059cbb000000000000000000000000a55f1e0cb68b0cc589906078237094bdb9715bfd00000000000000000000000000000000000000000000000000000000000000c8"}",

  "AsyncFlag":0,

  "Action":"InvokeChainMakerContract",

  "Version":"2018-04-16",

  "Region":"ap-beijing"

  }

  #实例化一个请求对象,根据调用的接口和实际情况,可以进一步设置请求参数

  params=json.dumps(action_params)

  req=models.InvokeChainMakerContractRequest()

  #调用InvokeChainMakerContractRequest的from_json_string方法,使用params初始化req对象

  req.from_json_string(params)

  #通过client对象调用想要访问的接口,需要传入请求对象

  resp=client.InvokeChainMakerContract(req)

  #输出json格式的字符串回包

  print(resp.to_json_string())

相关文章
|
7月前
|
供应链 Serverless BI
基于阿里云区块链服务(BaaS)的供应链金融系统开发与部署
随着区块链技术的快速发展,其在供应链金融领域的应用成为热点。阿里云区块链服务(BaaS)提供安全、高效、易用的平台,支持Hyperledger Fabric和蚂蚁区块链,帮助企业快速构建供应链金融系统。本文通过实战案例展示基于阿里云BaaS开发供应链金融系统的全流程,涵盖企业认证、应收账款融资、交易记录及数据分析等功能,显著提升透明度和可信度,降低融资成本。
|
存储 安全 前端开发
区块链 DAPP 互助逻辑模式系统开发技术方案[源码示例]
Dapp(Decentralized Application)是指不受任何中心化组织或机构控制的、使用特定区块链技术为基础的去中心化应用程序。Dapp 是一种特殊类型的应用,它可以在任何基于区块链技术的系统,例如 Ethereum、EOS 或其他的智能合约系统上运行。
|
存储 安全 区块链
SWAP交易所系统开发|区块链交易所系统开发方案
尽管Web3.0的前景仍然不确定,但像尤派数字传媒这样的先行者正在积极尝试元宇宙,并加速转型的步伐。在面对即将到来的新一代互联网时,尤派数字传媒既不会过于骄傲自大,也不会过于谨小慎微。唯有在当前基础上稳步推进,夯实基础,才能在不确定的环境中获得最大的确定性。
|
安全 编译器 区块链
区块链代币 DAPP 通缩燃烧模式系统开发技术方案
合约代码部署流程可能因区块链技术的不同实现而略有不同,但基本步骤如下:
|
3月前
|
存储 供应链 API
区块链技术在电商API中的应用:保障数据安全与交易透明
区块链技术在电商API中的应用,为数据安全与交易透明提供了新方案。通过数据加密、分布式存储、智能合约管理、商品溯源及实时结算等功能,有效提升电商数据安全性与交易可信度。然而,技术成熟度、隐私保护和监管合规等挑战仍需克服。未来,随着物联网、大数据等技术融合及政策支持,区块链将在电商领域发挥更大潜力,推动行业智能化发展。
|
4月前
|
传感器 人工智能 算法
聚焦“以技术集成支撑单亩价值创造”与“增加值分配机制区块链存证确权”两大核心本质
“振兴链-技术集成科技小院”以技术集成与区块链为核心,推动农业现代化。通过多维度技术整合(如精准农业、物联网等),突破资源约束,最大化单亩产值;同时利用区块链确权存证,建立透明分配机制,解决传统农业中收益不均问题。技术赋能生产,制度重塑分配,实现效率与公平的平衡,助力乡村振兴与产业升级。典型场景显示,该模式可显著提升单亩价值并确保增值公平分配。
|
7月前
|
存储 安全 算法
深入探讨区块链技术的安全性
深入探讨区块链技术的安全性
466 103
|
7月前
|
安全 区块链 数据安全/隐私保护
区块链技术在跨境支付中的应用:打破传统,畅行全球支付新时代
区块链技术在跨境支付中的应用:打破传统,畅行全球支付新时代
1084 12
区块链技术在跨境支付中的应用:打破传统,畅行全球支付新时代
|
6月前
|
安全 算法 区块链
当量子计算遇上区块链:未来技术的双刃剑
当量子计算遇上区块链:未来技术的双刃剑
250 16
|
7月前
|
存储 供应链 物联网
区块链技术的未来发展趋势:革新、挑战与机遇
区块链技术的未来发展趋势:革新、挑战与机遇
333 8

热门文章

最新文章