【BlockChain Lesson第五届-辕询】20180509 第二次课程笔记(上)
创造区块链系统最重要的就是创造节点程序,或者叫转达者。
有了这个程序之后,你就可以存钱、花钱。
1. 连接服务器
Windows:
运行putty.exe,然后输入IP和hostname,然后连接。
MacOS:
运行Terminal,然后输入:ssh name@IP,输入密码。
2. 节点程序
1) 现有节点 VS 自建节点
第二课:套接以及文件,区块的储存转达
最重要的是创造一个节点程序,即转达者:node-program (relay)
当然,最简单的持有虚拟货币的方式是使用别人已经编写好的转达者(钱包),利用他们的服务来发送和接受货币。但是用这样的方式,你的token不是自己的,而是这家钱包公司的,它只是替你持有。
如果你希望完全自己持有,并得到资金的安全保障,你就需要有自己的转达者。
如果你使用已存在的平台,第一步一定是到官方网站,下载他们的转达者, 然后运行。
开始运行之后,该转达者的第一个任务是连接其他的转达者。
然后经过比较长的下载过程,以得到所有之前产生的信息。
每个转达者都必须记录该系统中所有的交易历史。
如果我有一个BTC转达者,也就是说,我的计算机上保存了所有BTC的历史交易。
如果你想做最直接的认证,没有别的办法,除非你下载整个历史,要不你就没法认证。没法确认哪些内容是真的,哪些是假的。
从中本聪一开始的白皮书之后,也出现了轻认证的方式,该方式可以避免下载整个区块链历史,但也可以得到一定的安全保障。
但是目前来讲,最安全的还是下载整个历史。
而且这也是默认的方式。
2)BTC和ETH的节点程序介绍
a) BTC
从BTC的角度,btc - 150 GB,如果维持一个转达者的成本100-200 CNY/M,并需要至少150G的储存空间。所以小型的计算机是无法运行节点程序的,比如手机。
ETH整个历史数据大约为20-30 G,或者更多。
除了使用别人的节点之外,理论上,任何人都可以创造节点。因为区块链是一个协议,或者说是一个格式,他和操作系统或者硬件是独立的。在网络上任何人都无法知道你的硬件和操作系统,因为被转达的信息是纯字节。
所以理论上任何人都可以创建自己的转达者程序,但是实际上btc的官方转达者(程序)只有一个:bitcoinCore
所有人使用一个转达者的优势:
如果自建的转达者代码错误,其他的节点会排斥该错误节点,将其踢出网络;
你的钱不会自动消失,除非你的钱包管理代码错误。如果这种情况,你的钱甚至会被自动毁掉。
总结一下,自建转达者的两个最大的风险:
-
计算出现问题,导致自建转达者脱离群众
-
钱包管理出现问题,造成资金损失
因此,BTC团队是不希望大家自己创建节点的,他们希望大家都用bitcoinCore,该节点面对不同的操作系统。
b) ETH
除了btc,最大的区块链系统是 ethereum,其区块链信息大小约为30G,他有好几个节点,所以你去网站上可以选择下载哪一个。
这些节点在功能上都是一样的,但是他们是不同的团队开发的,并且互相兼容,互相竞争。
最大的两个节点是Geth, Parity。
他们有多个竞争程序,这表现出ETH和BTC的不同原则:
BTC | 希望有一个统一的节点,为了防止错误或分叉 |
---|---|
ETH | 建造一个开放的生态,每个团队都可以创造自己的节点 |
主要原因如下:
BTC | 开放(开源)代码 | 很难自建节点,以和现有节点相融 |
---|---|---|
ETH | 开放代码, 开放格式 | 团队会帮助新建节点完成和现有网络的兼容 |
这种情况不仅存在于区块链,其他地方也有。再举个例子:
操作系统 | 格式 | 代码 |
---|---|---|
Windows | 开放 | 关闭 |
Linux | 关闭 | 开放 |
3)如何自建节点
a) 自建节点的两个重点:
*如何写节点程序的代码?
*如何设计节点程序的格式?
如果格式不统一,程序无法互相沟通,信息保存可能会出错
所有的储存都是文件为主,你如果想用计算机保存信息,不丢失该信息,你必须把他以文件的方式存在硬盘上。但现阶段很多程序员已经不会如何操作文件了,因为他们只面向网络,而不是面向文件。
由于区块链的转达者是系统程序,直接跟操作系统沟通的,所以文件操作很重要。后续课程会涉及如何使用数据库来保存区块链,绕开文件处理,但速度和效率会低下一些。现在老师还没有看见非常好的被模块化的利用数据库的节点,如果一个转达者的代码完全不需要操作文件,而是纯粹跟数据库沟通,减少转达者的开发成本,这将是一个好事。
我们课程会按以下顺序,了解以下格式:
1、BTC格式(简化)
2、XCY的格式(老师自建的货币,比BTC更简单,虽然效率不是最高,但优化了开发成本代价是储存成本比BTC高)
3、BTC无简化格式 & Ethereum
b) 区块链货币的主要结构
无论哪种货币, 其主要结构都如下图:
image.png之后我们会看看EOS的格式设计,他们的格式更高级,在这个基础格式上又加了好几层。 而且不同层次有的允许并行处理,有的只允许顺序处理。
有了这些结构之后,他们之间会被指针连到一起。这些结构的是为了实现电子黄金的功能:交易(发送钱,接收、保存)
但基于区块链2.0,你可以创造新的结构,以实现更复杂的功能:身份认证,电子财产等
c) Transaction的概念。
一个交易的数据结构相当于一个支票,是一个小条子,上面写着输入和输出。
输入:从谁的账户里抽钱?
输出:把钱给谁?多少钱?
任何BTC持有者想发起一个交易:
1)他的钱包程序会创建一个“交易信条”递给转达者,
2)转达者颁发给网络里别的转达者
3)别的转达者发给挖掘者
4)挖掘者成功地做了挖掘后,交易信息会进入链,成为交易历史的一部分
挖掘者互相是竞争的,每局比赛的时间是十分钟,每局只会有一个挖掘者胜利,他会得到很大一笔的奖金,并获得所以包含进该区块交易的转账费用。我们可以在网上看到这些区块信息,包括谁挖掘了该区块,获得了多少奖金。现在是12.5BTC。
你发送的交易信条不是发给一个挖掘者,而是发给若干个,其中的任何一个赢得记录权之后都会把你的交易写进区块中。
挖掘者可以拒绝交易信条,如果没有交易费,或者交易费太低的话。早期交易费经常为0. 现在的交易费也少于1%。
如果在高峰期,不是所有的交易都会被记录,所以你需要通过交易费和其他人竞争,看谁的交易先进入区块链。在去年高峰时有人的交易经过24h才被确认,尤其是在交易费低的情况下。
d) 比特币扩容问题
一个BTC区块的容量约1800个交易,10分钟一个块,即3个/s
是否需要扩大带宽?一直是这三年争论的问题。
一个区块只能记录约1800个交易,是因为他的容量(纤度)有限制。
单区块的纤度是1MB。
反对提高纤度的人认为:
BTC是基础设施,未来用户不会直接使用BTC,而是使用其他系统,而那些系统使用BTC。BTC也不适合用户直接使用,所以不需要根据用户的需要来更改。毕竟,基础设施不是直接给用户服务的。
不过他们做了一个大的变化——隔离见证(Segwit)。
隔离见证允许BTC是把一部分信息挪出了区块链,从而提高25%的交易量。
e) 编写自己的系统
在创建交易信条之后, 如果你想手写一个区块链,你需要会写交易信条,然后把许多交易信条拼在一起,再往上面添加一些元数据,以实现整个区块。
需要写一套算法,去储存大量的区块,保存他们之间的关系,记录一个区块的前者和后者是谁。
当这些都拼在一起之后,你就有了自己的系统。
3. 如何创建私钥、公钥、地址
私钥(private key)是一串字符(string),或者一个文件。
若是有人拿到私钥,便可拿到对应资金的控制权。
所以,private key的编写是风险最大的部分。
创造新的私钥没有成本。仅需要一个随机数生成器 RNG/PRNG。
以前RNG是一个硬件,现在很多操作系统(比如Windows,macOS,Linux)自带。 当然有专家怀疑其安全性。
在Linux下,RNG是一个驱动器,名字是“/dev/urandom”
打开命令:open(2)
阅读命令:Read(2)
你如果需要阅读100随机数,便会生成100个,每个随机数都是从0到255
1)从随机数到地址
有了随机数之后,便可创造私钥和公钥、地址
随机数不会被保存,生成后便丢弃。
image.pngf(x)和g(x)是很久以前就公认的算法(ECC),h(x)是中本聪的发明。
以上的运算都是单向的,逆向无法得出结果。所以,地址和公钥可以公开,但是私钥一定要保存好。
随机数被使用后会被销毁,不会被保存。
知道一个地址,就能看到这个地址中有多少钱。只是你不能动这笔钱,除非你有私钥。
2)工具
函数库(Package/library):常用函数包,供人调用。我们需要使用libtomcrypt 这个库。
编译器:源码要运行,必须先转成二进制的机器码,这是编译器的任务。我们用的是 tcc 编译器。
文本编辑器:text-editor
其使用顺序为:
image.png
先编写C语音代码文件,然后通过编译,得到.o后缀的文件,结合函数库并通过连接者,最后得到完整的可执行程序ELF(Executable and Linking Format)。
3) Shell 和 Terminal
终端里面输入的每行命令是shell,整个程序是terminal
网友评论