以太坊2:在客户端发合约(unity客户端项目)
上一篇 总结了一下在客户端创建钱包以及查询余额的一点东西 , 这篇总结点发合约的东西
在客户端创建钱包及查询余额 : 以太坊1:在客户端创建ETH钱包(unity客户端项目)
准备工作开始 :
首先, 在谷歌浏览器里面添加一个叫做MetaMask的插件 , 在谷歌商店直接可以搜到.
下载完成之后 ,因为以太坊主网络太慢 , 使用测试网络 , 点击切换到Kovan测试网络
切换到Kovan测试网络如果没有币的话 从这个地址弄币
然后在unity里面接着之前的脚本继续写 , 先把star里面的东西全注释掉 , 发合约用不着其他的 .
引用的命名空间有这些 :
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using Nethereum.JsonRpc.UnityClient;
using Nethereum.Hex.HexTypes;
using Nethereum.Contracts;
using System;
using System.Numerics;
先写这两行 private string accountAddress;
private string accountPrivateKey ="你的私钥";
然后写个获取地址的方法 :
//这个方法是根据私钥获取钱包地址 上面的私钥不能空
public void importAccountFromPrivateKey(){
try
{
var address = Nethereum.Signer.EthECKey.GetPublicAddress(accountPrivateKey);
accountAddress = address;
Debug.Log("Imported account SUCCESS");
}
catch (Exception e)
{
Debug.Log("error" + e);
}
}
新加两个方法 :
public void deployEthereumContract()
{
var abi = @"[{'inputs': [],'payable': false,'stateMutability': 'nonpayable','type': 'constructor'}]";
var byteCode = @"6080604052348015600f57600080fd5b50603580601d6000396000f3006080604052600080fd00a165627a7a72305820345a2d561d8084f8022c2f601d69e0e1529939a111560ddaab92e5ddb8a9e8e40029";
StartCoroutine(deployContract(abi, byteCode, accountAddress, (result) => {
print("Result_________ " + result);
print("Result_________ " + result.Length);
}));
}
public IEnumerator deployContract(string abi, string byteCode, string senderAddress, System.Action callback)
{
var gas = new HexBigInteger(900000);
var transactionInput = contractTransactionBuilder.BuildTransaction(abi, byteCode, senderAddress, gas, null);
var transactionSignedRequest = new TransactionSignedUnityRequest(_url, accountPrivateKey, accountAddress);
yield return transactionSignedRequest.SignAndSendTransaction(transactionInput);
if (transactionSignedRequest.Exception == null)
{
callback(transactionSignedRequest.Result);
}
else
{
throw new System.InvalidOperationException("Deploy contract tx failed:" + transactionSignedRequest.Exception.Message);
}
}
代码说明 : 上面的abi和byteCode是通过在这个网站上写的合约生成的 包括之前公司项目 都是拿这个作为编辑器的
https://remix.ethereum.org/
我写的测试代码是这样的 :
合约代码合约代码写完之后 点击右边的detail按钮 然后 找到abi和byteCode复制到代码里面就行了
ABI和ByteCode上面的代码如果都写好了的话 在Star里面调用就行了 :
importAccountFromPrivateKey();
deployEthereumContract();
这是运行完成unity打印的结果这个是我发布的合约 , tx/后面跟上unity里面打印的就能查到了
2018年08月31日15:49:47