转载:http://www.showmuch.com/article/article_115.html
开源 Bitcoin P2P电子货币是点对点的电子现金系统,创建于2009年[http://en.wikipedia.org/wiki/Bitcoin]。无需金融机构直接点对点支付。该电子货币系统的特色是无需信托中间人,能够方便的进行互联网上的汇款。第三方不能够控制或者阻止您的交易。Bitcoin 交易几乎免费, 而信用卡的网上在线支付系统通常收取 1-5% 的交易费用,加上其他各种费用高达数百美元。避免了中央储备银行的不良政策和不稳定性所造成的安全隐患. Bitcoin系统的有限货币通胀是均匀分布(由CPU决定)于整个网络, 而不是由银行垄断。
这被某些人认为是最危险的开源项目,但我觉得恰恰相反,这是有史以来最令人兴奋的开源项目。这样发行的币才是真正的“人 民 币”,人民才是被服务,而不是被管理。P2P必将从商业、政治、生活各个方面重新定义新的更加公平公正的意识形态。
名词解释以及背后的技术
Bitcoin涉及到很多有意思的技术,要想搞懂bitcoin首先必须对这些技术理解和把握然后是对Bitcoin术语的理解,bitcoin最重要的技术支撑是P2P,数字签名(EC DSA),散列(SHA256, RIPEMD-160), POW,和HashCash。而术语则是:transaction, block, address, Merkle Tree.
工作证明POW系统是要求对方服务前,必须要出据某种工作证明的机制。主要用于防止拒绝服务攻击和反垃圾信息。通常这种“工作证明”会花费一定的时间计算才能得到。最常见的例子是CAPTCHA。另外用于防止DoS和垃圾信息的机制是HashCash,bitcoin使用的原理就类似于HashCash.
hashcash 的灵感来自于这样一个想法,即一些数学结果难于发现而易于校验。一个众所周知的例子是因数分解一个大的数字(尤其是因数较少的数字)。将数字相乘来获得它们的积的代价是低廉的,但首先找到那些因数的代价却要高得多。
对交互式质询来说,因数分解足以胜任。比如,希望客户端能象征性地为其付出代价方能访问在线资源。这个时候可以定义协议,首先服务器向客户端发送一个消息,说“只要您能因数分解这个数,我将让您得到这个资源”。没有诚意的客户端将无法得到我的资源,只有那些能够证明自己有足够的兴趣、付出一些 CPU 周期来回答这个质询的才能得到这个资源。
不过,有一些资源无法很方便地进行交互式协商。比如电子邮件反垃圾或者支付交易,怎么才能避免邮箱不被垃圾邮件所占据?“我并不介意陌生人给我写信,但是,我希望他们能以稍微认真的态度,亲自通过对我有价值的邮件与我取得联系。至少,我不希望他们是垃圾邮件制造者,那些人向我和上百万的其他人发送包含同样消息的邮件(double-spending),期望我们中的某些人能购买某种产品或者落入一个骗局。”而对于电子货币,内容的复制几乎是没有代价的,如何保证电子货币(内容)没有被交易(发送)多次?这和反垃圾邮件是同样的问题。
hashcash的解决之道就是:在电子邮件的消息头中,增加一个 hashcash 戳记(hashcash stamp)散列值;该散列中包含收件人地址,发送时间,salt,该散列值特别之处在于它至少前20位必须是0才是一个合法的hashcash戳记。为了得到合法的散列值,发送者必须经过许多次尝试(改变salt值)才能获得。一旦生成戳记,不希望每一个给我发送邮件的垃圾邮件制造者都能重复使用它。所以,hashcash 戳记要带一个日期。这样可以指定时间更早的戳记是非法的。另外 hashcash 的接收端要实现一个double-spending数据库,用来记录戳记的历史信息。
Bitcoin中的术语解释
散列:bitcoin在计算散列时一般会计算2次。第一轮总是使用SHA-256散列,而第二次在大多数情况下,也是使用SHA-256散列,但用于生成较短的散列(例如生成 bitcoin接收地址的时候)会用RIPEMD-160散列。
hello
2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 ( sha-256)
9595c9df90075148eb06860365df33584b75bff782a510c6cd4883a419833d50 (sha-256)
生成比特币地址时(RIPEMD-160):
hello
2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 (sha-256)
b6a9c8c230722b7c748331a8b450f05566dc7d0f (ripemd-160)
Addresses: Bitcoin Address是ECDSA公钥(public key)的散列,计算方法如下:
if 正式网络
Version=0x00
else if 测试网络
Version=0x6F
end
key_hash=Version+RIPEMD-160(SHA-256(public_key))
Checksum = SHA-256(SHA-256(Key hash))[0..3] #取两次散列值后的前4位
Bitcoin_Address = Base58Encode(Key_hash+Checksum)
#Base58编码做了特殊处理,与通用的base58有一些区别:转换的时候
#前面的0被作为单个0保留。
分享到:
相关推荐
bitcoin挖掘机全部开源。。。有原理图、PCB板和固件、BOM
一个用于 Bitcoin 加密货币的核心集成和暂存树。作为 Bitcoin 协议的官方实现,这个项目提供了一个基础平台,供开发者参与 Bitcoin 网络的开发、测试和维护。它支持比特币的核心功能,并为整个加密货币生态系统的...
bitcoin算法之一的源代码,我是从其他网站花了银子下载下来的,我自己提取并移植的有用的部分在使用,希望对大家有帮助
bitcoin技术白皮书bitcoin技术白皮书bitcoin技术白皮书
bitcoin0.3.0源代码,谢谢,20个字,谢谢。
master bitcoin,master bitcoin,master bitcoin 区块链 的好书
在数字货币领域,比特币(Bitcoin)作为一种去中心化的加密货币,其底层技术——区块链,受到了广泛的关注。而与比特币交互的一种常见方式就是通过远程过程调用(RPC,Remote Procedure Call)。本文将详细介绍如何...
通过对Bitcoin,Ethereum,Fabric的技术原理分析,自底而上的介绍区块链底层技术原理。
本文将详细介绍如何在 Ubuntu 16.04 系统上进行 Bitcoin 0.13 版本的源码编译过程,并记录在此过程中遇到的一些常见问题及其解决方法。 #### 一、环境准备 为了能够在 Ubuntu 16.04 上成功编译 Bitcoin 0.13 的源...
bitcoin RPC节点配置文件示例
* CBlockHeader:CBlockHeader 是 Bitcoin 源码中一个重要的数据结构,包括了版本号、前一区块记录、Markle 树根节点、时间戳、目标值、随机数等属性。 * CTransaction:CTransaction 是 Bitcoin 源码中另一个重要的...
This is a simple bitcoin wallet application that can help those who are getting started with bitcoin programming using python. In this project I use python version 3.6 and Pycharm. File free to fork ...
bitcoin客户端 2013年官方最新版
python-bitcoin-blockchain-parser, 一个 python 3比特链 bitcoin-blockchain-parser 这个 python 3库为bitcoind存储的原始数据提供了一个解析器。特性检测输出类型检测输出中的地址解释脚本支持 SegWit支持有序块...
比特币不仅是一种数字货币,更是一种分布式账本技术(即区块链技术)的应用实例,其背后蕴含着对于去中心化、透明度和信任机制等核心理念的思考。 #### 部分内容解析 **第一章:“社交计算与大数据”** 本章由...
princeton_bitcoin_book
java-bitcoin rpc所需的jar,有问题请联系我
在Ubuntu系统中编译Bitcoin涉及一系列步骤,包括安装必要的依赖库、下载源码以及编译和安装过程。下面是详细的步骤: 1. **安装基础依赖**: 首先,你需要确保系统拥有编译和构建软件的基础环境。通过运行以下命令...
2. Aricie.PortalKeeper.Bitcoin.vssscc:这是一个版本控制相关的文件,可能与Visual Studio Team Services(VSTS)或Git等源代码控制系统相关,用于跟踪项目的版本和变更历史。 3. src:这是一个源代码目录,很可能...