前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[区块链] 区块链开发入门知识详解_1

[区块链] 区块链开发入门知识详解_1

原创
作者头像
荷秋
修改2024-01-22 09:51:51
6270
修改2024-01-22 09:51:51
举报
文章被收录于专栏:开发Notes

一、参考资料

Bitcoin Core 源码

Ethereum协议 源码

二、HASH

概念:Hash是一种将数据映射为固定大小值的算法。它通过一系列计算和转换,生成唯一的hash值。

原理:Hash函数通常包括将输入数据分割、加密运算和多次迭代。

应用:数据完整性验证、加密解密、文件校验等

碰撞解决:增大Hash值长度、使用随机数等方法降低碰撞概率。一些安全的Hash函数设计原则包括:避免使用简单的加密运算、增加迭代次数等。

常见的哈希算法及其应用场景:

  1. MD5(Message-Digest Algorithm 5):常用于文件防篡改、数字签名等领域,生成的哈希值长度为128位。但由于其安全性较差,现在已经不建议使用。
  2. SHA系列(Secure Hash Algorithm):包括SHA-1、SHA-2、SHA-3等不同版本,其中SHA-256是比特币和许多其他区块链所使用的哈希算法,SHA-3被广泛应用于密码学、数字签名等领域。
  3. Merkle树:用于证明数据片段是否存在于某个数据集中,例如比特币中的交易列表就是通过Merkle树构建的,可用于验证交易是否合法、防止双花等攻击。
  4. SimHash(Similitude Hash):用于文本去重、相似度计算等场景,可以将文本转换成一个128位的哈希值,并保持语义相似的文本所生成的哈希值相近。

比特币挖矿使用的哈希算法是SHA-256(Secure Hash Algorithm 256-bit)。SHA-256是SHA-2哈希函数家族中的一员,生成的哈希值长度为256位。在比特币挖矿过程中,挖矿者需要通过不断尝试不同的随机数来计算区块头的哈希值,只有找到满足一定条件的哈希值才能成功挖出一个新的区块。这个条件就是要求区块头的哈希值必须小于目标值,而目标值是由比特币网络根据当前的难度目标计算得出的。通过SHA-256哈希算法,挖矿者可以快速计算区块头的哈希值,并进行与目标值的比较,以确定是否满足挖矿条件。

三、区块

区块(block)是区块链中最基本的单位,由区块头(block header)和交易列表(transaction list,tx list)组成,相互连接形成了一个链式结构。下面是区块的主要组成部分:

  1. 区块头(block header):由多个字段组成,其中最重要的是上一个区块的哈希和交易列表的默克尔根哈希。
    • 比特币的区块头包括版本号、上一个区块的哈希、交易列表的默克尔根哈希、时间戳、难度目标和随机数。
    • 以太坊的区块头包括上一个区块的哈希、叔块的哈希、挖矿者地址、状态树根哈希、交易列表的默克尔根哈希、收据列表的默克尔根哈希、日志布隆过滤器、难度目标、区块高度、燃料限制、已用燃料、时间戳、附加数据和混合哈希值等字段。
Bitcion Block Header
Bitcion Block Header
Ethereum Block Header
Ethereum Block Header
  1. 交易列表(tx list):由多个交易组成,用于记录参与者之间的转账和其他信息。
  2. 默克尔树(Merkle tree):是一种哈希树结构,用于对交易列表进行哈希计算,最终得到一个唯一的默克尔根哈希,用于验证交易列表中是否存在被篡改的交易。

区块链技术的独特之处在于,每个区块的哈希值都是基于前一个区块的哈希值计算得出的,因此整个区块链中的每个区块都相互连接,并形成了一条不可篡改的链条。这种链式结构和去中心化的特点,使得区块链可以应用于众多领域,如数字货币、供应链管理、数据存储、智能合约等。

三、链

链是由一个个区块(block)组成的,每个区块包含了关键信息。区块通过block header中的ParentHash字段指向上一个区块的哈希值,从而形成一个唯一的链条。其中,高度为0的创世区块是链的起点。

Bitcoin(BTC) -Block 0 cpp代码

代码语言:cpp
复制
static CBlock CreateGenesisBlock(uint32_t nTime, uint32_t nNonce, uint32_t nBits, int32_t nVersion, const CAmount& genesisReward)
{
    const char* pszTimestamp = "The Times 03/Jan/2009 Chancellor on brink of second bailout for banks";
    const CScript genesisOutputScript = CScript() << ParseHex("04678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5f") << OP_CHECKSIG;
    return CreateGenesisBlock(pszTimestamp, genesisOutputScript, nTime, nNonce, nBits, nVersion, genesisReward);
}

每个区块的header中还包含了TxHash字段,该字段记录了当前区块中包含的所有交易的哈希值。通过TxHashParentHash的结合,区块链实现了不可篡改的特性,因为每个区块的哈希值都依赖于前一个区块的哈希值和其中的交易数据。

Bitcoin(BTC) -Block 0 交易信息查看

Ethereum Blocks 交易信息查看

比特币和以太坊是两个典型的区块链项目,可以在相应的区块链浏览器上观察到它们的区块链情况。创世区块中还可以记录一些特殊信息,比如比特币创世区块上留下的报纸头条文章标题,以及以太坊创世区块中的一些初始化数据。

四、共识算法概述

共识算法是区块链技术中的核心部分,它确保了区块链网络中的所有节点对数据的一致性和安全性。

1.工作量证明(Proof of Work,PoW)__Bitcoin

工作量证明算法是一种加密货币挖矿机制,通过要求矿工解决复杂的数学问题来竞争获得记账权。矿工需要消耗大量的计算能力来寻找一个满足特定条件的哈希值,这个过程被称为“挖矿”。第一个解决问题的矿工会将新区块添加到区块链中,并据此获得相应的加密货币奖励。

PoW算法的主要优点是去中心化和安全性。由于挖矿过程的难度较高,攻击者想要篡改区块链数据成本极高。然而,PoW也存在一些缺点,如能源消耗巨大、挖矿过程造成环境污染、网络拥堵等。

2.权益证明(Proof of Stake,PoS)__Ethereum

权益证明算法是一种不同于PoW的共识机制,它基于参与者持有的加密货币数量和时间来选择记账节点。在PoS算法中,持有更多加密货币的参与者具有更高的记账权概率。与PoW相比,PoS具有以下优点:

  • 节能:PoS不需要矿工解决复杂的数学问题,因此能耗较低。
  • 速度:由于记账权的分配基于持有加密货币的数量,PoS的交易速度相对较快。
  • 安全性:PoS算法通过权益抵押来防止恶意行为,攻击者需要拥有大量加密货币才能对网络造成威胁。

然而,PoS也存在一些缺点,如权益集中、去中心化程度较低等。此外,PoS可能导致“富者愈富”的现象,因为持有大量加密货币的参与者更容易获得记账权,从而进一步增加其财富。

常见区块链技术攻击手段

比特币的双花攻击

双花攻击是一种欺诈性交易手段,攻击者利用区块链网络的交易确认延迟特性,在同一时间内向不同接收方发送相同数量的加密货币。攻击者通过先发送一笔交易,然后篡改区块链记录,使其看起来像是先前的交易从未发生。由于区块链的去中心化特性,攻击者可以轻松地篡改交易记录,从而在两次交易中都获得加密货币。

为了防止双花攻击,比特币采用了工作量证明(PoW)共识算法,确保攻击者重新完成大量计算才能篡改区块链。此外,交易双方还可以使用数字签名技术来验证交易的真实性和顺序,降低双花攻击的成功率。

双花攻击要想确保一定成功,至少需要51%的算力,因此也叫51%算力攻击
双花攻击要想确保一定成功,至少需要51%的算力,因此也叫51%算力攻击

以太坊的三明治攻击

三明治攻击是一种针对以太坊智能合约的攻击,它利用了以太坊网络的交易处理顺序。攻击者通过在交易中插入虚假交易,误导智能合约执行顺序,从而实现非法行为。这种攻击方法在以太坊网络上较为常见,因为它允许攻击者篡改区块链上的交易记录,从而窃取加密货币。

三明治攻击的本质是利用了以太坊网络的交易顺序与实际执行顺序之间的不一致。为了防止这种攻击,开发者需要更加谨慎地设计智能合约,确保交易顺序与合约执行顺序一致。此外,采用更安全的编程语言和框架来开发智能合约,降低攻击风险。

交易顺序与实际执行顺序之间的不一致
交易顺序与实际执行顺序之间的不一致

五、分叉

分叉是区块链技术中的一种现象,它主要源于去中心化程度、区块间隔时间和终局性取舍等因素。分叉会导致区块链网络出现孤块,进而影响全网同步速度、节点保持同步的难度以及区块奖励的分配。下面是对这些知识的整合:

分叉原因:

  • 去中心化:随着去中心化程度的提高,网络环境变得更加复杂,节点难以时刻保持同步。
  • 区块间隔时间:区块间隔时间越短,节点越容易在非最新高度上出块,从而导致分叉。
  • 终局性的取舍:在追求去中心化和高效性之间,区块链网络需要权衡终局性的问题。

分叉结果:

  • 孤块:分叉现象会导致孤块的出现。孤块是在一条区块链上被孤立的无关联区块,不被其他区块所认可。

分叉缓解方法(以以太坊为例):

  • Etherscan:以太坊网络引入了叔块(uncle block)的概念,一个区块最多可以包含2个叔块。叔块可以增加少量区块奖励,并激励节点切换到被更多人所共识的链上。
  • 奖励机制:每包含一个叔块,区块奖励会相应增加。被包含的叔块能获得大部分区块奖励,从而鼓励节点积极参与网络共识。

激励节点切换:通过奖励机制和全网共识,节点会被激励切换到最长链上,以确保网络的安全和稳定。

综上所述,分叉是区块链技术中的一种现象,它源于去中心化程度、区块间隔时间和终局性取舍等因素。分叉会导致孤块的出现,进而影响全网同步速度、节点保持同步的难度以及区块奖励的分配。通过引入叔块概念和奖励机制,以太坊等区块链网络试图缓解分叉现象,提高网络的安全性和稳定性。

在比特币和以太坊的发展过程中,确实出现过一些分叉事件。例如,比特币曾在2017年发生了一次分叉,产生了比特币现金(BCH)。而以太坊在2015年也曾发生分叉,产生了以太坊经典(ETC)。

虽然分叉事件可能导致短期内网络分裂,但随着时间的推移,通常会出现一种共识,即哪个链被认为是“正宗”的比特币或以太坊。在这种情况下,其他分叉链可能会逐渐被边缘化,其货币价值也可能受到影响。

需要注意的是,分叉并不意味着比特币或以太坊的安全性受到威胁。分叉事件通常是技术争议的产物,而非恶意攻击。此外,区块链的去中心化特性使得分叉链在网络中有一定的生存空间。然而,在实际应用中,开发者和支持者通常会倾向于选择具有更高安全性、稳定性和共识的链。

总之,虽然比特币和以太坊可能发生分叉,但它们的安全性和货币价值仍然得到广泛认可。分叉事件并不妨碍比特币和以太坊在区块链技术领域的地位。然而,分叉确实为区块链技术的发展带来了一些挑战,需要开发者和社会共同应对。

六、区块链交易模型

1.UTXO模型_bitcoin

Account模型交易信息结构
Account模型交易信息结构
  • 每个输入(Input)通过引用之前的交易(tx)中的一个输出(Output)来实现价值的转移
  • 每个输出(Output)包含了转账的目标地址(Address)和金额(Value)
  • 交易(tx)中的输入金额之和应略大于输出金额之和,差值作为矿工的奖励(Fee)

支付流程如下:

  1. 用户A想要向用户B转账金额n。
  2. 用户A维护自己的未消费输出(UTXO)集合。
  3. 用户A选取一个或多个UTXO作为交易(tx)的输入(Input),每个输入(Input)通过引用之前的交易(tx)中的一个输出(Output)来实现价值的转移。
  4. 用户A设置两个输出(Output):一个将金额n支付给用户B的地址,另一个将剩余金额(m-n-fee)支付给自己或其他找零地址。
  5. 用户A将交易(tx)广播到区块链网络中,等待矿工验证和确认。
  6. 矿工验证交易(tx)的有效性,包括输入(Input)和输出(Output)的引用和金额计算等。
  7. 矿工将交易(tx)打包到一个区块中,并解决proof-of-work难题。
  8. 一旦区块被成功挖出,交易(tx)将被确认并记录在区块链上。

UTXO模型特点:

UTXO模型是以比特币为代表的加密货币交易模型。它的核心思想是将交易分为两部分:发送方将资金从一个地址转移到另一个地址,接收方将资金接收并消费。UTXO模型具有以下特点:

  • 安全性高:UTXO模型可以防止双重支付和伪造交易,因为每个UTXO都有一个唯一的交易ID,这个ID被用于引用该UTXO并将其作为交易的输入。
  • 交易处理速度较慢:因为每个交易都需要对UTXO进行验证,UTXO模型的交易处理速度较慢。
  • 不适合处理复杂的交易:UTXO模型不太适合处理复杂的交易,例如分期付款等。

2.Account模型_ethereum

Account模型交易信息结构
Account模型交易信息结构

支付流程如下:

  1. 用户A想要向用户B转账金额n。
  2. 用户A维护自己的账户余额。
  3. 用户A从自己的账户中扣除金额n,并将这笔款项作为交易(tx)的输入(Input)。
  4. 用户A设置一个输出(Output),将金额n支付给用户B的地址。
  5. ......

Account模型特点:

Account模型是以太坊为代表的加密货币交易模型。它的核心思想是用户拥有一个账户,该账户包含用户的余额和账户的地址。Account模型具有以下特点:

  1. 交易处理速度快:因为每个以太坊账户都有一个唯一的余额,所以可以轻松地计算出账户的总价值,Account模型的交易处理速度快。
  2. 顺序交易:在Account模型中,一个地址发送的交易(tx)是按照Nonce串行的、顺序的,无法并发。Nonce是一个计数器,用于防止交易冲突和重放攻击。
  3. State更新:在Account模型中,交易(tx)作用于State进行更新。但在tx构建时作用的State可能和上链的时候不一样,因为State在tx执行期间可能会发生变化。
  4. State依赖性:tx上链时的State变化会改变tx执行的结果。因此,tx的执行结果取决于上链时的State。
  5. 顺序依赖性:在Account模型中,多个tx上链作用State的顺序会影响tx执行的结果。因此,tx的执行顺序非常重要。
  6. 执行失败:在Account模型中,tx可能会存在“执行失败”的链上状态。例如,如果tx试图花费一个不存在的余额,则交易将失败。
  7. 余额累积:在Account模型中,余额是累积的,用户可以在以后的交易中使用之前未使用的余额。这种累积的余额使得Account模型更适合处理复杂的交易,例如分期付款等。
  8. 无法准确预估gas:在Account模型中,tx花费的Gas取决于上链时作用的State,因此无法准确预估Gas。这导致无法构建交易正好把Balance用完。

七、以太坊区块链技术重点

  1. 交易签名: 在以太坊中,每笔交易都必须经过发送者的数字签名验证。发送者使用其私钥对交易进行签名,以证明该交易确实是由他们发起的,并且不能被篡改。接收者可以使用发送者的公钥来验证签名的有效性。交易签名机制保证了交易的真实性和完整性。
  2. 重放攻击: 重放攻击是指攻击者在网络中重复广播已经成功的交易,从而导致同一笔交易被多次执行。以太坊通过使用nonce(一个递增的数字)来解决这个问题。每笔交易都有一个唯一的nonce值,当节点收到交易时,会检查该nonce值是否与发送者账户的当前nonce匹配。如果不匹配,则说明该交易已经被执行过,将拒绝执行。
  3. 模型改进节省资源: 以太坊正在致力于改进其共识算法,从PoW(Proof of Work,工作量证明)向PoS(Proof of Stake,权益证明)过渡。PoS算法不需要像PoW那样消耗大量的计算资源来解决复杂的数学问题,而是根据持有的货币数量来选择区块的验证者。这种改进可以减少能源消耗,并提高交易处理速度。
  4. 增强隐私: 以太坊主网上的交易是公开可见的,意味着任何人都可以查看交易的详情。为了增强隐私性,以太坊引入了一些隐私保护技术。其中之一是使用智能合约执行零知识证明(Zero-Knowledge Proofs),这使得用户可以在不泄露具体交易信息的情况下,证明其拥有某些数据或满足某些条件。此外,以太坊还支持使用隐私代币(如Zcash)进行私密交易

此外,以太坊还在进行Layer 2扩展方案的研究,例如Rollups和Sidechains,这些方案可以将一些交易从主区块链转移到辅助链上进行处理,从而进一步节省资源并提高吞吐量。

八、智能合约

传统合约和智能合约的区别
传统合约和智能合约的区别

智能合约是一种在区块链上执行的自动化计算代码,它们旨在控制、验证或执行合同中的交易和协议。智能合约使用编程语言编写,并部署到区块链上。

智能合约可以定义和执行各种规则和条件,以确保交易的安全性和可靠性,而无需第三方中介机构的参与。它们基于预先设定的逻辑和条件来执行操作,并根据事先约定的规则进行验证和确认。

以太坊是最著名的支持智能合约的区块链平台之一。它使用 Solidity 编程语言来编写智能合约。通过智能合约,以太坊用户可以创建和部署各种应用程序,如去中心化金融(DeFi)、众筹、电子投票等。

智能合约的特点包括:

  1. 自动执行:智能合约在满足预设条件时自动执行,无需人工干预。
  2. 无需信任第三方:智能合约的执行依赖于区块链网络的共识机制,不需要信任中央机构或第三方。
  3. 不可篡改性:一旦智能合约被部署到区块链上,其代码将永久存储,并且无法更改。
  4. 透明性:智能合约的代码和执行结果可以在区块链上被公开查看,提高了交易的透明度。

智能合约的应用潜力非常广泛,可以在各种领域中实现自动化、去中心化和可编程的交易和协议。然而,在使用智能合约时需要注意安全性和审慎性,以防止出现漏洞或错误导致的意外结果。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、参考资料
    • Bitcoin Core 源码
      • Ethereum协议 源码
      • 二、HASH
      • 三、区块
      • 三、链
      • 四、共识算法概述
        • 1.工作量证明(Proof of Work,PoW)__Bitcoin
          • 2.权益证明(Proof of Stake,PoS)__Ethereum
            • 常见区块链技术攻击手段
              • 比特币的双花攻击
              • 以太坊的三明治攻击
          • 五、分叉
          • 六、区块链交易模型
            • 1.UTXO模型_bitcoin
              • 2.Account模型_ethereum
              • 七、以太坊区块链技术重点
              • 八、智能合约
              相关产品与服务
              区块链
              云链聚未来,协同无边界。腾讯云区块链作为中国领先的区块链服务平台和技术提供商,致力于构建技术、数据、价值、产业互联互通的区块链基础设施,引领区块链底层技术及行业应用创新,助力传统产业转型升级,推动实体经济与数字经济深度融合。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档