Blockchain code VR

Unity×VR×Blockchain(193)

スポンサーリンク

//tips

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

Pipでpythonにモジュールを組み込もうとしたところ

zsh: command not found: pip

のエラーが発生。

そのそもpipの仕組み自体がないようなのでそちらからまず入れる。

pip install base58で失敗したのでpip3 install base58でトライしたらダウンロードできた。

サンプルプトグラムから公開鍵と秘密鍵を生成していく。

//モジュールのインポート
import base58
import ecdsa
import filelock
import json

//ecdsaモジュール機能で秘密鍵と公開鍵を作成
//ecdsaモジュールのSigningKeyクラスのgenerateメソッドを使用。
//ecdsa.SECP256k1は楕円曲線の種類。
private_key = ecdsa.SigningKey.generate(curve=ecdsa.SECP256k1)

//get_verifying_key()メソッドの使用で公開鍵作成。
public_key = private_key.get_verifying_key()

//変数の文字列変換
private_key = private_key.to_string()
public_key = public_key.to_string()

//秘密鍵の長さと内容の表示
print('private key len:', len(private_key))
print('private key hex:', private_key.hex())

//公開鍵の長さと内容の表示。内容はhexメソッドで16進法に変換
print('public key len:', len(public_key))
print('public key hex:', public_key.hex())

//b58encodeメソッドを使いBase58型に変換。異なるデータ構造を持つバイト列で結果を返すので文字列に直している。
//バイト列を直すには文字コードを指定する必要があり、asciiをこの場合は指定している。

private_b58 = base58.b58encode(private_key).decode('ascii')
public_b58 = base58.b58encode(public_key).decode('ascii')

print('private key base58:', private_b58)
print('public key base58:', public_b58)

//with文でファイル操作を指示する。
//JSONオブジェクトをPythonで扱うときは辞書型を使う。
with filelock.FileLock('key.lock', timeout=10):
try:
with open('key.txt', 'r') as file:
key_list = json.load(file)
except:
key_list = []

//appendでリストへの追加
key_list.append({
'private': private_b58,
'public' : public_b58
})

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

これをlauncher経由で実行。launcherを開きfileからopenでファイルを選択する。すると、下記の内容が表示された。

private key len: 32

private key hex: 3295fb0f827a21876f01922877792221439807e3a08b9eb717d91468048ef9d3

public key len: 64

public key hex: 710071514c58814485bca8821131cf32b4aa4de202085b2df20d86517d9d87740d4b2d4ffcaad0a66b2eb810a599a0622f0a1178c246ea0aeb40168f43709e9a

private key base58: 4QU2fA8PE6NU95bDu2DiRP7pJ7p4Pwq3dSs1eAByeGLa

public key base58: 3G3B1MkMwVEDNwE1Vx5j99peMbABmVFheGgSG1NV3h762z8gZV5NGczQaXnTpqfvTkSW1VbAMFhr8eEbZ7hmCYB3

key.lockとkey.txtファイルが新たにフォルダに作成されており、key.txtファイルの中にはjson形式でbase58のkeyがそれぞれ格納されているのを確認できた。

[
{
"private": "4QU2fA8PE6NU95bDu2DiRP7pJ7p4Pwq3dSs1eAByeGLa",
"public": "3G3B1MkMwVEDNwE1Vx5j99peMbABmVFheGgSG1NV3h762z8gZV5NGczQaXnTpqfvTkSW1VbAMFhr8eEbZ7hmCYB3"
}
]

モジュールの機能を使うことでかなり簡易に作れることがわかった。

電子署名の方も確認する。

先程のスクリプトでさらに出力先用の公開鍵も作成する。再度先のプログラムを実行することで、key.txtファイルの中に下記のような二組の鍵を確認できるようになった。

[
{
"private": "4QU2fA8PE6NU95bDu2DiRP7pJ7p4Pwq3dSs1eAByeGLa",
"public": "3G3B1MkMwVEDNwE1Vx5j99peMbABmVFheGgSG1NV3h762z8gZV5NGczQaXnTpqfvTkSW1VbAMFhr8eEbZ7hmCYB3"
},
{
"private": "EXXZifNcoZ5Vxm6N8Z7pxeUzdT4DEkB46MR9PT9EcNK1",
"public": "35xdAyr3JdPqvK8UGum8HhWouEwxgyyiLgLMYeSnKdvmJhw4YeAXDj74PFDWGttgHxdATb41SPVh9eEYzhVjoKE7"
}
]

ターミナルでsign.pyスクリプトに先の鍵を読み込ませようとしているのだがうまくいかない。

cd Desktop
cd mycoin
pwd で現在地確認。
ls で目的地に自分のスクリプトがあるか確認。

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

の順にインプットしている。

python sign.py 4QU2fA8PE6NU95bDu2DiRP7pJ7p4Pwq3dSs1eAByeGLa 3G3B1MkMwVEDNwE1Vx5j99peMbABmVFheGgSG1NV3h762z8gZV5NGczQaXnTpqfvTkSW1VbAMFhr8eEbZ7hmCYB3 35xdAyr3JdPqvK8UGum8HhWouEwxgyyiLgLMYeSnKdvmJhw4YeAXDj74PFDWGttgHxdATb41SPVh9eEYzhVjoKE7

そうすると下記のようにエラーが発生。

Traceback (most recent call last):
File "sign.py", line 1, in <module>
import base58
ImportError: No module named base58

ターミナルにpip3 show base58を入力。

Name: base58
Version: 2.1.0
Summary: Base58 and Base58Check implementation.
Home-page: https://github.com/keis/base58
Author: David Keijser
Author-email: keijser@gmail.com
License: MIT
Location: /Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages
Requires:
Required-by:

ModuleNotFoundError(エラーメッセージはno module named <モジュール名>)は、importキーワードで指定したモジュールが存在しない場合に発生するエラー。

しょうがないのでmacでのpythonの使い方を探す。

色々見ているとpython3でターミナルコマンドを入力すればいいのではないかと気がつき入力したらこれで実行できた。

ターミナルの結果として以下を取得することができた。

key hex: 3295fb0f827a21876f01922877792221439807e3a08b9eb717d91468048ef9d3

in hex: 710071514c58814485bca8821131cf32b4aa4de202085b2df20d86517d9d87740d4b2d4ffcaad0a66b2eb810a599a0622f0a1178c246ea0aeb40168f43709e9a

out hex: 684f7b460f23c5c10761c78e6855b408958cd0723eb3f387b2651c98ed137774884a05f165b261a3484c149cba7bc42c07c6d61c936c1ece7ac30d9a74f1ba50

hash len: 32
hash hex: f9bd6229db4ea03d0daad6b9514d1cdd7840e03a8c64db023a1c3d7e037244eb

sig len: 64

sig hex: e93001c3ed87aca3f7ac0c54985420df7527bdc90df3d11a02ea0cb4653803b87674ffcad46af3a5bef64d0fae6d43ef77d83d16f650f6f616fe21595d760b7b

Sign.pyはBase58形式の鍵を16進数表記に直して再表示するもので、ここで入力と出力の公開鍵からトランザクションハッシュを出し、それに対して秘密鍵を用いて電子署名を行なっている。

このハッシュは送信元と受け取り手の公開鍵から生成されている点は注意しておく。送信元だけではない。

電子署名を行なったトランザクションはtrans.txtに保存し、マイニングプログラムで読み込めるようにしておく。

下記がtrans.txtである。

[
{
"in": "710071514c58814485bca8821131cf32b4aa4de202085b2df20d86517d9d87740d4b2d4ffcaad0a66b2eb810a599a0622f0a1178c246ea0aeb40168f43709e9a",
"out": "684f7b460f23c5c10761c78e6855b408958cd0723eb3f387b2651c98ed137774884a05f165b261a3484c149cba7bc42c07c6d61c936c1ece7ac30d9a74f1ba50",
"sig": "e93001c3ed87aca3f7ac0c54985420df7527bdc90df3d11a02ea0cb4653803b87674ffcad46af3a5bef64d0fae6d43ef77d83d16f650f6f616fe21595d760b7b"
}
]

上記の処理を行なったsign.pyの内容を確認していく。

人気の記事

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.