Blockchain code VR

Unity×VR×Blockchain(201)

スポンサーリンク

//tips

//unityでのブロックチェーンスクリプト確認

まずUnityで経済圏を持ったメタバースを作成していく際に必要になりそうなのでは、ネット上のサイトとの連動と情報の受け渡し部分であるといえる。

先のunityを用いた仮想通貨送金プログラムを見直し、ネット連動と情報の受け渡しの土台を調べていく。

下記のスクリプトから紐解いていく。

・TokenDeployAndSendCoroutinesUnityWebRequest
・EtherTransferCoroutinesUnityWebRequest
・GetLatestBlockVanillaNethereum
・GetLatestBlockCoroutine

まずは内容が先のブロックチェーンのpython構築のサイトと似ていたEtherTransferCoroutinesUnityWebRequest から確認していく。

UnityWebRequestとあるのでunityからEtherTransferへのwebリクエストであることがわかる。

UsingでNethereum関係の名前空間の取り込みを行なっており、ここでRPCを使っての連動を行う前準備を行なっていることがわかる。

using System.Collections;
using Nethereum.JsonRpc.UnityClient;
using Nethereum.RPC.Eth.DTOs;
using Nethereum.Util;
using UnityEngine;
using UnityEngine.UI;

public class EtherTransferCoroutinesUnityWebRequest : MonoBehaviour {

public string Url = "http://localhost:8545";

http://localhost:8545は下記のように説明されている。

http://localhost:8545 is the RPC port of your locally running Ethereum node software

Ethereumのネットワークと接続するエンドポイントを自身のPCに設定。

エンド ポイントはネットワーク上のコンピュータを特定するIPアドレスと、そのコンピュータ上のポートを特定するポート番号の組み合わせによって表される。

//秘密鍵
public string PrivateKey = "0xb5b1870957d373ef0eeffecc6e4812c0fd08f554b37b233526acc331bf1544f7";

//公開鍵
public string AddressTo = "0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe";

//数量
public decimal Amount = 1.1m;

//送金の際の手数料
public decimal GasPriceGwei = 2;

public string TransactionHash = "";
public decimal BalanceAddressTo = 0m;

public InputField InputUrl;
public InputField InputPrivateKey;
public InputField InputAddressTo;
public InputField InputAmount;

public InputField ResultBalanceAddressTo;
public InputField ResultTxnHash;

上記のような可変の記入項目を設けておく。

void Start () {

URLなど記入項目を各InputFieldのテキスト部分に代入し、表示。

InputUrl.text = Url;
InputPrivateKey.text = PrivateKey;
InputAddressTo.text = AddressTo;
InputAmount.text = Amount.ToString();

}

TransferボタンをクリックするとTransferEther()のコルーチンを実行。

public void TransferRequest()
{
StartCoroutine(TransferEther());
}

public IEnumerator TransferEther()
{
Url = InputUrl.text;
PrivateKey = InputPrivateKey.text;//秘密鍵
AddressTo = InputAddressTo.text;//相手先公開鍵
Amount = System.Decimal.Parse(InputAmount.text);//stringからdecimalへ型変換

EthTransferUnityRequestのオブジェクトを新たに作成し、引数に自身のポート番号と秘密鍵を入れている。

//initialising the transaction request sender
var ethTransfer = new EthTransferUnityRequest(Url, PrivateKey);

公開鍵のオブジェクトを別途作成。

var receivingAddress = AddressTo;

オブジェクトのTransferEtherメソッドを実行。引数に公開鍵と数量、送金手数料を入れている。

yield return ethTransfer.TransferEther(receivingAddress, Amount, GasPriceGwei);

例外が発生している場合はコルーチン処理を中断して離脱。

if (ethTransfer.Exception != null)
{
Debug.Log(ethTransfer.Exception.Message);
yield break;
}

問題なければresultメソッドを使用してオブジェクトのハッシュを作成。

TransactionHash = ethTransfer.Result;
ResultTxnHash.text = TransactionHash;
Debug.Log("Transfer transaction hash:" + TransactionHash);

この段階で送付先の公開鍵と結合させているのかもしれない。

ここでマイニング待ちのトランザクションオブジェクトを作成。

//create a poll to get the receipt when mined
var transactionReceiptPolling = new TransactionReceiptPollingRequest(Url);

マイニング待ちのトランザクションとして2秒ごとにハッシュを引数とする申請を送る。

参考ページ:https://docs.nethereum.com/en/latest/unity3d-sending-ether/

//checking every 2 seconds for the receipt
yield return transactionReceiptPolling.PollForReceipt(TransactionHash, 2);

Debug.Log("Transaction mined");

残高の確認を行うためEthGetBalanceUnityRequestオブジェクトを新たに作成。

var balanceRequest = new EthGetBalanceUnityRequest(Url);

下記で残高確認とブロックチェーン最新版取得を行う。

yield return balanceRequest.SendRequest(receivingAddress, BlockParameter.CreateLatest());

BalanceAddressTo = UnitConversion.Convert.FromWei(balanceRequest.Result.Value);

これは名前空間の中身を見て描かれているメソッドを読まないと実際の処理内容はわからなさそう。

ResultBalanceAddressTo.text = BalanceAddressTo.ToString();

Debug.Log("Balance of account:" + BalanceAddressTo);
}
}

人気の記事

1

皆さん、ついに、エアラインでも、サブスクリプションが始まったのはご存じですか? まだ実験段階ですが、ANAが、定額全国住み放題サービスを提供する「ADDress」と組んで、国内線を4回まで定額利用可能 ...

2

無料でネットショップを開けるアプリとして多くの人に驚きを与えたBASE株式会社が、2019年10月25日東証マザーズに上場しました。2020年2月時点で90万店を超えるショップを抱えるまでに成長してい ...

3

2011年にサービスを開始してから圧倒的な成長率を誇るインテリア通販サイト 【FLYMEe/フライミー】を皆さんご存じでしょうか。 「自分のイメージするインテリア、本当に欲しいインテリアがどこにあるの ...

4

ついに、noteの月間アクティブユーザー数が4400万人(2020年3月時点)に到達しました。 そもそも、「note」とは、クリエイターが、文章やマンガ、写真、音声を投稿することができ、ユーザーはその ...

5

ボードゲームカフェが1日2回転で儲かるという記事をみつけたので興味を持ち、調べてみました。 まずは、需要がどれくらいあるのか、市場のようすからみていきましょう。 世界最大のボードゲーム市場はドイツで、 ...

-Blockchain, code, VR
-, ,

Copyright© BUSINESS HUNTER , 2023 All Rights Reserved Powered by AFFINGER5.