Cryptocurrency coinmarketcap Price Wallet<\/figcaption><\/figure>\nwelcome Visitor in this blog post\u00a0 Build a Mine CryptoCurrency Using Python 3 Script on Command Line with hashlib Library Complete Source Code crypto mining Calculater.<\/p>\n
create app.py and follow this code.<\/span><\/p>\napp.py\u00a0<\/strong><\/span><\/code><\/p>\nimport hashlib\r\nfrom time import sleep\r\n\r\n\r\ndef hash_256(string):\r\n return hashlib.sha256(string.encode('utf-8')).hexdigest()\r\n\r\n\r\nclass TransactionGenerator:\r\n def __init__(self):\r\n self.random_seed = 0\r\n\r\n def generate_transaction(self):\r\n transaction_payload = 'This is a transaction between A and B. ' \\\r\n 'We add a random seed here {} to make its hash unique'.format(self.random_seed)\r\n transaction_hash = hash_256(transaction_payload)\r\n self.random_seed += 1\r\n return transaction_hash\r\n\r\n\r\n# a block is a set of transactions and contains information of the previous blocks.\r\n# https:\/\/bitcoin.stackexchange.com\/questions\/8031\/what-are-bitcoin-miners-really-solving\r\nclass Block:\r\n def __init__(self, hash_prev_block, target):\r\n self.transactions = []\r\n self.hash_prev_block = hash_prev_block # hash of the all previous blocks. used to maintain integrity.\r\n self.hash_merkle_block = None\r\n self.target = target\r\n self.nounce = 0\r\n\r\n def add_transaction(self, new_transac):\r\n if not self.is_block_full():\r\n self.transactions.append(new_transac)\r\n self.hash_merkle_block = hash_256(str('-'.join(self.transactions)))\r\n\r\n def is_block_full(self):\r\n # blocks cannot go above 1Mb. Here let's say we cannot go above 1000 transactions.\r\n return len(self.transactions) >= 1000\r\n\r\n def is_block_ready_to_mine(self):\r\n return self.is_block_full()\r\n\r\n def __str__(self):\r\n return '-'.join([self.hash_merkle_block, str(self.nounce)])\r\n\r\n def apply_mining_step(self):\r\n current_block_hash = hash_256(self.__str__())\r\n print('CURRENT_BLOCK_HASH = {}, TARGET = {}'.format(current_block_hash, self.target))\r\n if int(current_block_hash, 16) < int(self.target, 16):\r\n print('Block was successfully mined! You will get a reward of x BTC!')\r\n print('It took {} steps to mine it.'.format(self.nounce))\r\n return True\r\n else:\r\n # Incrementing the nounce to change current_block_hash to hope to be below the target.\r\n self.nounce += 1\r\n return False\r\n\r\n\r\nclass BlockChain:\r\n def __init__(self):\r\n self.block_chain = []\r\n\r\n def push(self, block):\r\n self.block_chain.append(block)\r\n\r\n def notify_everybody(self):\r\n print('-' * 80)\r\n print('TO ALL THE NODES OF THE NETWORK, THIS BLOCK HAS BEEN ADDED:')\r\n print('[block #{}] : {}'.format(len(self.block_chain), self.get_last_block()))\r\n print('-' * 80)\r\n\r\n def get_last_block(self):\r\n return self.block_chain[-1]\r\n\r\n\r\ndef my_first_miner():\r\n last_block_header = '0e0fb2e3ae9bd2a0fa8b6999bfe6ab7df197a494d4a02885783a697ac74940d9'\r\n last_block_target = '000ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd'\r\n\r\n # init the block chains\r\n block_chain = BlockChain()\r\n\r\n transaction_generator = TransactionGenerator()\r\n\r\n # fills a block with transactions. We have 1500 pending transactions.\r\n # Sorry 500 transactions will have to wait for the next block!\r\n block = Block(last_block_header, last_block_target)\r\n for i in range(1500):\r\n block.add_transaction(transaction_generator.generate_transaction())\r\n\r\n assert block.is_block_full()\r\n assert block.is_block_ready_to_mine()\r\n\r\n # now that our block is full, we can start to mine it.\r\n while not block.apply_mining_step():\r\n continue\r\n\r\n block_chain.push(block)\r\n block_chain.notify_everybody()\r\n sleep(5)\r\n\r\n # Difficulty is updated every 2016 blocks.\r\n # Objective is one block generated every 10 minutes.\r\n # If during the last two weeks, blocks are generated every 5 minutes, then difficulty is multiplied by 2.\r\n last_block_header = hash_256(str(block_chain.get_last_block()))\r\n\r\n block_2 = Block(last_block_header, last_block_target)\r\n\r\n for i in range(1232):\r\n block_2.add_transaction(transaction_generator.generate_transaction())\r\n\r\n assert block_2.is_block_full()\r\n assert block_2.is_block_ready_to_mine()\r\n\r\n # now that our block is full, we can start to mine it.\r\n while not block_2.apply_mining_step():\r\n continue\r\n\r\n block_chain.push(block_2)\r\n block_chain.notify_everybody()\r\n sleep(5)\r\n\r\n # now let's increase the difficulty.\r\n # we have now 4 zeros at the beginning instead of 3.\r\n last_block_target = '0000dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd'\r\n\r\n last_block_header = hash_256(str(block_chain.get_last_block()))\r\n\r\n block_3 = Block(last_block_header, last_block_target)\r\n\r\n for i in range(1876):\r\n block_3.add_transaction(transaction_generator.generate_transaction())\r\n\r\n assert block_3.is_block_full()\r\n assert block_3.is_block_ready_to_mine()\r\n\r\n # now that our block is full, we can start to mine it.\r\n while not block_3.apply_mining_step():\r\n continue\r\n\r\n block_chain.push(block_3)\r\n block_chain.notify_everybody()\r\n sleep(5)\r\n\r\n print('')\r\n print('SUMMARY')\r\n print('')\r\n for i, block_added in enumerate(block_chain.block_chain):\r\n print('Block #{} was added. It took {} steps to find it.'.format(i, block_added.nounce))\r\n print('Difficulty was increased for the last block!')\r\n\r\n\r\nif __name__ == '__main__':\r\n my_first_miner()<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"Filecoin Mining: What is Cryptocurrency Mining? Filecoin mining is the method of creating fresh Filecoin by solving Calculation\/puzzles. It consists of computing systems prepared with dedicated chips challenging to solve mathematical,Physics puzzles. The 1st Cryptocurrency Filecoin miner, as these systems are called, to solve the Problem\/puzzle is pleased (Reward) with Filecoin Cryptocurrency coinmarketcap, News, Wallet, … Read more<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[158],"tags":[],"_links":{"self":[{"href":"https:\/\/jnv.academy\/wp-json\/wp\/v2\/posts\/960"}],"collection":[{"href":"https:\/\/jnv.academy\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jnv.academy\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jnv.academy\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/jnv.academy\/wp-json\/wp\/v2\/comments?post=960"}],"version-history":[{"count":2,"href":"https:\/\/jnv.academy\/wp-json\/wp\/v2\/posts\/960\/revisions"}],"predecessor-version":[{"id":2204,"href":"https:\/\/jnv.academy\/wp-json\/wp\/v2\/posts\/960\/revisions\/2204"}],"wp:attachment":[{"href":"https:\/\/jnv.academy\/wp-json\/wp\/v2\/media?parent=960"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jnv.academy\/wp-json\/wp\/v2\/categories?post=960"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jnv.academy\/wp-json\/wp\/v2\/tags?post=960"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}