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

コロナによる需要変化 コロナパンデミックの影響で、人々は外に出られなくなり、自宅で過ごす時間が増えました。 この自粛ムードの中、下記のようなビジネスの需要変化が引き起こされています。 【利用者減少】 ...

2

米国レストランの決済時に毎日お世話になっていた「Square」のビジネスモデルについて本日はふれていきたいと思います。 「Square」とは、ネットにつながったモバイル端末と専用のカードリーダーを用意 ...

3

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

4

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

5

ナイキのSNKRSが、なぜこれほどまでに人気なのか?調べてみました。 きっかけは米国での友達との会話。彼は自分のシューズをみせて、「これ20万円もしたんだぜ。」と語ってくれました。 あまり靴に興味がな ...

-Blockchain, code, VR
-, ,

Copyright© BUSINESS HACKER , 2021 All Rights Reserved Powered by AFFINGER5.