C#比特币开发详解

栏目: ASP.NET · 发布时间: 5年前

内容简介:当我们谈到比特币时,其实在不同的场景下有不同的指代。比特币首先是一种数字加密货币,用户可以通过比特币网络进行比特币转账或商品结算,就和传统的货币一样:

当我们谈到比特币时,其实在不同的场景下有不同的指代。

比特币首先是一种数字加密货币,用户可以通过比特币网络进行比特币转账或商品结算,就和传统的货币一样:

C#比特币开发详解

不过比特币是基于密码学技术的虚拟化货币,它没有实体,仅仅隐含在从发送方到接收方的交易中,接收方必须使用其持有的密钥来消费收到的比特币。

对于科技从业者而言,比特币则更多了一层含义:比特币对应着一种划时代的数字加密货币系统,其内容包含通信协议、激励机制、实现代码与承载网络等:

C#比特币开发详解

事实上,比特币是数十年来密码学技术、分布式计算等领域的集大成者,它不是第一个出现的数字货币,但无疑是最成功的,一个洞察了人性的虚拟产品。

区块链结构

比特币是一个专用数据库,它只保存一种类型的数据记录——交易,例如 张三转给李四几个币,或者李四转给王五几个币:

C#比特币开发详解

一旦涉及到资金,大家都会变得慎重了。因此交易记录最好在技术上可以保证是不能篡改的,这样出了问题可以翻翻老账,这就要求账本必须值得信赖。

比特币采用一种特殊的数据结构 区块链/Blockchain 来保障交易的不可篡改性,每一个包含一批交易数据的区块,同时也包含了前一个区块的指纹:

C#比特币开发详解

在比特币中,一个区块的指纹是使用密码学中常见的哈希函数来实现的。哈希函数可以将大块数据压缩成精简的表示,而且可以保证如果精简的表示不同,那么其对应的原始数据也不同。

例如,在上图中如果12#区块被攻击者篡改,那么它的哈希结果将不同于在13#区块中保存的其原始指纹,这使得识别篡改的区块这一任务很容易,或者说篡改的难度很大——攻击者必须同时修改12#之后的所有区块才能保证指纹校验成功。

另一方面,如果攻击者直接篡改14#区块(我们假设这是最后一个块),那么显然是可行的,因为它缺乏之后更多区块的保护。这引入了在比特币中常用的一个概念: 交易的确认数/Confirmations。

交易一旦被确认打包到区块中,它的确认数就是1,之后每增长一个区块则确认数加1。例如对于上图中的标注交易,当链增长到14#块时,该交易的确认数就是3。

显然一个交易的确认数越多,意味着攻击者篡改交易的可能性越小。在比特币中的应用当中,交易的接收者通常需要在 六个确认 之后,才可以将该笔交易视为成功。

去中心化机制

与当前流通的任何法币都不同,比特币是去中心化的,没有一个中央机构来管理比特币的发行与流通,因此比特币网络是一个典型的P2P网络,在每个(全)节点上都有完整的区块链数据:

C#比特币开发详解

在这样的分布式计算环境下,如何保证新的交易在各个节点区块链中得以一致的更新,就是经典的分布式一致性问题了——每个节点都有可能提交新的交易,而不同节点提交的交易也可能不相同,到底以哪个节点为准?

解决这种问题的经典方法就是(动态)选举一个决策者,其他节点复制决策者的行为即可避免节点之间的不一致了。比特币的解决思路也一样,不过它采用了一种类似于抢答的机制来动态选择胜出的节点,由胜出的节点负责出块并打包交易——所有节点都同时求解同一个问题,最先得到结果的节点获胜并获得出块权利,其他节点则转而求解下一次出块的问题:

C#比特币开发详解

比特币给出的问题不可以通过解析方法求解,节点必须在所有的可能结果中暴力尝试求解,由于胜出的节点可以获得比特币奖励,使得节点旳动机和行为颇为类似于淘金的西部牛仔,因此这一求解过程被称为 挖矿/Mining

理论上每个节点都有获胜的概率,但显然,在同样的时间内,计算力强大的节点会比其他节点尝试的机会更多,因此获胜的概率也越大——在这种抢答机制下,算力代替了智力,而这种依赖于暴力求解问题从而达成节点一致性的共识算法被称为 工作量证明/Proof Of Work

课程内容

本课程适合于希望开发比特币应用的C#工程师,内容涵盖比特币的基本概念、工作原理、应用开发接口、离线密钥管理、分层确定性钱包以及裸交易等诸多关键知识点。

第一章 比特币概述

主要介绍比特币的基本概念和核心工作原理。

第二章 Hi,比特币

这一章主要介绍如何使用现有软件进行比特币的操作,例如创建地址、转账、查询余额、浏览区块等,同时介绍比特币应用中的核心概念,如钱包、交易、UTXO等。

第三章 使用RPC访问比特币网络

这一章主要介绍如何在程序代码中利用节点软件的RPC API接口访问比特币网络,进行转账、地址创建、查询余额等操作,同时给出了一种简单的在网站中支持比特币支付的方案。

第四章 自己管理密钥与地址

这一章主要介绍如何离线管理密钥与地址,并详细讲解比特币中的脚本以及其与地址、身份验证之间的关系。如果你希望在自己的应用中增加类似于钱包的功能,这部分的内容将让你收益匪浅。

第五章 使用分层确定性钱包

这一章主要介绍被广泛使用的分层确定性钱包,并详细讲解如何在程序代码中加以应用。如果你需要管理大量的密钥和地址,那么分层确定性钱包应该很有帮助。

第六章 离线构造裸交易

这一章主要介绍裸交易的作用,以及如何在程序代码中创建裸交易。如果你需要使用第三方节点来广播你的比特币交易,那么裸交易就是你的唯一选择。

第七章 使用SPV节点

这一章讲解NBitcoin的SPV节点实现机制与核心组件。SPV节点是一种轻量的比特币节点实现,它无须下载完整的区块,因此非常适合实现手机上的比特币钱包,或者应用于不希望使用全节点的其他场景。

======================================================================

分享一些比特币、以太坊、EOS等区块链相关的交互式在线编程实战教程:

  • java比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在 Java 代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是Java工程师不可多得的比特币开发学习课程。
  • php比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在 Php 代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是Php工程师不可多得的比特币开发学习课程。
  • EOS教程,本课程帮助你快速入门EOS区块链去中心化应用的开发,内容涵盖EOS工具链、账户与钱包、发行代币、智能合约开发与部署、使用代码与智能合约交互等核心知识点,最后综合运用各知识点完成一个便签DApp的开发。
  • java以太坊开发教程,主要是针对java和android程序员进行区块链以太坊开发的web3j详解。
  • python以太坊,主要是针对 python 工程师使用web3.py进行区块链以太坊开发的详解。
  • php以太坊,主要是介绍使用php进行智能合约开发交互,进行账号创建、交易、转账、代币开发以及过滤器和交易等内容。
  • 以太坊入门教程,主要介绍智能合约与dapp应用开发,适合入门。
  • 以太坊开发进阶教程,主要是介绍使用node.js、 mongodb 、区块链、ipfs实现去中心化电商DApp实战,适合进阶。
  • ERC721以太坊通证实战,课程以一个数字艺术品创作与分享DApp的实战开发为主线,深入讲解以太坊非同质化通证的概念、标准与开发方案。内容包含ERC-721标准的自主实现,讲解OpenZeppelin合约代码库二次开发,实战项目采用Truffle,IPFS,实现了通证以及去中心化的通证交易所。
  • C#以太坊,主要讲解如何使用C#开发基于.Net的以太坊应用,包括账户管理、状态与交易、智能合约开发与交互、过滤器和交易等。
  • tendermint区块链开发详解 ,本课程适合希望使用tendermint进行区块链开发的工程师,课程内容即包括tendermint应用开发模型中的核心概念,例如ABCI接口、默克尔树、多版本状态库等,也包括代币发行等丰富的实操代码,是 go 语言工程师快速入门区块链开发的最佳选择。

以上所述就是小编给大家介绍的《C#比特币开发详解》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

图解深度学习

图解深度学习

[日] 山下隆义 / 张弥 / 人民邮电出版社 / 2018-5 / 59.00元

本书从深度学习的发展历程讲起,以丰富的图例从理论和实践两个层面介绍了深度学习的各种方法,以及深度学习在图像识别等领域的应用案例。内容涉及神经网络、卷积神经网络、受限玻尔兹曼机、自编码器、泛化能力的提高等。此外,还介绍了包括Theano、Pylearn2、Caffe、DIGITS、Chainer 和TensorFlow 在内的深度学习工具的安装和使用方法。 本书图例丰富,清晰直观,适合所有对深......一起来看看 《图解深度学习》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具