比特币技术之迷-Transaction 交换

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 交换,布布扣,bubuko.com

时间: 2024-12-29 06:58:35

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

比特币技术之迷-概述

比特币技术之迷 闲暇之余,开始阅读比特币源码,本人将收集以及理解的相关资料作为记录,特开此专栏,给大家带入比特币的技术世界.   比特币相关资源链接如下: 比特币技术白皮书:  http://bitcoin.org/bitcoin.pdf  比特币相关wiki文章  https://en.bitcoin.it/wiki/Category:Technical  比特币协议详解  https://en.bitcoin.it/wiki/Protocol_specification  比特币协议规则 

让100G经济可行的技术:OTN交换&分组光传送(一)

近年来,网络运营商一直严重依赖基于ROADM的光传送设备,利用固定的点到点WDN联接.利用10G波长在整个城域网和广域网中汇聚及传送客户端业务.如果这些网络经过精细的设计规划,也可以合理.有效地利用现有的光谱.通常,会采用Transponder收发器来将带宽相当于WDM线速率的客户端业务(例如,10GE或OC-192/STM-64客户端业务)映射到10G波长上,而Muxponder复用转发器则用来将Sub-10G业务(如GE.OC-3/12/48.STM-1/4/16客户端)汇聚到10G波长以便

华为交换技术及MSTP协议

1.Hybrid接口Hybrid接口是华为设备的一种特殊二层接口模式,类似于Access接口和 Trunk接口,是一个工作在二层的接口技术,可以对数据帧打VLAN标签或不打VLAN标签. 2.VLAN的基本概念 特点:隔离广播,方便管理,提高安全 vlan接口:Access接口,Trunk接口 Trunk封装:isl,dot1q 3.Hybrid接口的特点按照VLAN接口的封装类型,华为交换机的接口主要有三种模式:Access,Trunk和Hybrid.其中Access,Trunk接口和Cisc

华为交换技术——MSTP协议原理

MSTP是IEEE 802.1s中提出的一种STP和VLAN结合使用的新协议,它既继承了RSTP端口快速迁移的优点,又解决了RSTP中不同VLAN必须运行在同一棵生成树上的问题.接下来我们详细了解一下MSTP协议. MSTP协议是一个公有的生成树协议,在实际生产环境中得到了广泛的应用. 一.MSTP概述 传统的生成树只能运行一个实例,且收敛速度慢,RSTP在传统STP基础上通过改进达到了加速网络拓补收敛的目的,但是目前依然存在一些缺陷.由于STP和RSTP在整个局域网中,所有的VLAN共享一个生

名校计算机科学与技术专业培养方案

PS:清华大学计算机科学与技术专业本科生培养方案 计算机科学与技术(0812) 一.研究方向 1.通信软件工程 2.网络技术与应用 3.分布计算理论与技术 4.信息安全与多媒体技术 二.课程设置 类别 课程编号 课程名称 学时 学分 学期 学位课 公共必修课 512.8*704 自然辩证法概论 54 2 秋 521.8*300 科学社会主义理论与实践 36 1 春 534.8*445 英语 144 4 秋/春 基础理论课(至少选1门) 813.8*279 近世代数及其应用 54 3 秋 513.

Android APK的加密技术

Android APK的加密技术有混淆代码和防二次打包,这些都是Android开发技术就可以完成.但是对于破解者来说都已无用,网上的破解教程比加密的还多.Android APK的加密技术,码迷,mamicode.com

【管理心得之二十】你是简单的“被雇佣者”, 还是 高明的“交换者”?

场景再现 ====================== {幼儿园两个小朋友之间的对话} 小朋友A:我可以用兜兜里的糖换你的橘子吗? 小朋友B:好啊 小朋友A:给你,3块糖 小朋友B:给你,橘子 ====================== 上面两个小朋友之间的对话,诠释了最经典的物品交换过程.步入社会求生的我们,似乎很少能看到这样至淳至朴的交换,最多是借助"金钱"衡量完成一次等价的交换罢了. 说得俗套些"天下熙熙,皆为利来",没有任何人可以不计报酬为组织做事.薪资不

Hook技术

[Hook技术] 1.Inline Hook. 2.IAT(导入表) Hook. 3.windows钩子函数. 常用函数包括:SetWindowsHookEx().CallNextHookEx().UnhookWindowsHookEx(). Hook技术,码迷,mamicode.com

django 中的延迟加载技术,python中的lazy技术

---恢复内容开始--- 说起lazy_object,首先想到的是django orm中的query_set.fn.Stream这两个类. query_set只在需要数据库中的数据的时候才 产生db hits.Stream对象只有在用到index时才会去一次次next. 例子: f = Stream() fib = f << [0, 1] << iters.map(add, f, iters.drop(1, f)) 1行生成了斐波那契数列. 说明: f是个lazy的对象,f首先放入