以太坊 parity节点之Transaction Queue解析(txpool)

    在pariyt以太坊的客户端中,存在一个缓冲池Transaction Queue,在geth节点上可能叫做txpool。这个缓冲池主要用来存储准备打包的交易。一般分为两类。

    pendingTransactions:这类交易术语已经验证通过了,已经广播了,准备打包进区块的;

    futureTransactions:这类交易是nonce值太高了,这类交易一般不会广播的,他存放的位置和pending是不一样的;

交易接受条件:

1、gasprice大于设置的最低值;2、gas值小于一个块的限制;3、gas值小于队列设置值;4、交易发起者账户里有充足余额;5、nonce值不能是使用过的;6、交易的签名是正确的;7、交易的长度有限制,300 * 1024 bytes;

交易丢弃条件:

1、已经验证过的状态发生改变,如nonce和余额;2、队列里交易数量超过队列长度;3、每个账户能够发送的交易数量超出限制;4、内存超了;5、如果同一个账户的交易,有nonce值相同的交易,且其中一个gasprice比另外一个高12.5%,则gasprice较低的会被删除;

local trancations:

这个概念比较有趣,local trancations是已创建或提交到本地节点的事务。此类交易在队列中具有高优先级 - 它们将首先传播并首先包含在块中。可以通过两种RPC方法提交本地事务:eth_sendTransactioneth_sendRawTransaction。对于前者,节点必须管理私钥(发送者地址),对于后者,无论发送者如何,事务都将被标记为本地。

总结:

在以太坊开发过程中,pending的交易一直是动态变化的;这种变化主要是由于丢弃条件引起的;如果你是做交易所或者钱包,希望自己发出的交易不要因为队列长度或者内存大小,而被丢弃;这个时候,如果可以控制local trancations,提高优先级,然后就不会被删除了;

开发以太坊的第一课就是,学会配置节点。

猜你喜欢

转载自blog.csdn.net/xq723310/article/details/82109883