区块链学习第一期

myBlog

区块链基础入门

[toc] ---

说到区块链,我想我们听到最多的就是比特币

每当同学聚餐问我学的什么的时候,我一说区块链,他们就说自己知道:是比特币!
但是很明显,他们只是了解一丢丢。


区块链是什么?

官方定义已经足够充分,但我不认为好理解。
区块链定义

谈谈个人理解(错误不可避免,今后将会修正)

  • 区块链是一个数据库的集合(超大链表),每个区块之间可以通过哈希指针连接起来
  • 区块链=区块+链(其中“链”是一个区块到另一个区块链的”指针”)
  • 区块=区块头+区块体
    区块链自我理解
  • 区块体里面则包含了我们要存储的数据,区块头则:区块体
  • 如上所示,区块链并不是什么复杂的概念,反而像个一步步迭代过来的新型数据库,只不过这个数据库搭载了很多其他领域的知识

区块链的应用实现

  • 比特币:区块链 1.0
    • 闪电网络
    • 数字钱包
    • 挖矿(PoW、PoS、DPoS)
  • 以太坊:区块链 2.0
    • 雷电网络
    • 数字钱包
    • 挖矿
    • 智能合约
  • EOS:区块链 3.0
    • 数字钱包
    • 挖矿

当然,以上只是最经典的应用的例举,还有很多的现代区块链落地产品。但是我们始终要知道,区块链是比特币的底层技术,比特币是区块链的应用实现。

区块链大致结构框架
区块链框架


智能合约知识

关键字 constant、view、pure、payable?


Solidity 中变量按作用域划分有三种,分别是

前提:

  • 状态变量(state variable)

  • 局部变量(local variable)

  • 全局变量(global variable)

    • 状态变量
      状态变量是数据存储在链上的变量,所有合约内函数都可以访问 ,gas 消耗高。状态变量在合约内、函数外声明:

      1
      2
      3
      4
      sol contract Variables {
      uint public x = 1;
      uint public y;
      string public z; }

      我们可以在函数里更改状态变量的值:

      1
      2
      3
      4
      5
      6
       function foo() external{
      // 可以在函数里更改状态变量的值
      x = 5;
      y = 2;
      z = "0xAA";
      }
    • 局部变量
      局部变量是仅在函数执行过程中有效的变量,函数退出后,变量无效。局部变量的数据存储在内存里,不上链,gas 低。局部变量在函数内声明:

      1
      2
      3
      4
      5
      6
      function bar() external pure returns(uint){
      uint xx = 1;
      uint yy = 3;
      uint zz = xx + yy;
      return(zz);
      }
    • 全局变量
      全局变量是全局范围工作的变量,都是 solidity 预留关键字。他们可以在函数内不声明直接使用:

      1
      2
      3
      4
      5
      6
      function global() external view returns(address, uint, bytes memory){
      address sender = msg.sender;
      uint blockNum = block.number;
      bytes memory data = msg.data;
      return(sender, blockNum, data);
      }

  1. view 修饰的函数,是 constant 的别名,只能读取 storage 变量的值,不能写入。(不能改变状态)

    这里特别提到 状态变量

  2. pure 修饰的函数 ,不能对 storage 变量进行读写

  3. payable 当一个函数被 payable 修饰,表示调用这个函数时,可以附加发送一些 ETH(当然也可以不发)。
    没有加 payable 的函数,则没有方法接受 ETH, 附加 ETH 调用会出错。
    remix 的界面
    支付展示

计划

  1. solidity 官方文档
  2. 了解去中心化应用程序(DAPP)
  3. 参考计划