はじめまして、ゆーたろ@yutaro_elkと申します。エンジニア職に転職活動中です。主にフロントエンドをやってます。
ブロックチェーンの一種であるNEMで簡単なサービス(StreetNEMS)を作ったさいハマったところなど記録しておきたいと思います。
##signerとsignatureを間違える
凡ミスです。
NEMのトランザクションはjsonデータで取得できます。
取引のトランザクションであるTransferトランザクションはこのようなjsonが返ってきます。
{
"meta":{
"innerHash":{},
"id":834509,
"hash":{
"data":"aaaaaaaaaaaaaaaaaaaaaaaaa"
},
"height":1146325
},
"transaction":{
"timeStamp":69421490,
"amount":1000000,
//署名者の公開鍵
"signature":"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"fee":2000000,
//受信者のアドレス
"recipient":"NXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"type":257,
"deadline":69507890,
"message":{
"payload":"dddddddddddddddddddddddddddddd",
"type":1
},
"version":1744830465,
//送信者の公開鍵
"signer":"cccccccccccccccccccccccccccccccccccccccccc"
}
}
その中から送信者の公開鍵を取得しようとしてsignerとsignatureを間違えてました…。signerが送信者の公開鍵で、signatureはトランザクション署名のことです。見た目が似てたので間違えました…
##ホスティングでのSSL対応
これが一番ハマりました。
最初はGithub Pagesを使ってホスティングをしようとしましたが、ERR_SSL_PROTOCOL_ERROR
が出てしまいました。
これはNEMのAPIを叩く際、APIサーバーであるノードがSSL対応ではないうえでGithub Pagesが自動でSSL対応になっているためでした。
最終的な対応としてはホスティングは自動SSL対応ではないAWS S3でホスティングし、叩くノードもhttpのものを使っています。
###ノードをSSL対応にしたけど…
それまでに試したのはまずノードをSSL対応のものに差し替えました。xembookさんが優良ノードのリストを公開してくださっているのでそれを使ったり、あとはnemlogさんのソースを拝見したり。しかしノード側の問題なのかちゃんと反応が返ってきませんでした…
これはいまいち原因があいまいなのでまた後日ちゃんと調べたいです。
###ホスティング先を変更した
次にノード側を変更せずいけるホスティングを探しました。Github Pagesを最初に選んだ理由が「簡単で安い」だったので、同じようなサービスであるFirebase、Netlifyを試してみました。しかし、どちらもやはりSSL対応が自動でされてしまいます。普段ならとても便利な機能なんでしょうが残念です。
最終的にAWS S3ならSSLじゃなくてもいけるということでそちらにしました。
こうしてみると、NEM自体でハマったことはあんまり無かったですね…(そのかわりSSLの部分はかなり長時間ハマっていて、根本的な解決にはまだ至っていないんですが…)
SSL対応については今後の課題として、解決したらまた記事にしたいと思います。