本帖最后由 3642578a 于 2013-12-20 14:56 编辑
认真阅读万以上准备内容,我们开始了解bitcoin的原理
Bitcoin账户与银行账户 和在银行开立账户一样,bitcoin里的对应概念为地址(类比为银行账户)。每个人都可以有1个或若干个bitcoin地址(类似于银行账户),该地址用来付账和收钱。每个地址都是一串以1开头的字符串,比如有两个bitcoin地址:1911HhKdLbnsffT5cRSiHgK3mdzMiyspXf和1JSUzrzMk7f6iymfVkvqLBJDBZXBopyfZK。一个bitcoin地址由一对公钥和私钥唯一确定,要保存账户,只需要保存好私钥文件即可。 和银行账户不一样的地方在于,银行会保存所有的交易记录和维护各个账户的账面余额,而bitcoin的交易记录则由整个P2P网络通过事先约定的协议共同维护。
那么我的账户地址里到底有多少钱? 虽然使用bitcoin的软件可以看到当前账户的余额,但和银行不一样,并没有一个地方维护每个地址的账面余额。它只能通过所有历史交易记录去实时推算账户余额。任何人只要下载了客户端都能接收到从比特币成立那一天起的所有账单,所以,只要把所有账单都下载全了自然知道每个账户上应该剩多少钱(这里仔细思考下)
我如何付账?
当我从地址A向对方的地址B付账时,付账额为e,此时双方将向各个网络节点公告交易信息,作如下广播:地址A向地址B付账,付账额为e。为了防止有第三方伪造该交易信息,该交易信息将使用地址A的私钥进行加密,此时接受到该交易信息的网络节点可以使用地址A的公钥进行验证该交易信息的确由A发出。(如果你没理解,再好好看一看第二部分的准备知识)
网络节点后收到交易信息后会做什么? 这个是整个bitcoin系统里最重要的部分,需要详细阐述。简单起见,这里只使用目前已经实现的bitcoin协议,在当前版本中,每个网络节点都会通过同步来保存所有的交易信息。 历史上发生过的所有交易信息分为两类,第一类为"验证过"的交易信息(相当于现金流已经发生过了),它保存在一连串的「blocks」里面。每个"block"的信息为前一个"bock"的ID(每个block的ID为该block的HASH码的HASH码)和新增的交易信息。 另外一类指那些还"未验证"的交易信息,上面刚刚付账的交易信息就属于此类(即权责发生了,但收付还未实现)。 当一个网络节点接收到新的未验证的交易信息之后(可能不止一条),由于该节点保存了历史上所有的交易信息,它可以推算在当时每个地址的账面余额,从而可以推算出付款的账户里是否有足够余额。在剔除掉无效的交易信息后,它首先取出最后一个"block"的ID,然后将这些未验证的交易信息和该ID组合在一起,再加上一个验证码,形成一个新的「block」,然后我们可以类比为现金流发生了。 上面构建一个新的block需要大量的计算工作,因为它需要计算验证码,使得上面的组合成为一个block,即该block的HASH码的HASH码的前若干位为1。目前需要前13位为1(大致如此,不确定具体方式),此意味着如果通过枚举法生成block的话,平均枚举次数为16^13次。使用CPU资源生成block被称为「挖金矿」,因为按照规定,生产该block将得到一定的比特币奖励(这相当于货币发行!),该奖励信息已经被包含在这个block里面。 当一个网络节点生成一个新的block时,它将广播给其它的网络节点。但这个网络block并不一定会被网络接受,因为有可能有别的网络节点更早生产出了block,只有最早产生的那个block或者后续block最多的那个block有效,其余block不再作为下一个block的初始block。(这样就限制了货币发行速度和现金流的唯一性)
对方如何确认支付成功?
当该笔支付信息分发到网络节点后,网络节点开始计算该交易是否有效(即账户余额是否足够支付),并试图生成包含该笔交易信息的blocks。当累计有6个blocks(1个直接block和5个后续blocks,实际上只有第一个被采用)包含该笔交易信息时,该交易信息被认为「验证过」(可类比为权责发生,会计们记录了该交易,从而交易完成;或者类比为发生了现金流,从而交易完毕),从而该交易被正式确认,对方可确认支付成功。 一个可能的问题为,我将地址A里面的余额都支付给地址B,同时又支付给地址C,如果验证通过则相当于我的账户余值翻了个倍,如果只验证单比交易都是有效的。此时,我的作弊的方式为在真相大白之前产生6个仅包括B的block发给B,以及产生6个仅包含C的block发给C。由于我产生block所需要的CPU时间非常长,与全网络相比,我这样作弊成功的概率微乎其微。
网络节点生产block的动机是什么? 从上面描述可以看出,为了让交易信息有效,需要网络节点生成1个和5个后续block包含该交易信息,并且这样的block生成非常耗费CPU。那怎么样让其它网络节点尽快帮忙生产block呢?答案很简单,协议规定对生产出block的地址奖励BTC(这就是比特币的发行!),以及交易双方承诺的手续费。目前生产出一个block的奖励为50BTC,未来每隔四年减半,比如2013年到2016年之间奖励为25BTC。
回目录 下一节: 关于bitcoin的通缩 |