情報アイランド

「情報を制する者は世界を制す」をモットーに様々な情報を提供することを目指すブログです。現在はプログラミング関連情報が多めですが、投資関連情報も取り扱っていきたいです。

暗号通貨開発日誌 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ブロックの採掘ができるようにするのが当面の目標です。

pizyumi
プログラミング歴19年のベテランプログラマー。業務システム全般何でも作れます。現在はWeb系の技術を勉強中。
スポンサーリンク

-, 暗号通貨, 開発