欢迎来到环境100文库! | 帮助中心 分享价值,成长自我!

环境100文库

换一换
首页 环境100文库 > 资源分类 > PDF文档下载
 

c#区块链编程.pdf

  • 资源ID:4624       资源大小:2.64MB        全文页数:87页
  • 资源格式: PDF        下载权限:游客/注册会员/VIP会员    下载费用:5碳币 【人民币5元】
快捷注册下载 游客一键下载
会员登录下载
三方登录下载: 微信开放平台登录 QQ登录   微博登录  
下载资源需要5碳币 【人民币5元】
邮箱/手机:
温馨提示:
支付成功后,系统会自动生成账号(用户名和密码都是您填写的邮箱或者手机号),方便下次登录下载和查询订单;
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,既可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰   

c#区块链编程.pdf

汇智网 H C区块链编程 1 / 87 导读 区块链是什么 区块链属于一种去中心化的记录技术。参不到系统上的节点,可能丌属于同一组织、彼此无需信任;区块链数据由所有节点共同维护,每个参不维护节点都能复制获得一份完整记录的拷贝。 本电子书 英文原文由 Nicolas Dorier 和 Bill Strait 联合 编写,最早发布于 gitbook( https// 中文版 翻译 内容 由网友郭胜基提供, 由汇智网( http//)编目整理,是目前网上流 传最广的区块链资料之一。 但由于区块链本身(以及周边生态)的发展非常快,一些实践性内容已经落后于现状。因此编者建议本电子书的读者,在阅读时应注意吸收核心的理念思想,而丌要过分关注书中的实践操作环节。 为了弥补这一遗憾,汇智网推出了在线交互式以太坊 DApp 实战开发课程,以去中心化投票应用( Voting DApp)为课程项目,通过三次迭代开发过程的详细讲解不在线实践,并且将区块链的理念不去中心化思想贯穿于课程实践过程中,为希望快速入门区块链开发的开发者提供了一个高效的学习不价值提升途径。读者可以通过以下链接访问 以太坊 DApp 开发实战入门在线教程 http// 汇智网 H C区块链编程 2 / 87 教程预置了开发环境。进入教程后,可以在每一个知识点立刻进行同步实践,而丌必在开发环境的搭建上浪费时间 汇智网 带来的是一种全新的交互式学习方式,可以极大提高学习编程的效率和学习效果 汇智网 课程内容已经覆盖以下的编程技术 Node.js、 MongoDB、 JavaScript、 C、 C、 PHP、 Python、 Angularjs、 Ionic、 React、 UML、 redis、汇智网 H C区块链编程 3 / 87 mySQL、 Nginx、 CSS、 HTML、 Flask、 Gulp、 Mocha、 Git、 Meteor、 Canvas、 zebra、 Typescript、Material Design Lite、 ECMAScript、 Elasticsearch、 Mongoose、 jQuery、 d3.js、 django、 cheerio、SVG、 phoneGap、 Bootstrap、 jQueryMobile、 Saas、 YAML、 Vue.js、 webpack、 Firebird, jQuery EasyUI, ruby, , c, Express , Spark 汇智网 H C区块链编程 4 / 87 一、简介 1.1 前言 Ayn Rand 在 Fountain Head 与我有共鸣的一篇文章 GAIL WYNAND 是享誉世界富有魅力的木偶大师,而 HOARK HOWARD 是建筑设计行业的领军人物,他们在一起言谈甚欢。 GAIL 发现与 HOARK 一起的时候,有种奇妙的放松的感觉,不知道为什么,他于是就问对方。 WYNAND 问 “HOWARD,你曾经恋爱过吗 ” ROARK 转面直视着他,不假思索地回答 “我现在就在谈恋爱。 ” “但是当走过一幢建筑的时候,你觉得还有什么比它更棒的 ” “棒得多, GAIL” “我正在思考人们说的一句话,世上无快乐。看看他们多么艰辛地寻找 生命中快乐的人。看看他们是如何孜孜以求的。为什么生命止于平淡呢想想可以通过什么权利,任何人都可以因任何原因人存在于世上,而他自己的快乐除外人人都需要它,而且人人身上的每一部分都需要它。但是人们从来没有找到它。我在思考为什么。有人喝了酒然后说不知道生命的意义。这是我特别看不起的一部分人。寻找更高级意义或者 „普世目标 ‟的人,不知道为了什么而活着的人,嘟囔着必须需找自我的人。你可以在周围听到尽是他们。那些好像是我们时代的标准陈词滥调。每一本书你打开,都在口沫横飞地自我忏悔。好像忏悔是一件高贵的事情。我却认为它 是最令人羞耻的事情。 ” “看, GAIL。 ” ROARK 起身,伸手折断了一棵树上的粗大树枝,双手紧握,一只手在一边;然后,他的手腕和指关节将树枝压弯,慢慢地变成一个拱形。 “现在我可以把它做成任何我想要的东西一张弓,一支矛、一根手杖、一条扶手。那就是生命的意义。 ” “你的力量 ” “你的工作。 ”他把树枝放到一边。 “世间提供给你材料,你从中制造东西 .” 我想区块链就像是那根树枝。对于局外人而言,感觉像是令人厌烦而毫无用处的数字集合。对于程序员和企业家而言,那就是绝佳的原材料,可以实现我们的梦想。我们赋予汇智网 H C区块链编程 5 / 87 它意 义和目标。 你需要先要了解木材的特性,然后才能从一节树枝制造一张弓、一支矛或者一根手杖,同样地,你也需要知道如何编程实现区块链。我希望,你以自己的技能和智慧,将会发现可以在多大程度上利用这些看上去一无是处的数字集合。 我还是需要提醒一下你学习区块链就好像在黑客帝国中吞下红药片。你将会发现已经无法自已,想尽快辞职转而全职专攻区块链。 本书将带你从区块链的基本应用走向高级应用。它不会教你如何使用 API(比如比特币核心提供的 RPC API),但是它将教你如何编写这样的 API。 拾遗中本聪曾经把比特币描述成 “令 人厌烦的灰色。 ” 面向 API 编程可以帮你快速实现应用,但是开发者的创造性三就被限于 API 了。通过完整理解区块链,开发者将拥有能力充分挖掘开发区块链的潜力。 1.2 为什么是区块链编程而不是比特币编程 区块链是金子,比特币是珠宝。 我们不想把比特币比作金币,更愿意说它是珠宝。因为金子的第一个杀手级应用就是珠宝。金币来得更晚一点。 你不要被蒙了,认为比特币是有瑕疵的,而区块链是珍贵的。如果金子是珍贵的,你会把金项链扔掉吗区块链是因为比特币而建立并发展起来的。随着区块链价值的增加,更多的比特币也将会应用于区块链, 从而增加了对比特币的需求。 你的应用是否使用 “比特币作为一种货币 ”的特性取决于你自己的决策。 区块链是原材料,比特币是燃料。每次人们认为这种燃料也可以作为交易的媒介时,比特币作为货币的特性就出现了。相对于交易价值,你可以让区块链做得更多。你甚至不需要认为它是货币。我们将在本书中向你展示如果使用作为货币的比特币,但那不是全部。 1.3 为什么是 C .NET 框架在公司很受欢迎。相信对于创业公司和爱好者而言也是理想的工具。 .NET 框架开发的代码可以在 IOS、 Android、 Windows 平板 /手机、桌面、服务器 以及嵌入式设备中运行。 汇智网 H C区块链编程 6 / 87 从编译器到运行时内核全部都是开源的 微软创业企业扶植计划允许创业公司使用所有微软工具,包括免费使用价值 150 美元 /月的Azure 云服务。 VisualStudio community2013 是一个专业级别的 IDE,你可以作为爱好者免费使用 C与 Java 和 C关系密切。而且,对于已经了解 C 语言的开发人员来说也很容易阅读。 本书作者之一 Nicolas Dorier 为 .NET 创建了最受欢迎的比特币框架,名叫 NBitcoin。你可以查看这个网址 https// 本书作者拥有超过 15 年的 C开发综合经验。我们可以将它用于任何项目,无论是出于爱好还是以盈利为目的。 1.4 预备条件 1.4.1 技能  你应该熟悉面向对象和函数式编程  如果对 C有基本的了解当然更好,不过我们认为,对于 Java 或者其它类 C 语言开发人员,本书代码也是清晰易读的。  不要求有专业数学知识。我们不涉及超过最基本要求的加密知识,最基 本要求仅限于创建一个安全服务。  你不必对比特币有深入了解。但是我们推荐阅读的作为额外加分项。 1.4.2 工具  Visual Studio 2013-你可以在 Google Bing 上搜索 “Visual studio 2013 community”,然后免费下载使用。  比特币核心代码 -你需要在开始前进行同步。 拾遗你可以咨询微软 cortana 或者谷歌 Now 了解比特币的汇率 1.5 本书众筹 如果继续为你贡献内容,我们需要购买披萨、咖啡和寿司。我们需要获得足够多的币。并且汇智网 H C区块链编程 7 / 87 如果没有你的反馈,我们将变得漫不经心,以至于无法完 成整本书籍的编写工作。 因此,我们启动了下列实验,希望你感兴趣。也许有一天你会将它变成完整的商业模型。 我们创建了以下内容(不需要担心,我们将在后面看到这里每一行的含义) 地址 1KF8kUVHK42XzgcmJF4Lxz4wcL5WDL97PB 签名H1jiXPzun3rXi0N9v9R5fAWrfEae9WPmlL5DJBj1eTStSvpKdRR8Io6/uT9tGH/3OnzG6ym5yytuWoA9ahkC3dQ 信息 Nicolas Dorier Book Funding Address 现 在我们开始编写本书。当我们肚子饿了,我们就暂停,要求得到本书一下章节的资金支持。你将通过编程完成一个挑战的形式进行汇款,简单地使用钱包汇款将不算数。捐赠人员将通过他们的比特币地址授权获得下一章节。没有任何数字版权管理。如果你没有通过汇款取得了本书,希望你能按照本书的指引汇款。 我们将进入下一章节的详细内容。不要掉以轻心,你需要通过编程学会如何使用它。 你可以在这个网址上得到更多介绍 http// 1.6 补充阅读  以下是阅读本书的辅助材料  Mastering Bitcoin , Andreas M. Antonopoulos 编著  Nicolas 关于 CodeProject 的 文章 http//  开发人员手册,网址 https//bitcoin.org/en/developer-guide 1.7 图标 大部分图标都有一致的形状,它们有箭头辅助阅读,表明产生的目标内容。 举例来说,下列图标应理解为 “秘钥 密码 加密秘钥。加密秘钥 密码 秘钥。 ” 汇智网 H C区块链编程 8 / 87 虽然代码很好,但是有时候一张图胜过千言万语。不用 担心,我也会把代码写下来的。 1.8 许可 CC ASA 3U 如前面 “本书众筹 ”部分描述的一样,我们将向资金支持者的比特币地址分发本书。 一旦获得本书,你就可以免费分享和修改,具体参照署名 -相同方式共享 3.0 未本地化版( CC BY-SA 3.0)。 在免费获得本书后,如果在提醒时给点小费,我们将不胜感激。 加密货币拥趸可能说股权证明和工作量证明是最好的感情表达方式,其它都是浮云。 汇智网 H C区块链编程 9 / 87 1.9 项目设置 在开始前,我们想告诉你项目的设置要求。 1.打开 Visual Studio,创建一个新的 ConsoleApplication。命名为 “ProgrammingBlockchain”。 2.在 SolutionExplorer 中右键打开 “Reference”,选择 “Manage NuGet Packages” 3.搜索 “NBitcoin”并安装。注意下图仅供参考。实际版本和发布日期因你阅读本书的时间而不同。 汇智网 H C区块链编程 10 / 87 4.在 Solution Explorer 中右键打开 “ProgrammingBlockchain”,选择 “Add”,然后 “NewFolder”,命名文件夹为 “Chapters”。 5.右键打开 “Chapters”并选择 “Add”然后 “New Class”。命名这个类为 “Chapter1”。在本书的其它章节也如此这般做法。 6.打开 “Program.cs”,并添加以下代码。 using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using System.Text; using ProgrammingBlockchain.Chapters; namespace ProgrammingBlockchain { class Program { static void Mainstring[] args { //Select the chapter here. var chapter new Chapter1; //call the lesson here. chapter.Lesson4; //this will hold the window open for you to read the output. Console.WriteLine“\n\n\nPress enter to continue.“; Console.ReadLine; } } } 7.注意 “using ProgrammingBlockchain.Chapters;”被添加到正在使用的区块。 8.这时候, Visual Studio 在抱怨 “chapter.Lesson1”不存在。继续阅读本书,我们将创建它。 汇智网 H C区块链编程 11 / 87 汇智网 H C区块链编程 12 / 87 二、比特币传输 2.1 比特币地址 你的比特币地址是用来接收别人付款的。你也许知道,钱包软件使用私钥来付款。 一个比特币地址由两部分组成,一部分是公钥哈希值经过 Base58check 编码的组合,另一部分是关于这个网络地址的信息。 Base58check 编码有一些很精巧的特性,比 如用于避免拼写错误的验证码,避免模糊的字符比如 “0”和 “O”。 拾遗 TestNet 是用于开发目的的比特币网络,在这个网上的比特币没有任何价值。 MainNet才是人人知道的比特币网络 你也许不知道,就区块链而言,还谈不上比特币地址。内部来说,比特币协议使用 ScriptPubKey验证比特币的接收动作。 ScriptPubKey 是一段简短的脚本,用于解释在什么情况下才能声明比特币的所有权。随着本书深入分析,我们将考察 ScriptPubKey 指令的类型。 ScriptPubKey也许包含哈希计算过的公钥,这个公钥允 许支付比特币。 拾遗在 MainNet 上进行比特币编程时犯的错误印象更加深刻 下图说明了公钥、私钥、比特币地址和 ScriptPubKey 的关系。 汇智网 H C区块链编程 13 / 87 现在我们可以用代码向你演示它们的关系了。打开 Chapter1.cs,在顶部添加 “using NBitcoin;”然后编写下面的方法。 public void Lesson1 { Key key new Key; //generates a new private key. PubKey pubKey key.PubKey; //gets the matching public key. Console.WriteLine“Public Key {0}“, pubKey; KeyId hash pubKey.Hash; //gets a hash of the public key. Console.WriteLine“Hashed public key {0}“, hash; BitcoinAddress address pubKey.GetAddressNetwork.Main; //retrieves the bitcoin address. Console.WriteLine“Address {0}“, address; Script scriptPubKeyFromAddress address.ScriptPubKey; Console.WriteLine“ScriptPubKey from address {0}“, scriptPubKeyFromAddress; Script scriptPubKeyFromHash hash.ScriptPubKey; Console.WriteLine“ScriptPubKey from hash {0}“, scriptPubKeyFromHash; 汇智网 H C区块链编程 14 / 87 } 按 F5 检查输出。你刚刚学到了如何创建一个私钥,对应的公钥、公钥哈希、比特币地址和 ScriptPubKey。 我们还没有深入细节,注意 ScriptPubKey 看上去跟比特币地址没有关系,但是它的确显示了公钥的哈希值。注意我们为何能从比特币地址产生 ScriptPubKey这一步就是所有比特币客户端做的 事情,它把人机交互友好的比特币地址翻译成区块链可读的地址。 比特币地址由一个网络识别码和公钥哈希组成。学习到这些,就可以由 ScriptPubKey 和网络识别码产生比特币地址,如下面代码所示 public void Lesson2 { Script scriptPubKey new Script“OP_DUP OP_HASH160 1b2da6ee52ac5cd5e96d2964f12a0241851f8d2a OP_EQUALVERIFY OP_CHECKSIG“; BitcoinAddress address scriptPubKey.GetDestinationAddressNetwork.Main; Console.WriteLine“Bitcoin Address {0}“, address; } 比特币地址 13Uhw9BmdaXbnjDXiEd4HU4yesj7kKjxCo 也可以从 ScriptPubKey 取回哈希值,产生一个比特币地址,就像我们在 Lesson1里面展示的那样。 public void Lesson3 { Script scriptPubKey new Script“OP_DUP OP_HASH160 1b2da6ee52ac5cd5e96d2964f12a0241851f8d2a OP_EQUALVERIFY OP_CHECKSIG“; KeyId hash KeyIdscriptPubKey.GetDestination; Console.WriteLine“Public Key Hash {0}“, hash; 汇智网 H C区块链编程 15 / 87 BitcoinAddress address new BitcoinAddresshash, Network.Main; Console.WriteLine“Bitcoin Address {0}“, address; } 公钥哈希 1b2da6ee52ac5cd5e96d2964f12a0241851f8d2a 比特币地址 13Uhw9BmdaXbnjDXiEd4HU4yesj7kKjxCo 拾遗公钥哈希值的产生过程使,先将公钥进行 SHA256 哈希计算,结果再进行RIPEMD160 哈希计算,按高位优先记录最终结果。函数看起来是这样的 RIPEMD160SHA256pubkey 那么现在你应该理解私钥、公钥、公钥哈希、比特币地址和 ScriptPubKey 的关系了。 私钥通常用 Base58Check 编码表示,叫做比 特币密码(也叫钱包导入格式,简称 WIF),就像比特币地址那样。 本书的其余部分,你将使用自己产生的一个地址。 注意很容易就可以从比特币密码产生私钥。特别记住,从比特币地址产生公钥是不可能的,因为比特币地址含有公钥哈希但不是公钥本身。 public void Lesson4 { Key key new Key; BitcoinSecret secret key.GetBitcoinSecretNetwork.Main; Console.WriteLine“Bitcoin Secret {0}“, secret; } 汇智网 H C区块链编程 16 / 87 比特币密码 KyVVPaNYFWgSCwkvhMG3TruG1rUQ5o7J3fX7k8w7EepQuUQACfwE 复制你得到的比特币密码,在 Program.cs 的 main 方法中添加如下代码,代替提供给你的密码。 BitcoinSecret paymentSecret new BitcoinSecret“KyVVPaNYFWgSCwkvhMG3TruG1rUQ5o7J3fX7k8w7EepQuUQACfwE“; 练习注意你自己产生的私 钥将用于本身的其余部分,包括它的地址。 在本书的其余部分,我将自己的私钥存储在变量 BitcoinSecret paymentSecret 中。 练习取得 paymentSecret 的比特币地址,存储到 paymentAddress,在 Bitcoin Core 上发送一些币到上面。比如 0.01 比特币,感到顺手的时候可以增加一些。 2.2 交易 在开始前,记住要创建一个新章节的类。 交易是比特币的传输。一个交易可能没有接受者,或者有好几个。发送者也一样。在区块链上,发送者和接受者总是被抽象为 ScriptPubKey,就像 我们在第 10 章演示的一样。假设你已经学习完了第 4 课以及相关的练习,我们继续向前。如果你没有完成练习,继续前请向先前你生成的地址汇款。 如果你使用 Bitcoin Core,你的交易标签页将如下显示交易信息 现 在 我 们 关 注 一 下 交 易 ID 。 这 里 它 就 是 f13dc48fb035bbf0a6e989a26b3ecb57b84f85e0836e777d6edf60d87a4a2d94 交易 ID 由 SHA256 定义。 不要使用交易 ID 处理未经确认的交易。在正式确认前交易 ID 是可以被更改的,叫做 “交易可塑性 ” 汇智网 H C区块链编程 17 / 87 你可以在类似 Blockchain.info 这样网站上检查交易,但是作为一个开发人员,你将需要一个易于查询分析的服务。截止本文时,我们发现 Blockr.io 是一个不错的服务。 如果你上http//btc.blockr.io/api/v1/tx/raw/f13dc48fb035bbf0a6e989a26b3ecb57b84f85e0836e777d6edf60d87a4a2d94 看看,就可以看到交易的原始字节。 NBitcoin 查询 blockr,为你分析信息,所以你就不需要手工来做了。 public void Lesson1 { var blockr new BlockrTransactionRepository; Transaction transaction blockr.Get“4ebf7f7ca0a5dafd10b9bd74d8cb93a6eb0831bcb637fec8e8aabf8 42f1c2688“; Console.WriteLinetransaction.ToString; } “hash“ “4ebf7f7ca0a5dafd10b9bd74d8cb93a6eb0831bcb637fec8e8aabf842f1c2688“, “ver“ 1, “vin_sz“ 1, “vout_sz“ 2, “lock_time“ 0, “size“ 225, “in“ [ { “prev_out“ { “hash“ “bf7d91ac70917f98b497927e1b07267507652b206df14ecdba2e9390b9bffc65“, “n“ 0 }, “scriptSig“ “3044022069b6b0f1a8d453bdb89e3ad475232b8e01d2851e7b53acab3f830f40e80b3b5102203c049 867975360020293c735d48b4a2dda003aa781c1d8ccd2c7af290dcd11de01 02e3538427350039e67ea99e935cefb740badf3d09ebc301b0bc9d1bb0301a3417“ } ], 汇智网 H C区块链编程 18 / 87 “out“ [ { “value“ “0.08990000“, “scriptPubKey“ “OP_DUP OP_HASH160 5b1d720daf0e95e37d0eaedd282b6ed9a40bab71 OP_EQUALVERIFY OP_CHECKSIG“ }, { “value“ “0.01000000“, “scriptPubKey“ “OP_DUP OP_HASH160 71049fd47ba2107db70d53b127cae4ff0a37b4ab OP_EQUALVERIFY OP_CHECKSIG“ } ] 现在相关部分包括 in 和 out。你可以看到 0.0899 比特币被发送给 ScriptPubKey, 0.01 比特币被发送到另外一个地方。(练习验证 ScriptPubKey 中的公钥是否与你付款地址相关联的一样) 如果你注意一下 in,你就发现 prev_out(先前的 out)被引用了。每一个 in 都告诉你先前的哪一个 out 被使用了,这样就可以为交易付款。术语 TxOut 和 Output 对 Out 是匿名的。 总的来说, TxOut 代表一定数量的比特币和一个 ScriptPubKey。(接收端) 每一个 out 都有一个由交易 ID 和索 引定义的地址,叫做 Outpoint。比如,在我的这次交易中 0.01 比特币的 out 对应的 Outpoint 就是 71049fd47ba2107db70d53b127cae4ff0a37b4ab, 1. 汇智网 H C区块链编程 19 / 87 现在让我们看看交易中的 in(也叫 TxIn、 s) TxIn 包含正在花出去的 prev_out 的出口、以及同时被叫做 “所有权证明 ”的 ScriptSig。在我的例子里, prev_out 的出口是 7def8a69a7a2c14948f3c4b9033b7b30f230308b, 0 我们代换第一课代码 中的交易 ID,就可以检查交易相关的信息。我们可以继续按此方法追踪这个交易 ID 到比特币的 coinbase,也就是他们被挖出来时所在的区块。 在我们的例子里, prev_out 总使用量为 0.1BTC。在这次交易中, 0.0899BTC 和 0.01BTC 都被发出去了。意味着还有 0.0001BTC 没有下落。发送和收到之间的差额被称之为交易费用或者挖矿费用。矿工将指定的交易包含在区块里面,因此需要收费。 1.3 区块链 你也许注意到,当我们证明发出去的 TxOut 所有权时,并没有证明 TxOut 的实际存在。这就是区块链的主要作用一 显身手的地方 区块链是所有交易的数据库,记录了第一个比特币交易以来的所有信息,第一个区块又叫做汇智网 H C区块链编程 20 / 87 创始块。区块链在全世界范围内被复制。如果你使用比特币核心,你的电脑上将拥有所有区块链。一旦在区块链上发生交易,那就不能否认它的发生了。 矿工只有一个目标,就是在区块链中插入一条交易记录。一组新的交易被添加后,一个区块就被全网广播了。网络上的其它节点确认这个新的区块遵守先前设定的比特币协议。 创建一个区块成本很高。如果一个矿工企图增加一个无效的交易,其它节点将不会认可这个区块,矿工在创建这个区块时花费的投资将打水漂 。 一旦矿工提交了一个有效的区块,里面所有的交易都将被确认。当这个发生时,所有矿工都必须放下手中的工作,开始新的交易。一个区块被确认后,它就被写进区块链了。随着后面继续加入新的区块,它被撤销的概率也就越来越低。 在历史上我们第一次拥有的这样一个数据库,它不能被轻易地改写,不再需要信任和审查机制,而且是大范围分布式的。如果我们把比特币当作是一种货币,那区块链就是一套账本。 区块链是一个数据库,你给里面的数据赋予含义。你很快就可以发现,一次比特币交易包含的信息远远超过比特币的传输。一次比特币交易在数据库中就是一 行记录,永远不可能擦除。 作为用户,你可以通过两种不同的方法验证一次交易是否已经记录在区块链里面。 检查整个区块链,它在写作本书时有好几个 GB 大小 寻求一颗 merkel 树,大概有几 K。我们将介绍 merkel 树的更多内容,它与简单支付验证有关联。 1.4 区块链不仅仅是比特币 有意思的是,同样的语句,有两组不同人的解读。一组人认为比特币是货币,他们相信比特币的价值将牛气冲天。另一组人并不认为比特币作为货币会取得成功,他们试图解释比特币如此有趣的原因。 但是有一件事情是我们都认同的一个不可更改的数据库,它不会 被审查、干预和擦写,而且在全世界都有副本,它将对其它行业产生巨大的深远影响。 公证员在法庭上记录案件事实,他们就可以将相关文件档案永久地存储在区块链里面。审计将变得自动化而且更有说服力,那时产权归属的存储和交割都在区块链上完成。所有资金周转情况可以公开证明他们的清偿能力。自动化交易脚本可以让交易自动发生,不需要人工干预或者中心权威机构的授权。 本书的其余部分,我们将探讨一些基本原理,这些基本原理支撑了以上技术的运转,以及更汇智网 H C区块链编程 21 / 87 多其它内容。从支付一个比特币开始吧。 1.5 支付比特币 你现在已经了解什么是比特币地址、 ScriptPubKey、私钥和矿工了,可以手动完成第一个交易了。创建一个新类 Chapter14 以及一个方法 Lesson1。在你阅读本章节的时候,你需要按照书中所述逐行添加代码创建方法,这个方法将为本书留一个 Twitter 消息风格的反馈。 我们先看看这个交易,它包含了你需要支付的 TxOut,就好像我们在第 11 章做的那样。 var blockr new BlockrTransactionRepository; Transaction fundingTransaction blockr.Get“0b948b0674a3dbd229b2a0b436e0fce8aa84e6de28b088c610d110c2bf54acb4“; 在我们的例子里,我们需要使用第二次 output 为了完成支付,你需要在交易里面提到这个 output。可以如下创建一个交易 Transaction payment new Transaction; payment.s.Addnew TxIn { PrevOut new OutPointfundingTransaction.GetHash, 1 }; 现在我们注意一下 Output。你需要发送 0.004BTC,而你支付了 0.04BTC,所以需要找给你0.006BTC。同时也需要给矿工一些费用,这样他们好把这次交易添加到他们的下一个区块里面去。 因此,你将拿回来 0.0059BTC。 汇智网 H C区块链编程 22 / 87 本书的捐献地址 1KF8kUVHK42XzgcmJF4Lxz4wcL5WDL97PB var programmingBlockchain new BitcoinAddress“1KF8kUVHK42XzgcmJF4Lxz4wcL5WDL97PB“; payment.Outputs.Addnew TxOut { Value Money.Coins0.004m, ScriptPubKey programmingBlockchain.ScriptPubKey }; payment.Outputs.Addnew TxOut { Value Money.Coins0.0059m, ScriptPubKey paymentAddress.ScriptPubKey }; 现在可以添加你 的反馈了。必须少于 40 字节,不然它就崩溃了。 //Feedback var message “Thanks “; var bytes Encoding.UTF8.GetBytesmessage; payment.Outputs.Addnew TxOut { Value Money.Zero, ScriptPubKey TxNullDataTemplate.Instance.GenerateScriptPubKeybytes }; Console.WriteLinepayment; 汇智网 H C区块链编程 23 / 87 { “hash“ “258ed68ac5a813fe95a6366d94701314f59af1446dda2360cf6f8e505e3fd1b6“, “ver“ 1, “vin_sz“ 1, “vout_sz“ 3, “lock_time“ 0, “size“ 166, “in“ [ { “prev_out“ { “hash“ “4ebf7f7ca0a5dafd10b9bd74d8cb93a6eb0831bcb637fec8e8aabf842f1c2688“, “n“ 1 }, “scriptSig“ ““ } ], “out“ [ { “value“ “0.00400000“, “scriptPubKey“ “OP_DUP OP_HASH160 c81e8e7b7ffca043b088a992795b15887c961592 OP_EQUALVERIFY OP_CHECKSIG“ }, { “value“ “0.00590000“, “scriptPubKey“ “OP_DUP OP_HASH160 71049fd47ba2107db70d53b127cae4ff0a37b4ab OP_EQUALVERIFY OP_CHECKSIG“ }, { “value“ “0.00000000“, “scriptPubKey“ “OP_RETURN 42696c6c20537472616974206973207570646174696e672073637265656e73686f74732e“ } ] } 现在我们就完成创建交易了,我们需要对它签名。换句话来说,你需要证明拥有在 里面提到的 TxOut。 签名比较复杂,细节可以参考 汇智网 H C区块链编程 24 / 87 https//en.bitcoin.it/w/image

注意事项

本文(c#区块链编程.pdf)为本站会员(罗比斯克)主动上传,环境100文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知环境100文库(点击联系客服),我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2017 环境100文库版权所有
国家工信部备案号:京ICP备16041442号-6

收起
展开