课程介绍
-
名称:Bitcoin and Cryptocurrency Technologies
-
平台:Coursera
-
难易度:中级
-
地址:https://www.coursera.org/learn/cryptocurrency/home/welcome
-
授课教师:Arvind Narayanan
-
最早开课时间:2016
评价
比特币和其衍生币,和其背后的区块链技术已经越来越火了。从各种币火热的炒作,到现在各个行业的技术人员专注于区块链的各种场景应用的开发,甚至连传销诈骗都已经扯上区块链了(见下图),可见区块链的火爆程度。
区块链诈骗.jpg本门课程告诉你比特币是什么,背后的实现的技术原理,以及比特币交易,安全等一些知识。课程不难,还有免费的配套书籍,遇到不会的可以去搜索下遇到的难点,毕竟目前关于比特币介绍的资料非常多,另外这也是一门老课程,有很多学习者都分享了一些经验。如果你对区块链感兴趣,可以从此门课程入手。
课堂笔记
作业1
问题描述
Scrooge要实现一个记录交易的账本,账本的目的是可以验证每一笔Scrooge收到的交易,并向它的用户发布验证有效的交易。但这里有个double-spend的问题,所以验证每笔交易时,要和所有的交易都比对一遍。
目前,已经实现的Transaction类,包含了Output和Input的内部类,实现了交易账本的基础。其中Output类包含一个value和一个公共密钥成员,公共密钥由Java的内置PublicKey实现;Input类包含一个Output对象的hash,这个Output对象对应的索引(从0开始)和一个数字签名成员。
交易签名可以由Crypto.java中的verifySignature方法验证,如下:
public static boolean verifySignature(PublicKey pubKey, byte[] message,
byte[] signature)
/**
pubKey: Input对象对应的Output的公共密钥
message:tx中input对象对应的raw data
signature:Input的signature
*/
一次交易包含一些Input,Output和一个唯一ID(由getRawTx()方法获得),和对Input,Output等的一些操作。
还有一个已经实现好的UTXO类,包含一个源交易的hash,和在交易中对应的Output index 成员 。并提供了一些验证UTXO的对象的方法。
另外一个已经实现的类UTXOPool,包含了当前的UTXO集合和每一个UTXO到对应交易Output的映射。并提供了一些方法对UTXO的操作。
你的任务是实现TxHandler.java, 见 github
其中handleTx是应该同时更新它内部的UTXO集合,用于下次处理时可以使用最新的结果。
附加作业:
创建一个名为MaxFeeTxHandler.java的文件,其handleTxs()方法找到一组具有最大总交易费用的交易 - 即该组中所有交易的(输入值之和 - 输出值之和) 的最大值 。
网友评论