想写一本给C#程序员看的区块链书籍

2019-06-19 18:05:22 浏览数 (1)

刚接触区块链的新人会被一大堆新概念吓倒:

比特币地址、区块、区块高度、去中心化、算力、确认数、难度调整、挖矿、矿工、矿池、哈希、分叉、工作量证明、双重支付、私钥、公钥、交易、交易手续费、钱包等等

普通人在短时间内很难理解这些概念,但程序员们相当有优势,他们有计算机理论知识,理解这些概念相对容易一些。

2017年10月,我写了一本电子书《区块链生存训练v1.0》,尝试用简单的语言、形象的类比让从未接触过区块链的小白,能够逐个理解一个又一个的新概念,从而慢慢地进入到区块链的世界。

2018年2月底,我与几位朋友一起将书的内容升级到2.0版本,现在已经放在网上公开下载。

下载链接:

https://pan.baidu.com/s/1QmENCssdW1z69C98hdoIeA

提取码: vggd

随着研究区块链内部原理的深入,一直以来我想写一本给程序员看的区块链书籍,尝试用C#代码说话,当出现一个新概念的时候,我尽可能地给出一些源代码,通过分析和跟踪源程序,你可以更深刻地把握比特币和区块链的基本原理。

内容准备发在掘金小册上,定价69元,小册的名字暂定《用C#代码准确理解区块链的20多个基本概念》,如果哪位朋友有更好的名字,也欢迎留言。

小册的大纲(可能会调整):

  1. 开篇及比特币钱包Bitcoin Core准备
  2. 最最基本的概念 -- 区块(Block)及区块高度(Block Height)
  3. 可分割性及公开性 -- 可用的API一大堆
  4. 创世区块(Genesis Block) -- 找出中本聪留下的那句话
  5. 稀缺性 -- 为什么比2100万个少那么一点点?
  6. 私钥(Private Key)、公钥及比特币地址(Bitcoin Address) -- 地址重合了?
  7. WIF与助记词 -- 私钥记不住怎么办?
  8. 哈希(HASH)及SHA256 -- 可以搞一个装逼的抽奖程序
  9. 数字签名(Digital Signature) -- 如何证明你就是中本聪?
  10. 交易(Transaction) -- 上亿的资金转移只需200个字节?
  11. 交易手续费(Transaction Fees) -- 小心别给矿工送钱
  12. 钱包软件(Wallet) -- 全节点数据已经超过200GB
  13. Bitcoin Core的API -- 可以控制钱包和交易的每一处细节
  14. 去中心化(Decenteralization) -- 全世界的全节点钱包软件如何分布的?
  15. 工作量证明Pow、矿工(Miner)与矿池(Mining Pool)
  16. 创币交易(Coinbase Transaction) -- 你也拥有了铸币权?
  17. 计算目标与难度系数difficulty -- 如何每两周就调整一次难度?
  18. 算力、哈希速率(Hash Rate) -- 看看你的机器与比特币矿机相关有多大?
  19. 交易确认数 -- 为什么需要6次确认?
  20. 未花费交易输出(UTXO) -- 全世界有多少人拥有超过1个BTC?
  21. OP_RETURN誓言墙(不可篡改性) -- 你敢把情书写在区块链上吗?
  22. HD钱包 -- 分层确定性钱包是个什么鬼?
  23. 比特币的脚本体系 -- 为什么用逆波兰表示法的基于堆栈的语言?
  24. 交易的二进制表示 -- 如果你有足够的耐心,手算也可以生成一笔正确的交易
  25. 重放攻击(Replay Attack) -- 夺走别人的币?
  26. 区块和交易信息的一次全面解读
  27. 未来已来,只是尚未流行

适宜人群

本书的预期读者是没有任何区块链知识的C#程序员,当然,如果你已经是一名智能合约的开发者,本书对你也会有所帮助,通过书中丰富的C#源代码,可以让你更准确地理解比特币和区块链中的各种概念。

如果你不是一名程序员,本书可能不适合你,建议你先阅读《区块链生存训练》的1.0或2.0版本的电子书或者其它入门书籍。

阅读之后,你可以掌握比特币和区块链的20多个基本概念,关键的是你可以用程序生成比特币地址、进行消息签名、生成交易、设置交易手续费、在区块链上刻字,甚至自己写个钱包软件等等,还为下一步进行以太坊智能合约编程打下坚实的基础。

你需要准备

Windows 7 / 10(64位)电脑一台

Visual Studio 2015或2017开发环境(C#)

安装好Bitcoin Core钱包软件

书的大部分素材都已经写好了,只是源代码的整理的工作量还相当大。

如果你是C#程序员,且对本书感兴趣,欢迎参与内测。

微信联系我:SLOFSLB

为了证明你是一名C#程序员,请告诉我下面这段代码的输出结果:

代码语言:javascript复制
string url = "https://blockchain.info/block-height/0?format=json";string block = GetUrl(url);
JObject o = JObject.Parse(block);string script = (string)o.SelectToken("blocks[0].tx[0].inputs[0].script");
byte[] bs = new byte[script.Length / 2];for (int i = 0; i < script.Length; i  = 2){    bs[i / 2] = Convert.ToByte(script.Substring(i, 2), 16);}string text = Encoding.ASCII.GetString(bs);Console.WriteLine(text);

--- END ---

0 人点赞