块哈希失效多久之前?

How long before a block hash is invalidated?

文档说 "Block hash is hash of the block from the current blockchain on top of which this transaction can be applied. It’s used to guard against blockchain forks and rollbacks."

如果我尝试使用 "a little out of date" 的块散列来签署和发送交易,那么我会收到错误消息 InvalidTxError::Expired

这个过期超时是否有一些具体的定义,我可以用它来预测它是否会发生,因此需要刷新我计划使用的块哈希?

它是在一段时间后发生的,还是如果区块哈希值是从链顶算起的第 N 个?

有一个系统范围的参数transaction_validity_period,它定义了一个事务在多长时间内(对于多少个块)可以被认为是有效的,因为它基于块哈希。

根据@berryguy 上面接受的答案进一步挖掘后,看起来 transaction_validity_periodChainGenesis 的传入参数(我猜是按区块链启动按钮),其中有效期被测量为链条的 BlockIndex("down from the top" 或 "back from the tip",具体取决于您脑海中播放的动画)

snip from nearcore source

pub struct ChainGenesis {
    pub time: DateTime<Utc>,
    pub gas_limit: Gas,
    pub gas_price: Balance,
    pub total_supply: Balance,
    pub max_inflation_rate: u8,
    pub gas_price_adjustment_rate: u8,
    pub transaction_validity_period: BlockIndex, /// <- here
    pub epoch_length: BlockIndex,
}

并由从 ~/.near/genesis.json(在我的本地计算机上)加载的创世配置文件 genesis.json 填充,可能是通过调用 start_with_config