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

コロナによる需要変化 コロナパンデミックの影響で、人々は外に出られなくなり、自宅で過ごす時間が増えました。 この自粛ムードの中、下記のようなビジネスの需要変化が引き起こされています。 【利用者減少】 ...

2

米国レストランの決済時に毎日お世話になっていた「Square」のビジネスモデルについて本日はふれていきたいと思います。 「Square」とは、ネットにつながったモバイル端末と専用のカードリーダーを用意 ...

3

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

4

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

5

ナイキのSNKRSが、なぜこれほどまでに人気なのか?調べてみました。 きっかけは米国での友達との会話。彼は自分のシューズをみせて、「これ20万円もしたんだぜ。」と語ってくれました。 あまり靴に興味がな ...

-Blockchain, code, Metaverse, VR
-, ,

Copyright© BUSINESS HACKER , 2021 All Rights Reserved Powered by AFFINGER5.