여러 트랜잭션 생성
다양한 클라이언트가 만든 트랜잭션은 시스템에 대기합니다. 채굴자는이 대기열에서 트랜잭션을 선택하여 블록에 추가합니다. 그런 다음 블록을 채굴하고 승리 한 채굴자는 블록을 블록 체인에 추가하여 자신을 위해 돈을 벌 수있는 특권을 갖게됩니다.
이 마이닝 프로세스는 나중에 블록 체인 생성에 대해 논의 할 때 설명 할 것입니다. 여러 트랜잭션에 대한 코드를 작성하기 전에 주어진 트랜잭션의 내용을 인쇄하는 작은 유틸리티 함수를 추가해 보겠습니다.
거래 표시
그만큼 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 = []
새로 생성 된 각 트랜잭션을이 큐에 추가하기 만하면됩니다. 간결성을 위해이 자습서에서는 대기열 관리 논리를 구현하지 않습니다.
여러 클라이언트 생성
이제 트랜잭션 생성을 시작합니다. 첫째, 우리는 다른 사람으로부터 다양한 서비스 또는 상품을 얻기 위해 서로에게 돈을 보낼 네 명의 클라이언트를 만들 것입니다.
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 아직 채굴되지 않은 트랜잭션을 반복합니다.
지금까지 클라이언트를 생성하고, 클라이언트를 허용하고, 채굴 할 보류중인 트랜잭션의 대기열을 유지하는 방법을 배웠습니다. 이제이 튜토리얼에서 가장 중요한 부분은 블록 체인 자체를 만드는 것입니다. 다음 강의에서이를 배웁니다.