Blockchain code Metaverse VR

Unity×VR×Blockchain(234)

スポンサーリンク

//tips

//unity/web連動イーサ送金デモ

Panelでのイーサ送金デモをベースにバックグラウンドで機能を実装し、オブジェクトの接触反応をTransferボタンクリックと同じ効果を持たせる。

送料や送信元、宛先などは固定で考えていく。

まずはinfuraの登録がまだ生きているかを確認。

https://infura.io/dashboard

EtherTransfer2のurl変数にhttps://ropsten.infura.io/v3…を代入。

Metamaskの送信元の秘密鍵をコピーしてprivatekey部分に挿入。送信先のmetamask公開鍵も代入。

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

をOnCollisionEnterに紐付ける。

void OnCollisionEnter(Collision collision)
{
if (collision.gameObject.name == "Sphere")
{
Debug.Log("Hit");
//APIPOSTUP.jsonGO();
EtherTransfer2.TransferRequest();
}
}

EtherTransferスクリプトだけではなくその周辺のスクリプトも修正が必要なのでそちらにも手を加える。

送信元のmetamaskを確認すると0.8965から0.8955になっていたので送信は行われていそう。

ただ、受け取り側は0.1のまま変化していないのでもう少し時間をおいて確認してみる。

今回は単純にスクリプトに全ての送信情報を先に入力しておきinputfield部分からの受け取りと反映を無くした。

public void TransferRequest()
{
StartCoroutine(TransferEther());
Debug.Log("TransferRequest");
}

public IEnumerator TransferEther()
{
var ethTransfer = new EthTransferUnityRequest(Url, PrivateKey);

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

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

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

var transactionReceiptPolling = new TransactionReceiptPollingRequest(Url);
yield return transactionReceiptPolling.PollForReceipt(TransactionHash, 2);

Debug.Log("Transaction mined");

var balanceRequest = new EthGetBalanceUnityRequest(Url);
yield return balanceRequest.SendRequest(receivingAddress, BlockParameter.CreateLatest());

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

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

送金の方は確認できたが受領側は確認できないので問題点を見つけていく。

Deployment transaction hashのデバッグは確認できているので、このコードを書き込んであるTokenDeployAndSendCoroutinesUnityWebRequestスクリプトの続き部分を確認する。

次のデバッグは

//create a poll to get the receipt when mined
var transactionReceiptPolling = new TransactionReceiptPollingRequest(url);
//checking every 2 seconds for the receipt
yield return transactionReceiptPolling.PollForReceipt(transactionHash, 2);
var deploymentReceipt = transactionReceiptPolling.Result;

Debug.Log("Deployment contract address:" + deploymentReceipt.ContractAddress);

となっているのでこちらのどこかでつまづいている可能性が高い。

https://mainnet.infura.io

にurlを戻して実行を確認する。
今度はHTTP/1.1 403 Forbiddenの表示がされてしまった。

Smart contranctの流れを確認する必要を感じたので下記を確認していく。

https://docs.nethereum.com/en/latest/unity3d-smartcontracts-getting-started/

var transactionReceiptPolling = new TransactionReceiptPollingRequest(url);
Debug.Log("1");
yield return transactionReceiptPolling.PollForReceipt(transactionHash, 2);
Debug.Log("2");
var deploymentReceipt = transactionReceiptPolling.Result;

とデバッグログを入れたところ1は返ってくるが2が返らないことが分かった。

If no errors have occurred we can retrieve the transaction hash from the Request and Poll every 2 seconds to wait for the transaction to be mined.とあるのでthe transaction to be minedされていないことが問題となっている。

public class HitBall : MonoBehaviour
{
[SerializeField]
APIPOSTUP APIPOSTUP;

[SerializeField]
EtherTransfer2 EtherTransfer2;

の部分のスクリプトの保存ができておらず、unity側でSerializeFieldのEtherTransfer2の登録がされていなかったのが問題かもしれない。

再度実行。もう少し待機して変化を確認する。無事に送金が行えていた。即座にではないが1分後には反映されていたように思う。

この送金内容をwebの方に反映するにはOnCollisionEnter(Collision collision)にAPIPOSTUP.jsonGO();を復活させ、

public class APIPOSTUP : MonoBehaviour
{
double count =0.01;

public void jsonGO()
{
StartCoroutine(Upload());
}

IEnumerator Upload()
{
WWWForm form = new WWWForm();
//form.AddField("myField", "myData");
form.AddField("name", "送金額");
form.AddField("message", count+"ETH");

のように表示内容を変えた。ただ、0.01が微妙な数字であるため、これはjsの方で加工することにする。
JSを修正し、下記のようにした。無事確認できた。

.done(function(json)
{
function calc()
{
var number=0;
//var obj =JSON.parse(json);
for(i = 0, len =json.length; i < len; i++)
{
var num = parseInt(json[i]['message']);
number = number + num;
}
return number;
}
result = calc();
$('#postsmen').text(result*0.01)
$('#mycount').text("送金額")

人気の記事

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, Metaverse, VR
-, ,

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