Разработка криптовалюты на Python. Часть 1

Прелюдия
Решил я тут написать крипоты, ой, тоесть крипты. (palmface)
Достаем питона и начинаем душить, ахххаа. (palmface)

Ладно, шутки в сторону! Я, будучи вдохновленный блокчейном и криптовалютой решил вложить свою лепту и вписать себя в историю, что незамедлительно сделал у себя на коленке и теперь решил поделиться этим с вами. Прежде чем читать сей опус, в первую очередь, предлагаю почитать очень полезный материал, который показался мне возможно довольно занятным, потому что автор имел так много свободного времени, что разложил все по полочкам — Bitcoin in a nutshell — Cryptography

Часть 1 или кнопочка и винтик сошли с ума
Чтобы корабль хорошо поплыл, надо его назвать подходящим именем, что я и придумал в бессонных муках, встречайте — JopaCoin. Теперь начнем разработку нашего уникального продукта.

Собственно все просто, как и любая квартира начинается с двери, так и любая криптовалюта начинается с кошелька, чем мы и займемся.

Мы будем использовать фреймворк Flask, он необходим для создания веб-приложений на языке программирования Python. Относится к категории так называемых микрофреймворков — минималистичных каркасов веб-приложений, сознательно предоставляющих лишь самые базовые возможности, которые нам и нужны для создания нашей уникальной монетки.

# файл main.py 

# подключаем flask, перед этим установите его в Project interpretor
from flask import Flask, request, render_template, redirect, make_response

# подключаем файл wallet.py, который мы рассмотрим отдельно ниже. в нем будет создаваться
# класс Wallet, который будет содержать методы для создания и обработки нашего кошелька
from wallet import *
# запускаем Flask 
app = Flask(__name__)

# создаем объект wallet класса Wallet, wallet = Wallet()
wallet = Wallet()

#главная страница нашего сайта, подключаем туда шаблон index.html
@app.route('/', methods=['GET'])
def index():
 return render_template('index.html')
@app.route('/newwallet', methods=['GET'])
def new_wallet():
    return render_template('newwallet.html')

@app.route('/makewallet', methods=['POST'])
def make_wallet():
    # We run make new wallet
    # generate pb[1] and pr[0] key
    get_two_key = wallet.generate_key()

    # кодируем public ключ, чтобы сделать его короче
    public_key_encode = wallet.b58_key_encode(get_two_key[1])
    # декодируем public ключ, чтобы сделать его изначальным
    public_key_decode = wallet.b58_key_decode(public_key_encode)

    # encrypting a password...
    wallet_pass = wallet.pass_hash(format(request.form['text']))

    # пишем в файл ключ-значение
    wallet_file_content = {"prkey_clear": get_two_key[0], "pbkey_encode": public_key_encode, "pwd": wallet_pass}
    wallet.write_new_wallet(wallet_file_content)

    response = make_response(str(wallet_file_content))
    response.headers["Content-Disposition"] = "attachment; filename=result.pem"

    #response = {'message': wallet_file_content}
    #return jsonify(response), 200
    return response

@app.route('/openwallet', methods=['GET', 'POST'])
def open_and_varify_file():
    if request.method == 'POST':
        # check if the post request has the file part
        # encrypting a password...
        if 'file' not in request.files:
            flash('No file part')
            return redirect(request.url)
        file = request.files.get('file')
        if file.filename == '':
            flash('No selected file')
            return redirect(request.url)
        if file and allowed_file(file.filename):
            file_bytes = wallet.read_wallet(file.stream.read().decode("utf-8"))
            pass_verify = wallet.pass_verify(format(request.form['password_wallet']),file_bytes['pwd'])

            response = {
                'data': file_bytes,
                'verify': pass_verify,
            }
            if pass_verify==True:
                return render_template('verifywallet.html', verify=pass_verify)
            else:
                return render_template('takewallet.html', verify=pass_verify)
    return render_template('takewallet.html')


if __name__ == '__main__':
    from argparse import ArgumentParser

    parser = ArgumentParser()
    parser.add_argument('-p', '--port', default=5000, type=int, help='port to listen on')
    args = parser.parse_args()
    port = args.port

    app.run(host='0.0.0.0', port=port)

Добавить комментарий

Перейти к верхней панели