TIP 规范与指南¶
TRON Improvement Proposals (TIPs) 记录了 TRON 网络从社区建议、讨论到最终采纳的整个改进过程。每个 TIP 都是一个详细的设计文档,涵盖了其基本原理和技术规范,旨在帮助社区用户全面了解其中内容。TIPs 是波场社区治理的核心单元,任何人都可以自由提出,并通过社区讨论来决定是否将其发展为通用标准或纳入网络升级。TIP 的提出者有责任在社区内鼓励开发者参与讨论,建立对该 TIP 的共识,并记录所有不同意见。
TIP 类型¶
TIPs 主要分为 Standard Track 和 Informational 两种类型:
Standard Track: 这类 TIP 描述了影响波场实现方式的变更,例如区块或交易有效性规则的修改、拟议的应用程序标准,或任何影响波场应用程序互操作性的改动。Standard TrackTIPs 还可以细分为以下几类:Core: 需要通过共识分叉(consensus fork)1来实现的 TIP,也有一些不需要共识但需要核心开发者讨论的 TIP。Networking: 针对网络协议的改进。Interface: 针对 API/RPC 规范和标准的改进。TRC: 应用层级标准,包括智能合约标准,如 TRC-20。TVM: 对波场虚拟机 (TRON Virtual Machine) 的改进。
Informational: 这类 TIP 描述了与波场设计相关的问题,或向波场社区提供一般性的指导或信息,但不提出新特性。
TIP 工作流程¶
在提交 TIP 之前,建议先创建一个 TIP issue 供社区讨论,并将该 issue 的链接添加到 TIP 标题中。TIP issue 的格式应与 TIP 内容保持一致。提交 TIP 的具体流程如下:
请您严格按照 模板 要求使用 markdown 编写 TIP,并确保在 TIP 标题中附上 TIP Issue 链接或一个讨论论坛的地址,以便社区参与者能够充分讨论该 TIP 。如果一个 TIP 涉及 java-tron 的新特性开发并存在相关的开发 PR,您需要在 TIP 和 java-tron 的 PR 中互相引用彼此的 GitHub 链接,以确保新特性的需求分析和开发代码可追溯。
对于一个新的 TIP,其首次 PR 提交后,该 TIP 将处于 Draft(草案版)状态。编辑者将审核该 TIP 以确保其符合一定的格式标准,并在合并之前为其分配一个 TIP 编号。
当您认为该 TIP 已成熟完善并准备进入下一阶段时,您应该:
- 对于 核心 TIP,您需要关注并按照 TRON Project Management Repository 仓库里的核心开发者会议流程,将您的 TIP 提交到议程中,以便在后续会议上进行讨论。如果核心开发者决定采纳您的 TIP ,TIP 编辑者会将您的 TIP 状态更新为
Accepted(已采纳)。 - 对于 其他类型的 TIP,您可以提交一个 PR,将该 TIP 的状态改为
Final (non-Core)(非核心最终版)。随后,TIP 编辑者将审核您的草案,并询问是否有反对意见。如果 TIP 编辑者认为该 TIP 尚未达成初步共识,他们可能会关闭您的 PR,并要求您继续修改草案内容。
TIP 状态¶
一个 TIP 可能会经历以下状态:
Draft: 草案版, TIP 处于快速迭代与修改阶段。Last Call: 待审核, TIP 已完成初始迭代并可供他人审核。Accepted: 当核心 TIP 的提出者已解决所需的技术变更,且该 TIP 处于Last Call状态至少 2 周后,核心开发者需决定是否将该 TIP 作为硬分叉的一部分加入客户端开发(此过程不属于 TIP 流程)。决定做出后,该 TIP 将进入Final状态。Final (non-Core): 非核心类型的 TIP 已处于Last Call状态至少 2 周,并且所有更改均已完成。Final (Core): 核心开发者决定实现该 TIP,将在接下来的版本中包含该 TIP 或已在某个发布的版本中实现了该 TIP。Active: 如果一个 TIP 可能永远不会被完成,那么它的状态可以为Active。Abandoned: 一个 TIP 已不再被其提交者跟踪维护,或者它可能不再是技术上的首选方案。Rejected: 破坏功能的 TIP,或被核心开发者拒绝的不会实现的CoreTIP。Superseded: 之前是Final状态,但现在不再被认为是最优的方案。Deferred: 当前不被采纳,但将来可能会被采纳的 TIP。
TIP 的组成¶
TIP 由标题序言和主体内容两部分组成。
TIP 标题¶
TIP 标题包含 TIP 编号、简短的描述性标题(限制为最多 44 个字符)、作者详细信息、讨论链接、TIP 状态、TIP 类型、创建时间等。具体格式请参考:
tip: <to be assigned>
title: <TIP title>
author: <a list of the author's or authors' name(s) and/or username(s), or name(s) and email(s), e.g. (use with the parentheses or triangular brackets): FirstName LastName (@GitHubUsername), FirstName LastName <foo@bar.com>, FirstName (@GitHubUsername) and GitHubUsername (@GitHubUsername)>
discussions-to: <URL>
status: <Draft | Last Call | Accepted | Final | Deferred>
type: <Standards Track (Core, Networking, Interface, TRC, VM) | Informational>
category (*only required for Standard Track): <Core | Networking | Interface | TRC | VM>
created: <date created on, in ISO 8601 (yyyy-mm-dd) format>
requires (*optional): <TIP number(s)>
replaces (*optional): <TIP number(s)>
TIP 主体内容¶
TIP 主体应包括以下部分:
Simple Summary: 对 TIP 的简短描述。Abstract: 摘要,是对Specification部分的一个简洁、易理解的技术总结。读者可以通过只阅读Abstract来了解该 TIP 的主要功能。Motivation(可选):动机是 TIP 的一个重要部分。在Motivation中应清楚地解释为什么现有协议规范不足以处理该 TIP 所解决的问题。如果动机显而易见,此部分可以省略。Specification: 技术规范,详细描述新特性的语法和语义,应足够详细。Rationale: 基本原理,描述设计的动机以及做出如此设计决策的原因。它用于对Specification进行补充。同时,Rationale还应描述其他备选设计方案和相关工作,并包括对 TIP 讨论过程中提出的重要反对意见或关注事项的说明。Backwards Compatibility(可选):如果 TIP 的改动会引入向后不兼容的问题,那么 TIP 中应包含Backwards Compatibility,描述这些不兼容及其影响。TIP 必须说明打算如何处理这些不兼容。Test Cases(可选):对于影响共识的 TIP 来说,必须包含实现代码相关的测试用例。非核心 TIP 可省略此部分。Implementation: 此部分内容可以在 TIP 被赋予Accepted状态之前不填写,但必须在 TIP 被赋予Final状态之前完成。当涉及到许多 API 细节的讨论时,“大体的共识和可运行的代码”是必要的。
链接外部资源¶
由于外部资源可能随时变化(例如链接失效、内容移动或修改),因此,TIP 中不应直接包含外部资源的链接。
链接其他 TIP¶
TIP 中可以引用其他 TIP。对其他 TIP 的引用应遵循 TIP-N 格式,其中 N 是所引用的 TIP 编号,并需附上引用链接。链接必须是相对路径,以确保链接在 TIP GitHub 仓库以及各个 Fork 中均有效。例如,您可以使用 [TIP-1](/tips/TIP-1) 对 TIP-1 进行引用。
辅助文件¶
图像、图表和其他辅助文件应存放在 TIP 仓库的 assets 文件夹的子目录中,例如:assets/TIP-N/ (N 为 TIP 编号)。在 TIP 中链接图片时应使用相对路径,如:../assets/TIP-1/image.png。
-
共识分叉 (consensus fork):指区块链网络中的节点对协议规则的更改达成不同意见,导致区块链历史分化的现象。 ↩