def test_transaction_signing(self): u1 = Client() u2 = Client() outputs = [(u2.public_key, 5)] tx = Transaction(u1.public_key, u1.get_sk(), [], outputs, False) tx.sign_transaction() self.assertNotEqual(None, tx.get_signature())
def test_transaction_outputs(self): u1 = Client() u2 = Client() outputs = [(u2.public_key, 5)] tx = Transaction(u1.public_key, u1.get_sk(), [], outputs, False) utxo_op = tx.get_outputs() self.assertEqual(len(outputs), 1) self.assertEqual(utxo_op[0].get_recipient_pk(), u2.public_key)
def test_transaction_dumping(self): u1 = Client() u2 = Client() outputs = [(u2.public_key, 5)] tx = Transaction(u1.public_key, u1.get_sk(), [], outputs, False) dictionary = tx.to_dict() self.assertEqual(dictionary['witnesses_included'], False) self.assertEqual(dictionary['originator'], u1.public_key) self.assertEqual(dictionary['witnesses'], []) self.assertEqual(dictionary['ip_counter'], 0) self.assertEqual(dictionary['inputs'], []) self.assertEqual(dictionary['op_counter'], 1) self.assertEqual(dictionary['outputs'], tx.get_outputs()) self.assertEqual(dictionary['time'], tx.get_timestamp())
def test_transaction_verification(self): u1 = Client() u2 = Client() outputs = [(u2.public_key, 5)] tx = Transaction(u1.public_key, u1.get_sk(), [], outputs, False) tx.sign_transaction() u3 = Client() result = u3.validate_transaction(tx) self.assertFalse( result ) # because of the absense of inputs, it's considered an overspending transaction
def init(self): gen0 = Client() gen1 = Client() genesis_transaction = Transactions(gen0, gen1, 3) genesis_transaction(self) #verify transaction = self.mempool[-1] transactionData = self.mempoolData[transaction] #getting signature and public key fromo data transactionSignature = transactionData['signature'] transactionVerifyKey = transactionData['sender'].publickey if gen0.verification(transactionData, transaction): #managing accounts transactionData['sender'].wallet -= transactionData['amount'] transactionData['receiver'].wallet += transactionData['amount'] #deleting the transaction from mempool self.mempool.remove(transaction) self.verified.append(transaction) genesis = Block() genesis.transactions.append(transaction) genesis.transactionsData[transaction] = transactionData genesis.index = 0 genesis.timestamp = formatTime(datetime.now()) genesis.prevHash = "Genesis" #Mining Block proof = genesis() while not proof.startswith('0' * self.difficulty): genesis.nonce += 1 proof = genesis() self.chain.append(proof) self.chaindata[proof] = to_dict(genesis) self.prevHash = genesis.genHash(genesis.nonce) print('Blockchain is initialised')
def createNetTopo(self): # 1 Create the Server self.server = Server(name="Server") initSNR = [1, 1, 1, 1] # 2 Create the clients resoList = [6, 4, 2, 1] for i in range(self.hostNum): # init_reso = resoList[np.random.randint(4)] init_reso = resoList[1] # init_reso = resoList[len(resoList) - 1 - i] c = Client(name="c{}".format(i + 1), channel=Channel(initCC=options.serverCC / 4, initSNR=initSNR[i]), video=Video(resolution=init_reso), bufferSize=options.bufferSize) self.clients[c.name] = c
def test_client_creation(self): user = Client() self.assertIsInstance(user, Client)
def test_transaction_creation(self): u1 = Client() u2 = Client() outputs = [(u2.public_key, 5)] tx = Transaction(u1.public_key, u1.get_sk(), [], outputs, False) self.assertIsInstance(tx, Transaction)
from node import Client from transaction import Transactions from blocks import Blockchain from util import display frank = Client(node=True) alex = Client() britty = Client() winni = Client() miner0 = Client(node=True) miner1 = Client(node=True) chain = Blockchain() chain.init() frank = Client() alex = Client() miner0 = Client(node=True) miner1 = Client(node=True) print(miner0.wallet) print(miner1.wallet) t0 = Transactions(frank, alex, 30) t0(chain) t1 = Transactions(alex, frank, 45) t1(chain) t2 = Transactions(alex, frank, 21) t2(chain)
def test_mining_one_block_one_miner(self): # block chain size is set to 5 miner_node = Miner() user_node1 = Client() user_node2 = Client() user_node3 = Client() tx1 = user_node1.generate_tx( [(user_node2.public_key, 5)], user_node1.get_random_input().get_transaction_hash(), 1) miner_node.add_transaction(tx1) tx2 = user_node1.generate_tx( [(user_node3.public_key, 5)], user_node1.get_random_input().get_transaction_hash(), 1) miner_node.add_transaction(tx2) tx3 = user_node2.generate_tx( [(user_node3.public_key, 5)], user_node2.get_random_input().get_transaction_hash(), 1) miner_node.add_transaction(tx3) tx4 = user_node2.generate_tx( [(user_node1.public_key, 5)], user_node2.get_random_input().get_transaction_hash(), 1) miner_node.add_transaction(tx4) tx5 = user_node3.generate_tx( [(user_node1.public_key, 5)], user_node3.get_random_input().get_transaction_hash(), 1) miner_node.add_transaction(tx5) self.assertTrue(miner_node.is_mining())
def test_client_genesis_block(self): user_node = Client() self.assertEqual(user_node.wallet_size(), 1)