读bitcoin_pdf摘录及笔记_unfinished

In this paper, we propose a solution to the double-spending problem using a peer-to-peer distributed timestamp server to generate computational proof of the chronological order of transactions.  The system is secure as long as honest nodes collectively control more CPU power than any cooperating group of attacker nodes.

Transactions

We need a way for the payee to know that the previous owners did not sign any earlier transactions.

In the mint based model, the mint was aware of all transactions and decided which arrived first.

To accomplish this without a trusted party, transactions must be publicly announced [1], and we need a system for participants to agree on a single history of the order in which they were received.

We define an electronic coin as a chain of digital signatures Each owner transfers the coin to the next by digitally signing a hash of the previous transaction and the public key of the next owner and adding these to the end of the coin.  A payee can verify the signatures to verify the chain of ownership.

我们定义,一枚电子货币(an electronic coin)是这样的一串数字签名:每一位所有者通过对前一次交易和下一位拥有者的公钥(Public key) 签署一个随机散列的数字签名,并将这个签名附加在这枚电子货币的末尾,电子货币就发送给了下一位所有者。而收款人通过对签名进行检验,就能够验证该链条的所有者。

Timestamp Server

A timestamp server works by taking a hash of a block of items to be timestamped and widely publishing the hash, such as in a newspaper or Usenet post.The timestamp proves that the data must have existed at the time, obviously, in order to get into the hash.  Each timestamp includes the previous timestamp in its hash, forming a chain, with each additional timestamp reinforcing the ones before it.

时间戳服务器通过对以区块(block)形式存在的一组数据实施随机散列而加上时间戳,并将该随机散列进行广播,就像在新闻或世界性新闻组网络(Usenet)的发帖一样。能够证实特定数据必然于某特定时间是的确存在的,因为只有在该时刻存在了才能获取相应的随机散列值。每个时间戳应当将前一个时间戳纳入其随机散列值中,每一个随后的时间戳都对之前的一个时间戳进行增强(reinforcing),这样就形成了一个链条(Chain)。

https://bitcoin.org/bitcoin.pdf

http://www.8btc.com/wiki/bitcoin-a-peer-to-peer-electronic-cash-system

时间: 2024-10-16 04:30:17

读bitcoin_pdf摘录及笔记_unfinished的相关文章

好书一起读(85):算法笔记

这阵子看了两本算法书,<算法>和<算法导论>. 前一本读着很轻松,内容基本与大学数据结构课程重叠,示例代码用java编写,学习曲线平缓,对应用程序员来说,读它就挺好. 后一本我是边看麻省理工的<算法导论>公开课边读的,力不从心,因为我数学基础不好(详下),如果不看数学证明,其内容跟前一本就差不多了,数学基础比较好.对算法感兴趣的朋友,可以尝试之. 强烈建议各公开课平台的学习资源,质量非常高,相见恨晚!足不出户,就能学习名校的课程.但学习时别忘了跟着做习题.做笔记.预习复

读muduo网络库笔记(2.8章)

该笔记出自陈硕的<Linux多线程服务端编程>,作者比较注重版权问题,写个读后笔记应该没什么问题吧,如果有,会及时删除,没有的话继续写点笔记 -------------------------------------------- 该书在2.8章介绍了copy-on-write的一种做法实例,解决了前文提到的几个需要解决的问题. 第一版本的代码: 改版本代码问题在于,如果在Foo::doit中调用了post函数会造成死锁.(不过改bug容易定位) copy-on-write版本代码: 这是正确

编写可读代码的艺术笔记

编写可读代码的艺术 表面层次上的改进 命名.注释以及审美--可以用于代码库每一行的小提示. 简化循环和逻辑 在程序中定义循环.逻辑和变量,从而使得代码更容易理解. 重新组织你的代码 在更高层次上组织大的代码块以及在功能层次上解决问题的方法. 精选话题 把"易于理解"的思想应用于测试以及大数据结构代码的例子. 第1章:代码应当易于理解 1.代码应当易于理解. 2.代码的写法应当使别人理解它所需的时间最小化. 第一部分:表面层次的改进 第2章:把信息装到名字里 1.使用专业的单词. 2.避

《如何读一本书》读书笔记

1. 问自己问题 必问的4个问题 这是什么类型的书? 是小说 or 论述,是哲学论述 or 科学论述? 这本书讲了什么? 这本书是怎么论述的? 对我有什么用? 2. 回答自己的问题

基本排序算法总结(摘录及笔记)

1.插入排序 插入排序时最容易理解的排序方法,个人总结有三个关键点: 1. 需要将处理的元素暂时存储起来 2. j变量的范围控制 3. 插入值与j变量控制范围中元素大小的比较 相关代码: 1 //插入排序 2 template<class T> void sort(T* array, int n) 3 { 4 for (int i = 1; i < n; i++) 5 { 6 T temp = array[i]; //控制j的范围 8 for (int j = i; j > 0 &

防火墙(读鸟哥的笔记)

硬件防火墙 是由厂商设计好的主机硬件, 这部硬件防火墙内的操作系统主要以提供封包数据的过滤机制为主,并将其他不必要的功能拿掉.因为单纯作为防火墙功能而已, 因此封包过滤的效率较佳 软件防火墙 保护系统网络安全的一套软件(或称为机制),例如 Netfilter 与 TCP Wrappers 都可以称为软件防火墙. linux上防火墙依据防火墙管理的范围划分 单一主机型的管控 封包过滤型的 Netfilter 依据服务软件程序作为分析的 TCP Wrappers 网域型管控 由于此类防火墙都是当作路

读批判性思维指南笔记

0.前言 我们不希望自己的行为仅仅建立在别人的评价的基础上,不希望自己是公众的傀儡.(所以我们应当学习掌握批判性思维) 1.提出正确问题的益处 1.1 批判性思维涉及:1)意识到一些彼此相关的批判性问题:2)能够在适当的时机提出和回答批判性问题:3)愿意主动运用批判性问题. 1.2 思维的两种风格:1)海绵式思维(强调知识的获得):2)淘金式思维(强调与知识积极的互动) 1.3 我们所做的每个决定都有自己的个人印记——经历.价值观.训练和文化的习惯. 1.4 一个成功地.积极的学习者应该是一个愿

转载 - 读网上文档 - 笔记 - JS 编程最佳实践(Best Practice)

原文地址: 1). JavaScript Best Practices: http://www.w3schools.com/js/js_function_closures.asp 2). JavaScript Closures http://www.w3schools.com/js/js_function_closures.asp 3). JavaScript 严格模式 http://blog.csdn.net/supersky07/article/details/14129179 1. 关于全

读CLR via C#笔记

1.is 和 as 的区别 public class Employee { } a): object obj = new Employee(); if (obj is Employee) { Employee e = (Employee)obj; //do something.... } b): object obj = new Employee(); Employee e = obj as Employee; if (e != null) { //do something... } 以上a和b