自分のサイトに暗号通貨を組み込めることが確認できた。超ワクワクしてきた!
作ったページ
技術ポイント
- HTTPSサーバにアップロードする
- mpurseのAPIを使う
- アドレスを取得する
- 送金する
- 残高を取得する
HTTPSサーバでないとAPIが動作しない。そのせいで動作確認するために一々デプロイせねばならず時間がかかった。オレオレ証明書を作ればLocalhostでも使えるようになるらしいのだが未確認。
mpurse API
アドレスを取得する
Mpurseでアカウトを作ったら、そのアドレスを取得する。このアドレスはモナコインを授受するとき必要になる。
const address = await window.mpurse.getAddress();
ちなみに私のアドレスは以下だった。
MEHCqJbgiNERCH3bRAtNSSD9uxPViEX1nu
送金する
async function sendMona() {
const to = 'MEHCqJbgiNERCH3bRAtNSSD9uxPViEX1nu' // 宛先
const asset = 'MONA' // 通貨(トークン名)
const amount = document.getElementById(`send-amount`).value // 量
const memoType = 'plain' // メモの型('no', 'hex', 'plain')
const memoValue = document.getElementById(`send-memo`).value || 'Good job!' // メモの内容
const txHash = await window.mpurse.sendAsset(
to,
asset,
amount,
memoType,
memoValue,
);
}
<button onclick="sendMona()">送金する</button>
- 上記の
送金する
ボタンを押したら以下の確認画面がでる - そこで
送信
ボタンを押すことでようやく送金される - ただし以下の条件を満たす必要がある
- 1字以上のメモがあること
送金量がトランザクション手数料より多いこと送金と手数料は別。以下画像のとおり両方を引いた残高が表示される。
送金をテストしたかったのだが、自分で自分に送っても大丈夫なのかわからなかったのでやめた。ボタンを押すと送金確認画面が出てきたので問題ないはず。
トランザクション手数料について
- トランザクション手数料は1Byte単位で加算される
- トランザクション手数料の初期値は
101
- トランザクション手数料は
10
まで下げることができる - トランザクション手数料を下げると失敗しやすくなるらしい
- トランザクション手数料は
10
までなら今の所失敗しないらしい - 参考
残高を取得する
const result = await window.mpurse.mpchain('address', { address: await window.mpurse.getAddress() });
const result = await window.mpurse.mpchain('address', { address: myAddress });
console.log(`あなたのアドレスは ${myAddress} です。`)
console.log(`あなたは ${result.mona_balance} MONA 所持しています。`)
console.log(`あなたは ${result.xmp_balance} XMP 所持しています。`)
これを見つけるのに苦労した。mpchain()の第一引数にaddress
を渡すことで、mpchain APIが実行されるようだ。mpchain APIの中にあるaddress
APIは以下のようなものである。{アドレス}
の部分に自分のアドレスをセットすれば、自分の残高を取得できる。
https://mpchain.info/api/address/{アドレス}
mpchain APIのEXAMPLEは以下のURLだった。ようするにREST APIであり、HTTPのGETによって実行する。ブラウザのURL欄で叩けば結果がみれる。
https://mpchain.info/api/address/MLinW5mA2Rnu7EjDQpnsrh6Z8APMBH6rAt
その戻り値は以下のようなJSONだった。
{"address":"MLinW5mA2Rnu7EjDQpnsrh6Z8APMBH6rAt","assets":{"held":7,"owned":0},"estimated_value":{"mona":"0.00000000","usd":"0.00000000","xmp":"0.00000000"},"mona_balance":"8230.79850000","unconfirmed_mona_balance":"0.00000000","unconfirmed_xmp_balance":"0.00000000","xmp_balance":"104089.00000000"}
このうちbalance
が残高である。mona_balance
がモナコインの残高だ。
詳しい仕組みを知らないまま作れてしまった
私はまだ暗号通貨における詳しい原理を理解していない。それなのにMpurse APIを使えばモナコイン取引の処理があっさり実装できてしまった。あまりの簡単さに驚いている。
ワクワクしてきた!
いろいろ作りたくなってきた!
課題
そのページに誰が、いつ、いくら支払い、どんなメモを残したかの情報を取得したい。
でも、どのAPIを使えばいいかわからなかった。たぶんmpchain()、counterblock()、counterparty()のどれかを使うのだろう。けれどこいつらはWebAPIのラッパらしく、元となるWebAPIの仕様を把握せねばならない。一応ページは見てみたが、一体どれが何の役割なのかわからなかった。
balances
今のところ意味と使い方がわかったのはmpchain()のaddress
だけ。最初は残高を取得するためにbalances
を使ったのだが、なぜかdata
の中身が空っぽだった。残高はあるはずなのに。一体このAPIは何なのか。
https://mpchain.info/api/balances/MEHCqJbgiNERCH3bRAtNSSD9uxPViEX1nu
{"address":"MEHCqJbgiNERCH3bRAtNSSD9uxPViEX1nu","data":[],"total":0}
balance
次にbalances
の単数形であるbalance
も使ってみようとしたがURL末尾のasset
に何を渡せばいいかわからなかった。というかasset
ってなに? MONA
じゃダメなの?
なぜかページを作り終わったあとで再度試してみたら、ちゃんとできた。なにか勘違いしてたのか? とにかくbalance
でも残高照会ができると思う。むしろ名前からしてこれが残高照会の本命だと思う。
https://mpchain.info/api/balance/MEHCqJbgiNERCH3bRAtNSSD9uxPViEX1nu/MONA
{"asset":"MONA","asset_longname":null,"description":"","estimated_value":{"mona":"2.28228000","usd":"1.56","xmp":"2284.56228000"},"quantity":"2.28228000","unconfirmed_quantity":"0.00000000"}
counterblock(), counterparty()
counterblock()やcounterparty()はもっと難しそう。そもそも大まかな構造や概念すら理解できていない。初心者がおおまかな構造を理解できるような日本語の資料がどこかにあればいいのだが、見つけられなかった。
なにがなんなの?
どうすれば、そのページに誰が、いつ、いくら支払い、どんなメモを残したかの情報を得られるのだろう。そもそも、そんなことができるのだろうか? それさえわからない。
所感
楽しかった。もっと色々つくってみたい。けれどそのためには基礎から勉強しないとダメかもね。