TRON节点验证交易的时间容忍度

2023-10-30

这篇文章主要介绍深入分析TRON的节点配置文件中vm.minTimeRatiovm.maxTimeRatio这两个标志的意义。

这两个标志的表示的是节点(包括sr和fullnode)验证区块中智能合约交易的时间比例(时间容忍度)。

注:

  • sr节点: 超级节点,负责出块,全网只有27个超级节点
  • fullnode节点: 从sr节点同步区块

什么是时间容忍度?

在tron中,sr节点打包一个智能合约交易时,允许执行智能合约的最大时间是50ms,如果超过50ms就产生OutOfTime错误,让后将错误保存到contractRet中,并且回滚所有执行的状态。同时扣除energylimit指定的所有费用,所以这样的交易是可以被打包的,开发者要非常小心,避免出现这样的情况,否则人财两失。

这里的50ms时间是机器的绝对时间,也就是说当sr开始执行智能合约时,会获取一下系统时间记为vmStartInUs ,然后计算一个截止时间vmShouldEndInUsvmShouldEndInUs = vmStartInUs + 50 ms, 然后每执行一条智能合约指令,都会比较系统当前时间是不是超过了截止时间,一旦超过,就会触发异常,立即停止执行指令。假设有一笔交易执行的时间是49ms,没有超过50ms,并且也没有其他错误, 所以被记为succes,记录到交易的receipt.result中。

当sr把包含这个49ms的交易广播出去后,某一个fullode节点收到这个区块,并且执行区块中的每一个交易,当执行49ms的交易时,那这个fullnode执行这笔交易的总时间一定也是49ms吗?答案肯定是不一定的, 因为sr节点的机器配置和fullnode不一定完全相同,假如fullnode节点配置比sr节点差一些,很可能执行的总时间会超过50ms,假设是51ms,fullnode会发现这个结果和交易的receipt.result不一致,log日志输出 “[pool-34-thread-1] DB Different resultCode ”,直接导致整个区块验证失败。那这肯定是不能容忍的,不能因为小小的机器误差就导致区块无法同步?

tron的解决方案是,所有节点验证执行其他的节点广播过来的区块中的交易时, 允许的时间不是50ms, 而是一个可以自己设置的值。怎么设置呢, 这里就用到了maxTimeRatiominTimeRatio

当执行的一笔交易的receipt.result的不为OutOfTime,那么执行这笔交易最大的时间是50 *maxTimeRatio,如果这笔交易的receipt.result本来就是OutOfTime,那么执行这笔交易最大的时间是50*minTimeRatio。一般tron的节点启动配置文件中minTimeRatio默认为0,maxTimeRatio默认为5。

还是刚才我们举的例子,sr执行交易的时间为49ms,那其他节点验证执行这笔交易只要不超过250ms(505),都不会认为是OutOfTime。如果sr打包的交易的本来就是OutOfTime,那么其他节点验证执行这笔交易的时间不能超过0ms(500),也就是直接认为是超时的。即便多了5倍的时间,有一些性能比较差的机器还是会将本来没有问题的交易误认为是超时交易。所以如果fullnode节点的性能一般,可以将maxTimeRatio调大一些,以防止由于自身的性能原因导致对一个正常的交易验证失败,最终导致区块不能同步。

推荐将minTimeRatio设为0, 为什么呢?为什么对sr认为超时的交易验证要更加严苛呢,我的理解是如果别的sr已经认为是OutOfTime超时了, 我就使用最小的时间系数来验证这个交易,是为了尽量也产生OutOfTime的结果, 和sr达成一致。不过这样似乎不太公平,相当于某一个sr的机器性能成为了交易执行时间的上限,只要出块节点认为是timeout, 那其他节点也会服从。

总结

  • maxTimeRatio 表示的是验证节点对没有超时的交易验证时允许的时间相对于出块节点执行的比例。
  • minTimeRatio 表示的是验证节点对超时交易验证时允许的时间相对于出块节点执行时间的比例。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TRON节点验证交易的时间容忍度 的相关文章

  • 区块链在中国(2):PBFT算法

    上一张我们从分布式系统的角度简单叙述了一下 IBM HyperLedger fabric 的一些基本概念 架构和协议信息 其中最为核心的部分就是共识算法 consensus plugin fabric推荐并实现的就是PBFT这一经典算法 B
  • 超详细Hyperledger Fabric2.3.3开发教程

    最近一直在总结Hyperledger Fabric的开发教程 主要包括 1 什么是Hyperledger 区块链 Hyperledger Fabric 01 超级账本介绍 2 Fabric 2 3 3安装教程 区块链 Hyperledger
  • 区块链浏览器搭建

    嗨喽 大家好 不知道大家是否遇见过类似的问题 自己使用以太坊源代码搭建了一个开发网私链时 缺少了主网或者测试网的区块链浏览器这种区块链数据直观展示的工具 那么今天就带大家一起搭建一个适合自己的区块链浏览器使用 文章目录 一 环境准备 1 1
  • cosmos测试网络结点搭建完整流程

    第一步 下载golang并安装 配置环境变量 wget https dl google com go go1 13 8 linux amd64 tar gz tar C usr local xzf go VERSION OS ARCH ta
  • Hyperledger:运行“./byfn -m up”时获取“/bin/bash: ./scripts/script.sh: No such file or directory”

    我是超级账本的新手 只是按照以下教程来学习它http hyperledger fabric readthedocs io 我正在尝试使用结构样本中的 first network 构建第一个网络 这 byfn m generate没问题 但打
  • 如何将 TRC20 交易发送到某个地址

    我正在使用 tron web 查询某个地址的交易 但它不会返回发送到该地址的交易 其中传输的代币为 TRC20 这是行不通的 我想获取某个地址上的交易并获取 TRX trc10 和 trc20 交易 我做错了什么或者该怎么做 这是我的代码块
  • 在区块链中保存文件的最佳实践

    将文件保存为区块链数据的一部分的最佳实践是什么 我有非常大的文件需要保存 我们不能将这些文件保存在云存储 像 dropbox 这样的集中式解决方案 上 并使用文件哈希将它们与区块链数据链接起来吗 还是使用IPFS这样的分布式文件存储更好 或
  • 在 Hyperledger Fabric CA 中注册和注册证书有什么区别

    在 Hyperledger Fabric CA 中注册和注册证书之间到底有什么区别 我是密码学新手 我对 Fabric CA 的工作感到非常困惑 此外 通过 cryptogen 生成的证书与通过 Fabric CA 生成的证书不同 因此 根
  • 如何从秘密短语(助记符)SOLANA 生成密钥对

    我正在使用 Solana 和幻影钱包 我有一个带有公钥的钱包 我有它的由 12 个单词组成的秘密短语 当我从我使用的秘密短语生成密钥对时 const getKeyPair mnemomic gt const seed bip39 mnemo
  • Hyperledger Fabric 1.4:如何测试和验证 Fabric Node SDK 中的 registerChaincodeEvent 函数?

    我目前在添加资产时从我的链代码发出一个事件 async addRequestNode ctx sampleAssetId sampleData console info Adding Sample Asset await ctx stub
  • Fabric Javascript SDK 和 Hyperledger Composer 之间有哪些功能差异?

    除了 Composer 使原型业务网络的部署和测试变得更加容易 以及我们不需要了解 golang 来开发链代码这一事实之外 这些接口提供的功能有何差异 可能会导致人们选择其中之一另一个 这篇文章或许可以为您提供所需的答案 https blo
  • 如何向现有的 Hyperledger Fabric 网络添加新的对等点?

    当您创建超级账本结构网络时 您可以在以下位置定义组织 排序者和对等点 crypto config yaml and configtx yaml 但是 如何将新组织或新对等点添加到已设置的网络中的现有组织中 跑步cryptogen and c
  • 发送原始交易以太坊 infura nodejs npm

    我目前正在尝试实现与我的 Typescript 节点项目的以太坊节点连接 我正在连接到 Infura 节点服务器 我需要在本地签署我的交易 好吧 无论如何 我正在使用 npm 包 ethereumjs tx 签署我的交易 一切看起来都很棒
  • 从 Aave 提款会导致“错误交易已恢复”

    我正在运行一个示例 它将 Aave 代币存入 Aave 中 我正在使用提供的代码合同示例Aave v2 github https github com aave code examples protocol tree main V2 Cre
  • 区块链为何如此安全? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 昨天我读到一篇关于区块链的文章 根据它 区块链非常安全 我无法理解它如何安全 区块链如何确保数据安全 即使普通人也可以使用 saura
  • Metamask 停止注入 web3.js

    据我们所知 从2020年1月13日开始 metamask将不再注入web3 js 我们应该采取哪些方法来停止对web3的依赖 另外 我们如何使用目前正在注入 web3 js 的现有 Metamask 来测试它 window ethereum
  • Hyperledger Composer:尚未为此连接指定业务网络

    我已经在本地安装了 hyperledger 作曲家 但在本地主机上它给出错误 错误 尝试 ping 时出错 错误 没有业务网络 为此连接指定 我也无法添加模型和脚本文件 这是终端中显示的错误 error Hyperledger Compos
  • Solidity有HTTP请求功能吗?

    我正在使用以太坊制作一个项目 在这个项目中 我正在签订一份名为 A 的合同 当我向 A 发送消息时 我希望 A 发出网络请求 Solidity 是否可以使用 http 请求 方法 GET POST 以太坊区块链无法与外界交互 否则它将不再是
  • ERC20:津贴不足

    我创建了两个代币 YAY e sYAY 和一个 StakeRewards 智能合约 代码如下 SPDX License Identifier MIT pragma solidity 0 8 0 import openzeppelin con
  • Hyperledger Fabric 和 Sawtooth 有什么区别? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 Both 超级账本结构 https www hyperledger org projects fabric and 超级账本锯齿 ht

随机推荐

  • python中国古代数学问题——二鼠打洞

    任务描述 九章算术 的 盈不足篇 里有一个很有意思的老鼠打洞问题 原文是这么说的 今有垣厚十尺 两鼠对穿 大鼠日一尺 小鼠亦一尺 大鼠日自倍 小鼠日自半 问 何日相逢 各穿几何
  • 剑指 Offer 10- I. 斐波那契数列(java+python)

    写一个函数 输入 n 求斐波那契 Fibonacci 数列的第 n 项 即 F N 斐波那契数列的定义如下 F 0 0 F 1 1 F N F N 1 F N 2 其中 N gt 1 斐波那契数列由 0 和 1 开始 之后的斐波那契数就是由
  • C/C++语言 从日期格式字符串中提取年月日时分秒

    系列文章目录 文章目录 系列文章目录 前言 一 日期格式字符串 二 strftime函数 1 描述 2 声明 3 形参 4 返回值 三 strptime函数 1 形参 2 示例 3 函数封装 总结 前言 上一篇文章 C C 语言 获取系统时
  • MES管理系统如何帮助制造企业打造透明化工厂

    在制造型企业的运营中 车间现场管理至关重要 然而 面临着信息传递速度慢 跨部门协作困难 生产进度无法及时掌握 制造品质不良 设备故障不能及时处理等困境 企业需要寻求有效的解决方案 MES生产管理系统作为针对制造企业车间生产过程控制和管理的解
  • 如何在使用中文输入法的时候打出英文字符

    解决方法很简单 只需要按CTRL 就可以实现中英文字符切换 这样在按字母的时候还是会显示拼音 但输入字符时都是英文字符了 避免了频繁的shift切换
  • 【Qt学习】07:绘图与绘图设备

    OVERVIEW 绘图与绘图设备 一 QPainter 二 QPainterDevice 1 QPixmap 2 QBitmap 3 QImage 4 QPicture 绘图与绘图设备 一 QPainter Qt 的绘图系统允许使用API在
  • unsigned int用法

    注意使用unsigned int 无符号常数 正如我们所知道的 编程语句都有很多的基本数据类型 如char inf float等等 而在C和C 中还有一个特殊的类型就是无符号数 它由unsigned修饰 如unsigned int等 大家有
  • visible.sync 的作用

    我们在前端开发中经常看到 visible sync这种修饰符 很多人不知道这是干什么的 特别是在使用ElementUI的时候 里面有个弹窗el dialog组件的时候会有用到 visible sync
  • VUE项目中的全局格式化时间过滤器

    1 全局过滤器 https blog csdn net weixin 45054614 article details 105368776 全局时间格式化 对名称进行定义 提供一个function函数 originVal 为形参 Vue f
  • Chapter1 ROS概述与环境搭建

    一 序言 学习一个新的知识模块时 要先了解模块的相关概念 安装官方软件包 搭建其集成的开发环境 这些完成后 继续开始开创新领域的大门 二 ROS简介 2 1 ROS的概念 一个比喻 机器人的控制集成硬件设计 嵌入式软件设计 上层软件设计 l
  • Echart 之 timeline 时间组件 基本用法

    此处是基础版 大神请绕路 官方给的timeline组件太过于复杂 对于不熟悉的朋友 只是看逻辑就浪费很多时间 以下是基础版的示例 div style height 100 div
  • Altium AD20删除机械层MECH

    1 滥用MECH机械层导致的PCB过孔错误 前两天打样PCB时犯了个大毛病 导致送打样回来发现有多处网络对GND短路 更可气的是 这是在手贴了两块样板后才发现的 赔进去一下午时间和一堆元件 亏死 刚开始百思不得其解 因为在AD20中规则检查
  • 2021/9/29 TX POWER 蓝牙发射功率

    1 觉得挺奇葩 如果不是扩展包的话 就是TX power 设定 没法通过hci 下发 就是 在controller 设定好 也没法中途去变化 扩展包 有这个选项 能够改变 可以通过HCI 下发指令来更改 2 AD9361 设置发射功率 要注
  • (转)如何选择合适的射频模块

    要选择合适的射频模块 以下几个问题我们都需要搞搞清楚 无线设备该通多远 该用多大的功率 如何扩大通信距离 天线是否该重视 该选什么样的模块 初学者如何选择仪器 如何确定通信状况等等 无线设备该通多远 谈到这个话题 有必要想一想当年了 比如1
  • 一个panic bug的分析过程1

    一个panic bug的分析过程 一 2012 05 15 14 57 06 分类 LINUX 一个工作中遇到的bug的问题 分析一下流程 顺便把panic这种类似的bug流程做一些分析 环境 linux 3 0 arm 芯片平台 首先看出
  • 一台服务器部署多个tomcat

    参考文档 19条消息 一 linux部署多个tomcat 做测试的喵酱的博客 CSDN博客
  • 【算法】经典的八大排序算法

    点击链接 可视化排序 动态演示各个排序算法来加深理解 大致如下 一 冒泡排序 Bubble Sort 原理 冒泡排序 Bubble Sort 是一种简单的排序算法 它通过多次比较和交换相邻元素的方式 将最大 或最小 的元素逐步冒泡到数组的一
  • gradle更新snapshot的jar

    通常 gradle下载引用的jar文件的话 会缓存到本地 不会重复去下载 但是 我们引用的是snapshot的jar 这种jar文件一般是其他项目组的代码 这种jar一般都进行迭代开发 会重复更新上传到nexus代码仓库中 我们必须在每次启
  • linux-vmware workstation安装

    环境介绍 闲着没事测试下linux vmware workstation linux vmware workstation安装 1 搭建软件仓库 root gby mount dev sr0 mnt mount mnt WARNING de
  • TRON节点验证交易的时间容忍度

    这篇文章主要介绍深入分析TRON的节点配置文件中vm minTimeRatio和vm maxTimeRatio这两个标志的意义 这两个标志的表示的是节点 包括sr和fullnode 验证区块中智能合约交易的时间比例 时间容忍度 注 sr节点