区块链技术详解
目录:
- 简述区块链的本质是什么?
- 分析 blockchain 的主要特性包括哪些方面?
- 解释为什么说比特币在性能和能源使用方面存在不足?
- 介绍 blockchain 中的基本概念有哪些?
- 探讨信息如何通过 blockchain 系统进行编码与存储?
- 讨论将交易记录到 blockchain 上带来了哪些变化?
- 详细阐述 chain structure 和 consensus algorithm 如何共同保障不可篡改性?
- 分析在 blockchain 上应包含哪些关键数据以支持其功能?
什么是区块链
总的来说就是一个多方合作管理的数据库,互相监管
- 通过多方共同监管机制建立的历史数据库,在区块链技术的支持下实现了对原始数据的高度安全性保障——任何操作都会被不可篡改地记录下来。
- 针对信息安全领域的核心需求,在密码学体系下构建了多层次防护机制——未经授权者难以伪造你的信息流,并且盗号行为存在极大的技术门槛。
- 采用去中心化的信息公开模式——对于敏感隐私数据项可部署哈希算法或采用密码学加密措施将其上链存储,并在必要时可获取相应密钥解密相关内容以验证其真实性;若具备明文存储条件则可直接提供以证明真实可靠性。
- 在智能合约设计中遵循公开源代码的程序——所有参与方均需遵循一份公开透明的智能合约协议执行操作——无需担心暗箱操作的风险就像一份正式订立的商业合同。
区块链特性:
- 多节点监管: 部署于区块链的数据库是一个分散式系统,在线参与者的共同维护与监督下运行。由于共识算法的作用机制,在网络中绝大多数参与者达成共识之前无法对历史数据进行修改操作。这种设计使得区块链的数据控制权无法被单一实体完全掌控而实现去中心化特征的同时也降低了遭受攻击的可能性。监管机构数量越多其覆盖范围越广就越能保障系统的安全性;然而受限于"不可能三角定理"为了追求更高的性能某些区块链平台不得不放弃部分去中心化的特性。
- 信息不可伪造: 基于密码学原理区块链系统能够确保数据的完整性与真实性(想伪造我的信息必须持有我的私钥私钥不仅可以加密信息还可以生成数字签名破解该体系的安全性极其高)。
- 信息公开: 公链采用公开透明的信息存储机制每个参与者都拥有完整的数据库副本联盟链则仅向联盟内部开放其中一些关键信息包括交易记录账户状态合约代码以及合约变量等具体内容可参考联盟成员协议规定。值得注意的是如果需要保护隐私数据可以利用现代密码学技术将敏感信息加密存储在链上当用户需要访问时再通过公钥解密获取相关信息存于链上的验证机制确保所获取的数据真实性与完整性。
- 智能合约: 随着比特币之后的发展以太坊等区块链平台逐渐发展出虚拟机概念使得用户能够在区块链上创建并运行智能合约这些程序能够在特定条件下自动执行特定行为从而实现复杂的业务逻辑处理能力(以上三点说明了为什么需要在区块链上运行程序)。
比特币的性能低下和能源浪费:
一般认为,在了解区块链技术时最先接触到的是比特币这一概念。然而由于其性能不足以及耗能过大等问题给人们留下了负面印象,在许多人看来似乎所有区块链技术都具有这样的缺点。实际上,在比特币出现后开发出了多种替代共识机制如POS(权益证明)、PBFT(柏拉图共识)、DPOS(分布式权益证明)、Tendermint、Hotstuff等技术这些新型共识机制有效克服了比特币固有的局限性从而推动了区块链技术在各领域的广泛应用。
一些基础概念:
交易: 作为用户与区块链系统互动的主要手段之一,在区块链生态系统中,默认情况下所有操作都需要通过特定类型的交易来完成。在合同系统中,则有更为复杂的操作流程需要遵循
节点: 每运行一个区块链客户端即创建一个节点,在一台机器上可以同时部署多个节点。
密钥匙对则包括私人密钥匙与公共/私人密钥匙都能够用于加密操作。公共/私人密钥匙都能够用于加密操作。但是只有对应的配对方才能够解开对方所使用的秘钥匙进行解密:即私人秘钥匙只能解公共秘钥匙加密的信息而不能打开其他人的信息包;同样地公共秘钥匙也无法解开私人秘钥匙加密的内容。通常会将公开的公共秘钥匙发布给所有用户以便于其他人使用自己的 privates keys 来签名他们的交易记录这样 anyone with the public key can verify the authenticity of a signed transaction.
密钥匙对的生成:系统会随机产生一个32字节字符串作为用户的私钥匙。采用ECDSA-secp256k1椭圆曲线算法将用户的私钥匙转换为其对应的公钥匙。公匙经keccak-256哈希算法处理得到固定的二进制数值。取其后二十个字节(共十六十位)作为该账户的唯一标识码。拥有者掌握着该账户的所有权和控制权……因为没有 private key 就无法进行资金转移操作……所以 private key 对区块链系统而言是至关重要的
从信息上链流程来了解区块链:
账户创建: 用户可以选择本地设备或者通过一个可信赖的钱包软件来创建账户。这些账户通常包含地址信息(address)、私钥(private key)、公钥(public key)、助记词(mnemonic phrase)以及keystore文件。需要注意的是,在这些关键信息中,私钥和助记词是最为敏感的部分——掌握其中一个就足以恢复整个账户。而keystone文件则是一种便于管理的方式——它将私钥、公钥以及地址等重要信息以加密形式存储在一个本地文件中。当需要时可以通过输入特定密码来解密这些数据。此外你可以建立多个keystone文件每个都对应一组不同的安全密保措施——只要能记住相应的解密密码即可。特别提醒的是每个 keystone 文件中的 private key 和 mnemonic phrase 都是独一无二的——它们承载着最重要的信息内容请务必加以重视
创建交易: 最基础的方式当然是通过控制台输入指令发起交易,在填写相关信息后进行签名处理即可。具体来说包括接收方地址、转账金额以及gaslimit参数等信息。一般来说,普通用户发送交易肯定不会在控制台繁琐地操作来完成整个流程。然而借助web3技术,在开发应用时利用web3工具连接到区块链接口以实现 transaction 的发起等功能就显得更为便捷高效。值得注意的是,在开发过程中还可以通过 web3 技术来调用合约以及完成合约的创建
交易广播: 一种是指将签名后的交易在其发布后存储于节点的交易池中,并经核实无误后向区块链网络发出的过程。
矿工打包:当前矿工接收到交易后会对这些交易进行审核并整合成一批订单块,并将其包装成一个区块并发布(发布时所选的传播渠道取决于所采用的共识机制是否需要全网参与)。其中某些共识机制仅需节点间达成一致即可完成传播过程。
共识验证: 当区块被挖出后,则需经由其他验证者进行核实并通过达成共识方能正式入网。多种共识算法存在,并根据具体区块链设计可能采用不同的规则;尽管具体实现方式各异但其核心目标一致——即通过机制确保所有参与方确认的数据信息完全统一,并最终实现系统中多个节点协同监管以维护统一的数据库的目的
交易上链改变了什么:
- 交易永远保存其原始信息,删除不了,这就是区块链最核心的历史不可更改性
- 区块链中有一个叫做"世界状态"的概念,它完整地记录着每个用户的账户信息、所有的合约信息以及其中涉及的各种变量.一旦某个区块得到全体节点的确认并成功加入主链,其包含的信息即代表当前的世界状态.接下来生成的新区块必须基于这一最新版本的世界状态进行修改.需要注意的是,这一点强调的是交易的历史性不可更改性和 world state 的动态可变性之间的平衡.具体来说,区块链的历史不可更改指的是已经发生的交易无法被更改;world state 是动态变化的;但任何用户的某些行为都是可追踪的.就像监控室里存放着一叠文件一样,每一个操作都会留下清晰的痕迹.
有链式结构和共识算法支撑的不可篡改性:
在区块链系统中,各区块通过链表结构相互连接.这种结构增加了对本地数据进行修改的难度,同时也方便验证每个区块的真实性以及各节点之间的链式结构一致性.每个区块都包含其前一个区块的哈希值标识.此外,为了确保不可篡改性,区块链不仅依赖于链表结构,还借助共识机制提供额外保障.共识机制使得即使部分节点被更动,也只有当绝大多数节点的数据都被更动时,才能成功篡改历史数据.
链上应该存些什么?
- 如上述信息上链流程所说,信息的上链需要经过一条略繁琐的流程,比较耗时耗存储空间的操作放到链上执行是非常不划算的,所以上链之前应该先理清思路,业务中有哪些是需要放上链的,哪些在链下处理也行,尽量保证上链逻辑安全简单,上链数据精致有效。具体可以了解一下fisco官方的 一文说清“链上”和“链下”
