//tips
島津様打ち合わせ
//unityブロックチェーンスクリプト理解
EtherTransferCoroutinesUnityWebRequestの残高確認のプロセスで出てくる、EthGetBalanceUnityRequestオブジェクトの中身を確認。
namespace Nethereum.JsonRpc.UnityClientの中に記述されている。Nethereum.RPC.Eth.EthGetBalance オブジェクトを作成し、そのメソッドである SendRequestを実行するために送付先情報・ブロックチェーン状況を確認し、ひとまとめにしている。
public class EthGetBalanceUnityRequest:UnityRpcClient<Nethereum.Hex.HexTypes.HexBigInteger>
{
private readonly Nethereum.RPC.Eth.EthGetBalance _ethGetBalance;
public EthGetBalanceUnityRequest(string url, JsonSerializerSettings jsonSerializerSettings = null):base(url, jsonSerializerSettings)
{
_ethGetBalance = new Nethereum.RPC.Eth.EthGetBalance(null);
}
public IEnumerator SendRequest(System.String address, Nethereum.RPC.Eth.DTOs.BlockParameter block)
{
var request = _ethGetBalance.BuildRequest(address, block);
yield return SendRequest(request);
}
}
UnitConversion.Convert.FromWeiの部分は下記を参考にするとわかりやすい。
Web3を用いた非同期リクエスト残高を取得した後は、we can convert the balance to Ether using the conversion utility’s “FromWei” methodでわかるように残高をイーサリアムへ変換する。
https://docs.nethereum.com/en/latest/nethereum-converting-units/
これが一つ目のスクリプトEtherTransferCoroutinesUnityWebRequestの内容であったが、shaのハッシュ化の該当箇所が見つけられなかったので頭の片隅に入れて他のスクリプトにも出てきていななければ再度探す。
https://github.com/Nethereum/Nethereum/blob/be4703a748722fe4e4ab7e37823f33c74d7044d6/src/Nethereum.Unity/TransactionSignedUnityRequest.cs#L44
他のスクリプトを確認したが一番大事なところはプラグインのメソッドの引用になっており、それらの名前空間のメソッドまたそれらの使い方を知っているかが大事なように思われる。pythonのモジュールの利用と同じ感じを受けた。
一旦これから再現する内容は、unityを通して取引情報を発生させ、オンラインサイトを通し、取引を実行し、ブロックチェーンまたはデータの送受信で反映するということを行いたいので、イーサリアムの必要メソッドの調査とベースとなるwebとunityとの連携動作を確認していくことにする。
Unityでweb接続をまずは実現していきたいので下記を参考にしていく。
http://blog.lab7.biz/archives/26966921.html
https://qiita.com/akira-sasaki/items/09e4556ec4ad55a19a14
※NEMバージョンも教えてもらったので追記
https://qiita.com/cryptomikan/items/6604da479bc921cccffc
※イーサリアムの入門サイトページ
https://www.intellilink.co.jp/column/fintech/2016/061700.aspx
早速Unityでの REST API接続を試していく。
RESTful APIとは、Webシステムを外部から利用するためのプログラムの呼び出し規約の種類の一つで、「REST」と呼ばれる設計原則に従って策定されたもの
https://e-words.jp/w/RESTful_API.html
HTTPメソッドによりシンプルな情報の取得・書き込みが可能になるよう。
Unityでの REST APIの使用には、UnityWebRequestを活用する。
https://docs.unity3d.com/ja/2019.4/ScriptReference/Networking.UnityWebRequest.html
早速天気予報APIに REST API接続して情報を GETしてみる。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
UnityWebRequestを使うにはusing UnityEngine.Networking;が必要。
using UnityEngine.Networking;
public class API_Test05 : MonoBehaviour
{
void Start()
{
UnityWebRequestの Getリクエストの結果を待つのでコルーチンで非同期処理としてメインのメソッドを呼び出す。これはブロックチェーンの検証待ちの部分と同じ。返信の結果をもとに物事を進めたいときはコルーチンを使用する。
StartCoroutine(Get_WeatherInfo());
}
private IEnumerator Get_WeatherInfo()
{
//UnityWebRequestを生成
UnityWebRequest webRequest
= UnityWebRequest.Get("https://weather.tsukumijima.net/api/forecast?city=130010");
SendWebRequestで作成したリクエストを送信。
//送受信開始
yield return webRequest.SendWebRequest();
if (webRequest.isHttpError || webRequest.isNetworkError)
{
//エラー確認
Debug.Log(webRequest.error);
}
else
{
DownloadHandlerが受け取ったリクエストに対する応答の中身を確認。
ここではJSONデータが確認できる。
//結果確認
Debug.Log(webRequest.downloadHandler.text);
}
}
}
これをunityの新しいシーンのempty objectにアタッチし、実行したら下記のような結果が返ってきた。
{
"publicTime": "2021-05-15T17:00:00+09:00",
"publicTimeFormatted": "2021/05/15 17:00:00",
"publishingOffice": "気象庁",
"title": "東京都 東京 の天気",
"link": "https://www.jma.go.jp/bosai/forecast/#area_type=offices&area_code=130000",
"description": {
"publicTime": "2021-05-15T16:37:00+09:00",
"publicTimeFormatted": "2021/05/15 16:37:00",
"headlineText": "",
"bodyText": " 三陸沖には高気圧があって東へ移動しています。一方、梅雨前線が華中から九州付近を通って日本の東へのびています。\n\n 東京地方は、おおむね晴れています。\n\n 15日は、はじめ高気圧に覆われますが、湿った空気や上空の気圧の谷の影響を受ける見込みです。このため、晴れで夜は曇りとなるでしょう。\n\n 16日は、湿った空気や日本海から東北地方へのびる前線の影響により、曇りで昼過ぎは雨となる見込みです。\n\n【関東甲信地方】\n 関東甲信地方は、曇りや晴れとなっています。\n\n 15日は、はじめ高気圧に覆われますが、湿った空気や上空の気圧の谷の影響を受ける見込みです。このため、曇りや晴れで、雨の降る所があるでしょう。\n\n 16日は、湿った空気や日本海から東北地方へのびる前線の影響で、曇りや雨となるでしょう。\n\n 関東地方と伊豆諸島の海上では、15日は波がやや高く、16日は波が高いでしょう。また、所々で霧が発生しています。船舶は高波や視程障害に注意してください。",
"text": "\n\n 三陸沖には高気圧があって東へ移動しています。一方、梅雨前線が華中から九州付近を通って日本の東へのびています。\n\n 東京地方は、おおむね晴れています。\n\n 15日は、はじめ高気圧に覆われますが、湿った空気や上空の気圧の谷の影響を受ける見込みです。このため、晴れで夜は曇りとなるでしょう。\n\n 16日は、湿った空気や日本海から東北地方へのびる前線の影響により、曇りで昼過ぎは雨となる見込みです。\n\n【関東甲信地方】\n 関東甲信地方は、曇りや晴れとなっています。\n\n 15日は、はじめ高気圧に覆われますが、湿った空気や上空の気圧の谷の影響を受ける見込みです。このため、曇りや晴れで、雨の降る所があるでしょう。\n\n 16日は、湿った空気や日本海から東北地方へのびる前線の影響で、曇りや雨となるでしょう。\n\n 関東地方と伊豆諸島の海上では、15日は波がやや高く、16日は波が高いでしょう。また、所々で霧が発生しています。船舶は高波や視程障害に注意してください。"
},
"forecasts": [
{
"date": "2021-05-15",
"dateLabel": "今日",
"telop": "晴のち曇",
"detail": {
"weather": "晴れ 夜 くもり",
"wind": "南の風 やや強く",
"wave": "1メートル 後 0.5メートル"
},
"temperature": {
"min": {
"celsius": null,
"fahrenheit": null
},
"max": {
"celsius": null,
"fahrenheit": null
}
},
"chanceOfRain": {
"T00_06": "--%",
"T06_12": "--%",
"T12_18": "--%",
"T18_24": "10%"
},
"image": {
"title": "晴のち曇",
"url": "https://www.jma.go.jp/bosai/forecast/img/110.svg",
"width": 80,
"height": 60
}
},
{
"date": "2021-05-16",
"dateLabel": "明日",
"telop": "曇一時雨",
"detail": {
"weather": "くもり 昼過ぎ 一時 雨",
"wind": "南の風 日中 やや強く",
"wave": "0.5メートル 後 1メートル"
},
"temperature": {
"min": {
"celsius": "17",
"fahrenheit": "62.6"
},
"max": {
"celsius": "22",
"fahrenheit": "71.6"
}
},
"chanceOfRain": {
"T00_06": "10%",
"T06_12": "30%",
"T12_18": "50%",
"T18_24": "40%"
},
"image": {
"title": "曇一時雨",
"url": "https://www.jma.go.jp/bosai/forecast/img/202.svg",
"width": 80,
"height": 60
}
},
{
"date": "2021-05-17",
"dateLabel": "明後日",
"telop": "曇一時雨",
"detail": {
"weather": "くもり 一時 雨",
"wind": "南の風 やや強く",
"wave": "1メートル"
},
"temperature": {
"min": {
"celsius": "20",
"fahrenheit": "68"
},
"max": {
"celsius": "27",
"fahrenheit": "80.6"
}
},
"chanceOfRain": {
"T00_06": "50%",
"T06_12": "50%",
"T12_18": "50%",
"T18_24": "50%"
},
"image": {
"title": "曇一時雨",
"url": "https://www.jma.go.jp/bosai/forecast/img/202.svg",
"width": 80,
"height": 60
}
}
],
"location": {
"area": "関東",
"prefecture": "東京都",
"district": "東京地方",
"city": "東京"
},
"copyright": {
"title": "(C) 天気予報 API(livedoor 天気互換)",
"link": "https://weather.tsukumijima.net/",
"image": {
"title": "天気予報 API(livedoor 天気互換)",
"link": "https://weather.tsukumijima.net/",
"url": "https://weather.tsukumijima.net/logo.png",
"width": 120,
"height": 120
},
"provider": [
{
"link": "https://www.jma.go.jp/jma/",
"name": "気象庁 Japan Meteorological Agency",
"note": "気象庁 HP にて配信されている天気予報を JSON データへ編集しています。"
}
]
}
}
UnityEngine.Debug:Log(Object)
<Get_WeatherInfo>d__1:MoveNext() (at Assets/API_Test05.cs:31)
UnityEngine.SetupCoroutine:InvokeMoveNext(IEnumerator, IntPtr) (at /Users/builduser/buildslave/unity/build/Runtime/Export/Coroutines.cs:17)
すごい。UnityWebRequest.Getだけでこんなことができた。
次にJSONデータを分解してプログラム内で使用できるように加工する。
using LitJson;を追加したらエラーになっている。