Skip to content

Commit cf8ce74

Browse files
committed
Merge branch 'input-output' into merkleTree
2 parents bd4662f + b506ad2 commit cf8ce74

19 files changed

+220
-30
lines changed

Network/Node.pyc

-1.55 KB
Binary file not shown.

apple.png

241 Bytes
Loading

block.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,10 @@
33
import hashlib
44

55
MINING_DIFFICULTY = 2
6-
HASH_GENESIS_BLOCK = "2c1000ab01910992ffdc4cbd28c78698b11c63887caaf8b02e0959e83e11a8e3"
6+
HASH_GENESIS_BLOCK = "a37c5dfb2a28763c7e4468f4d817f109d9ae4ccbbb7fdefe9ee2f27b0ab3974f"
77

88

99
class Block(object):
10-
1110
def __init__(self, nonce, transactions, index, previous_hash):
1211
self.index = index
1312
self.nonce = nonce
@@ -86,3 +85,14 @@ def valid_block(block_to_validate, previous_block):
8685
return False
8786

8887
return True
88+
89+
def check_sender_stock(self, tx, nb):
90+
i = 1
91+
while 1 > nb and i <= len(self.transactions):
92+
if self.transactions[-i].value == tx.value:
93+
if self.transactions[-i].sender_address == tx.sender_address:
94+
nb = nb - 1
95+
elif self.transactions[-i].recipient_address == tx.sender_address:
96+
nb = nb + 1
97+
i = i + 1
98+
return nb

blockchain.py

Lines changed: 35 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
from collections import OrderedDict
77
import jsonpickle
88

9+
from init_transactions import getInitialTransactions
10+
911
from block import Block
1012
from transaction import Transaction
1113
from wallet import Wallet
@@ -33,11 +35,12 @@ def __init__(self):
3335
self._genesis_block()
3436

3537
def _genesis_block(self):
36-
t1 = Transaction('@sender_address', '@recipient_address', 50)
38+
txs = getInitialTransactions()
3739

3840
nonce = 55
3941
previous_hash = 0
40-
b1 = Block(nonce, t1, 0, 0)
42+
index = 0
43+
b1 = Block(nonce, txs, index, previous_hash)
4144

4245
self.chain.append(b1)
4346

@@ -52,21 +55,47 @@ def last_block(self):
5255
def chain_for_network(self):
5356
return jsonpickle.encode(self.chain)
5457

58+
def check_sender_stock(self, tx):
59+
#check sur le block en cours
60+
i = 1
61+
nb = 0
62+
while 1 > nb and i <= len(self.current_transactions):
63+
if self.current_transactions[-i].value == tx.value:
64+
if self.current_transactions[-i].sender_address == tx.sender_address:
65+
nb = nb - 1
66+
elif self.current_transactions[-i].recipient_address == tx.sender_address:
67+
nb = nb + 1
68+
i = i + 1
69+
70+
#check sur les anciens blocs
71+
if len(self.chain) >= 1 :
72+
current_block = self.last_block
73+
i = current_block.index
74+
while 1 > nb and i >= 0:
75+
current_block = self.chain[i]
76+
nb = current_block.check_sender_stock(tx, nb)
77+
i = i - 1
78+
79+
return nb >= 1
80+
5581
def submit_transaction(self, transaction):
5682
"""
5783
Add a transaction to transactions array if the signature verified
5884
Return index of block that the transaction will be.
5985
"""
86+
print("Working on Transaction", transaction)
6087
if not isinstance(transaction, Transaction):
6188
raise ValueError(
6289
'transaction parameter should be a Transaction instance.')
6390

64-
transaction_verification = transaction.verify_signature()
91+
transaction_verification = transaction.verify_signature() and self.check_sender_stock(transaction)
6592

6693
if transaction_verification:
6794
self.current_transactions.append(transaction)
68-
return len(self.chain) + 1
95+
print("Transaction signature is valid")
96+
return len(self.chain)
6997

98+
print("Transaction signature is invalid")
7099
return False
71100

72101
def create_block(self, nonce, previous_hash):
@@ -78,8 +107,8 @@ def create_block(self, nonce, previous_hash):
78107
"""
79108

80109
# Why we have this OR condition? Seems useless.
81-
block = Block(nonce, self.current_transactions, len(self.chain) +
82-
1, previous_hash or Block.hash(self.chain[-1]))
110+
block = Block(nonce, self.current_transactions, len(self.chain),
111+
previous_hash or Block.hash(self.chain[-1]))
83112

84113
# Reset the current list of transactions
85114
self.current_transactions = []

init_datas.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
tx_signatures = [
2+
"23a419ef8273c6e6317da42df6e623dea226081d239eb1df16d7c4c78fe420a417057e7eb2b5c693f51d5da5fcae049cc9d9bb2450bd2d574b2d9ef80fe2bdc4eb3e178b1066b33a31727db990d10737baaca11238ac84a730d49f5d793a5eaa1486597d6cc6d366493fd78547b9679405b949bbe2bac9e8db2ccd1f5e8ab80d28c89402631fed7c67d445c1f2d4f2dbb9b9867c5d30798a82ac973c21fea58b337034468ed0b25859731761c61f839ca769ac3a89c4db6d1e345230c8cd0913e69c9c3d7cda17a6eb4be9bf74802d23405c2f7f8bc672b0639cd87dcc0192a9484941ed445431c7d1fedeebb390a59d6d03577c36f3e0033d32ac7d36da9001b1a2911b4747fc52b53623d40c0e16bde857deb0a4f50a4ecc28ccb5c6e1074f8bb3daa30b8869435681717f10ea8d152435417cbff6e6a21a085848504913e7231eaa15e3f19121ab67503128d0a1af2d7049c1e5c677f9d913e39f6a226f6ff1d56aac5938f6fcc387475e73f178122c1b6e4d3002e5b29f66388a2b704bf1ae3b42b41a67b8ae781b6627114bd2cff4cc8ad6505f9f07d578adc1396b049988f408f1e5f12c43044e4de9d0e892d13bd9b70e81a5a6a69075413dbd2131ecfe8c1226821aca5de5c8c75e578ec15a573c3b8c41c112e085e91a418863f35ffb5bd3b47a45284a370b3cc1c29df26fe4d8648855b48cfa4988a527f7c0f6e4",
3+
"3fd905cfb311840eee025a8266fe0939220a2585a4651feaea278ee72a7b5c922e901f9c737420c1b1c18584230cbf34de3ad37b4a8523030205301f992b148ab6a34af97769d13b9aae6961d1bb038fc979ab280407d5eeff81be58b2c47d3f27c97d7bbaec390caa818df797020fdbb311600ae3e1586688f005e711f45d92e0def5dd706983e7626c6d895c4d7512ca5fb0013e595bc302dd1074891dddd781793a7e454e33bc6d58734ccc9f97d1350472d2eac2e9f757115747622c2d4c13604edda67ac7381749008eb719a6ca4881f8d7fae48b87440641094f2aec5a7955050196822e85f23e6ac5b24a56223b1d18bc2ac8af7532d4d5ef9028a226de49672e98ce966191cf8818566bac1c45a6a3c68d5a4b8911467f75e026e0dff593c5e5d3c2de39a09f46e0b93a0d9682d1ef3acc9363e5fdf838284ab37429099ee8d5a5a72f9fcfb1bdb197ba66af950253ac358b314b091d7909026d01589df5541bf3293e6cab044286974d63ef9f3b5e8fa89a011427f591f39730c32c2672a30c1296e1aa97f3944d2bbd36ed59ca1050024fd6a124d5286c686dce1069c52c743cc421fac33a4459421c880000f897d132c1353123d25eea0ae9f0071afc753ec803f19b0dcd617a26612b9756c07d153293578a30459facfca4af795d2066511585d56ab351fbb874af56d65942fd3a66b5afd3a95eb305e4159346",
4+
"3b850157ef7274cfaf75416321bdfa81a73ae1462015cb7030c30d60544031742fa9c871899c25ea5514d9e54d2616206a5b4de41dfc74ede61eef872a2d357d1442dfba04e5763d69489d5d205d6d53f581f106c117823e83f387b80f9b8cf919daccd3a16459a6f85ab4c1514257de765723456d7b0ab8d88b55a91b2b67f2839daee194763196800bcc641fca47a5be33743effd9442d558f088a5156163d0844a1abb902ffea295c81184ca2d202a75adee325282fbf0fe5849ddea68132f8a8e302e364c5d6b7dfd8fe4adc2b69a001c8ce5fc9f2b999fe5696802be9cb7054c8885b4ee543ba4d64bb0f7e0d0d6bacc8ca3ea68858dfae108a3209c95d4aa77b73be7cb1116e16d3f2c56e049272e8926001570f3db8beb5068542fd485249e5a71ca2c3eac864254d808583f7658d156d2d60ab9aebd7bb73f65744e45d4ad2851f193353ad9c4649eb5a4cc018ec65fe097e3ba364a7878ab1710b0c896d95d9186b0752e93e7179359df329c34ac3af3b05bb51efe4337a8e88be47da8e3ff6b286867e8b55ac4edf2de54219e9d1b3af7bf90e2a1f6669b5efff2d088a184089168f47d321e5baa12a029e140b50a3c02d159cab1a16671153c886fc17322601328832a101ef75916da8d834598d7b478fc4976c747ae9eec3de2e12c21e545071c669659cc5affdaf3e83e65cd85f6ad597f77e4928df5883c449",
5+
"23a419ef8273c6e6317da42df6e623dea226081d239eb1df16d7c4c78fe420a417057e7eb2b5c693f51d5da5fcae049cc9d9bb2450bd2d574b2d9ef80fe2bdc4eb3e178b1066b33a31727db990d10737baaca11238ac84a730d49f5d793a5eaa1486597d6cc6d366493fd78547b9679405b949bbe2bac9e8db2ccd1f5e8ab80d28c89402631fed7c67d445c1f2d4f2dbb9b9867c5d30798a82ac973c21fea58b337034468ed0b25859731761c61f839ca769ac3a89c4db6d1e345230c8cd0913e69c9c3d7cda17a6eb4be9bf74802d23405c2f7f8bc672b0639cd87dcc0192a9484941ed445431c7d1fedeebb390a59d6d03577c36f3e0033d32ac7d36da9001b1a2911b4747fc52b53623d40c0e16bde857deb0a4f50a4ecc28ccb5c6e1074f8bb3daa30b8869435681717f10ea8d152435417cbff6e6a21a085848504913e7231eaa15e3f19121ab67503128d0a1af2d7049c1e5c677f9d913e39f6a226f6ff1d56aac5938f6fcc387475e73f178122c1b6e4d3002e5b29f66388a2b704bf1ae3b42b41a67b8ae781b6627114bd2cff4cc8ad6505f9f07d578adc1396b049988f408f1e5f12c43044e4de9d0e892d13bd9b70e81a5a6a69075413dbd2131ecfe8c1226821aca5de5c8c75e578ec15a573c3b8c41c112e085e91a418863f35ffb5bd3b47a45284a370b3cc1c29df26fe4d8648855b48cfa4988a527f7c0f6e4",
6+
"3fd905cfb311840eee025a8266fe0939220a2585a4651feaea278ee72a7b5c922e901f9c737420c1b1c18584230cbf34de3ad37b4a8523030205301f992b148ab6a34af97769d13b9aae6961d1bb038fc979ab280407d5eeff81be58b2c47d3f27c97d7bbaec390caa818df797020fdbb311600ae3e1586688f005e711f45d92e0def5dd706983e7626c6d895c4d7512ca5fb0013e595bc302dd1074891dddd781793a7e454e33bc6d58734ccc9f97d1350472d2eac2e9f757115747622c2d4c13604edda67ac7381749008eb719a6ca4881f8d7fae48b87440641094f2aec5a7955050196822e85f23e6ac5b24a56223b1d18bc2ac8af7532d4d5ef9028a226de49672e98ce966191cf8818566bac1c45a6a3c68d5a4b8911467f75e026e0dff593c5e5d3c2de39a09f46e0b93a0d9682d1ef3acc9363e5fdf838284ab37429099ee8d5a5a72f9fcfb1bdb197ba66af950253ac358b314b091d7909026d01589df5541bf3293e6cab044286974d63ef9f3b5e8fa89a011427f591f39730c32c2672a30c1296e1aa97f3944d2bbd36ed59ca1050024fd6a124d5286c686dce1069c52c743cc421fac33a4459421c880000f897d132c1353123d25eea0ae9f0071afc753ec803f19b0dcd617a26612b9756c07d153293578a30459facfca4af795d2066511585d56ab351fbb874af56d65942fd3a66b5afd3a95eb305e4159346",
7+
"3b850157ef7274cfaf75416321bdfa81a73ae1462015cb7030c30d60544031742fa9c871899c25ea5514d9e54d2616206a5b4de41dfc74ede61eef872a2d357d1442dfba04e5763d69489d5d205d6d53f581f106c117823e83f387b80f9b8cf919daccd3a16459a6f85ab4c1514257de765723456d7b0ab8d88b55a91b2b67f2839daee194763196800bcc641fca47a5be33743effd9442d558f088a5156163d0844a1abb902ffea295c81184ca2d202a75adee325282fbf0fe5849ddea68132f8a8e302e364c5d6b7dfd8fe4adc2b69a001c8ce5fc9f2b999fe5696802be9cb7054c8885b4ee543ba4d64bb0f7e0d0d6bacc8ca3ea68858dfae108a3209c95d4aa77b73be7cb1116e16d3f2c56e049272e8926001570f3db8beb5068542fd485249e5a71ca2c3eac864254d808583f7658d156d2d60ab9aebd7bb73f65744e45d4ad2851f193353ad9c4649eb5a4cc018ec65fe097e3ba364a7878ab1710b0c896d95d9186b0752e93e7179359df329c34ac3af3b05bb51efe4337a8e88be47da8e3ff6b286867e8b55ac4edf2de54219e9d1b3af7bf90e2a1f6669b5efff2d088a184089168f47d321e5baa12a029e140b50a3c02d159cab1a16671153c886fc17322601328832a101ef75916da8d834598d7b478fc4976c747ae9eec3de2e12c21e545071c669659cc5affdaf3e83e65cd85f6ad597f77e4928df5883c449",
8+
"23a419ef8273c6e6317da42df6e623dea226081d239eb1df16d7c4c78fe420a417057e7eb2b5c693f51d5da5fcae049cc9d9bb2450bd2d574b2d9ef80fe2bdc4eb3e178b1066b33a31727db990d10737baaca11238ac84a730d49f5d793a5eaa1486597d6cc6d366493fd78547b9679405b949bbe2bac9e8db2ccd1f5e8ab80d28c89402631fed7c67d445c1f2d4f2dbb9b9867c5d30798a82ac973c21fea58b337034468ed0b25859731761c61f839ca769ac3a89c4db6d1e345230c8cd0913e69c9c3d7cda17a6eb4be9bf74802d23405c2f7f8bc672b0639cd87dcc0192a9484941ed445431c7d1fedeebb390a59d6d03577c36f3e0033d32ac7d36da9001b1a2911b4747fc52b53623d40c0e16bde857deb0a4f50a4ecc28ccb5c6e1074f8bb3daa30b8869435681717f10ea8d152435417cbff6e6a21a085848504913e7231eaa15e3f19121ab67503128d0a1af2d7049c1e5c677f9d913e39f6a226f6ff1d56aac5938f6fcc387475e73f178122c1b6e4d3002e5b29f66388a2b704bf1ae3b42b41a67b8ae781b6627114bd2cff4cc8ad6505f9f07d578adc1396b049988f408f1e5f12c43044e4de9d0e892d13bd9b70e81a5a6a69075413dbd2131ecfe8c1226821aca5de5c8c75e578ec15a573c3b8c41c112e085e91a418863f35ffb5bd3b47a45284a370b3cc1c29df26fe4d8648855b48cfa4988a527f7c0f6e4",
9+
"3fd905cfb311840eee025a8266fe0939220a2585a4651feaea278ee72a7b5c922e901f9c737420c1b1c18584230cbf34de3ad37b4a8523030205301f992b148ab6a34af97769d13b9aae6961d1bb038fc979ab280407d5eeff81be58b2c47d3f27c97d7bbaec390caa818df797020fdbb311600ae3e1586688f005e711f45d92e0def5dd706983e7626c6d895c4d7512ca5fb0013e595bc302dd1074891dddd781793a7e454e33bc6d58734ccc9f97d1350472d2eac2e9f757115747622c2d4c13604edda67ac7381749008eb719a6ca4881f8d7fae48b87440641094f2aec5a7955050196822e85f23e6ac5b24a56223b1d18bc2ac8af7532d4d5ef9028a226de49672e98ce966191cf8818566bac1c45a6a3c68d5a4b8911467f75e026e0dff593c5e5d3c2de39a09f46e0b93a0d9682d1ef3acc9363e5fdf838284ab37429099ee8d5a5a72f9fcfb1bdb197ba66af950253ac358b314b091d7909026d01589df5541bf3293e6cab044286974d63ef9f3b5e8fa89a011427f591f39730c32c2672a30c1296e1aa97f3944d2bbd36ed59ca1050024fd6a124d5286c686dce1069c52c743cc421fac33a4459421c880000f897d132c1353123d25eea0ae9f0071afc753ec803f19b0dcd617a26612b9756c07d153293578a30459facfca4af795d2066511585d56ab351fbb874af56d65942fd3a66b5afd3a95eb305e4159346",
10+
"3b850157ef7274cfaf75416321bdfa81a73ae1462015cb7030c30d60544031742fa9c871899c25ea5514d9e54d2616206a5b4de41dfc74ede61eef872a2d357d1442dfba04e5763d69489d5d205d6d53f581f106c117823e83f387b80f9b8cf919daccd3a16459a6f85ab4c1514257de765723456d7b0ab8d88b55a91b2b67f2839daee194763196800bcc641fca47a5be33743effd9442d558f088a5156163d0844a1abb902ffea295c81184ca2d202a75adee325282fbf0fe5849ddea68132f8a8e302e364c5d6b7dfd8fe4adc2b69a001c8ce5fc9f2b999fe5696802be9cb7054c8885b4ee543ba4d64bb0f7e0d0d6bacc8ca3ea68858dfae108a3209c95d4aa77b73be7cb1116e16d3f2c56e049272e8926001570f3db8beb5068542fd485249e5a71ca2c3eac864254d808583f7658d156d2d60ab9aebd7bb73f65744e45d4ad2851f193353ad9c4649eb5a4cc018ec65fe097e3ba364a7878ab1710b0c896d95d9186b0752e93e7179359df329c34ac3af3b05bb51efe4337a8e88be47da8e3ff6b286867e8b55ac4edf2de54219e9d1b3af7bf90e2a1f6669b5efff2d088a184089168f47d321e5baa12a029e140b50a3c02d159cab1a16671153c886fc17322601328832a101ef75916da8d834598d7b478fc4976c747ae9eec3de2e12c21e545071c669659cc5affdaf3e83e65cd85f6ad597f77e4928df5883c449",
11+
"23a419ef8273c6e6317da42df6e623dea226081d239eb1df16d7c4c78fe420a417057e7eb2b5c693f51d5da5fcae049cc9d9bb2450bd2d574b2d9ef80fe2bdc4eb3e178b1066b33a31727db990d10737baaca11238ac84a730d49f5d793a5eaa1486597d6cc6d366493fd78547b9679405b949bbe2bac9e8db2ccd1f5e8ab80d28c89402631fed7c67d445c1f2d4f2dbb9b9867c5d30798a82ac973c21fea58b337034468ed0b25859731761c61f839ca769ac3a89c4db6d1e345230c8cd0913e69c9c3d7cda17a6eb4be9bf74802d23405c2f7f8bc672b0639cd87dcc0192a9484941ed445431c7d1fedeebb390a59d6d03577c36f3e0033d32ac7d36da9001b1a2911b4747fc52b53623d40c0e16bde857deb0a4f50a4ecc28ccb5c6e1074f8bb3daa30b8869435681717f10ea8d152435417cbff6e6a21a085848504913e7231eaa15e3f19121ab67503128d0a1af2d7049c1e5c677f9d913e39f6a226f6ff1d56aac5938f6fcc387475e73f178122c1b6e4d3002e5b29f66388a2b704bf1ae3b42b41a67b8ae781b6627114bd2cff4cc8ad6505f9f07d578adc1396b049988f408f1e5f12c43044e4de9d0e892d13bd9b70e81a5a6a69075413dbd2131ecfe8c1226821aca5de5c8c75e578ec15a573c3b8c41c112e085e91a418863f35ffb5bd3b47a45284a370b3cc1c29df26fe4d8648855b48cfa4988a527f7c0f6e4",
12+
"3fd905cfb311840eee025a8266fe0939220a2585a4651feaea278ee72a7b5c922e901f9c737420c1b1c18584230cbf34de3ad37b4a8523030205301f992b148ab6a34af97769d13b9aae6961d1bb038fc979ab280407d5eeff81be58b2c47d3f27c97d7bbaec390caa818df797020fdbb311600ae3e1586688f005e711f45d92e0def5dd706983e7626c6d895c4d7512ca5fb0013e595bc302dd1074891dddd781793a7e454e33bc6d58734ccc9f97d1350472d2eac2e9f757115747622c2d4c13604edda67ac7381749008eb719a6ca4881f8d7fae48b87440641094f2aec5a7955050196822e85f23e6ac5b24a56223b1d18bc2ac8af7532d4d5ef9028a226de49672e98ce966191cf8818566bac1c45a6a3c68d5a4b8911467f75e026e0dff593c5e5d3c2de39a09f46e0b93a0d9682d1ef3acc9363e5fdf838284ab37429099ee8d5a5a72f9fcfb1bdb197ba66af950253ac358b314b091d7909026d01589df5541bf3293e6cab044286974d63ef9f3b5e8fa89a011427f591f39730c32c2672a30c1296e1aa97f3944d2bbd36ed59ca1050024fd6a124d5286c686dce1069c52c743cc421fac33a4459421c880000f897d132c1353123d25eea0ae9f0071afc753ec803f19b0dcd617a26612b9756c07d153293578a30459facfca4af795d2066511585d56ab351fbb874af56d65942fd3a66b5afd3a95eb305e4159346",
13+
"3b850157ef7274cfaf75416321bdfa81a73ae1462015cb7030c30d60544031742fa9c871899c25ea5514d9e54d2616206a5b4de41dfc74ede61eef872a2d357d1442dfba04e5763d69489d5d205d6d53f581f106c117823e83f387b80f9b8cf919daccd3a16459a6f85ab4c1514257de765723456d7b0ab8d88b55a91b2b67f2839daee194763196800bcc641fca47a5be33743effd9442d558f088a5156163d0844a1abb902ffea295c81184ca2d202a75adee325282fbf0fe5849ddea68132f8a8e302e364c5d6b7dfd8fe4adc2b69a001c8ce5fc9f2b999fe5696802be9cb7054c8885b4ee543ba4d64bb0f7e0d0d6bacc8ca3ea68858dfae108a3209c95d4aa77b73be7cb1116e16d3f2c56e049272e8926001570f3db8beb5068542fd485249e5a71ca2c3eac864254d808583f7658d156d2d60ab9aebd7bb73f65744e45d4ad2851f193353ad9c4649eb5a4cc018ec65fe097e3ba364a7878ab1710b0c896d95d9186b0752e93e7179359df329c34ac3af3b05bb51efe4337a8e88be47da8e3ff6b286867e8b55ac4edf2de54219e9d1b3af7bf90e2a1f6669b5efff2d088a184089168f47d321e5baa12a029e140b50a3c02d159cab1a16671153c886fc17322601328832a101ef75916da8d834598d7b478fc4976c747ae9eec3de2e12c21e545071c669659cc5affdaf3e83e65cd85f6ad597f77e4928df5883c449"
14+
]
15+
creator_address = "-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAq6RstK2LLAowG4/HV3q3\nO+YwdmZQ9At/E5MsOiKUoEd8p7V0Ja06144rajKVnmKsX25yEnaqjBPLZG+OPkie\nD/r9dCRy+5hyr5OLB8mi9iLGv3fGno+WKIUfUlwGhAcY/WbCszuOjkBJdtc/ddDx\nwTdlQ2qJKB/NKwB+oIGmO5cUhSJwYJvIxpJACX6oaxf14z2ylswuQMSPLPyxao2M\nZlN/NQrr6wvvY5BuZ/vCyy3iKCYLaL5GapntcA3HB+aUQ8MSZLCi16U8OgcSm6ey\nfz/FopG+kGeY8AEKMhS2ZXTRYVOOMzyFTb0nlIChY4XT2mW9ozzNRPslQiRVb2gF\nV/2nEyygWNG1JBrHXbWI5sM5JHSHFWFXQxPCuxy6Qo89N8UzUQGi1tiDNMARnj8D\nTVblyvjmIsHhjpVyECsjsrT+3CIfUWWWKHHjntwo/BlzZAVmofHFv/G4sYOs94kv\nyp2GmqTEfFvUXNIJkfxI82oFuqNXwarMToqrQpg2riAYUdlzMW0Q8NzoO64St/gQ\nKCownFTYXk6rPVzcUPX8ETJV7HoiDeqh28+F0MErsDxQCUPxKzMctWfOVq8moAQP\nnSD4Yn+bkCQSz3+fY6XSXBfcjez0P24YUxf6Vsq2WvD95Q4UnkKhscv5ZdUtClgn\nqesAKBD45eLci4wo9/vq+6sCAwEAAQ==\n-----END PUBLIC KEY-----"

init_transactions.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
from transaction import Transaction
2+
import hashlib
3+
from init_datas import creator_address
4+
from init_datas import tx_signatures
5+
6+
#from wallet import Wallet
7+
#creator_wallet = Wallet(); creator_address = creator_wallet.address; print(creator_address)
8+
9+
def getInitialTransactions():
10+
txs = []
11+
appleHash = hashImg('./items/apple.png')
12+
ironAxeHash = hashImg('./items/iron_axe.png')
13+
ironSwordHash = hashImg('./items/iron_sword.png')
14+
15+
for i in range(4):
16+
tx = Transaction('', creator_address, appleHash)
17+
tx.signature = bytes.fromhex(tx_signatures[i*3])
18+
#tx.sign(creator_wallet); print("sign#", i*3, tx.signature.hex())
19+
txs.append(tx)
20+
21+
tx = Transaction('', creator_address, ironAxeHash)
22+
tx.signature = bytes.fromhex(tx_signatures[i*3 + 1])
23+
#tx.sign(creator_wallet); print("sign#", i*3 + 1, tx.signature.hex())
24+
txs.append(tx)
25+
26+
tx = Transaction('', creator_address, ironSwordHash)
27+
tx.signature = bytes.fromhex(tx_signatures[i*3 + 2])
28+
#tx.sign(creator_wallet); print("sign#", i*3 + 2, tx.signature.hex())
29+
txs.append(tx)
30+
31+
return txs
32+
33+
def hashImg(img_path):
34+
img_content = _getImgData(img_path)
35+
return hashlib.sha256(img_content.encode()).hexdigest()
36+
37+
def _getImgData(img_path):
38+
tmp = open(img_path, 'rb').read().hex()
39+
return tmp

items/apple.png

241 Bytes
Loading

items/bow.png

163 Bytes
Loading

items/diamond_pickaxe.png

181 Bytes
Loading

items/diamond_sword.png

181 Bytes
Loading

items/iron_axe.png

168 Bytes
Loading

items/iron_sword.png

179 Bytes
Loading

0 commit comments

Comments
 (0)