美文网首页
【BlockChain Lesson第五届-辕询】2018050

【BlockChain Lesson第五届-辕询】2018050

作者: 白艳红007_4272 | 来源:发表于2018-05-14 19:54 被阅读0次

    【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

    所有人使用一个转达者的优势:

    如果自建的转达者代码错误,其他的节点会排斥该错误节点,将其踢出网络;

    你的钱不会自动消失,除非你的钱包管理代码错误。如果这种情况,你的钱甚至会被自动毁掉。

    总结一下,自建转达者的两个最大的风险:

    1. 计算出现问题,导致自建转达者脱离群众

    2. 钱包管理出现问题,造成资金损失

    因此,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.png

    f(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

    4)代码

    相关文章

      网友评论

          本文标题:【BlockChain Lesson第五届-辕询】2018050

          本文链接:https://www.haomeiwen.com/subject/kagjdftx.html