主页 > imtoken国内无法下载 > 区块链-1 理解
区块链-1 理解
区块链-1 理解
区块链概念
区块链技术使用块来记录日志。 (比特币的第一个区块——创世区块)
支付宝的湘湖宝使用了蚂蚁的区块链技术。
区块链的优势
去中心化,更安全
分布式系统
一个公共账本通过互联网维护,它由两个或多个节点作为一个整体组成。 节点是独立的,可以相互通信。
区块链中的所有节点如何达成共识? 按算法:
共识算法:工作量证明 (PoW) – 代理权益证明 (DPoS) – PBFT(拜占庭容错)
行业组织:Bitcoin Foundation – Ethereum Foundation – block.one (EOS) – Hyperledger (Linux Foundation)(专注于企业应用)
可以看到很多大公司都加入了
主流币种区块浏览器
比特币网
以太扫描网
eosx.io
如何验证交易双方
私钥 - 只有发起人知道
公钥——通过私钥计算得到,单向加密,不可解密
加密计算在线网站:1024tools.com/hash
交易签名:与手写签名一样,“数字签名”用于提供交易真实性的证明。 不同之处在于“数字签名”对每笔交易都是唯一的。
钱包
生成密钥对和账户名; 检查余额和转账; 使用分散的应用程序
如何发送和记录交易
转账信息+私钥签名在全网快速传播传播,各节点使用公钥进行验证。
验证后,存储在分布式账本中。
验证交易
没有中央机构,谁来验证交易; 矿工:专门用于验证交易和维护分类账的节点。
矿工将交易分组到一个区块中
新区块决策
解决新区块的方法:Proof of Work比特币区块浏览器,PoW是解决一个特定的数字问题,费时费力,但很容易被别人验证。
PoW 的三个要素:
随机数(nonce):一个随机数,用来参与哈希运算,直到哈希值的前几位为0,才能确定这个随机数。
散列(hash):一种固定长度的文本,是散列运算的结果。
交易(Tx):真实的转账信息。
挖矿奖励
一个新的比特币区块奖励 12.5 BTC。
比特币的发行 新的比特币被发送给成功的矿工 (Coinbase)。 共计2100万枚。
缓释机制网络自动调整难度,区块哈希0位增加,每21万个区块,奖励减半。
块的实现
class Block{
var index=0
var timeStamp=Date()
Var preHash=""
var nonce=0
var hash=""
var key:String{
get{
return "\(self.index)\(self.timeStamp)\(self.preHash)\(self.nonce)"
}
}
}
Hash算法有多种选择
比如SHA1算法
extesnsion String{
function sha1()->String{
let task=Process()
task.launchPath="/usr/bin/shasum"
task.arguments=[]
let inputPipe=Pipe()
.....
}
}
区块链结构
区块容器(按区块高度排序)
每个块都包含前一个块的哈希值
每个区块哈希满足前几位为0(网络难度自动调整)
创世区块哈希为0
区块链
class Blockchain{
var blocks=[Block]()
init(_genesis:Block){
}
func add(block:Block){
if blocks.isEmpty{
block.preHash="0"
本区块的哈希计算
}else{
block.preHash=blocks.last!.hash
block.index=blocks.count
//本区块的哈希计算
}
blocks.append(block)
print("完成添加新区块!")
}
func genHash(for block:Block)->String{
var hash=block.key.sha1()
//算出哈希,第一位是0,如果没算出来,就把随机数递增
while !hash.hasPrefix("0"){
block.nonce+=1
hash=block.key.sha1()
}
return hash;
}
}
let block1=Block()
let blockchain=Blockchain(block1)
谁同时开采比特币
可以同时开采同一个区块。 每个节点收到新区块的时间不同,可以产生分支,多次划分后,切换到最长的一个。
比特币在等待 6 个新区块后通常会稳定下来。
短分支中的交易返回到“待处理交易池”以供稍后处理。
伪造的新块发布很容易验证,并且忽略不正确的哈希值。
更改区块中的交易将导致整个区块的哈希值发生变化。 如果区块要被网络识别,就必须重新计算。
由于后续块包含前一个块的哈希等,因此必须重新计算所有后续块。 —51%算力攻击
比特币如何匿名
固有的匿名性 由于只有公钥在交易各方之间是公开的,因此不需要任何个人或组织信息。
但是公钥是假名,因为账本是公开的,一个公钥的交易历史很容易查到。 仔细分析这些交易元数据,仍然可以追踪到相关资金的使用情况。
使用密码学技术创建一个安全的账本,使交易无需通过第三方。
加密货币的使用远比法定货币简单。 通过创建一个加密货币比特币区块浏览器,它可以代表任何资产,比如代表一美元,代表一桶石油等等。 以实现一个全球性的、实时的、可靠的、超低运营成本的、匿名的交易系统。
减少对中心化的依赖。