交易池子股票资金池是什么意思思?


4.1. 并行调度
不同于传统的块内交易串行执行的机制,并行调度指节点在产块验块阶段使用并行调度算法执行块内交易,充分利用了多核CPU的优势,极大地加速了区块链的整体处理性能。
4.1.1. 并行调度算法分类
根据对同一批交易调度产生的执行顺序是否随机,并行调度算法可分为:
4.1.2. 长安链并行调度算法
长安链自版本1.0.0就提供了随机性调度算法,该算法通过提议节点生成有向无环图(DAG)的方式确定区块交易的执行顺序,并保证验证节点可以执行并得到相同的结果。DAG中节点代表交易,边代表交易间happens-before关系。网络中其他节点在验证区块时,可根据此DAG并行验证块内交易,产生交易的读写集合,而后根据读写集合验证提议区块的有效性。
整体流程如下图所示:
长安链并行调度算法的主要思想是交易分为执行execute和生效commit两步,若交易在execute期间,其读集未被其他交易更改,则交易的执行结果视为有效,可执行commit操作;否则该交易的执行结果视为无效,需要将该笔交易的执行结果丢弃并重新执行此交易。示意图如下:
主要步骤:
长安链调度模块将所有交易并行执行,并在执行中将所有交易的写操作都记录在内存缓存中;
每笔交易执行结束后,检查自己读集中所有的key是否被其他交易修改,若无则将该交易写集生效(ApplyTxSimContext),若被其他交易修改则将该交易重新加入待执行队列重新执行;
待所有交易执行完毕后,通过分析所有交易的读写集构建DAG。若交易间存在“读-写”、“写-读”、“写-写”冲突,根据执行时的先后顺序构建DAG中的边。
因存在冲突的交易执行时间存在随机性,最终构建的DAG也无法预测,所以此算法为随机性调度算法。在进行冲突检测时,长安链应用了位图等数据结构进行工程优化,极大地提升了交易的执行效率。
4.2. 交易缓存
4.2.1. 概述
在长安链中,交易池负责接收、校验、转发和缓存节点收到的待处理交易,并在共识提案时为核心引擎模块提供一批有效的交易进行区块构造。
具体来说,交易池具有如下功能:
接收客户端发送过来的交易,并将有效的交易广播给其他的节点;
对交易ID、时间戳、签名等进行有效性检查以及交易是否存在“双花”的防重检查;
缓存交易,并在共识提案时为核心引擎模块提供一批有效的交易;
4.2.2. 交易种类
交易池缓存两种类型的交易:
4.2.3. 交易池设计
在交易池实现时,对缓存配置类型交易和普通类型交易的队列进行了区分,分别为ConfigTxQueue和CommonTxQueue。
在每种交易队列TxQueue中包含两个结构用于缓存交易:
添加至交易池的交易来源 TxSource,有三种类型:RPC、P2P、INTERNAL,不同来源的交易,对应着不同的检查。
RPC:对来自RPC的交易,交易池不进行交易基础信息的有效性检查(如交易ID是否符合规范、时间戳是否过期,交易签名是否有效),只进行防重检查,因为RPC模块已做此类检查;
P2P:对其它节点广播过来的交易,需进行全量的检查,包括交易有效性检查、交易在不在交易池或者已经上链的防重检查;
INTERNAL:如果节点在同一高度接收到多个验证有效的区块,当其中某个区块上链后,节点会对同一高度的其他区块进行剪枝,被剪枝区块内的交易会被重新添加进交易池,此时交易池会对这些交易进行有效性和防重检查;
接下来将以一笔交易在交易池内部的流转过程,介绍交易池的设计思路:
接收交易:交易池对不同来源的交易会进行不同的处理,对于来自RPC的交易,会将有效的交易缓存到待打包队列Queue中并将交易广播给其他节点;对于来自P2P或者INTERNAL的交易,验证有效后只会放入交易池的Queue队列中。
构造区块:主节点的Core模块会从交易池Fetch一批交易用于构造新的区块,此时交易池会将该批交易从待打包Queue队列移至已打包Pending缓存中,防止在MaxBFT共识下交易被重复打包。
验证区块:从节点在验证区块时会从交易池Get块中的交易,对存在于本节点交易池中的交易,Core模块只需比对块中交易和交易池中交易哈希是否一致即可(因为交易池已经做了相关检查),对于不在本节点交易池中的交易,Core模块则需要进行交易有效性检查和防重检查。验证区块有效后,Core模块会通知交易池将块中交易从待打包Queue队列中移至已打包Pending缓存中,此操作也是确保在MaxBFT共识下交易不会被重复打包。
提交区块:在完成共识并提交区块后,主节点和从节点会对同一高度的其他区块进行剪枝,将被剪枝区块中的交易重新放入待打包Queue队列中,并将提交的区块中的交易从交易池Pending和Queue中移除。
4.2.4. 交易池类型
目前,长安链中支持single、normal、batch三种交易池,他们的区别主要是在交易广播、从交易池获取交易、删除交易时对交易的操作粒度不同。
交易池类型
广播交易粒度
获取交易粒度
删除交易粒度
特点
single交易池
Transaction
Transaction
Transaction
交易串行处理,基本配置,支持随机函数剔除
normal交易池
Batch
Transaction
Transaction
交易并行处理,性能较高 ,支持随机函数剔除
batch交易池
Batch
Batch
Batch
交易按批次并行处理,区块极致剪裁,性能最高,不支持随机函数剔除
single交易池特点: 在single交易池的内部实现中只包含一个ConfigTxQueue和CommonTxQueue缓存结构,因此在广播、获取、删除交易时都是以单笔交易为粒度。
normal交易池特点: 在normal交易池的内部实现中包含一个ConfigTxQueue和多个CommonTxQueue缓存结构(用户可配置),所以normal交易池是以批次为粒度广播交易,在获取交易和删除交易时可以并发地从多个缓存结构中进行操作,会极大地性能提升。
batch交易池特点: 在batch交易池的内部实现中包含一个ConfigTxQueue和多个CommonTxQueue缓存结构(由接收交易的节点数量决定),交易池所有的操作都是以批次为粒度进行并行处理,进一步提升了交易池性能;并且对区块进行了极致压缩,在构造区块时块中只需要放入交易批次ID即可,无需放入实际的交易,整体提升了一轮共识效率。
4.2.5. 参数配置
txpool 在节点配置chainmaker.yml中,有如下配置参数:
参数名称
类型
默认值
释义
pool_type
string
normal
启动的交易池类型,有single、normal、batch三种类型
max_txpool_size
int
5120
交易池缓存普通类型交易的容量
max_config_txpool_size
int
10
交易池缓存配置类型交易的容量
is_dump_txs_in_queue
bool
true
正常停止节点时是否dump待打包交易队列Queue中的交易
common_queue_num
int
8
仅normal交易池配置项,CommonTxQueue的缓存数量,需要设置为不超过256的2的指数值
batch_max_size
int
块中交易数(block_tx_capacity)
normal、batch交易池配置项,广播和产块时的交易批次的大小
batch_create_timeout
int
50 毫秒
normal、batch交易池配置项,定时创建交易批次的时间间隔
交易池配置建议和说明:
交易池类型:同一链中的共识节点和同步节点的交易池类型需要保持一致;更换交易池类型时需要清除dump的交易wal文件;在区块剪裁模式下不建议更换交易池类型。
普通类型交易容量:一方面,根据单笔交易大小和机器内存情况计算出交易池容量上限;另一方面,交易池容量也需要不大于交易过期时间*底链实际TPS,避免因交易过期而丢失交易。
配置类型交易容量:由于配置类型交易优先被打包,且区块中只能包含一笔配置类型交易,所以配置交易容量不建议设置过大。
是否dump待打包队列Queue中的交易:为了停机时不丢失交易,建议设置为true;正常停止节点(通过stop.sh脚本或kill -15)会dump交易到store_path目录下chainId/dump_tx_wal中,重启节点时会重新加载这些交易,强制停止节点(kill -9)不会dump交易。
普通类型交易队列的数量:该项仅为normal交易池中的配置,体现了normal交易池的并发操作程度,需要设置为不超过256的2的指数值。
交易批次中交易数量:该项为normal和batch交易池中的配置,建议该值可被块中交易数(block_tx_capacity)整除,以确保区块能够打满交易。
交易批次创建时间阈值:该项为normal和batch交易池中的配置,结合出块间隔(block_interval)综合考虑设置。
节点配置中与交易池相关的配置建议和说明:
hello,大家好,我是鱼叔,今天给大家讲一讲币圈里的一些术语,方便大家以后理解更多的文章,本文会持续的更新,感兴趣的小伙伴记得收藏和追更 。大饼指的是BTC行情。二姨太指的是ETH 行情。gas费以太坊上做交易操作所需的费用,越复杂的交易需要更高的gas费,越拥堵时期的gas费也越高。DEFI 去中心化金融 - Decentralized finance,比如uniswap,aave等。DAO分布式自治组织,我们可以理解为区块链上通过智能合约构建的社区,一般来说会通过代币的方式进行治理和投票。BSC币安链生态,主要有币安交易所带头发展的生态。HECO火币生态链,主要由火币交易所带头的生态。DEXdefi里的去中心化交易所,用于买卖代币,以太坊上比如uniswap,BSC上比如pancake swap等。AMM - 自动化做市商。DEX里的主要技术之一,不同于传统的订单交易模式(订单交易指的是一个人挂卖单,一个人挂买单,然后系统进行配对)。AMM通过流动池子来实现交易,相当于大家把钱放一块儿形成一个池子,然后大家都跟这个池子进行交易。举个例子,为了实现ETH和USDT的交易,需要有一个ETH/USDT的交易池,如果你想卖ETH,就可以和池子进行交易把ETH放进去,把USDT拿出来。流动性挖矿对应于上面的AMM机制,如果没有人把钱放到那个池子里,就没法形成后续的交易,因此为了奖励那些愿意把钱放进去提供流动性的玩家,系统就将交易所收的手续费分给他们,因此提供流动性变相在赚取收益称为流动性挖矿。LP Token - liquidity provider token, 指流动性提供者的凭证。DEX为那些提供流动性的用户发放LP Token,用于证明其提供流动性,用户可以用LP token去拿回自己放入池子里的钱,或者也可以直接交易LP token,Lp Token相当于一种新的代币。NFT - 非同质化代币NFT是一种不可分割的代币,并且经常代表着某一种物化的图像或者艺术品。比如你可以有0.1个ETH,但是不能有0.1个蒙娜丽莎画像。不过伴随着NFT的进化,可分割化的NFT也逐渐出现。Layer 2以太坊减少gas费的一个技术,简单来讲就是在layer2上做计算,以减轻layer1上的计算压力。机枪池可以理解为一个流动性挖矿基金。因为以太坊上一次交易很费钱,而且流动性挖矿的选择性过分多,个人不知道选择哪个比较好,机枪池的出现就很好地解决了这个问题,它的主要流程就是将大家的钱放一块儿然后根据算法选择收益最高的挖矿池,将大家的钱放进去,并且分摊对应的gas费,这样每个人平均下来的手续费其实很低。因此机枪池就像一个基金经理帮助大家管理钱,然后尽可能实现收益最大化,比较有名的机枪池就是 yearn(YFI)。衍生品defi里的衍生品就类似于现实生活中的金融衍生品,比如国内的用户很难买到美国的股票,但是可以买到美国相关的概念股,这就是一种衍生品里的锚定关系。相应的,如果你在一个区块链里想买Apple的股票,你就可以通过相应的defi衍生品应用(比如Synthetix)买到与Apple挂钩的代币。衍生品的功能有很多,有兴趣地可以去了解。公链公链指的是一个生态,比如有以太坊公链,BSC公链等,而应用则是在上面部署的。可以理解为公链是一块儿田野,而各种项目就是种在上面的植物。波卡生态 - polkadot区块链里比较有名的公链,立志于做一个平行链用于链接各条公链和应用,可以理解为它是一个高速公路,连接着不同的生态。卡槽波卡平行链特有的功能,通过卡槽将生态都链接起来,类似于高速入口。由于高速公路的成本有限,不能在每一个地方都造一个高速入口,所以通过竞拍的方式来拍卖卡槽,即决定是否在你那边搞一个高速入口。Fork - 抄袭在币圈里会经常听到一个项目fork了另一个项目,意思就是直接把对方项目的代码抄过来稍微改一下界面就形成了新项目,这类fork项目太多了,就不多赘述。(未完待续)我是鱼叔,一个理性的币圈投资和输出者。如果觉得我不错,欢迎加入我的圈子,在这里我会发表自己对市场的判断,你也可以在圈里向我提问,我会尽可能地回答。

我要回帖

更多关于 股票资金池是什么意思 的文章

 

随机推荐