50
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

ブロックチェーン『で』命を賭ける

この記事は クソアプリ2 Advent Calendar 2020 の6日目の投稿です。
昨日は@goosysさんの老舗ゲームメーカーになろうでした。
今日は、20年前のカードゲーム漫画をブロックチェーンに応用してみましょう。

カードゲーム漫画にて…

悪役 『お前のスターチップは既に一つ。そいつを奪えば、お前は早くも落伍者になるわけかぁ。それじゃあ僕もスターチップを一つ賭けるぜぇ』
主人公『いや、2個賭けてもらう!』
悪役 『なに!?』
主人公『言ったハズだぜ!お前とは潰すか潰されるしかない!オレはスターチップひとつと…』

主人公『命を賭けるぜ!!』

ごあいさつ

こんにちは。命、賭けてますか?
なんでもトークンと申します。
僕は、ブロックチェーンに全力投球。

価値をインターネット上で扱う技術である『トークン』の研究開発をしています。
結果として、毎月のお給料がブロックチェーンの利用手数料として溶け続けています。
やばいです。

価値を扱う技術

ブロックチェーンは価値を扱う、金融に近い領域の技術。
単なるプログラムから、コインを借りられるシステムもあります。
https://app.compound.finance/
でもこのシステム、とある問題があるのです。

コインがないとコインを借りられない

手元にコインがないと、コインを借りることができません。
つまり、こういうことです。

【できる】
1カ月後に必ず返すから100万円分のコインを貸して!!
約束を守る証拠金として、システムに200万円分のコインを預けるよ!

【できない】
1か月後に必ず返すから100万円分のコインを貸して!!

借金の取り立てが出来ない

さきほど紹介したCompound、完全に無人で動いています。
借金を取り立てる怖いお兄さんがいません。
それなら、借りたまま誰も返済しないですね…。

命を担保にするのは無理

ブロックチェーンの世界は、担保以上のものを借りるのが不可能なのです。
しかも、現実の物、腎臓、命などは、ブロックチェーン上に存在しないので担保にできません。
お金持ちしかお金を借りることができない。
そんなのずるい。

クソアプリ作ってみた

『命』を担保にコインを借りられるシステム、作ってみました。
システム構成図は次の通り

システム構成図.png

今回は次の2つを作ります。
・命トークン
・命を刈り取るシステム

作り方を解説していきます。
皆さんも『命』を担保に入れてみてくださいね!

命トークン

僕はブロックチェーンが大好きなので、
命トークンの作り方、紹介します!
クソアプリですので、読み飛ばしてもらって大丈夫です。

命トークンのレシピ

材料
・Ethereumブロックチェーン 1つ
・Solidity言語のプログラム 約20行
・Openzeppelinライブラリ 約1500行
・JSONファイル 約300バイト
・命 1つ

video_cooking_man.png
調理方法
①Etherumブロックチェーンを弱火(20Gwei)で熱します。
②Solidityプログラムを、心を込めて記載します。
③メイン材料であるOpenzeppelinライブラリを結合します。
④JSONファイルを添えると、味にコクと深みが出るでしょう。
⑤命はまだ使わずに手元に置いておいてください。

心を込めて記載した、今回のプログラムを紹介します。

LifeIsNFT.sol(②で記載した部分)
contract LifeIsNFT is ERC721 {

bool living = true;

function kill() public {
    // 所有者のみが実行可能
    require (msg.sender == ownerOf(1));
    // 命をオフにする
    living = false;
}

function isliving() public view returns (bool) {
    // 命がオンかどうか
    return living;
}

function burnNFT() public {
    // 所有者のみが実行可能
    require (msg.sender == ownerOf(1));
    // 命トークンを消して操作不可にする
    _burn(1);
}

constructor() ERC721 ("LifeIsNFT" , "LIFE") public {
    // 命トークンを1つだけ発行
    _mint(_msgSender() , 1);
    // メタデータの登録
    _setTokenURI( 1 ,  "https://nandemotoken.github.io/LifeIsNFT/LifeIsNFT.json");
    }
}

参考:Solidity言語を使ったプログラム全文
https://github.com/nandemotoken/LifeIsNFT/blob/gh-pages/LifeIsNFT.sol

命トークンをEthereumテストネットに構築

今回はクソアプリですので、テスト用環境に構築します。
環境はRinkebyネットワークにしました。
image.png

…もし本番環境で作成する場合は、法律チェックが必要です。
……このクソアプリは、法律はともかく倫理的にアウトですね…

命トークンの確認

構築したので命トークンが出来ています。
競売サイトで確認しましょう。
OpenSea有名です。
https://opensea.io/

テストネット上の自分のトークンが確認できるURLにアクセスします。
https://testnets.opensea.io/account

inochi.png

ありました。
今回作成した命トークンは、次のURLで確認できます。
https://testnets.opensea.io/assets/0x6c63483eacac253e65a3445829621d37c5bfc7fc/1/

命トークンの使い方

①Aさんが命トークンを作成。
②ブロックチェーンの競売システムに出品。
③富豪が買い取る。
④Aさんは利子をつけて借金返済。
⑤返済期限をオーバーしたら、kill関数でAさんを殺す。

システム構成図(再掲)
システム構成図.png
命を担保にできます!

命の出品

OpenSeaを操作して、命を出品していきましょう。

image.png

NFTのページにアクセスし、SELLボタンを押します(命の所有者のみが出品できます)

image.png

価格などを設定して出品しましょう。
今回は100ETH(約500万円)にしてみました。
期間を限定したオークションなども開催できますよ!

命を刈り取るシステムの作成

Kill関数により、living変数がfalseになった場合、借り主が死ぬ必要があります。
どのように実現しましょうか…

命を刈り取るシステム:Raspberry Pi

Raspberry Piによる電子工作で実現することにしました。
次の2つの機能で、現実とブロックチェーンを紐付けます。
①電子回路の制御機能(GPIO)⇒現実の装置を操作するために利用
②Web通信機能(Linux)⇒ブロックチェーン上のデータ確認に利用
お値段は約5000円

E55F45E3-023E-4F8B-A491-609BE79FB5D7.jpeg

命を刈り取るシステム(電子部品の用意)

今回はシンプルにサーボモーターで刃物を動かすシステムとします。

0F8EB27B-AEBC-4EDC-BF07-0BF6A40164C5.jpeg

部品
・Raspberry Pi 1式
・サーボモーター 1個
・ジャンプワイヤ 10本
・電池BOX(単3×4) 1個
・ブレッドボード 1枚

命を刈り取るシステム(電子部品の組立)

2CCE0787-56AA-4558-A05B-A008AEC9F969.jpeg

これが命を刈り取るシステムのエンジン部分です。
サーボモータの信号線は右から6番目のGPIO18ピンに接続しました。

命を刈り取るシステム(電子回路制御プログラム)

電子回路を制御するプログラムを書きましょう。
Raspberry PiのGPIO18ピンから制御信号を出します。

GPIO18ピンからサーボモーターを制御するプログラム
//raspi-pwmを使用する。
const raspi = require('raspi');
const PWM = require('raspi-pwm').PWM;

raspi.init(function() {
//GPIO18を制御する
  const  pwm = new PWM('GPIO18');
  setInterval(function(){
//生存判定の結果、duty比を0.03もしくは0.09にする。
  pwm.write(living ? 0.03 : 0.09)
  } , 60000)
});

なお、Raspberry Pi上で次の準備が必要です。

raspi-pwmのインストール
npm install raspi-pwm

今回のサーボモータはduty比を0.03から0.09にすると約90度回転します。
サーボモーターに刃物を着けると、命を刈り取ることができます!

命を刈り取るシステム(ブロックチェーン読取)

ブロックチェーンから『isliving』関数を読み取ります。
Node.jsを利用して実装していますので、infura.io経由で関数を読み取ると良いでしょう。

ブロックチェーン確認
//remixのボタンを押して取得したABIを貼り付け
const abi = "(省略)"

//web3.jsを読み込む
const Web3 = require("web3")
//Infra.ioに登録して取得したAPIキー
const MyInfuraioApiKey = "8cbeaxxxxxxxxxxxxxxxxxxxxx"

async function setup(){
//metamaskの準備
web3js = await new Web3( new Web3.providers.HttpProvider("https://rinkeby.infura.io/v3/"+ MyInfuraioApiKey ));
//スマートコントラクト読み込み
mycontract = await new web3js.eth.Contract(abi, "0x6c63483eacac253e65a3445829621d37c5bfc7fc");
}

//ブロックチェーンの呼び出しは、非同期処理に注意して実装する
async function checkLiving(){
//ブロックチェーン上のisliving関数を呼出
let fromblockchain1 = await mycontract.methods.isliving().call();
console.log(fromblockchain1);
return fromblockchain1;  
}

setup();
let living = checkLiving();

なお、Raspberry Pi上で次の準備が必要です。

web3jsのインストール
npm install web3

命を刈り取るプログラムの全文はこちら。
https://github.com/nandemotoken/LifeIsNFT/blob/gh-pages/LifeIsNFT.js

命を刈り取るシステムの装着方法を考える

命を刈り取るシステムは確実に装着されている必要があります。
次の2つの観点で、装着方法の検討が必要でしょう。
①取り付けたあと、取り外すことがない。
②取り付けたあと、日常生活に支障がない。

つまり、指輪、ネックレス、時計のような位置づけが良さそうです。
しかし、首輪や指輪などは、大きなサイズだと違和感がありますね。

我々が身に着けていて最も違和感のないものは何でしょうか…?
そう。デュエルディスクです。
yu_02.jpg
参考画像:腕に着けてカードを入れるやつ

命を刈り取るシステムのデュエルディスクを作る

E51B7642-9A82-4AD5-B7E0-4A7BF725FAD2.jpeg

家にあった材料でデュエルディスクを作りました!
上の参考画像とほとんど同じですね。

なお、今回取り付けてあるナイフは手品用。
本番運用では殺傷力の高いものを選定してください。

命を刈り取るシステムの装着

FFD5A06D-F37E-4A40-8D5E-C6389ACADA77.png

日常生活をする上で、全く違和感はありませんね

命を刈り取るシステムを動かす

命を刈り取るシステムを動かしてみましょう。
https://nandemotoken.github.io/LifeIsNFT/LifeFarming.html

富豪のアカウントで上記専用サイトに接続し、Kill関数を呼び出します。
命トークンを持っていた場合だけ、kill関数が動作します。
するとブロックチェーン上に設置したliving変数がfalseになります。
(命トークンを持っていない人が呼び出しボタンを押してもエラーになるだけです)

image.png

命を刈り取る

動かしてみましょう。

次の仕組みで命が奪われます。
●Aさんがコインの返済義務を守らない
⇒富豪がkill関数を呼び出す
⇒ブロックチェーンに反映(約15秒)
⇒Raspberry piがブロックチェーンのデータを読み出す(約1分)
⇒Raspberry piのGPIO18番から制御信号送信
⇒Aさんの『命』をシステムが奪う

実際の動作

ezgif-4-42846591aa1f.gif

ナイフの動きが殺意に溢れています。
手品用のナイフでなければ、私の命が奪われていたはずです。

ブロックチェーン『に』命をかける

最近、ブロックチェーン界隈の知り合いが、どんどん会社を辞めています。
ブロックチェーンで生きていくそうです。
たしかに、この分野は革新的で、命を賭ける価値があるでしょう。
僕もプロのブロックチェーンエンジニアになりたい…。

おわりに

世界のトークン化をめざす、なんでもトークンでした。
Twitterでブロックチェーンの情報発信をしております。
https://twitter.com/NandemoToken

明日は @yaju さんによる『英語の歌を歌いたい』!
楽しみです!

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
50
Help us understand the problem. What are the problem?