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

相关文章
|
供应链 Serverless BI
基于阿里云区块链服务(BaaS)的供应链金融系统开发与部署
随着区块链技术的快速发展,其在供应链金融领域的应用成为热点。阿里云区块链服务(BaaS)提供安全、高效、易用的平台,支持Hyperledger Fabric和蚂蚁区块链,帮助企业快速构建供应链金融系统。本文通过实战案例展示基于阿里云BaaS开发供应链金融系统的全流程,涵盖企业认证、应收账款融资、交易记录及数据分析等功能,显著提升透明度和可信度,降低融资成本。
|
存储 安全 前端开发
区块链 DAPP 互助逻辑模式系统开发技术方案[源码示例]
Dapp(Decentralized Application)是指不受任何中心化组织或机构控制的、使用特定区块链技术为基础的去中心化应用程序。Dapp 是一种特殊类型的应用,它可以在任何基于区块链技术的系统,例如 Ethereum、EOS 或其他的智能合约系统上运行。
|
安全 算法 定位技术
[Solidity][区块链安全入门]Solidity语言关于密码学知识的运用以及存在漏洞
密码学在区块链中扮演关键角色,确保机密性、完整性、身份认证和不可否认性。对称密钥加密用于快速加密,但不支持不可否认性。非对称加密(如RSA)解决了这一问题,每个用户拥有公钥和私钥。散列函数(如SHA-1、SHA-2)用于数字签名,保证信息来源和完整性。同态加密允许在不解密情况下处理加密数据,增强隐私保护。零知识证明则能验证信息正确性而不泄露额外信息,如ZCash使用该技术隐藏交易详情。环签名技术(如在门罗币中)隐藏签名者身份。区块链隐私保护措施包括混币技术,旨在混淆交易路径。网络和应用层面上也存在隐私挑战,需要综合策略来防御。
316 4
|
安全 区块链 Python
元宇宙中的金融新纪元:区块链与虚拟经济的融合
【8月更文第8天】随着元宇宙概念的兴起,金融行业正在探索如何利用这项新兴技术来创新服务和产品。区块链技术因其去中心化、不可篡改的特点,在元宇宙中构建可信的金融体系中发挥着关键作用。本文将探讨区块链如何支持元宇宙中的虚拟经济,并通过一个简单的示例来展示基于区块链的交易机制。
614 0
|
存储 安全 区块链
SWAP交易所系统开发|区块链交易所系统开发方案
尽管Web3.0的前景仍然不确定,但像尤派数字传媒这样的先行者正在积极尝试元宇宙,并加速转型的步伐。在面对即将到来的新一代互联网时,尤派数字传媒既不会过于骄傲自大,也不会过于谨小慎微。唯有在当前基础上稳步推进,夯实基础,才能在不确定的环境中获得最大的确定性。
|
安全 编译器 区块链
区块链代币 DAPP 通缩燃烧模式系统开发技术方案
合约代码部署流程可能因区块链技术的不同实现而略有不同,但基本步骤如下:
|
算法 区块链
区块链项目的商业模式有哪些成功案例
**评估区块链项目潜力的关键因素包括:技术创新与应用场景(如共识算法、交易速度)、团队背景与发展战略(团队经验、市场定位)、社区活跃度与合作伙伴(用户参与、合作网络)、透明度与合规性(信息透明、法规遵循)、技术可行性(技术成熟度、安全性)及商业模式与市场可行性(市场规模、用户需求)。这些综合考量帮助判断项目的成功潜力和市场前景。**
|
9月前
|
存储 供应链 API
区块链技术在电商API中的应用:保障数据安全与交易透明
区块链技术在电商API中的应用,为数据安全与交易透明提供了新方案。通过数据加密、分布式存储、智能合约管理、商品溯源及实时结算等功能,有效提升电商数据安全性与交易可信度。然而,技术成熟度、隐私保护和监管合规等挑战仍需克服。未来,随着物联网、大数据等技术融合及政策支持,区块链将在电商领域发挥更大潜力,推动行业智能化发展。
|
10月前
|
传感器 人工智能 算法
聚焦“以技术集成支撑单亩价值创造”与“增加值分配机制区块链存证确权”两大核心本质
“振兴链-技术集成科技小院”以技术集成与区块链为核心,推动农业现代化。通过多维度技术整合(如精准农业、物联网等),突破资源约束,最大化单亩产值;同时利用区块链确权存证,建立透明分配机制,解决传统农业中收益不均问题。技术赋能生产,制度重塑分配,实现效率与公平的平衡,助力乡村振兴与产业升级。典型场景显示,该模式可显著提升单亩价值并确保增值公平分配。
|
5月前
|
供应链 安全 算法
区块链技术探索与应用:从密码学奇迹到产业变革引擎
🌟蒋星熠Jaxonic,技术宇宙中的星际旅人。以代码为舟,算法为帆,在区块链的浩瀚星河中探索去中心化的未来。从智能合约到DeFi,用极客精神谱写信任新篇章。
区块链技术探索与应用:从密码学奇迹到产业变革引擎

热门文章

最新文章