株式会社カブロホ(旧gescalgo)の運営メモ

「信用ロボアド」による資産形成サービスです。


証券取引のブロックチェーンを検討してみる(python)

以下の証券取引をブロックチェーンで表現してみました。

・ブロックチェーンの起点を作る
・野村証券の太郎さんの預り(7203トヨタ、100株)が、SBI証券の花子さんに9950円で移転した。
・SBI証券の花子さんの預り(7203トヨタ、100株)が、大和証券の次郎さんに9900円で移転した。

出来たブロックチェーンは以下の通り。
前のブロックと新しくできたブロックがハッシュでつながっていく様が見て取れます。

index : 0
timestamp : 0
transaction : 0
previous_hash : -
property_dict : {'index': 0, 'timestamp': 0, 'transaction': 0, 'previous_hash': '-'}
now_hash : 49f3a23af19229c5a1a12611bdb590f742154a5d11b5018f3f01b740800a5c20

index : 1
timestamp : 2021-06-29 07:53:58.073892
transaction : {'FROM_株式保有者': '太郎', 'TO_株式保有者': '花子', '証券コード': '7203', '株数': 100, '価格': 9950, 'FROM_証券会社': 'nomura', 'TO_証券会社': 'sbi'}
previous_hash : 49f3a23af19229c5a1a12611bdb590f742154a5d11b5018f3f01b740800a5c20
property_dict : {'index': 1, 'timestamp': '2021-06-29 07:53:58.073892', 'transaction': {'FROM_株式保有者': '太郎', 'TO_株式保有者': '花子', '証券コード': '7203', '株数': 100, '価格': 9950, 'FROM_証券会社': 'nomura', 'TO_証券会社': 'sbi'}, 'previous_hash': '49f3a23af19229c5a1a12611bdb590f742154a5d11b5018f3f01b740800a5c20'}
now_hash : f34e9b2296dd5f242e0a8c7ebf79dd883acb9c03b1fb0ded2f60b45bd7771c52

index : 2
timestamp : 2021-06-29 07:53:58.074889
transaction : {'FROM_株式保有者': '花子', 'TO_株式保有者': '次郎', '証券コード': '7203', '株数': 100, '価格': 9900, 'FROM_証券会社': 'sbi', 'TO_証券会社': 'daiwa'}
previous_hash : f34e9b2296dd5f242e0a8c7ebf79dd883acb9c03b1fb0ded2f60b45bd7771c52
property_dict : {'index': 2, 'timestamp': '2021-06-29 07:53:58.074889', 'transaction': {'FROM_株式保有者': '花子', 'TO_株式保有者': '次郎', '証券コード': '7203', '株数': 100, '価格': 9900, 'FROM_証券会社': 'sbi', 'TO_証券会社': 'daiwa'}, 'previous_hash': 'f34e9b2296dd5f242e0a8c7ebf79dd883acb9c03b1fb0ded2f60b45bd7771c52'}
now_hash : 03f3fb4691dd408d09f175f686fb196c9e46fef0e0b607e2ac3a59f16fec7b08

Process finished with exit code 0



以下でトランザクションの内容を定義しており、データ項目の増減は自由自在です。
transaction = {
"FROM_株式保有者": sender,
"TO_株式保有者": recipient,
"証券コード": sec_code,
"株数": kabusu,
"価格": kakaku,
"FROM_証券会社": from_sec,
"TO_証券会社": to_sec,
}


コードは以下の通りです。

import hashlib
import json
import datetime

class Block:
    def __init__(self, index, timestamp, transaction, previous_hash):
        self.index = index
        self.timestamp = timestamp
        self.transaction = transaction
        self.previous_hash = previous_hash
        self.property_dict = {str(i): j for i, j in self.__dict__.items()}
        self.now_hash = self.calc_hash()

    def calc_hash(self):
        block_string = json.dumps(self.property_dict, sort_keys=True).encode('ascii')
        return hashlib.sha256(block_string).hexdigest()

def new_transaction(sender, recipient, sec_code,kabusu,kakaku,from_sec,to_sec):
            transaction = {
                "FROM_株式保有者": sender,
                "TO_株式保有者": recipient,
                "証券コード": sec_code,
                "株数": kabusu,
                "価格": kakaku,
                "FROM_証券会社": from_sec,
                "TO_証券会社": to_sec,
            }
            return transaction

#ブロックチェーンの起点を作成
block_chain = []
genesis_block = Block(0, 0, 0, "-")
block_chain.append(genesis_block)


#最初に行われた株式の移転
transaction = new_transaction("太郎", "花子", "7203" , 100 , 9950 , "nomura" , "sbi")
new_block = Block(1, str(datetime.datetime.now()),transaction , block_chain[0].now_hash)
block_chain.append(new_block)


#次に行われた株式の移転
transaction = new_transaction("花子", "次郎", "7203" , 100 , 9900 , "sbi" , "daiwa")
new_block = Block(2, str(datetime.datetime.now()),transaction , block_chain[1].now_hash)
block_chain.append(new_block)

#作成された3つのブロックを表示
for key, value in block_chain[0].__dict__.items():
    print(key, ':', value)
print("")
for key, value in block_chain[1].__dict__.items():
    print(key, ':', value)
print("")
for key, value in block_chain[2].__dict__.items():
    print(key, ':', value)


我が国の株式取引においては、売買契約は東京証券取引所、受渡決済はクリアリング機構、記帳はほふり、がほぼ独占していて、実質この3社のサービスを利用しなければ証券取引は行うことができないのですが、
ブロックチェーンを活用すれば、この独占体制に一石を投じることができるかもしれません。


以下を参考にさせていただきました。
www.sejuku.net

スポンサーリンク


スポンサーリンク


スポンサーリンク