Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

概要

原宿を拠点とするアイドルグループの・・・・・・・・・が大阪で◯→●→🌏というイベントを実施しました。
その内容は、アイドルとオタクが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

a-r-i
「アイドル×テクノロジー」をテーマに、アイドルグループと共同でイベント・作品づくりをしています。 「アイドルの睡眠データを3Dプリンタでオブジェ化」 「アイドルとオタクがBitcoinで永久に消えないメッセージを刻む」 「過去にアイドルが居た場所に近づくとスマホが震えるアプリ」 お気軽に連絡ください。
https://github.com/a-r-i
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