diff --git a/1_notes.py b/1_notes.py new file mode 100644 index 0000000..0517885 --- /dev/null +++ b/1_notes.py @@ -0,0 +1,62 @@ + +# Prints the hexadecimal representation of the value. +print(int('b',16), int('62ba1cd8a',16)) + +#testnet : A small replica of bitcoin for developers to test their app without real money. +#We use bitcoin-cli command to communicate with a node. It is a command line utility. +#In this course we use >testnet rather than >bitcoin-cli. +#Prints all the commands to use in testnet or mainnet +testnet help +mainnet help + +#Gets the help for the related command +testnet help getblockchaininfo + +#Makes the query with the method for the testnet. mainnet for the actual chain +testnet getblockchaininfo + +#Gives the mining info +mainnet getmininginfo + +#Check how the nodes talk with each other from https://bitcoin.org/en/developer-reference#protocol-versions +#This changes from version to version. ipv4 / ipv6 / onion + +#Gives the wallet info +testnet getwalletinfo + +#The transactions related to wallet +testnet listtransactions + +#Code to connect to node +#If you don't have bitcoinrpc install it with pip: +#pip install python-bitcoinrpc + +""" +Code: +from bitcoinrpc.authproxy import AuthServiceProxy + +N = 115792089237316195423570985008687907852837564279074904382605163141518161494337 +big_number = 105936749493397165751943248390023977685888340619776708311600296471039819517671 + +class RPC: + + def __init__(self, uri): + self.rpc = AuthServiceProxy(uri) + + def __getattr__(self, name): + """Hack to establish a new AuthServiceProxy every time this is called""" + return getattr(self.rpc, name) + +rpc_template = "http://%s:%s@%s:%s" +mainnet = RPC(rpc_template % + ('bitcoin', 'python', '68.183.110.103', 8332)) +testnet = RPC(rpc_template % + ('bitcoin', 'python', 'localhost', 18332)) +""" +""" +pprint : A package to print objects pretty.Especially JSON objects. +from helpers import testnet +from pprint import pprint + +pprint(testnet.getblockchaininfo()) +""" \ No newline at end of file diff --git a/bitcoincli_02.py b/2_bitcoincli.py similarity index 100% rename from bitcoincli_02.py rename to 2_bitcoincli.py diff --git a/3_digital_signatures.py b/3_digital_signatures.py new file mode 100644 index 0000000..29db32a --- /dev/null +++ b/3_digital_signatures.py @@ -0,0 +1,26 @@ +### Digital Signatures ### + +from helpers import mainnet,testnet +from pprint import pprint + +#sign and verify messages like this: signmessage "address" "message" + +#First we have to get an address: +address = testnet.getnewaddress('','legacy') +print(f"Address created with private key is:{address}") + +#Create our message. Just a basic string +msg = 'this is a message' +print(f"Message is:{msg}") + +#Create the signature by signing the address with a message. It returns you a signature +signature = testnet.signmessage(address, msg) +print(f"Signature created with address for the message {msg} is:{signature}") + +#Verify that our signature is valid with my address for 'my message' msg +verified = testnet.verifymessage(address, signature, 'this is a message') +print(f"Verified?:{verified}") + +#If you try the worng msg to sign, it will print false. +verified2 = testnet.verifymessage(address, signature, 'this is a message too') +print(f"Verified?:{verified2}") \ No newline at end of file diff --git a/4_hashing.py b/4_hashing.py new file mode 100644 index 0000000..8f81f7c --- /dev/null +++ b/4_hashing.py @@ -0,0 +1,36 @@ +### HASHING ### + +from helpers import mainnet,testnet +from pprint import pprint + +# Hash functions takes data and gives you a fingerprint.You CANT reverse it + +# This is a built in library in python +# To get more information on hashlib: help(hashlib) +import hashlib + +# hashlib onjects return a hash obj +msg = b'hello, i am efe' +hash1 = hashlib.sha256(msg) +print(hash1,'\n') + +# with digest we get the data in that hash object +hash2 = hashlib.sha256(msg).digest() +print(hash2,'\n') + +# with hexdigest we get the hexadecimal data in that hash object +# Hexadecimal(means 16) characters: 0123456789ABCDEF +hash3 = hashlib.sha256(msg).hexdigest() +print(hash3,'\n') + +# Example +# Get a string, turn it into bytes and hash it. +msg2 = input('Enter a string:') +print(msg2.encode()) #turns into byte + +#You must change msg to the bytes with encode befre hashing +#hash5 = hashlib.sha256(msg2).hexdigest() #fail. +#print(hash5) + +hash4 = hashlib.sha256(msg2.encode()).hexdigest() #get the hash with encoded string +print(hash4) \ No newline at end of file diff --git a/5_proof_of_work.py b/5_proof_of_work.py new file mode 100644 index 0000000..ce4cf3f --- /dev/null +++ b/5_proof_of_work.py @@ -0,0 +1,17 @@ +import hashlib + +#Try to find the hash (of a block) which starts with some amount of zeros. We are impersonating the miners acivities here. + +def hashed(d, n): + d += n.to_bytes(4, 'little') + return hashlib.sha256(d).hexdigest() + +data = b'hash of a block' +nonce = 0 +zeros_required = 4 + +while not (hashed(data, nonce)[:zeros_required] == ('0' * zeros_required)): + print (nonce, hashed(data, nonce)) + nonce +=1 + +print('Found:',nonce,hashed(data, nonce)) \ No newline at end of file diff --git a/6_bitcoin_blockreward_calculator.py b/6_bitcoin_blockreward_calculator.py new file mode 100644 index 0000000..7b7b904 --- /dev/null +++ b/6_bitcoin_blockreward_calculator.py @@ -0,0 +1,17 @@ +from helpers import mainnet, testnet +from decimal import Decimal +from pprint import pprint + +def calculate_bitcoin_cycle_and_block_reward(): + #This little program gives the bitcoin's cycle count and the bitcoin block reward amount + INITIAL_SUBSIDY = 50 + BLOCKS_PER_HALVENING = 210000 + last_block = mainnet.getblockchaininfo()["blocks"] + cycle_count = int(last_block/BLOCKS_PER_HALVENING) + block_reward = INITIAL_SUBSIDY / (cycle_count*2) + return cycle_count+1, block_reward + +if __name__ == "__main__": + cycle, block_reward = calculate_bitcoin_cycle_and_block_reward() + pprint(cycle) + print(f"Bitcoin is in the {cycle}. halvening cycle and the block reward is {block_reward} ₿ right now.") \ No newline at end of file diff --git a/7_transactions.py b/7_transactions.py new file mode 100644 index 0000000..3c28b5b --- /dev/null +++ b/7_transactions.py @@ -0,0 +1,20 @@ +### TRANSACTIONS ### +from helpers import mainnet, testnet +from decimal import Decimal +from pprint import pprint + +#We want to send bitcoin to an address +#help(testnet.sendtoaddress()) bitcoin-cli sendtoaddress "1M72Sfpbz1BPpXFHz9m3CdqATR44Jvaydd" 0.1 +#First send tbtc to your address from a tbtc faucet then eun the program +address = testnet.getnewaddress('','legacy') +address2 = testnet.getnewaddress('','legacy') +print(address) +print(address2) +print(testnet.getbalance()) + +#We have sent the tbtc to an adress Bize output olarak bir tx döndürdü. We have sent tbtc to ourselves actually. It returned the transaction id +tx = testnet.sendtoaddress(address2, 0.0000100) +print(tx) + +#We can get tha transaction and check the input and the outputs +pprint(testnet.gettransaction(tx)) \ No newline at end of file diff --git a/bitcoin_blockreward_calculator.py b/bitcoin_blockreward_calculator.py deleted file mode 100644 index 739187f..0000000 --- a/bitcoin_blockreward_calculator.py +++ /dev/null @@ -1,15 +0,0 @@ -from helpers import mainnet -from decimal import Decimal - -def calculate_bitcoin_cycle_and_block_reward(): - #This little program tells you the bitcoin's cycle count and the bitcoin block reward amount - INITIAL_SUBSIDY = Decimal(50) - BLOCKS_PER_HALVENING = 210000 - last_block = mainnet.getblockchaininfo()["blocks"] - cycle_count = int(last_block/BLOCKS_PER_HALVENING) - block_reward = INITIAL_SUBSIDY / cycle_count*2 - return {"Cycle":cycle_count+1, "Block_reward":block_reward} - -if __name__ == "__main__": - cycle = calculate_bitcoin_cycle_and_block_reward() - print(f"Bitcoin is in the {cycle.get('Cycle')}. halvening cycle and the block reward is {cycle.get('Block_reward')} ₿ right now.") \ No newline at end of file diff --git a/my2.py b/my2.py new file mode 100644 index 0000000..d41b6be --- /dev/null +++ b/my2.py @@ -0,0 +1,24 @@ +""" +_ = set(map(int, input().split())) +arr = input().split() +s1 = set(map(int, input().split())) +s2 = set(map(int, input().split())) + +print(s1) +print(s2) +print(s3) +print(sum([(i in s1)-(i in s2) for i in arr])) + +n, m = raw_input().split() + +sc_ar = raw_input().split() + +A = set(raw_input().split()) +B = set(raw_input().split()) +print sum([(i in A) - (i in B) for i in sc_ar]) +""" +A = set(input().split()) +B = set(input().split()) +print(A) +print(B) +print(A.issuperset(B)) \ No newline at end of file diff --git a/notes_01.py b/notes_01.py deleted file mode 100644 index 770ae1b..0000000 --- a/notes_01.py +++ /dev/null @@ -1,60 +0,0 @@ -''' -print(int('b',16), int('62ba1cd8a',16)) # Prints the hexadecimal representation of the value. -/ -testnet : A small replica of bitcoin for developers to test their app without real money. -We use bitcoin-cli command to communicate with a node. It is a command line utility. -In this course we use >testnet rather than >bitcoin-cli. -/ ->testnet help ->mainnet help -Prints all the commands to use in testnet or mainnet -/ ->testnet help getblockchaininfo -Gets the help for the related command -/ ->testnet getblockchaininfo -Makes the query with the method for the testnet. mainnet for the actual chain -/ ->mainnet getmininginfo -Gives the mining info -/ -Check how the nodes talk with each other from https://bitcoin.org/en/developer-reference#protocol-versions -This changes from version to version. ipv4 / ipv6 / onion -/ ->testnet getwalletinfo -Gives the wallet info -/ ->testnet listtransactions -The transactions related to wallet -/ -Code to connect to node -If you don't have bitcoinrpc install it with pip: -pip install python-bitcoinrpc -/ -Code: -from bitcoinrpc.authproxy import AuthServiceProxy - -N = 115792089237316195423570985008687907852837564279074904382605163141518161494337 -big_number = 105936749493397165751943248390023977685888340619776708311600296471039819517671 - -class RPC: - - def __init__(self, uri): - self.rpc = AuthServiceProxy(uri) - - def __getattr__(self, name): - """Hack to establish a new AuthServiceProxy every time this is called""" - return getattr(self.rpc, name) - -rpc_template = "http://%s:%s@%s:%s" -mainnet = RPC(rpc_template % - ('bitcoin', 'python', '68.183.110.103', 8332)) -testnet = RPC(rpc_template % - ('bitcoin', 'python', 'localhost', 18332)) -/ -pprint : A package to print objects pretty.Especially JSON objects. -from helpers import testnet -from pprint import pprint - -pprint(testnet.getblockchaininfo()) -''' \ No newline at end of file