Transaction 交换
每个客户端都会广播本地生成的Transaction,并转给来自其它节点的Transaction,本文主要描述Transaction之间的交换与流转过程。

大家也可以阅读以下文章,来理解Transaction是如何被确定是合法的
https://en.bitcoin.it/wiki/Protocol_rules#.22tx.22_messages

钱包发送交易
客户端定期调用main.cpp中的 SendMessages()函数,此函数中又调用 ResendWalletTransactions来发送本地生成的transactions。
在这里他会检查看最近以来是否有一个新的block,如果有,并且本地的transaction还不在block中,那么交易会被发送到所以连接上的节点,这个检查只会每30分钟做一次。
只有当时间戳早于当前新接收到的block 5分钟以上,transaction才会被再次广播出去。发送顺序将会是越老的交易,越先被发送。

定时广播
客户端定期调用main.cpp中的 SendMessages()函数,这个函数还会决定是否一个消息会被发送给其它节点。
对于每个消息处理流程中,会有一个被选为trickle node的节点,这个节点是被选出来,只用来接收addr消息。
客户端随机抽取1/4的交易数据来发送,除非远端节点是trickle node,trickle node会接收所有的transactions,这里看起来是很奇怪,不过的确是这样。如果一个节点只接收1/4(而不是所有的数据),同时这1/4数据中,代码实现时,也剔除了所有来自本地钱包的交易数据的发送,注释上标明这是为了增加隐私。

转发消息
如果一个客户端收到一个tx的交易消息,它被称为RelayMessage,也叫RelayInventory,也会放入一个即将发送给其它节点的消息池子中去。

一些关键性代码说明:
1.wallet.cpp中的CWallet::ResendWalletTransactions
2.pnodeTrickle =  [GetRand(vNodesCopy.size())];
   SendMessages(pnode, pnode == pnodeTrickle);
   代码在net.cpp中ThreadMessageHandler2()
  
3.main.cpp的SendMessages()中的
   if (fSendTrickle)
4. main.cpp的SendMessages()中的
   bool fTrickleWait = ((hashRand & 3) != 0)
5.main.cpp的SendMessages()中的
 // trickle out tx inv to protect privacy
        if (inv.type == MSG_TX && !fSendTrickle)
        {

6.main.cpp的SendMessages()中的
 // always trickle our own transactions
        if (!fTrickleWait)
        {  
            CWalletTx wtx;

if (GetTransaction(inv.hash, wtx))
               if (wtx.fFromMe)
                  fTrickleWait = true;
        }
7.net.h中的RelayMessage 和 RelayInventory

(待续)

比特币技术之迷-Transaction 交换的更多相关文章

  1. 比特币运行原理[z]

    https://baijiahao.baidu.com/s?id=1581755535769652543&wfr=spider&for=pc 这篇文章主要讲解比特币是什么?它的运行原理 ...

  2. 软交换和IMS是什么关系

    软交换是一种功能实体,为下一代网络NGN提供具有实时性要求的业务的呼叫控制和连接控制功能,是下一代网络呼叫与控制的核心. 简单地看,软交换是实现传统程控交换机的"呼叫控制"功能的实 ...

  3. OTN交换&P-OTN有效减少100G网络成本(一)

    近年来.网络运营商一直严重依赖基于ROADM的光传送设备,利用固定的点到点WDN联接.利用10G波长在整个城域网和广域网中汇聚及传送client业务.假设这些网络经过精细的设计规划,也能够合理.有效地 ...

  4. 高速掌握sinox2014激动人心的ZFS和RAID技术

    Sinox2014引入激动人心的zfs系统以及其支持的RAID,让用户高速打造便宜的高可靠性文件server. ZFS文件系统的英文名称为Zettabyte File System,也叫动态文件系统( ...

  5. SmartRaiden 和 Lighting Network 进行去中心化跨链原子资产交换

    作者介绍 虫洞社区·签约作者 steven bai 前言 如果能够进行以太坊和比特币跨链原子资产交换,是不是一件很酷的事情? 目前链下的扩容方式有很多,最广为人知的就是比特币的闪电网络和以太坊的雷电网 ...

  6. 【翻译】A Next-Generation Smart Contract and Decentralized Application Platform

    原文链接:https://github.com/ethereum/wiki/wiki/White-Paper 当中本聪在2009年1月启动比特币区块链时,他同时向世界引入了两种未经测试的革命性的新概念 ...

  7. [中文] 以太坊(Ethereum )白皮书

    以太坊(Ethereum ):下一代智能合约和去中心化应用平台 翻译|巨蟹 .少平 译者注|中文读者可以到以太坊爱好者社区(www.ethfans.org)获取最新的以太坊信息. 当中本聪在2009年 ...

  8. 区块链的java实现

    原文地址:http://blog.csdn.net/xiangzhihong8/article/details/53931213 本文90%来着于翻译,原文地址:http://java-lang-pr ...

  9. rocketmq总结(消息的高可用、中间件选型)

    rocketmq总结(消息的高可用.中间件选型) 参考: https://blog.csdn.net/meilong_whpu/article/details/76922456 http://blog ...

随机推荐

  1. Internet上的网络层

    TCP/IP协议栈第三层是网络层,网络层的目的是实现两个系统之间的数据透明传送,具体功能包括寻址和路由选择.连接和建立.保持和终止等. TCP/IP协议给internet上的每台主机和路由分配一个地址 ...

  2. 数据科学:Pandas 和 Series 的 describe() 方法

    一.Pandas 和 Series 的 describe() 方法 1)功能 功能:对数据中每一列数进行统计分析:(以“列”为单位进行统计分析) 默认只先对“number”的列进行统计分析: 一列数据 ...

  3. python下载指定页面的所有图片

    实现步骤: 1.下载页面源码 2.对页面进行解析,获取页面中所有的图片路径 3.下载图片到指定路径 代码实例: # coding: utf-8 import urllib2 # 该模块用于打开页面地址 ...

  4. usb设备驱动程序

    韦老师写的,供参考 /*  * drivers\hid\usbhid\usbmouse.c  */ #include <linux/kernel.h> #include <linux ...

  5. python内置常用内置方法详解

    # print(locals()) # print(globals()) def func(): x = 1 y = 1 print(locals()) # 函数内部的变量 print(globals ...

  6. 利用JS 在网页上获取并显示当前日期 星期

    下边的HTML代码,可以取出日期与星期 <html><body><h1><script language=JavaScript>var d, s = & ...

  7. C# RSA的加解密与签名验证

    最近做了一个CS架构的序列号生成器,用到 RSA加解密技术,以下是RSA的使用方法 RSA加密算法是一种非对称加密算法.在公钥加密标准和电子商业中RSA被广泛使用.RSA是1977年由罗纳德•李维斯特 ...

  8. jQuery.ajax向后台传递数组问题

    今天重温了一个问题,jQuery.ajax向后台传递一个数组,而在后台接收不到该值 前台js方法部分代码如下: //创建一个测试数组 var boxIds = new Array(); boxIds. ...

  9. 【291】Python 中字符串添加到剪贴板

    参考:如何使用Python将字符串复制到Windows上的剪贴板上? 实现代码如下: from Tkinter import Tk r = Tk() r.withdraw() r.clipboard_ ...

  10. 【278】◀▶ Python 数学函数说明

    参考:Python 数学函数说明 目录: 一.Python 数学函数 二.Python 随机数函数 三.Python 三角函数 四.Python 数学常量 一.Python 数学函数   函数 返回值 ...