##はじめに
TipAssistというChrome拡張を作っているヤマコーと申します。
PCでtipnem使ってる人は是非インストールしてみてください(露骨な宣伝)。
(tipbot廃止に伴い非公開になりました)
#NEMの活用法
私は直接NEMに関する開発をしたことがないので(TipAssistはあくまで、twitter上でテキストをいじったりするだけ)、
想像と思いつき、あとはTLの人から出てきた知見を元に少し語る事にします。
まずNEMのユーザー側にとって特徴的な機能はおおよそ以下の通り。
・モザイク(トークン)の作成
・アポスティーユ(証明書発行)
・ハーベスティング
・Voting(投票)
この中でも、モザイクの作成は異質で、かつ応用性が高いです。
という事でモザイクの内容を取り上げます。
##モザイクの活用
モザイク認証
指定のモザイクを持つ人のみ、アクセスできるページ。
作ってみた。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>認証が必要なページ</title>
<script type="text/javascript" src="js/jquery-3.2.1.min.js"></script>
<script type="text/javascript" src="js/main.js"></script>
</head>
<body>
<p id="status"></p>
<p id="mosaic"></p>
</body>
</html>
$(function(){
var nem = prompt("NEMアドレスを入力してください").replace(/-/g,"");
status("104.238.161.61:7890", nem,"nem_games.ammo:9mm");
});
function status(supernode,nemAddress,mosaic){
$.getJSON(
"http://"+ supernode +"/status", //リクエストURL
null, //送信データ
function(data, status) {
if(data.code == 6){
$('#status').text("SN "+ supernode+"は正常に動作している");
// getBalance(supernode,nemAddress);
getMosaic(supernode,nemAddress,mosaic);
}else{
$('#status').text("SN "+ supernode +" に何らかの障害あり");
console.log(data);
}
}
);
}
//モザイク一覧
function getMosaic(supernode,nemAddress,mosaic){
$.getJSON(
"http://"+ supernode+"/account/mosaic/owned?address=" + nemAddress, //リクエストURL
null, //送信データ
function(data, status) {
mosaics = mosaic.split(":");
hasflg = false;
data.data.forEach(function(v, i, a){
if(v.mosaicId.namespaceId == mosaics[0] && v.mosaicId.name == mosaics[1]){
if(v.quantity > 1){//数量指定
$('#mosaic').text(mosaic +"を" + v.quantity + "個持っています。ありがとうございます");
}else{
$('#mosaic').text(mosaic +"を" + v.quantity + "個持っていますがたりません");
}
hasflg = true;
}
});
if(hasflg == false){
alert(mosaic+ "をお持ちでない人にはお見せ出来ません!");
window.location.href = "https://google.com";
}
}
);
}
しかし、NEMアドレスだけだと、他のユーザーも知る事が出来る情報のため、簡単になりすましが出来てしまう。
というかこの例だとそれ以前の問題なのは見逃して下さい
認証までの手順は以下の通り。
1.認証用アドレスに数XEMを送信する
2.認証用アドレスから暗号化されたメッセージでパスワードを送られてくる(ユーザー登録の完了)
3.認証が必要なページにアクセスして、NEMアドレスとパスワードを入力
4.そのNEMアドレスで指定のモザイクを所持していたら認証(yay!)
この認証方法をいろいろ使いまわせたら、汎用性が高そうですね!
ただ、この認証方式を特定のサーバーに依存したシステムにするんではなく、あくまでNEMだけでなんかできないかなーとか考えてます。
面白い方法を思いついた人は是非ヤマコーに教えてください!できるかわからんけど!