コード1行が51万ETHを凍結|BTCの単純さが守るもの
2017年11月6日、一人の開発者がParityウォレットのスマートコントラクトを操作しました。特別な意図はありませんでした。「初期化」という一般的な操作のつもりでした。しかしそのコード1行が、587のウォレットに眠る51万3774枚のETHを永久に凍結しました。
引き出せなくなった理由はシンプルです。コードが「正しく」動いたからです。バグでも、ハッキングでもなく、誰かの悪意でもありません。設計の複雑さが、誰も意図しない結果を生みました。7年以上が経過した今も、そのETHは動いていません。
複雑さが生む盲点
イーサリアムのスマートコントラクトはチューリング完全な言語で動きます。ループ処理、外部コントラクトの呼び出し、コントラクト自身を削除する命令まで実装できます。「コードで何でも作れる」という設計思想の結果です。
その柔軟性は多くのユースケースを生みましたが、同時にコードが何をするかを人間が完全に把握することを難しくしました。Parity事件のコードも、公開されて多くの開発者の目に触れていました。それでも誰も気づきませんでした。複雑すぎたのです。
このことは、複雑なシステムが持つ本質的な弱点を示しています。設計の精巧さと、人間が全体を把握できるかどうかは、別の問題です。
BTCが機能を削った論理
ビットコインの取引はBitcoin Scriptと呼ばれる専用言語で記述されます。この言語には意図的な制約があります。ループ処理が存在しません。コントラクトが自身を削除する命令もありません。一般的なプログラミング言語の視点では「不完全」に見える設計です。
しかしこれは欠陥ではなく、意図的な選択です。できることを制限することで、スクリプトが何をするかを事前に完全に検証できる状態を保っています。無限ループが発生しません。実行コストが予測できます。複雑な連鎖的副作用が生まれません。
Parity事件のような「コードが正しく動作した結果の永久凍結」は、Bitcoin Scriptの構造上は起こりえません。2009年の稼働から現在まで、BTCのプロトコル自体が破壊された事例はゼロです。17年間の無傷は、この「シンプルさへの選択」から生まれています。
設計の恩恵に条件がある
ここから先が重要です。
BTCのプロトコルが堅固であることは事実ですが、その恩恵を受け取れるのは秘密鍵を自分で保管している場合に限られます。取引所のアカウントに表示されるBTC残高は、BTCブロックチェーンとは独立したデータベースの数字にすぎません。
あなたのBTCを動かすための秘密鍵は取引所が保管しており、出金には取引所のシステムと承認が必要です。これは所有権の問題ではなく、アクセスの問題です。BTCのプロトコルがどれだけ堅牢でも、取引所のシステムが停止すれば出金できません。経営危機や法的問題が発生すれば、資産へのアクセスは第三者の判断に委ねられます。
Parity事件で資産を失った人々は、プロトコルの欠陥によって被害を受けたわけではありません。スマートコントラクトというシステム層の問題によって、保有していたはずの資産にアクセスできなくなりました。取引所にBTCを預けているケースも、構造は異なりますが「プロトコルとは別の層での封鎖リスク」という点では同じ問題を抱えています。
BTCの設計を自分のものにする
Bitcoin Scriptの設計が17年間機能し続けてきた事実は、ビットコインという資産の信頼性の根拠の一つです。しかしその信頼は、秘密鍵を自分で握ることで初めて機能します。
51万ETHを永久凍結したのはコード1行でした。あなたのBTCが動かせなくなる引き金が何であれ、それが顕在化した後では遅いです。秘密鍵を自分で管理するための最初の一歩は、ハードウェアウォレットの購入とシードフレーズの安全な保管です。BTCの設計思想が積み上げた17年間の信頼を、自分のものとして受け取るために。
※本記事は一般的な情報提供を目的としており、投資助言ではありません。
この記事が参考になったら、セルフカストディの具体的な始め方もチェックしてみてください。
LINE登録でセルフカストディの始め方を学ぶ 正しい手順を無料でお届けします