区块链技术链游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())

相关文章
|
3天前
|
供应链 算法 安全
探索区块链技术中的隐私保护机制
探索区块链技术中的隐私保护机制
46 27
|
1月前
|
供应链 安全 分布式数据库
探索区块链技术在供应链管理中的应用
【10月更文挑战第21天】 本文深入探讨了区块链技术如何在供应链管理中发挥关键作用,通过具体案例分析,揭示了区块链提高透明度、降低成本和增强安全性的潜力。文章首先概述了区块链技术的基本原理及其对传统供应链模式的挑战,接着详细讨论了区块链如何在不同供应链环节中实施,并分析了其带来的变革。最后,文章提出了企业在采纳区块链技术时可能面临的挑战和应对策略,为供应链管理者提供了宝贵的参考。
118 26
|
1月前
|
存储 安全 物联网
未来已来:区块链技术在物联网与虚拟现实中的应用
随着科技的不断进步,新兴技术如区块链、物联网(IoT)和虚拟现实(VR)正在逐渐改变我们的生活和工作方式。本文将探讨这些技术的发展趋势和应用场景,以及它们如何相互融合,为我们带来更便捷、安全和沉浸式的体验。
|
2月前
|
安全 物联网 物联网安全
揭秘区块链技术在物联网(IoT)安全中的革新应用
揭秘区块链技术在物联网(IoT)安全中的革新应用
|
2月前
|
存储 供应链 分布式数据库
深入理解区块链技术:原理、应用与挑战
本文旨在探讨区块链技术的基本原理、主要应用及其面临的挑战。通过分析区块链的分布式账本技术、加密算法和共识机制,我们揭示了其如何在无需中心化权威的情况下确保数据的不可篡改性和透明性。此外,文章还讨论了区块链在金融、供应链管理、智能合约等领域的应用案例,并指出了当前区块链技术面临的可扩展性、隐私保护和法律监管等挑战。通过对这些内容的深入分析,我们希望为读者提供一个全面而深入的区块链技术概览。
257 16
|
1月前
|
存储 供应链 算法
深入探索区块链技术:原理、应用与未来展望
本文将带你深入了解区块链技术的基本原理,探讨其在金融、供应链、医疗等多个领域的应用案例,并展望其未来的发展趋势。通过本文,你将对区块链技术有一个全面的认识,理解其背后的技术逻辑和应用场景。
|
2月前
|
存储 供应链 安全
探索区块链技术的未来——去中心化应用的崛起
探索区块链技术的未来——去中心化应用的崛起
92 13
|
2月前
|
供应链 安全 区块链
探索区块链技术在数据安全中的应用
本文深入探讨了区块链技术如何革新数据安全领域,特别是在保护个人隐私、增强数据完整性和透明度方面的作用。通过分析区块链的去中心化特性、加密技术以及智能合约的功能,文章阐述了这一技术如何有效防止数据篡改、确保交易记录的不可逆性,并促进跨组织间的信任建立。此外,还讨论了当前区块链技术面临的挑战及未来发展趋势,为理解其在数据安全领域的潜力提供了全面视角。
|
1月前
|
存储 供应链 监控
深入探索区块链技术在供应链管理中的应用####
本文旨在探讨区块链技术如何革新供应链管理,通过分析其核心特性与实际案例,揭示该技术如何增强透明度、提升效率并降低成本。我们将从区块链的基本原理入手,逐步剖析其在供应链各环节中的具体应用,最终展望其未来发展趋势。 ####
85 3
|
1月前
|
供应链 物联网 区块链
未来技术的脉动:探索区块链、物联网与虚拟现实的融合趋势
本文深入探讨了区块链技术、物联网(IoT)和虚拟现实(VR)这三个领域的最新发展趋势,以及它们在现代科技生态中的交互作用。通过分析这些技术的独特优势和面临的挑战,我们揭示了它们如何共同塑造未来的技术景观,特别是在数据安全、智能设备管理和沉浸式体验方面。文章还讨论了这些技术融合后可能带来的社会和文化影响,以及它们如何推动创新和促进经济增长。
62 3