赞
踩
2009年1月,在比特币系统论文发表两个月之后,比特币系统正式运行并开放了源码,标志着比特币网络的正式诞生。通过其构建的一个公开透明、去中心化、防篡改的账本系统,比特币开展了一场规模空前的加密数字货币体验。在区块链1.0阶段,区块链技术的应用主要聚集在加密数字货币领域,典型代表即比特币以及从比特币系统代码衍生出来的多种加密数字货币。
加密数字货币的“疯狂”发展吸引了人们对区块链技术的关注,对于传播区块链技术起到了很大的促进作用,人们开始尝试在比特币系统上开发加密数字货币之外的应用,比如存证、股权众筹等。但是比特币系统作为一个加密数字货币设计的专用系统,存在如下几个问题:
比特币是基于P2P架构的数字货币系统:它的结构总体上分为两部分,一部分是前端,包括钱包(Wallet)或图形化界面;另一部分是运行在每个节点的后台程序,包括挖矿、区块链管理、脚本引擎以及网络管理等功能。下面是比特币的架构示意图:
比特币架构分为前端和后端,下面分别介绍。
比特币前端-钱包:钱包保存用户的私钥数据库,管理用户的余额,提供比特币交易(支付、转账)功能,一般可分为冷钱包(ColdWallet)和热钱包(HotWallet)。
冷钱包:互联网不能访问私钥的钱包:往往依靠“冷”设备确保比特币私钥的安全。如不联网的电脑、手机等。避免被黑客盗取私钥的风险,但可能面临物理安全风险,如电脑丢失损坏等。
热钱包:互联网能够访问私钥的钱包:热钱包往往是在线钱包的形式。使用热钱包时,最好在不同平台设置不同密码,且开启二次认证,以确保自己的资产安全。
比特币前端-HTTP/JSONRPCAPI
比特币前端-命令行工具bitcoin-cli:bitcoin-cli提供一个命令行工具来控制比特币节点,该命令行工具通过JSONRPCAPI接口访问比特币后台bitcoind。用户可以通过发命令来完成比特币的各项功能,例如查询余额、支付、转账等。
比特币前端-比特币浏览器bx:比特币提供一个跨平台的C++libbitcoin库,该库支持比特币全节点服务端和浏览器(BitCoinExplorer(bx))作为客户端命令行工具。比特币浏览器命令提供与bitcoin-cli一样的基本功能。但同时bx提供bitcoin-cli没有的一些密钥管理功能和处理工具
比特币前端-图形开发工具Qt:比特币核心是比特币使用最广泛的客户端,它使用C++开源用户界面开发工具Qt所开发的桌面客户端。Qt是一个跨平台的C++图形用户界面应用程序框架。它提供给开发者建立图形用户界面所需的功能,广泛用开发GUI程序,也可用于开发非GUI程序。Qt是完全面向对象的,很容易扩展,并且允许真正的组件编程。
比特币节点后端负责参与比特币网络的通信互联,维护区块链,验证区块、交易,广播、转播传递区块交易信息。比特币的后台程序主要是由bitcoind,以及挖矿节点程序构成。比特币核心bitcoin-qt实际上是包含前后端(除挖矿功能以外)的一体化节点。
比特币节点后端-密码模块:密码模块(Crypto)主要是处理比特币地址,采用RIPEMD160和SHA-256算法以及Base-58编码来生成比特币地址。
比特币节点后端-签名模块:比特币采用椭圆曲线数字签名算法ECDSA (EllipticCurveDigitalSignatureAlgorithm)来实现数字签名以及生成公钥。2015年之后,比特币开源社区发布了由Certicom公司推荐的具有更好性能的secp256k1椭圆曲线,放在secp256k1子目录中。
比特币节点后端-脚本引擎:比特币脚本语言是一种专门设计的基于堆栈的编程脚本语言。基于堆栈的语言指令只按顺序执行一次。也就是说没有循环或跳转指令,因此脚本的指令数可以决定一个程序运行时间的上限和所需的内存上限,这种基于堆栈的运算平台不是图灵完备的运算平台。比特币的脚本语言非常小,只能有256个指令,每个指令是一个字节长。这256个指令中,75个是保留指令,15个已废弃。下图展示部分比特币常用指令:
比特币节点后端-挖矿:比特币最早的挖矿程序是cpuminer,是通过CPU来挖矿的。挖矿设备经过CPU、GPU、FPGA,到现在基本都使用ASIC挖矿设备。
比特币节点后端-HTTP/JSONRPC服务端:比特币在启动的时候,初始化程序init.cpp会启动HTTP/JSONRPC服务端的线程组。
比特币节点后端-BerkeleyDB和LevelDB数据库:
比特币节点后端-P2P网络管理:P2P网络管理的代码主要是在P2P网络上实现和其他邻节点的通信功能。这些通信功能包括:发现邻节点;连接并管理与邻节点的Socket连接;与邻节点交换不同的P2P消息(包含区块和交易);有时在特殊情况下,会禁止异常行为的邻节点的连接。
比特币节点后端-队列管理:比特币采用PieterHintjens开发的ZeroMQ作为消息队列管理和消息分发工具。ZeroMQ号称“史上最快消息队列”,由C语言开发。ZMQ是一个简单好用的传输层,提供像框架一样的一个socketlibrary,它使得Socket编程更加简单、简洁,性能更高。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。