跳转至

区块链 基础知识

时间:2022-07-16 09:47:47

参考:

  1. 戴维的 B-money

区块链 基础知识#

b-money#

B-money 的核心功能有两个:POW 造币和分布式记账。

先说 POW 造币。B-money 的论文中很大篇幅都是聊如何生产加密货币的。首先,全网认可一个难度足够的数学题。注意,论文里强调,这道题的答案必须是没有任何实际价值的。换句话说,算题的工作量必须纯粹是一种能源消耗,纯粹是为了把钱烧掉。第二步,想要获得加密货币的人投入硬件资源去算这道题的答案,最后得到的结果就是一串数字,也就是 POW 工作量证明。第三步,算出答案来的人就可以广播 POW 到全网,每个网络节点验证 POW 之后,都在自己的账本上给这个人的账户上充值跟被烧掉的钱价值相当的加密币。这就是生产加密货币的全过程了,我这里做了适当的简化。

再说交易过程。B-money 采用的是分布式记账的方式来追踪加密货币的交易。发送方和接收方都没有真实姓名,都只是公钥。发送方用私钥签名,然后广播交易到全网。每个网络节点都会保留一个包含所有人的交易记录的大账本。注意,这里有一个跟比特币的差别:B-money 中,交易是通过 Contract 来实现的,每一个 Contract 都需要有仲裁人参与。

比特币和以太坊#

BitCoin Ethereum
设计定位 现金系统(转账) 去中心化应用平台(合约运行)
数据组成 交易列表(账本) 交易和账户状态
交易对象 UTXO Accounts
代码控制 脚本 智能合约
隐私性 没有固定的账户体系,隐私性高 有固定的账户体系,隐私性低

区块链的核心特性#

账本#

  • 不可更改的分布式账本,交易确认后,交易信息(交易的参数,响应)会被记录到区块中。任何人都可以根据交易哈希查询对应的交易信息。

  • 一个区块中会有多笔交易。区块之间通过记录父区块内容哈希,连成一条链。区块链的概念由此而来。

  • 每个节点都存储一份完整的区块记录。

根据以上特点保证数据不会被篡改,即数据上链后就不能被更改。

交易内容eth.getTransaction("0x693cccb95ce4e7728a5eb203f0425584993c4b8993d0c76b43992b98fa4abfbd")

{
  blockHash: "0xc91c2036c43f074ff2358afef3c28729e154cb1efa4abfbe43fade9032d61a75",
  blockNumber: 171,
  chainId: "0x3039",
  from: "0x001d3F1ef827552Ae1114027BD3ECF1f086bA0F9",
  gas: 21000,
  gasPrice: 1000000000,
  hash: "0x693cccb95ce4e7728a5eb203f0425584993c4b8993d0c76b43992b98fa4abfbd",
  input: "0x",
  nonce: 2,
  r: "0x9f3e796d49d23aec316a86c565ff5fcf7ae838b7a7416518ae20110a937d6088",
  s: "0x25c709b830c04568a908b5f1d658b9033a4816a98970d2769d868248d64cf43f",
  to: "0xcb3fa9817ee99d21eb9a59763a0551a42266ad29",
  transactionIndex: 0,
  type: "0x0",
  v: "0x6095",
  value: 11000000000000000000
}

区块内容: eth.getBlock("0xc91c2036c43f074ff2358afef3c28729e154cb1efa4abfbe43fade9032d61a75")

{
  difficulty: 2,
  extraData: "0xd883010a15846765746888676f312e31382e33856c696e757800000000000000e7b37fd4b7b8f033b1b94f9b07ac7207f9143b845953a7d11c4caa62a32b7ecc111fcfa0535ba63a2a8634c7013eb81783cfd78ae60c69d384a0cdf9d1a5976d00",
  gasLimit: 9452914,
  gasUsed: 21000,
  hash: "0xc91c2036c43f074ff2358afef3c28729e154cb1efa4abfbe43fade9032d61a75",
  logsBloom: "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
  miner: "0x0000000000000000000000000000000000000000",
  mixHash: "0x0000000000000000000000000000000000000000000000000000000000000000",
  nonce: "0x0000000000000000",
  number: 171,
  parentHash: "0x78ca6fd664c739b9539971d7f91dfaede40d04f222846cdf1c3159cdc060c673",
  receiptsRoot: "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2",
  sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
  size: 721,
  stateRoot: "0x3847e4f9b230c5339ee5de4dbfdb99461439801cb17af128d7942248aaabc125",
  timestamp: 1657972818,
  totalDifficulty: 343,
  transactions: ["0x693cccb95ce4e7728a5eb203f0425584993c4b8993d0c76b43992b98fa4abfbd"],
  transactionsRoot: "0xe53c5dea44071a83fe76c061366627702a3841297bce9055849d2ca056ac4fc8",
  uncles: []
}

智能合约#

一段程序,有方法可以被调用。类似于内嵌脚本。