Blockchain code VR

Unity×VR×Blockchain(194)

スポンサーリンク

//tips

//pythonでのブロックチェーン記述

Sign.pyの内容を確認する。

//必要モジュールのインポート

import base58
import ecdsa
import filelock
import hashlib //ハッシュ関数SHA-256を使うために必要
import json
import sys

//下記部分がターミナルでの指示を可能にする部分(コマンドライン引数)
//コマンドの後に、空白で区切ってコマンドライン引数を指定する
//前回は公開鍵・秘密鍵部分を引数に使用した。

if len(sys.argv) != 4:
print('usage:', sys.argv[0], 'in-private in-public out-public')
exit()

コマンドラインの引数の個数はsys.argvとlen関数を組み合わせた
len(sys.argv)で取得することができ、
sys.argv[番号]とすると、指定した番号の引数を取得することができる。
ここではコマンドラインの引数が4個以外かどうかを判定し、
4個以外の場合に処理を実行させている。

先に下記コマンドで実行したが

Photon3 sign.py 入力秘密鍵 入力公開鍵 出力公開鍵

この場合sign.pyが引数番号0に当たる。

もし、4個以外の引数の場合は
usage: sign.py in-private in-public put-public
というsign.pyの使用法に関する記述がされる。

tx_key = base58.b58decode(sys.argv[1])
tx_in = base58.b58decode(sys.argv[2])
tx_out = base58.b58decode(sys.argv[3])

各変数に引数の鍵をBase58形式からバイト列に変換し、変数に格納。

変換した鍵をhexメソッドで16進数に表記を変換して表示。

print('key hex:', tx_key.hex())
print('in hex:', tx_in.hex())
print('out hex:', tx_out.hex())

SHA-256を使用し、トランザクションハッシュを作成。

sha = hashlib.sha256() //SHA256オブジェクト作成
sha.update(tx_in) //変数を使用しハッシュを更新
sha.update(tx_out) //変数を使用しハッシュを更新
hash = sha.digest()/ /結果のハッシュをhashに代入

このhashの長さと16進数表記で中身の記載を.hex()で行なっている

print('hash len:', len(hash))
print('hash hex:', hash.hex())

このトランザクションハッシュに対して、秘密鍵を用いて署名する必要があるので、
EcdsaモジュールのSigningKeyクラスのfrom_stringメソッドを使って、
秘密鍵の文字列から秘密鍵のオブジェクトを作り、変数keyに代入。

key = ecdsa.SigningKey.from_string(tx_key, curve=ecdsa.SECP256k1)

このkeyを使用して、signメソッドを呼び、hash(トランザクションハッシュ)に対して署名する。

sig = key.sign(hash)

署名内容表示。

print('sig len:', len(sig))
print('sig hex:', sig.hex())

署名というデータを作成する点で物理的な署名とは異なる。

トランザクションをtrans.txtに出力していく。
まずはロックファイルを作成。

with filelock.FileLock('trans.lock', timeout=10):

次に、trans.txtを読み込み、変数tx_listに代入。読み込めなかった場合には空のリストを代入。

try:
with open('trans.txt', 'r') as file:
tx_list = json.load(file)
except:
tx_list = []

tx_listにはトランザクションのリスト入っているので、そちらに新たに追加する形を取る。入力公開鍵と出力公開鍵、そして新たに作成した署名データが含まれることになる。.hexで16進数表記で格納する。

tx_list.append({
'in': tx_in.hex(),
'out': tx_out.hex(),
'sig': sig.hex()
})

新しいトランザクションを追加したリストをファイルに書き込む。

with open('trans.txt', 'w') as file:
json.dump(tx_list, file, indent=2)

Pythonでのファイルの読み書きはopen()を使用し、open(..., "w") にした場合、第一引数のファイルへの書き込みを行うことができる。ここでは書き込みを支持した後、json形式での書き込みを支持している。

Withはブロック処理を表し、終了のclose関数を使う必要がなく、コードを短縮できるよう。

人気の記事

1

皆さん、ついに、エアラインでも、サブスクリプションが始まったのはご存じですか? まだ実験段階ですが、ANAが、定額全国住み放題サービスを提供する「ADDress」と組んで、国内線を4回まで定額利用可能 ...

2

無料でネットショップを開けるアプリとして多くの人に驚きを与えたBASE株式会社が、2019年10月25日東証マザーズに上場しました。2020年2月時点で90万店を超えるショップを抱えるまでに成長してい ...

3

2011年にサービスを開始してから圧倒的な成長率を誇るインテリア通販サイト 【FLYMEe/フライミー】を皆さんご存じでしょうか。 「自分のイメージするインテリア、本当に欲しいインテリアがどこにあるの ...

4

ついに、noteの月間アクティブユーザー数が4400万人(2020年3月時点)に到達しました。 そもそも、「note」とは、クリエイターが、文章やマンガ、写真、音声を投稿することができ、ユーザーはその ...

5

ボードゲームカフェが1日2回転で儲かるという記事をみつけたので興味を持ち、調べてみました。 まずは、需要がどれくらいあるのか、市場のようすからみていきましょう。 世界最大のボードゲーム市場はドイツで、 ...

-Blockchain, code, VR
-, ,

Copyright© BUSINESS HUNTER , 2023 All Rights Reserved Powered by AFFINGER5.