Merge pull request #7 from efecini/general-notes

General notes
This commit is contained in:
Efe Cini 2019-12-28 16:58:16 +03:00 committed by GitHub
commit 874888a595
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 202 additions and 75 deletions

62
1_notes.py Normal file
View File

@ -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())
"""

26
3_digital_signatures.py Normal file
View File

@ -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}")

36
4_hashing.py Normal file
View File

@ -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)

17
5_proof_of_work.py Normal file
View File

@ -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))

View File

@ -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.")

20
7_transactions.py Normal file
View File

@ -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))

View File

@ -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.")

24
my2.py Normal file
View File

@ -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))

View File

@ -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())
'''