zoukankan      html  css  js  c++  java
  • 孤荷凌寒自学python第八十九天认识区块链003

    孤荷凌寒自学python第八十八天认识区块链003

    【主要内容】

    今天开始尝试通过Python来建构一个最简单功能的区块链实现,共用时间34分钟。

    (此外整理作笔记花费了约44分钟)

    详细学习过程见文末学习过程屏幕录像。

    主要继续之前的博文进行学习:

    https://blog.csdn.net/Blockchain_lemon/article/details/81161449

    不过到今天才发现,这篇博文可能也是复制的,因为只是说有github上的开源项目,却没有指向github的链接。

    不过好在经过搜索,我最终下载到了这个github项目。

    https://github.com/adilmoujahid/blockchain-python-tutorial

    【学习笔记】

    一、创建一个区块链客户端节点

    下载的源文件中在blockchain_client目录下,有一个Py文件:

    blockchain_client.py

    此文件的内容如下:

    ```

    from collections import OrderedDict

    import binascii

    import Crypto

    import Crypto.Random

    from Crypto.Hash import SHA

    from Crypto.PublicKey import RSA

    from Crypto.Signature import PKCS1_v1_5

    import requests

    from flask import Flask, jsonify, request, render_template

    class Transaction:

        def __init__(self, sender_address, sender_private_key, recipient_address, value):

            self.sender_address = sender_address

            self.sender_private_key = sender_private_key

            self.recipient_address = recipient_address

            self.value = value

        def __getattr__(self, attr):

            return self.data[attr]

        def to_dict(self):

            return OrderedDict({'sender_address': self.sender_address,

                                'recipient_address': self.recipient_address,

                                'value': self.value})

        def sign_transaction(self):

            """

            Sign transaction with private key

            """

            private_key = RSA.importKey(binascii.unhexlify(self.sender_private_key))

            signer = PKCS1_v1_5.new(private_key)

            h = SHA.new(str(self.to_dict()).encode('utf8'))

            return binascii.hexlify(signer.sign(h)).decode('ascii')

    app = Flask(__name__)

    @app.route('/')

    def index():

           return render_template('./index.html')

    @app.route('/make/transaction')

    def make_transaction():

        return render_template('./make_transaction.html')

    @app.route('/view/transactions')

    def view_transaction():

        return render_template('./view_transactions.html')

    @app.route('/wallet/new', methods=['GET'])

    def new_wallet():

           random_gen = Crypto.Random.new().read

           private_key = RSA.generate(1024, random_gen)

           public_key = private_key.publickey()

           response = {

                  'private_key': binascii.hexlify(private_key.exportKey(format='DER')).decode('ascii'),

                  'public_key': binascii.hexlify(public_key.exportKey(format='DER')).decode('ascii')

           }

           return jsonify(response), 200

    @app.route('/generate/transaction', methods=['POST'])

    def generate_transaction():

          

           sender_address = request.form['sender_address']

           sender_private_key = request.form['sender_private_key']

           recipient_address = request.form['recipient_address']

           value = request.form['amount']

           transaction = Transaction(sender_address, sender_private_key, recipient_address, value)

           response = {'transaction': transaction.to_dict(), 'signature': transaction.sign_transaction()}

           return jsonify(response), 200

    if __name__ == '__main__':

        from argparse import ArgumentParser

        parser = ArgumentParser()

        parser.add_argument('-p', '--port', default=8080, type=int, help='port to listen on')

        args = parser.parse_args()

        port = args.port

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

    ```

    今天还没有开始研究它的详细内容,就发现我的系统配置中少了关键的一些外部模块,于是尝试先行添加之。

    二、安装Crypto

    根据网上比较常见的教程,都认为直接通过

    pip install Crypto

    来安装即可,然而,如果这样操作,那要踩的坑实在是太多了,

    首先提示要安装 vc++ 14.0版本,费尽力气全部下载安装了,还是不行,后来才历尽千辛万苦发现,针对我的系统中配置的python3.6版本,Crypto根本就不再支持了。

    于是才知道应当使用下面的扩展模块:

    pip install pycryptodome

    这下子,就完成安装了,而且vscode中之前的缺少外部模块的错误提示也消失了,不过还没有运行测试是否真的能行。

    参见教程:

    https://www.jianshu.com/p/a01bdffb8210

    三、安装flask(没有完成)

    找到的教程:https://www.2cto.com/kf/201806/754008.html

    然后我开始尝试安装flask这个模块,找到了相应的博文,然而发现这个模块安装也是相当的不容易,由于时间关系,准备明天再作尝试了。

    【学习后记】

    一、python的开放性,包容性,丰富的第三方库属性

    自我学习Python这几十天来,真正见识了Python的极大的开放性,包容性,它仰赖着庞大的第三方库,可以说做到了无所不能,这是它的优点。

    然而为了配置环境,它也非常让人恼火,由于版本众多,统一的架构其实并不完善,给配置系统环境带来巨大的挑战,相比微软的vs系列平台的简洁、易安装、易配置,Python的学习之路上注定要花很多时间在无谓的挣扎上。

    二、学海

    当看到Python的这些密密麻麻的第三方库的时候,就仿佛看到了一片海。

    小时候老师说:学海无涯,我还以为这是夸张,如此年岁渐长,才明白,知识的海洋真的存在,面对大海,小小的我连沧海一粟都谈不上。

    由于荒废了太多的时光,如今我不可能再谈为自己装下什么,面对这样的现实与年岁,我不得不另寻活路,何其壮哉!

    为了追赶未来,终身学习,终身进步,我创建了【就是要学 终身成长】社群,欢迎立志于终身学习,终身成长的朋友们加入,共同交流学习。Qq群号码:646854445

    或访问:www.941xue.com

    【关于坚持自学的例行说明】

    最后例行说明下,我为什么要坚持自学。

    一、为什么一把年纪还在学习

    放弃很多去聚餐,去HI歌,去游玩,去看电影,去追剧……的时间,然后进行着这个年纪似乎已不应当再进行的学习,引来身边人们无尽的不解与鄙夷甚至可怜……

    但我不想放弃终身学习的誓言。

    因为——

    我对我今天的生活现状并不认同!

    罗伯特清崎告诉过我们,反省自己当下的生活是不是自己想要的,这难道不是最好的动力与答案?

    走过了大半生,然后才发现曾经、当下所正在进行的人生并不是自己想要的,那是一种怎样的体验?

    只有心中真切的感受才能回答这个问题,而任凭再丰富的语言也是无法描绘出来的。

    经历半生的跋涉,却发现走得并不正确,有多少人有勇气承认自己过去的一切都是错误的呢?

    而我愿意告诉过去的我:“你错了!”

    那么已经历半生错误,年岁之大又压于头顶,还有希望从这架的梯子的半端重新爬下,再蹒跚着爬上另一架梯子吗?

    我宁愿相信还有希望!

    这便是我为什么要继续坚持终身学习下去的全部理由。

    二、这个年纪还在学这些技术有意义吗

    纯的技术对这把年纪其实已没有意义。

    但兴趣可以超越意义。

    但技术可以引来思想的变革,这才是意义。

    投资自己的头脑 ,改革自己的思想,这是最保值,更长远的投资,过去我从来没有投资过,错过太多,那就从投资自己头脑开始吧。

    罗伯特清崎告诉我们,真正的富有是时间的富有;真正的自由是可以决定自己愿意做什么的自由。

    因为我愿意做我兴趣所在的事,所以我希望我有自由选择的那一天,虽然今天离那一天可能还是那么遥远,但我愿意相信,每天多赶几步,离希望就更近一步。

    再者,虽然我可能再已无法完全完整的掌握这些技术了,但技术本身却可以启迪心的觉醒,激发灵感,那么只要多了解一点,我相信我将离那个正离我而去跑得越来越快的未来更近一点,不至于被未知的那个未来抛弃得太远。

    于是我怎能放弃追逐求索的步伐?

    我要坚信:感觉太迟的时候,也许还不算太迟。

    感谢一直以来关注我,鼓励我的你!

    为了追赶未来,终身学习,终身进步,我创建了【就是要学 终身成长】社群,欢迎立志于终身学习,终身成长的朋友们加入,共同交流学习。Qq群号码:646854445

    或访问:www.941xue.com

    【同步语音笔记】

    https://www.ximalaya.com/keji/19103006/253730028

    【学习过程屏幕录屏】

    https://www.bilibili.com/video/av88002254/

    链接:https://pan.baidu.com/s/1BapVXQfQHH3xZrFXQ8hXkQ

    提取码:15rv

    欢迎大家添加我为好友: QQ: 578652607
  • 相关阅读:
    模拟操作(键盘、鼠标)三
    获取硬件信息
    MVC+ajax权限管理
    Socket通信简介
    网页页头meta详解(科普知识)
    .Net 无法打开Offie Open XML文件(上传和下载使用)
    临时散文,哈哈
    SQL server中的一些查询
    vue 钩子函数中获取不到DOM节点
    HTML技巧:怎样禁止图片拖动复制
  • 原文地址:https://www.cnblogs.com/lhghroom/p/12304937.html
Copyright © 2011-2022 走看看