21026 large

004 孤荷凌寒从零开始学区块链第四天继续尝试用 Python 来设计一个区块链网络

941xue · 于 发布 · 72 次阅读

【主要内容】
今天开始尝试通过Python来建构一个最简单功能的区块链实现,共用时间36分钟。
(此外整理作笔记花费了约67分钟)
详细学习过程见文末学习过程屏幕录像。
今天开始分析一直区块链应用的简单实现的代码写法,但没有任何实质进展。

【学习笔记】
一、安装flask
(一)首先尝试按教程操作:
昨天安装了虚拟环境模块:
virtualenv
今天按照教程,在昨天的基础上继续安装
先是创建了一个文件夹作为一个虚拟环境的配置点:
C:\WINDOWS\system32>i:

I:>cd I:\MAKEAPP\python\WebSpace\flaskspace

I:\MAKEAPP\python\WebSpace\flaskspace>virtualenv flask-env
Using base prefix 'g:\w10_1\python\python365'
New python executable in I:\MAKEAPP\python\WebSpace\flaskspace\flask-env\Scripts\python.exe
Installing setuptools, pip, wheel...
done.

I:\MAKEAPP\python\WebSpace\flaskspace>cd I:\MAKEAPP\python\WebSpace\flaskspace\flask-env\Scripts

I:\MAKEAPP\python\WebSpace\flaskspace\flask-env\Scripts>activate

然后在这个虚拟环境的目录下执行Pip命令安装flask
I:\MAKEAPP\python\WebSpace\flaskspace\flask-env\Scripts>pip install flask
Collecting flask
Downloading https://files.pythonhosted.org/packages/7f/e7/08578774ed4536d3242b14dacb4696386634607af824ea997202cd0edb4b/Flask-1.0.2-py2.py3-none-any.whl (91kB)
|████████████████████████████████| 92kB 20kB/s
Collecting itsdangerous>=0.24 (from flask)
Downloading https://files.pythonhosted.org/packages/76/ae/44b03b253d6fade317f32c24d100b3b35c2239807046a4c953c7b89fa49e/itsdangerous-1.1.0-py2.py3-none-any.whl
Collecting Werkzeug>=0.14 (from flask)
Downloading https://files.pythonhosted.org/packages/18/79/84f02539cc181cdbf5ff5a41b9f52cae870b6f632767e43ba6ac70132e92/Werkzeug-0.15.2-py2.py3-none-any.whl (328kB)
|████████████████████████████████| 337kB 14kB/s
Collecting Jinja2>=2.10 (from flask)
Downloading https://files.pythonhosted.org/packages/1d/e7/fd8b501e7a6dfe492a433deb7b9d833d39ca74916fa8bc63dd1a4947a671/Jinja2-2.10.1-py2.py3-none-any.whl (124kB)
|████████████████████████████████| 133kB 9.7kB/s
Collecting click>=5.1 (from flask)
Downloading https://files.pythonhosted.org/packages/fa/37/45185cb5abbc30d7257104c434fe0b07e5a195a6847506c074527aa599ec/Click-7.0-py2.py3-none-any.whl (81kB)
|████████████████████████████████| 81kB 68kB/s
Collecting MarkupSafe>=0.23 (from Jinja2>=2.10->flask)
Downloading https://files.pythonhosted.org/packages/b9/82/833c7714951bff8f502ed054e6fbd8bd00e083d1fd96de6a46905cf23378/MarkupSafe-1.1.1-cp36-cp36m-win_amd64.whl
Installing collected packages: itsdangerous, Werkzeug, MarkupSafe, Jinja2, click, flask
Successfully installed Jinja2-2.10.1 MarkupSafe-1.1.1 Werkzeug-0.15.2 click-7.0 flask-1.0.2 itsdangerous-1.1.0

检测是否安装成功的方法:
C:\Users\pw>i:

I:>cd I:\MAKEAPP\python\WebSpace\flaskspace\flask-env\Scripts

I:\MAKEAPP\python\WebSpace\flaskspace\flask-env\Scripts>python
Python 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 17:00:18) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.

import flask
print(flask.version)
1.0.2

然而当我把这一切做完的时候,用VSCODE打开import flask的页面,发现,还是提示flask没有安装 。
这证明按此教程,折腾了半天终于把flask成功的安装到虚拟环境中。
然而昨天 从github下下载的这个源文件,不是在虚拟环境中运行的。

(二)于是直接安装pip install flask
C:\WINDOWS\system32>pip install flask
Collecting flask
Using cached https://files.pythonhosted.org/packages/7f/e7/08578774ed4536d3242b14dacb4696386634607af824ea997202cd0edb4b/Flask-1.0.2-py2.py3-none-any.whl
Collecting click>=5.1 (from flask)
Using cached https://files.pythonhosted.org/packages/fa/37/45185cb5abbc30d7257104c434fe0b07e5a195a6847506c074527aa599ec/Click-7.0-py2.py3-none-any.whl
Collecting itsdangerous>=0.24 (from flask)
Using cached https://files.pythonhosted.org/packages/76/ae/44b03b253d6fade317f32c24d100b3b35c2239807046a4c953c7b89fa49e/itsdangerous-1.1.0-py2.py3-none-any.whl
Requirement already satisfied: Jinja2>=2.10 in g:\w10_1\python\python365\lib\site-packages (from flask) (2.10)
Collecting Werkzeug>=0.14 (from flask)
Using cached https://files.pythonhosted.org/packages/18/79/84f02539cc181cdbf5ff5a41b9f52cae870b6f632767e43ba6ac70132e92/Werkzeug-0.15.2-py2.py3-none-any.whl
Requirement already satisfied: MarkupSafe>=0.23 in g:\w10_1\python\python365\lib\site-packages (from Jinja2>=2.10->flask) (1.0)
Installing collected packages: click, itsdangerous, Werkzeug, flask
Successfully installed Werkzeug-0.15.2 click-7.0 flask-1.0.2 itsdangerous-1.1.0
You are using pip version 19.0.3, however version 19.1 is available.
You should consider upgrading via the 'python -m pip install --upgrade pip' command.

C:\WINDOWS\system32>

这样终于将flask安装完成,运行Py文件执行操作正常。

二、尝试学习分析此Py文件实现的原理的过程
当发现从github上下载的包中,在文件夹【blockchain_client】(这就是区块链供客户使用的客户端)下有一个py文件:
【blockchain_client.py】
直接运行此文件,成功在浏览器中通过:
http://127.0.0.1:8080/
访问了网页版的区块链客户端。

因为对flask模块不很熟悉,因此并不了解网页源文件与flask是怎样互动而构建了一个本地服务器架构的,于是开始寻找。
(一)发现html源文件
【blockchain_client.py】
文件对应的三个html源文件存放在从github中下载下来的源文件包中的
文件夹【blockchain_client】->【templates】文件夹下
三个文件并行放在此目录中。
今天由于学习时间的关系,还没有深入研究透flask模块是如何与外部的Html源文件进行交互的。
但发现一个有趣的现象:
(二)flask模块可以虚构页面的物理位置?
在物理目录中,这三个html源文件:
index.html
make_transaction.html
view_transactions.html

是并列存放在同一目录下的,
然而,模拟出的服务器的链接地址却有所不同:
分别对应的地址如下:
http://127.0.0.1:8080/
http://127.0.0.1:8080/make/transaction
http://127.0.0.1:8080/view/transactions

即是说,本来在同一物理目录下的三个html文件,在实际展示效果中,却被放到了服务器的三个不同目录下的感觉,我以前写过网站程序,使用的是asp.net,没有涉及到隐藏真实的页面地址这些工作,就目前我的初步认识(不知道是对还是错),发现这个flask模块的这种作用比较有意思。
(三)找到相对应的py文件【blockchain_client.py】的代码中相关部分:
app = Flask(name)

@app.route('/') #这儿将index.html文件的展示目录指定为虚拟web服务器的根目录
def index():
return render_template('./index.html')

@app.route('/make/transaction') #这儿将make_transaction.html文件的展示目录指定为虚拟web服务器的make一级目录下的transaction子目录
def make_transaction():
return render_template('./make_transaction.html')

@app.route('/view/transactions') #这儿将view_transactions.html文件的展示目录指定为虚拟web服务器的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

此文件的代码细节还需要进一步花时间研究。

【学习后记】
一、适用于python的每一个第三方库都是一方小宇宙
这是这学习Python几十天来发自内心的感慨,Python的强大就在于它的包容乃大,生态建设,促进了它自身的繁荣。
这不得不让人承认:建构一个生态系统的意义胜过无数的独自欣赏的封闭项目要来得有生存力,要更为强大。

二、简单的才是最有生力的
blockchain_client.py
文件真正有效部分只有90行,然而却实现了一个完整的区块链的客户端功能,真可谓是体量小,功能强劲。
这无不让人惊叹于世界上最厉害的生物体正是连基本生命结结构都残缺不全的病毒!
简单才是王道。

原文地址:http://www.941xue.com/content.aspx?id=234

【欢迎大家加入[就是要学]社群】
如今,这个世界的变化与科技的发展就像一个机器猛兽,它跑得越来越快,跑得越来越快,在我们身后追赶着我们。
很多人很早就放弃了成长,也就放弃了继续奔跑,多数人保持终身不变的样子,原地不动,成为那猛兽的肚中餐——当然那也不错,在猛兽的逼迫下,机械的重复着自我感觉还良好地稳定工作与生活——而且多半感觉不到这有什么不正常的地方,因为在猛兽肚子里的是大多数人,就好像大多数人都在一个大坑里,也就感觉不出来这是一个大坑了,反而坑外的世界显得有些不大正常。
为什么我们不要做坑里的大多数人?
因为真正的人生,应当有百万种可能 ;因为真正的一生可以有好多辈子组成,每一辈子都可以做自己喜欢的事情;因为真正的人生,应当有无数种可以选择的权利,而不是总觉得自己别无选择。因为我们要成为一九法则中为数不多的那个一;因为我们要成为自己人生的导演而不是被迫成为别人安排的戏目中的演员。
【请注意】
就是要学社群并不会告诉你怎样一夜暴富!也不会告诉你怎样不经努力就实现梦想!
【请注意】
就是要学社群并没有任何可以应付未来一切变化的独门绝技,也没有值得吹嘘的所谓价值连城的成功学方法论!
【请注意】
社群只会互相帮助,让每个人都看清自己在哪儿,自己是怎样的,重新看见心中的梦想,唤醒各自内心中的那个英雄,然后勇往直前,成为自己想要成为的样子!
期待与你并肩奔赴未来!
www.941xue.com
QQ群:646854445 (【就是要学】终身成长)

【同步语音笔记】
https://www.ximalaya.com/keji/19103006/254267904

【学习过程屏幕录屏】
https://www.bilibili.com/video/av88223376/
链接:https://pan.baidu.com/s/1oQ953aUosvFeCCObbZn31A
提取码:ldfc

  • 暂无回复。