我开发了一套全新的开源 P2P 电子现金系统,名为 Bitcoin。它完全去中心化,并无中央服务器,亦无需可信第三方,因为一切皆以密码学证明代替信任。欢迎试用,抑或先看看截图与设计论文: 在 http://www.bitcoin.org 下载 Bitcoin v0.1 传统货币的根本问题在于,令其运转起来,需要全然依赖信任。人们必须信任中央银行不会令货币贬值,然而在法定货币的历史上,这种信任屡遭背弃。人们必须信任银行替我们保管钱财、并以电子方式转账,但它们在准备金微乎其微的情况之下,却一波波地放出信贷、吹起泡沫。我们还得把隐私托付于它们,指望它们不让骗子冒用身份、掏空我们的账户。而它们那庞大的管理开销,使微支付根本无法实现。 上一代人就曾在多用户分时计算机系统上遭遇过类似的问题。在强加密出现之前,用户只能凭密码保护自己的文件,把隐私托付给系统管理员。管理员总能凭自己的判断凌驾于隐私之上——无论在他权衡隐私原则与其他考量之时,抑或是在上级的授意之下。后来强加密走向大众,信任便不再被需要。数据可以被保护到这样的程度:别人在物理上不可能接触,无论出于何种理由,无论借口多么动听,无论如何都不行。 货币也该拥有同样的东西了。基于密码学证明、无需信任第三方中介的电子货币,可以让资金安全、交易轻松。 这套系统的基础构件之一是数字签名。一枚数字硬币包含其所有者的公钥。转账之时,所有者对硬币与下一位所有者的公钥一同签名。任何人都可以验证这些签名,确认所有权链条。用它来保护所有权固然很好,却有一个大问题悬而未决:双重支出。任何所有者都可以把已经花掉的硬币再签给另一位所有者,试图重复花费。常规的解法,是由一家可信公司用中央数据库来检查双重支出,但这就又回到了信任模型。这家公司身处中枢位置,可以凌驾于用户之上,而维持公司运转所需的费用,也使微支付变得不切实际。 Bitcoin 的解法,是用点对点网络来检查双重支出。简而言之,这个网络就像一台分布式时间戳服务器,为花费硬币的第一笔交易盖章。它利用了信息易于传播、而难以扼杀的天性。工作原理详见设计论文:http://www.bitcoin.org/bitcoin.pdf 结果,是一个没有单点故障的分布式系统。用户自己掌握资金的密码学密钥,彼此直接交易,由 P2P 网络帮助检查双重支出。 Satoshi Nakamoto http://www.bitcoin.org
有可能。他们谈的还是老的 Chaum 式中央铸币那一套,不过也许只是苦于除此之外别无选择。兴许他们会乐意走一条新路。 很多人因为 1990 年代以来倒下的一批公司,便断定电子货币是条死路。我希望大家能够看清:埋葬那些系统的,仅仅是它们中心化受控的本质。而这一次,是我们头一回尝试一套去中心化的、不依赖信任的系统。
它是一个全球性的分布式数据库,按照参与者共同遵循的一套规则,经多数人同意向数据库添加条目: - 每当有人找到生成区块所需的工作证明,就会得到一些新硬币 - 工作证明的难度每两周调整一次,目标为全网络平均每小时 6 个区块 - 每个区块产出的硬币数量每 4 年减半 可以说,硬币是由多数人发行的,发行量有限、且早已预定。 举例来说,倘若你有 1000 个节点,每小时有 6 个节点能获得硬币,那么你很可能要等上一个星期,才能有所收获。 关于 Sepp 的问题:确实并无任何机构充当中央银行或美联储,随着用户增长去调节货币供应。因为那需要一个可信方来决定价值,而我并不知道有什么办法,能让软件知晓现实世界中事物的价值。倘若真有某种聪明的办法,或者我们愿意信任某人去主动管理货币供应、将其与某种东西挂钩,那这些规则也完全可以编进程序。 从这个意义上说,它更像一种贵金属。供应量并不因保值而变,而是预先确定,价值随行就市。随着用户增多,每枚硬币的价值上升。这有可能形成正反馈循环:用户增加,价值上涨,进而吸引更多用户来分享升值。
欢迎来到新的 Bitcoin 论坛!
旧论坛仍可访问: http://bitcoin.sourceforge.net/boards/index.php
我会在这里转载一些精选帖子,并在力所能及之处,对问题给出更新的回答。
-------------------- bitcoinbitcoin: Bitcoin 成熟过程 Posted:Thu 01 of Oct, 2009 (14:12 UTC)
从用户视角看,比特币的成熟过程可以分为 8 个阶段。
1. 第一次点击 Generate Coins 时发生的初始网络交易。 2. 从初始网络交易到比特币条目准备出现在 All Transactions 列表之间的时间。 3. 比特币条目从 All Transaction 区域之外进入其内的变化。 4. 比特币出现在 All Transfers 列表之后,到 Description 准备变为 Generated (50.00 matures in x more blocks) 之间的时间。 5. Description 变为 Generated (50.00 matures in x more blocks) 的变化。 6. 从 Description 显示 Generated (50.00 matures in x more blocks) 到它准备变为 Generated 之间的时间。 7. Description 变为 Generated 的变化。 8. Description 变为 Generated 之后的时间。
哪些阶段需要网络连接、大量本地 CPU 占用或大量远程 CPU 占用?这些阶段有没有名称?
-------------------- sirius-m: Re: Bitcoin 成熟过程 Posted:Thu 22 of Oct, 2009 (02:36 UTC)
据我所知,点击 Generate Coins 之时,并无网络交易——你的计算机不过是开始计算下一个工作证明罢了。生成硬币时,CPU 占用率是 100%。
在这个例子当中,网络连接用于广播你已创建的工作证明区块的信息(正是它使你得以获得新硬币)。若要成功生成硬币,则需要持续的网络连接——如此这般,当别人赶在你之前拿到当前区块时,你才能立即开始计算下一个区块。
-------------------- anonguy54: 请求:能不能做成匿名的? Posted:Thu 15 of Oct, 2009 (19:58 UTC)
有没有计划把这个服务做成匿名的?
例如,能通过 Tor 路由 BitCoin。
在尝试生成硬币(区块)期间,以及成功生成的那一刻,保持网络连接极为重要。
1) 生成期间(状态栏显示 "Generating"、你正用 CPU 寻找工作证明之时),务必持续与网络保持联系以接收最新区块。倘若你的区块没有链接到最新区块,它兴许就不被接受。
2) 你成功生成一个区块之后,它便会立即广播到网络。其他节点必须收到它、并链接到它,它才能被接受为新的最新区块。
可以把它想象成众人协作连成一条链。你要加上一环,必先找到链的当前末端。倘若你在找到最后一环之后离开一小时,方才锻造出自己的链环,回来再把它接到一小时前的末端之上,别人兴许已经加了若干环,他们不会愿意使用你这个如今从中间岔出去的链环。
区块创建之后,有 120 个区块的成熟期,以便在可以花费之前,百分之百确认该区块属于主链。在此期间,你的节点对这个区块什么也不做,不过是等待别的区块添加到你的区块之后。这段时间你并不必在线。
0.2 版会加入代理设置,可以通过 TOR 连接。我已经仔细排查过,确保在代理模式下它不使用 DNS,也不会做任何泄露你 IP 的事情。
-------------------- bitcoinbitcoin: 比特币的匿名性如何?
网络上的节点能分辨硬币从哪个比特币地址发出、发到哪个比特币地址吗?区块里是否保存着比特币转来转去的历史?节点能判断哪些比特币地址属于哪些 IP 地址吗?bitcoin 首次启动时,有没有命令行选项可以启用 sock 代理?如果向一个通过 NAT(网络地址转换)接入了多个客户端的 IP 地址发送比特币,会发生什么?
> 网络上的节点能分辨硬币从哪个比特币 > 地址发出、发到哪个比特币地址吗?区块里是否保存着 > 比特币转来转去的历史?
比特币从一个比特币地址发往另一个比特币地址,而比特币地址,本质上便是不含任何身份信息的随机数。
按 IP 地址发送时,交易仍会写入一个比特币地址。IP 地址只是用来连接收款方的计算机,向其索取一个新的比特币地址、把交易直接交给对方并获得确认。
区块保存着硬币被转往哪些比特币地址的历史。倘若使用这些比特币地址的人身份不明、且每个地址只用一次,那么这些信息所能表明的,不过是:某个身份不明的人,给另一个人转了某个数额。
匿名或化名的可能性,取决于你并不把任何身份信息与你所用的比特币地址关联起来。倘若你在网上公布了自己的比特币地址,那么这个地址及其全部交易,便与你发帖所用的名字关联在了一起。倘若你用的是未曾关联真实身份的马甲,那仍然是化名。
若想获得更高的隐私,最好每个比特币地址只用一次。你随时可以在 Options->Change Your Address 里更换地址。按 IP 地址转账之时,每次都会自动使用新的比特币地址。
> 节点能判断哪些比特币地址属于哪些 IP 地址吗?
不能。
> bitcoin 首次启动时,有没有命令行选项 > 可以启用 sock 代理?
在下一个版本(0.2 版)中,从第一次运行就走代理的命令行是: bitcoin -proxy=127.0.0.1:9050
TOR 的问题在于,Bitcoin 用来初始发现其他节点的 IRC 服务器封禁 TOR 出口节点——所有 IRC 服务器都这么干。如果你之前已经连上过一次,那已经有了种子节点;但第一次运行时,你需要提供一个节点地址,像这样:
bitcoin -proxy=127.0.0.1:9050 -addnode=
如果有谁运行着静态 IP、可接受入站连接的节点,愿意把自己的 IP 贴出来供 -addnode 使用,那就太好了。
> 如果向一个通过 NAT(网络地址转换)接入了 > 多个客户端的 IP 地址发送比特币,会发生什么?
你在 NAT 上把 8333 端口转发给哪台机器,哪台机器就会收到。如果你的路由器转发时能改端口号,你可以让不止一个客户端收到。比如把 8334 转发到某台计算机的 8333 端口,发送方就可以发到 "x.x.x.x:8334"
如果你的 NAT 不能转换端口号,目前没有修改 bitcoin 入站绑定端口的命令行选项,但我会研究一下。
-------------------- scott: Linux/UNIX 编译 Posted:Thu 08 of Oct, 2009 (05:49 UTC)
能否提供在 Linux 上编译安装 BitCoin 的说明或补丁?能有一个命令行版本就太好了。
Linux 版马上就到。Martti 的 Linux 移植已合并进主代码分支,New Liberty Standard 一直在测试。它会随下一个版本 0.2 一起发布。
命令行排在 0.2 之后的待办清单上。