複数のトランザクションの作成

さまざまなクライアントによって行われたトランザクションは、システムのキューに入れられます。マイナーはこのキューからトランザクションを取得し、それをブロックに追加します。その後、彼らはブロックをマイニングし、勝ったマイナーはブロックをブロックチェーンに追加する特権を持ち、それによって自分のためにいくらかのお金を稼ぎます。

このマイニングプロセスについては、後でブロックチェーンの作成について説明するときに説明します。複数のトランザクションのコードを作成する前に、特定のトランザクションの内容を出力する小さなユーティリティ関数を追加しましょう。

トランザクションの表示

ザ・ display_transaction関数は、トランザクションタイプの単一のパラメーターを受け入れます。受信したトランザクション内のディクショナリオブジェクトは、という一時変数にコピーされます。dict 辞書キーを使用して、さまざまな値がコンソールに出力されます。

def display_transaction(transaction):
   #for transaction in transactions:
   dict = transaction.to_dict()
   print ("sender: " + dict['sender'])
   print ('-----')
   print ("recipient: " + dict['recipient'])
   print ('-----')
   print ("value: " + str(dict['value']))
   print ('-----')
   print ("time: " + str(dict['time']))
   print ('-----')

次に、トランザクションオブジェクトを格納するためのトランザクションキューを定義します。

トランザクションキュー

キューを作成するには、グローバルを宣言します list と呼ばれる変数 transactions 次のように-

transactions = []

新しく作成された各トランザクションをこのキューに追加するだけです。簡潔にするために、このチュートリアルではキュー管理ロジックを実装しないことに注意してください。

複数のクライアントの作成

次に、トランザクションの作成を開始します。まず、他の人からさまざまなサービスや商品を入手するためにお互いに送金する4つのクライアントを作成します。

Dinesh = Client()
Ramesh = Client()
Seema = Client()
Vijay = Client()

この時点で、Dinesh、Ramesh、Seema、Vijayという4つのクライアントがあります。現在、これらの各クライアントは、取引のためにウォレットにいくつかのTPCoinを保持していると想定しています。これらの各クライアントのIDは、これらのオブジェクトのIDプロパティを使用して指定されます。

最初のトランザクションの作成

ここで、最初のトランザクションを次のように開始します-

t1 = Transaction(
   Dinesh,
   Ramesh.identity,
   15.0
)

このトランザクションでは、Dineshは5つのTPCoinをRameshに送信します。取引を成功させるには、Dineshがこの支払いのために財布に十分なお金を持っていることを確認する必要があります。システム内でTPCoin循環を開始するには、ジェネシストランザクションが必要になることに注意してください。このジェネシストランザクションのトランザクションコードは、読み進めてすぐに記述します。

Dineshの秘密鍵を使用してこのトランザクションに署名し、次のようにトランザクションキューに追加します-

t1.sign_transaction()
transactions.append(t1)

Dineshによる最初のトランザクションの後、上記で作成したさまざまなクライアント間でさらにいくつかのトランザクションを作成します。

トランザクションの追加

次に、さらにいくつかのトランザクションを作成します。各トランザクションは、いくつかのTPCoinを別のパーティに配布します。誰かがお金を使うとき、彼がこの財布の十分なバランスをチェックする必要はありません。とにかく、マイナーは、トランザクションの開始時に送信者が持っている残高について各トランザクションを検証します。

残高が不十分な場合、マイナーはこのトランザクションを無効としてマークし、このブロックに追加しません。

次のコードは、さらに9つのトランザクションを作成し、キューに追加します。

t2 = Transaction(
   Dinesh,
   Seema.identity,
   6.0
)
t2.sign_transaction()
transactions.append(t2)
t3 = Transaction(
   Ramesh,
   Vijay.identity,
   2.0
)
t3.sign_transaction()
transactions.append(t3)
t4 = Transaction(
   Seema,
   Ramesh.identity,
   4.0
)
t4.sign_transaction()
transactions.append(t4)
t5 = Transaction(
   Vijay,
   Seema.identity,
   7.0
)
t5.sign_transaction()
transactions.append(t5)
t6 = Transaction(
   Ramesh,
   Seema.identity,
   3.0
)
t6.sign_transaction()
transactions.append(t6)
t7 = Transaction(
   Seema,
   Dinesh.identity,
   8.0
)
t7.sign_transaction()
transactions.append(t7)
t8 = Transaction(
   Seema,
   Ramesh.identity,
   1.0
)
t8.sign_transaction()
transactions.append(t8)
t9 = Transaction(
   Vijay,
   Dinesh.identity,
   5.0
)
t9.sign_transaction()
transactions.append(t9)
t10 = Transaction(
   Vijay,
   Ramesh.identity,
   3.0
)
t10.sign_transaction()
transactions.append(t10)

上記のコードを実行すると、マイナーがブロックを作成するためのキューに10個のトランザクションがあります。

ダンプトランザクション

ブロックチェーンマネージャーとして、トランザクションキューの内容を定期的に確認することをお勧めします。この目的のために、あなたは使用することができますdisplay_transaction以前に開発した機能。キュー内のすべてのトランザクションをダンプするには、トランザクションリストを繰り返し、参照されるトランザクションごとに、を呼び出します。display_transaction ここに示すように機能します-

for transaction in transactions:
   display_transaction (transaction)
   print ('--------------')

トランザクションは、区別のために破線で区切られています。上記のコードを実行すると、次のようなトランザクションリストが表示されます-

sender:
30819f300d06092a864886f70d010101050003818d0030818902818100bb064c99c49214
4a9f463480273aba93ac1db1f0da3cb9f3c1f9d058cf499fd8e54d244da0a8dd6ddd329e
c86794b04d773eb4841c9f935ea4d9ccc2821c7a1082d23b6c928d59863407f52fa05d8b
47e5157f8fe56c2ce3279c657f9c6a80500073b0be8093f748aef667c03e64f04f84d311
c4d866c12d79d3fc3034563dfb0203010001
-----
recipient:
30819f300d06092a864886f70d010101050003818d0030818902818100be93b516b28c6e
674abe7abdb11ce0fdf5bb728b75216b73f37a6432e4b402b3ad8139b8c0ba541a72c8ad
d126b6e1a1308fb98b727beb63c6060356bb177bb7d54b54dbe87aee7353d0a6baa93977
04de625d1836d3f42c7ee5683f6703259592cc24b09699376807f28fe0e00ff882974484
d805f874260dfc2d1627473b910203010001
-----
value: 15.0
-----
time: 2019-01-14 16:18:01.859915
-----
--------------
sender:
30819f300d06092a864886f70d010101050003818d0030818902818100bb064c99c49214
4a9f463480273aba93ac1db1f0da3cb9f3c1f9d058cf499fd8e54d244da0a8dd6ddd329e
c86794b04d773eb4841c9f935ea4d9ccc2821c7a1082d23b6c928d59863407f52fa05d8b
47e5157f8fe56c2ce3279c657f9c6a80500073b0be8093f748aef667c03e64f04f84d311
c4d866c12d79d3fc3034563dfb0203010001
-----
recipient:
30819f300d06092a864886f70d010101050003818d0030818902818100a070c82b34ae14
3cbe59b3a2afde7186e9d5bc274955d8112d87a00256a35369acc4d0edfe65e8f9dc93fb
d9ee74b9e7ea12334da38c8c9900e6ced1c4ce93f86e06611e656521a1eab561892b7db0
961b4f212d1fd5b5e49ae09cf8c603a068f9b723aa8a651032ff6f24e5de00387e4d0623
75799742a359b8f22c5362e5650203010001
-----
value: 6.0
-----
time: 2019-01-14 16:18:01.860966
-----
--------------
sender:
30819f300d06092a864886f70d010101050003818d0030818902818100be93b516b28c6e
674abe7abdb11ce0fdf5bb728b75216b73f37a6432e4b402b3ad8139b8c0ba541a72c8ad
d126b6e1a1308fb98b727beb63c6060356bb177bb7d54b54dbe87aee7353d0a6baa93977
04de625d1836d3f42c7ee5683f6703259592cc24b09699376807f28fe0e00ff882974484
d805f874260dfc2d1627473b910203010001
-----
recipient:
30819f300d06092a864886f70d010101050003818d0030818902818100cba097c0854876
f41338c62598c658f545182cfa4acebce147aedf328181f9c4930f14498fd03c0af6b0cc
e25be99452a81df4fa30a53eddbb7bb7b203adf8764a0ccd9db6913a576d68d642d8fd47
452590137869c25d9ff83d68ebe6d616056a8425b85b52e69715b8b85ae807b84638d8f0
0e321b65e4c33acaf6469e18e30203010001
-----
value: 2.0
-----
time: 2019-01-14 16:18:01.861958
-----
--------------

簡潔にするために、リストの最初のいくつかのトランザクションのみを印刷しました。上記のコードでは、このリストに追加されなかったジェネシストランザクションを除いて、最初のトランザクションから始まるすべてのトランザクションを出力します。トランザクションは定期的にブロックに追加されるため、通常、まだマイニングされていないトランザクションのリストのみを表示することに関心があります。その場合、適切なものを作成する必要がありますfor まだマイニングされていないトランザクションを反復処理するためのループ。

これまで、クライアントを作成し、クライアント間でクライアントを作成し、マイニングされる保留中のトランザクションのキューを維持する方法を学習しました。さて、このチュートリアルの最も重要な部分が来ました。それはブロックチェーン自体を作成することです。これについては、次のレッスンで学習します。