「ブロックチェーンは耐改竄性が高く、一度ブロックに取り込まれたら元に戻せない」
的なことを様々な記事で書かれています。
ブロックチェーン初学者である私はそれを鵜呑みにした結果ふと疑問が浮かびました。
「スマートコントラクトのstorageってブロックチェーンに永久に刻まれるのになんで更新できるの??」
storageについてこの記事で説明していますが、storageはブロックチェーン上に永久に保存される変数です。
ブロックチェーンは改竄できないという認識だったのでブロックチェーン上にあるstorageを更新できることに違和感を覚えていました。
しかし、この違和感の原因は「ブロックチェーンは不変である」という先入観にありました。
確かにブロックチェーンは不変ではありますが、その対象はブロックやトランザクションそれ自体です。
Bitcoinであれば取引金額を変えることはできません。これはトランザクションのデータになっているためです。
これがEthereumのスマートコントラクトになった場合はどうでしょうか?
よく言われているのは「コントラクトをデプロイすると永久に残り続けるので慎重に上げるべき」というような話です。
これは間違ってはいません。なぜならコントラクトの「コード」はトランザクションのデータになるので不変です。
しかし、スマートコントラクト内のstorageやmemoryの変数はトランザクションのデータというよりもすマートコントラクト内のデータなので変数として扱うことが可能です。
最後に
ここまで述べたようにブロックチェーンには不変である部分と不変ではない部分があることがわかりました。
この誤解はそもそもブロックチェーンの定義を曖昧にしていたことやそもそも明確に説明してある情報が少ないことも起因しているとも感じています。
これから自分でもどんどん発信していけるように頑張ります!
もし認識が間違っている箇所があれば教えていただきたいです。
その訂正に情報の質の向上がかかっています!!!