Bitcoin
ブロックチェーン
アイドル

アイドルとオタクがBitcoinで永久に消えないメッセージを刻む


概要

原宿を拠点とするアイドルグループの・・・・・・・・・が大阪で◯→●→🌏というイベントを実施しました。

その内容は、アイドルとオタクがBitcoinを使って世界にメッセージを刻むというもの。

刻まれたメッセージは消すことができず、永久に残り続けます。

本記事ではイベントの体験レポートから始めて、いったい何でこんな催しを開いたのか、Bitcoinとは何なのか、そしてなぜ永久にメッセージが残るのかを説明し、最後にそれを実装する方法を紹介します。

・・・・・・・・・については、前回の記事を参照してください。


イベントのレポート

・・・・・・・・・が東京を飛びだし、大阪に初めての遠征をしました。初日は大学での講義と、ライブ。二日目はライブと、ファンとの交流イベントというスケジュール。

講義とライブについては、あらかじめ詳しい情報が告知されていましたが、最後の交流イベントで何をするのかは、オタクにも、・ちゃんにも伝えられていませんでした。

事前に知らされていたのは、タイトルが◯→●→🌏ということだけ。

2017年2月5日、お昼の三時。◯→●→🌏は、道頓堀にある某たこ焼き屋さんにて行われました。イベントは前後半に別れ、前半では・ちゃんとたこ焼きを食べます。

たこ焼きを食べる・ちゃんの写真

たこ焼きを食べる・ちゃんの写真

たこ焼きを食べる・ちゃんの写真

たらふく食べたところで、前半が終わり後半に。

まず、下の資料が配られました。ご覧のとおり簡単な説明のみで、メッセージが世界に公開されるとは書かれていますが、「永久に刻まれる・消すことができない」というBitcoinのキモは伝えられていません。

説明資料のスクショ

これは自分が何をしているの分からない内に世界にメッセージが刻まれてしまっているという体験をつくりたかったためで、ユーザーが向き合うインターフェイスも、Bitcoinを意識させない、そっけないフォームにしました。

index.html

送信ボタン(●→🌏)をクリックすると、戻るリンクだけのページに遷移し、フォームの内容が刻まれます。

broadcast.html

資料が配られるやいなや、疑心暗鬼の声が会場を包みます。「Bitcoinって何?」「なんか怖い!」「Bitcoinって昔ニュースでやってたよね」

ここで、プロデューサーから追加の説明。「書く内容は自由ですが、一つだけルールを決めたいと思います」

「メッセージに・を含めてください」

ざわめきの中ノートパソコンが回され、いよいよ作業がはじまります。手順としてはオタクが6人いる・ちゃんの中から一人を選んで、二人で一緒に内容を考え、刻む。

・ちゃんの帰りのフライト時刻が近づいてるということもあり、相談時間は3分ほど。くわえてTwitterどころじゃない強い文字数制限。さらに・を含めるルール。そんな縛りの下で刻まれたメッセージが以下となりなす。

刻まれたメッセージの一覧

https://chainflyer.bitflyer.jp/Address/18975CmAnNGXLnSw8XfPnN1ENV5wkSnT72

これにて、その場はお開きとなりました。


いったい、このイベントは何だったのか


Bitcoinとは何か

本題に入る前に、まずはBitcoinについて説明します。

Bitcoin。それは、中心のないデジタル通貨です。これまでの電子マネーやポイント、アプリ内通貨は発行会社のコンピューターにのみ存在しました。もしも、その会社がデータを消してしまえば、あなたのお金は失われてしまいます。

Bitcoinでは、そのような絶対的な力を持った中央機関が存在しません。特定の会社や組織が運営しているのではなく、誰でも参加でき、誰にもコントロールができないオープンソース・プロジェクトです。

誰もあなたのお金を取り上げることができず、誰も取引を取り消せません。

Bitcoinにはメッセージを上乗せする機能があり、今回はそれを利用しました。そのメッセージは誰も書き換えられず、誰も消すことができません。


このイベントの真の意味

それでは、なぜBitcoinを用いたのか。このイベントの目的は何だったのか。イベントから六日後の2月11日、・・・・・・・・・運営がその意図を明らかにしました。

このイベントの真の意味

このイベントの真の意味


なぜ永久にメッセージが残るのか

ここまで当たり前の前提として受け入れてきましたが、そもそも、なぜ永久にメッセージが残るのでしょうか。

さしあたり、二つの根拠を示します。

 一つ目は、地理的な理由です。ビットコインの取引履歴は全世界に散らばった約6000台のコンピューターに発信され、保管されます(下図参照)。たとえ政府の取り締まりやハッキング、自然災害に見舞われても、すべての情報が消えることはありません。

 二つ目は、それらのコンピューターには取引履歴をずっと保ち続けるインセンティブがあるからです。ビットコインは10分に1度、新規のコインを一人だけに発行します。1このコインを手に入れる競争に加わるには、過去すべての取引履歴を持っていなければなりません。ビットコインの価値が保たれている限りは、誰かがレースに参加する(=取引履歴が残る)ことが期待できるのです。

Bitcoinのノード

Bitcoinの取引履歴を保管しているコンピューターの数と分布。2017年2月8日、https://bitnodes.21.co より


実装

Bitcoinでメッセージを刻むにはいくつかの方法234がありますが、今回はBitcoreというJavaScriptライブラリを使いました。

Bitcoreを使ったメッセージの記録については、こちらの記事に依っています。

ビットコインのブロックチェーンにデータを記録する(OP_RETURNの利用)

文字数カウントの部分は、こちらのコードを借用。Bitcoinに添付できるメッセージは80byteまでで、半角なら40文字、全角なら26文字、絵文字なら20文字。今回は全角を基準として半角52、全角26、絵文字13字にフォームの文字数を制限しました。

jQueryで入力フォームに文字カウント(カウントダウン)を設置する方法

【注意】二重投稿対策をしていないため、broadcast.htmlをリロードすると連投する仕様になっています。不特定多数に公開する場合は、必ず対策をしてください。


index.hmtl

<!DOCTYPE html>

<html lang="ja">
<head>
<meta charset="utf-8">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script type="text/javascript">

//制限文字数の設定
var stopCount = 26;

function strLength(strSrc){
len = 0;
strSrc = escape(strSrc);
for(i = 0; i < strSrc.length; i++, len++){
if(strSrc.charAt(i) == "%"){
if(strSrc.charAt(++i) == "u"){
i += 3;
len++;
}
i++;
}
}
return len;
}

//文字数カウント
function showLength( str,name ) {
var strCount = Math.ceil(strLength(str).toString() / 2);
if(strCount > stopCount){
document.getElementById('submit').style.display = "none"; //全角換算で26文字を超えたら送信ボタンを消す。
document.getElementById(name + "Inner").innerHTML = '<em style="color:#ff0000;">' + strCount + ' / 26 Over!</em>';
}else if(strCount == stopCount){
document.getElementById('submit').style.display = "";
document.getElementById(name + "Inner").innerHTML = '<em style="color:#ff0000;">' + strCount + ' / 26</em>';
}else{
document.getElementById('submit').style.display = "";
document.getElementById(name + "Inner").innerHTML = strCount + " / 26";
}
}
</script>
</head>
<body>
<form id="textForm" name="textForm" action="broadcast.html"> //フォームを送信したらbroadcast.htmlに遷移
<input name="text" type="text" id="text" size="70" value="" onkeyup="showLength(value,id);"/>
<span id="textInner">0 / 26</span>
<input type="submit" id="submit" value="●→🌏" onclick="funcBtn();"> //submitボタンを押すと、funcBtnメソッドを実行
</form>

<script>
function funcBtn() {
localStorage.text = document.textForm.text.value; //フォームのメッセージをローカルストレージに保存
}
</script>
</body>
</html>



broadcast.html

<!DOCTYPE html>

<html lang="ja">
<head>
<meta charset="utf-8">
<script src="bower_components/bitcore/bitcore-lib.min.js"></script>
<script src="bower_components/bitcore-explorers/bitcore-explorers.min.js"></script>

</head>
<body>
<script>
var bitcore = require('bitcore-lib');
var explorers = require('bitcore-explorers');
var insight = new explorers.Insight();

var a_address = ""; //Bitcoinアドレス
var privateKey = ""; //秘密鍵

getUTXO(a_address, function(utxos){

utxos.forEach(function(utxo){console.log(utxo.toJSON());});
console.log(localStorage.text);

//トランザクション生成
var transaction = new bitcore.Transaction().fee(100000) //送金手数料。今回は0.001BTC=117円
.from(utxos)
.addData(localStorage.text) //ローカルストレージに保存したメッセージを添付
.change("") //お釣り用アドレス
.sign(privateKey)

console.log("transaction",transaction.toJSON());

broadcast(transaction, function(id){
console.log(id);
  });

});

function getUTXO(address, done)
{
//utxosの取得
insight.getUnspentUtxos(address, function(err, utxos) {
if (err) {
console.log(err);
}
done(utxos);
});
}

function broadcast(tx, done)
{
//ブロードキャスト
insight.broadcast(tx, function(err, id) {
if (err) {
console.log(err);
}
done(id);
});
}
</script>
</body>
<a href="index.html">戻る</a>
</html>



まとめ

メディア環境の変化に応じてアイドルも変化してきた歴史がある。

・・・・・・・・・運営はインタビュー5でそう語りました。

Bitcoinも一つの表現媒体と言えます。このコインが世のありかたを一変させるとき、アイドルもまた、それに適応するように変わっていくのかもしれません。

彼女への好意が、いつのまにか世界への好意にすり替わっているような、薄い膜のように世界を覆うアイドルへと。


追記

2018年6月9日、仙台市天文台にて、◯→●→🌏と同内容の企画🌕→⚫→🌏を実施。40人がメッセージを刻む。

刻まれたメッセージはこちらから確認できます。

https://chainflyer.bitflyer.jp/Address/1MLhbtWXrH8Y7FrHs3FnXnaCvbJw2USwQe

Dfd1FkBU0AA2gwp.jpg-large.jpeg