Unity跨平台技术分享Unity基础入门分享Unity技术分享

以太坊2:在客户端发合约(unity客户端项目)

2018-08-31  本文已影响8人  風华绝世

上一篇 总结了一下在客户端创建钱包以及查询余额的一点东西   , 这篇总结点发合约的东西

在客户端创建钱包及查询余额  :  以太坊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打印的结果

查询合约 https://kovan.etherscan.io/tx/0x613ecfbc56e208283f483ce849a1cf4586d5290de2e3af3e0da4c865d15f257a

这个是我发布的合约   ,  tx/后面跟上unity里面打印的就能查到了

2018年08月31日15:49:47

上一篇下一篇

猜你喜欢

热点阅读