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

相关文章
|
8月前
|
供应链 安全 算法
区块链技术探索与应用:从密码学奇迹到产业变革引擎
🌟蒋星熠Jaxonic,技术宇宙中的星际旅人。以代码为舟,算法为帆,在区块链的浩瀚星河中探索去中心化的未来。从智能合约到DeFi,用极客精神谱写信任新篇章。
区块链技术探索与应用:从密码学奇迹到产业变革引擎
|
9月前
|
人工智能 安全 数据可视化
数字孪生 + 区块链:MyEMS 引领能源管理技术融合新趋势
MyEMS融合数字孪生与区块链技术,打造可信、透明、高效的能源管理新范式。通过实时镜像、智能预测与数据上链,实现能耗可追溯、碳排可验证、交易可信任,推动能源管理迈向智能化与价值化新时代。(238字)
409 1
|
12月前
|
存储 安全 API
区块链技术:为电商API接口应用前景筑牢安全与效率之基
区块链技术凭借其去中心化、透明性、安全性和不可篡改性,为电商API接口带来了全新机遇。它可提升数据安全性、增强交易透明度、优化供应链管理,并降低运营成本。应用场景包括数据加密传输、分布式存储、智能合约权限管理、商品溯源防伪及实时结算。尽管面临性能、隐私保护与监管等挑战,随着技术进步与融合创新,区块链将在电商API中实现更智能、高效的应用,推动行业变革升级。
|
12月前
|
存储 供应链 API
区块链技术在电商API中的应用:保障数据安全与交易透明
区块链技术在电商API中的应用,为数据安全与交易透明提供了新方案。通过数据加密、分布式存储、智能合约管理、商品溯源及实时结算等功能,有效提升电商数据安全性与交易可信度。然而,技术成熟度、隐私保护和监管合规等挑战仍需克服。未来,随着物联网、大数据等技术融合及政策支持,区块链将在电商领域发挥更大潜力,推动行业智能化发展。
|
传感器 人工智能 算法
聚焦“以技术集成支撑单亩价值创造”与“增加值分配机制区块链存证确权”两大核心本质
“振兴链-技术集成科技小院”以技术集成与区块链为核心,推动农业现代化。通过多维度技术整合(如精准农业、物联网等),突破资源约束,最大化单亩产值;同时利用区块链确权存证,建立透明分配机制,解决传统农业中收益不均问题。技术赋能生产,制度重塑分配,实现效率与公平的平衡,助力乡村振兴与产业升级。典型场景显示,该模式可显著提升单亩价值并确保增值公平分配。
|
存储 安全 算法
深入探讨区块链技术的安全性
深入探讨区块链技术的安全性
876 103
|
安全 区块链 数据安全/隐私保护
区块链技术在跨境支付中的应用:打破传统,畅行全球支付新时代
区块链技术在跨境支付中的应用:打破传统,畅行全球支付新时代
1654 12
区块链技术在跨境支付中的应用:打破传统,畅行全球支付新时代
|
安全 算法 区块链
当量子计算遇上区块链:未来技术的双刃剑
当量子计算遇上区块链:未来技术的双刃剑
621 16
|
供应链 算法 安全
探索区块链技术中的隐私保护机制
探索区块链技术中的隐私保护机制
618 27
|
存储 供应链 物联网
区块链技术的未来发展趋势:革新、挑战与机遇
区块链技术的未来发展趋势:革新、挑战与机遇
780 8