自分のサイトに暗号通貨を組み込めることが確認できた。超ワクワクしてきた!

作ったページ

技術ポイント

  • 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字以上のメモがあること
    • 送金量がトランザクション手数料より多いこと 送金と手数料は別。以下画像のとおり両方を引いた残高が表示される。

20220517211750_020.png

送金をテストしたかったのだが、自分で自分に送っても大丈夫なのかわからなかったのでやめた。ボタンを押すと送金確認画面が出てきたので問題ないはず。

トランザクション手数料について

  • トランザクション手数料は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の中にあるaddressAPIは以下のようなものである。{アドレス}の部分に自分のアドレスをセットすれば、自分の残高を取得できる。

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()はもっと難しそう。そもそも大まかな構造や概念すら理解できていない。初心者がおおまかな構造を理解できるような日本語の資料がどこかにあればいいのだが、見つけられなかった。

なにがなんなの?

どうすれば、そのページに誰が、いつ、いくら支払い、どんなメモを残したかの情報を得られるのだろう。そもそも、そんなことができるのだろうか? それさえわからない。

所感

楽しかった。もっと色々つくってみたい。けれどそのためには基礎から勉強しないとダメかもね。