暗号通貨開発日誌 1日目
唐突ですが、私には夢があります。
それは、暗号通貨を開発すること!!
そこで、このブログでは今後不定期に、私が暗号通貨を開発するまでの軌跡を綴っていきたいと思います。
現在の状況について書きましょう。
現在、暗号通貨を作成するための汎用ブロックチェーンプラットフォームのプロトタイプを開発中です。
暗号通貨を開発するのが目標でもあるのですが、私のアプローチはより汎用的な仕組みを作ってしまってから、その仕組みの上で暗号通貨を作成するというものです。
この方が、単純に暗号通貨を開発するよりは、価値があります。
独自暗号通貨などというものは今ではもう星の数ほどある訳です。様々なものが開発し尽くされています。
今となっては独自暗号通貨を開発すること自体にそれほど価値はありません。
そのため、価値あるものとなるためにはプラスアルファが絶対に必要で、それが汎用ブロックチェーンプラットフォームであるという訳です。
そして、なぜ汎用ブロックチェーンプラットフォームに価値があるかというと、それは新奇性がまだあるからです。
実のところ、暗号通貨の仕組みを何らかの形で汎用化しようとか、暗号通貨の仕組みを別のものに適用できるようにしようという試みは、既に様々な開発者によって試みられています。
しかしながら、そのようなプロジェクトは、何か1つの固定された基盤をまず作ってしまって、その上で色々なことができますよ、というアプローチのものが非常に多いです。
基盤の仕様はそのプロジェクトで最初から決まってしまっているのです。
そういう意味で私が作ろうとしている汎用ブロックチェーンには新奇性があるのです。
つまり、私が作ろうとしているものは基盤が何か1つのものに固定されているという訳ではなく、基盤自体を様々にカスタマイズすることができるようになる予定なのです!
基盤の仕様を「設定ファイル」のような形で記述できるのです(記述できるようにするのが目標です)。
案外こういったアプローチを取っている暗号通貨関連プロジェクトは少なく、このアプローチを現実化することができれば暗号通貨関連コミュニティにとって非常に価値あるものとなると思います。
私は、暗号通貨もそうですが、そういうものを提供することを目指しています。
取り敢えず、開発日誌1日目で語るのはこれくらいにしておきます。今後不定期に熱い思いを吐露したいと思います(笑)。
以下は開発者向けの専門的な話。
今日行った主な作業はPOWブロックの作成処理です。
class POWBlockCreator(settings: BlockchainSettings) {
def createBlock(index: IndexV1, parentId: IdV1, timestamp: Long, target: IdV1, data: Array[Byte]): Either[POWNormalBlockTest2, String] = {
var bi: BigInteger = BigInteger.ZERO
var nonce: Array[Byte] = bi.toByteArray
var block: POWNormalBlockTest2 = new POWNormalBlockTest2(settings, index, parentId, timestamp, target, nonce, data)
block.validatableItemsName.view.filter((name) => name != POWNormalBlockTest2.validationNameTarget && name != POWNormalBlockTest2.validationNameNonce).map((name) => block.isValidItemWithMessage(name)).find((r) => r.isRight) match {
case Some(either) => Right(either.right.get)
case None =>
var f: Boolean = true
while (f) {
if (block.isValidItem(POWNormalBlockTest2.validationNameTarget)) {
f = false
}
else {
bi = bi.add(BigInteger.ONE)
nonce = bi.toByteArray
block = new POWNormalBlockTest2(settings, index, parentId, timestamp, target, nonce, data)
if (!block.isValidItem(POWNormalBlockTest2.validationNameNonce)) {
f = false
}
}
}
block.isValidWithMessage match {
case Left(_) => Left(block)
case Right(msg) => Right(msg)
}
}
}
}
このようなブロック作成を行うクラスを作成しました。
ブロックのnonce
を変えていき、ブロックのハッシュ値がtarget
以下のものを探し出します。
これを使ってPOWブロックの採掘ができるようにするのが当面の目標です。
