├── Archive
├── Democritus
└── mainnet.md
├── LICENSE
├── Mainnet Upgrade Archive
├── GreatVoyage-v4.7.4(Bias)
│ └── mainnet.md
└── GreatVoyage-v4.8.0(Kant)
│ └── mainnet.md
├── README.md
├── SR Meetings
├── SR Meeting 02.md
├── SR Meeting 03.md
├── SR Meeting 04.md
├── SR Meeting 05.md
└── SR Meeting 06.md
└── TRON Core Devs Meetings
├── Meeting 01.md
├── Meeting 02.md
├── Meeting 03.md
├── Meeting 04.md
├── Meeting 05.md
├── Meeting 06.md
├── Meeting 07.md
├── Meeting 08.md
├── Meeting 09.md
├── Meeting 10.md
├── Meeting 11.md
├── Meeting 12.md
├── Meeting 13.md
├── Meeting 14.md
├── Meeting 15.md
├── Meeting 16.md
├── Meeting 17.md
├── Meeting 18.md
├── Meeting 19.md
├── Meeting 20.md
├── Meeting 21.md
├── Meeting 22.md
├── Meeting 23.md
├── Meeting 24.md
├── Meeting 25.md
├── Meeting 26.md
├── Meeting 27.md
├── Meeting 28.md
├── Meeting 29.md
├── Meeting 30.md
├── Meeting 31.md
├── Meeting 32.md
├── Meeting 33.md
├── Meeting 34.md
├── Meeting 35.md
├── Meeting 36.md
├── Meeting 37.md
├── Meeting 38.md
├── Meeting 39.md
├── Meeting Template.md
├── README.md
├── Wallet Devs Meeting 01.md
└── Wallet Devs Meeting 02.md
/Archive:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/Democritus/mainnet.md:
--------------------------------------------------------------------------------
1 | # Mainnet Tasks
2 |
3 | This document outlines the mainnet tasks that need to be completed to make Democritus ready for Mainnet launch. **Last updated June 4, 2025.**
4 |
5 | Note: The target version number of Democritus is v4.8.1 .
6 |
7 |
8 | ## Table of contents
9 |
10 | - [The main content of the release](#Release-included-in-the-Network-Upgrade.)
11 | - [Implementation Progresss](#Implementation-Progresss)
12 | - [Network Status](#Network-Status)
13 |
14 |
15 |
16 | ## The main content of the release
17 |
18 | This section summarizes all the details of Democritus's releases. and all the content will be disccussed in the core devs meeting.
19 |
20 | Note: The following tags are used to indicate the status of each item.
21 | - [x] Indicates that the tiem has been developed and is in the final state.
22 | - [ ] Indicates that the implementation work is ongoing.
23 |
24 | #### New Features
25 |
26 | TBD
27 |
28 | ## Implementation Progresss
29 |
30 | Implementation status of Included TIPs in java-tron.
31 |
32 | TIP | | | | | | |
33 | |----------------|-----------------------------------------------------------------------|-----------------------------------------------------------------------|-----------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------|--------------|--------|
34 | | **Java-tron** | | | | | |
35 |
36 | ### Readiness Checklist
37 |
38 | **List of outstanding items before deployment.**
39 |
40 |
41 |
42 | - Deploy Clients
43 | - [ ] Java-tron v4.8.1
44 |
45 |
46 | ## Network Status
47 |
48 | ### Network Upgrade Plan
49 |
50 | Estimated Nile upgrade time: (TBD)
51 |
52 | - [ ] Notify the community to upgrade (TBD)
53 | - [ ] Follow up to remind the community to complete the upgrade (TBD)
54 |
55 | Estimated mainnet upgrade time: (TBD)
56 |
57 | - [ ] Notify the community, SRs, CEX, Wallets, DEX, etc.to upgrade (TBD)
58 | - [ ] Follow up the upgrade status and progress closely (Contact project team every week, record the upgrade progress)
59 | - [ ] Ensure the SRs, CEX, Wallets to complete (TBD)
60 |
61 | Estimated Shasta upgrade time: (TBD)
62 |
63 | - [ ] Notify the community to upgrade (TBD)
64 |
65 | ### Proposals Plan(Fork Plan)
66 |
67 | TBD
68 |
69 | ### Network Upgrade and Fork Status
70 |
71 | | Network | Github | Kant Release Date | Latest Status | Fork |
72 | |---------|------------|-----|-----|-----|
73 | | [Nile](https://nileex.io/) | https://github.com/tron-nile-testnet/nile-testnet | | | |
74 | | [Mainnet](https://tron.network/) |https://github.com/tronprotocol/java-tron | | | |
75 | | [Shasta](https://www.trongrid.io/shasta) | https://github.com/tronprotocol/java-tron | | | |
76 |
77 | Nile Upgrade Instruction: https://nileex.io/run/getRunPage
78 |
79 | Mainnet/Shasta Upgrade Instruction: https://tronprotocol.github.io/documentation-en/releases/upgrade-instruction
80 |
81 |
82 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/Mainnet Upgrade Archive/GreatVoyage-v4.7.4(Bias)/mainnet.md:
--------------------------------------------------------------------------------
1 | ## Bias Network Upgrade Specification
2 |
3 | ### Included TIPs
4 | Changes included in the Network Upgrade.
5 |
6 | * [TIP-621: Add code version column to HelloMessage](https://github.com/tronprotocol/tips/issues/621)
7 | * [TIP-635: Optimize Reward Withdrawal To Improve TPS](https://github.com/tronprotocol/tips/issues/635)
8 | * [Adding gRPC reflection service to support interactive command line tools such as `gRPCurl`.](https://github.com/tronprotocol/java-tron/issues/5391)
9 | * [Module dependency refactor: unified the duplicate dependencies to common module.](https://github.com/tronprotocol/java-tron/issues/5561)
10 | * [Removing Lite FullNode Tool from frameworkModule.](https://github.com/tronprotocol/java-tron/issues/5489)
11 | * [Stop broadcasting transactions when the block cannot be solidified](https://github.com/tronprotocol/java-tron/issues/5562)
12 |
13 | ### Upgrade Schedule
14 |
15 | | Network | Date |
16 | |---------|------------|
17 | | Nile | 03/14/2024 |
18 | | Shasta | 03/28/2024 |
19 | | Mainnet | 03/25/2024|
20 |
21 | ### Implementation Progresss
22 |
23 | Implementation status of Included TIPs in java-tron.
24 |
25 | TIP | [TIP-621](https://github.com/tronprotocol/tips/issues/621) | [TIP-635](https://github.com/tronprotocol/tips/issues/635) | Adding gRPC reflection service to support interactive command line tools such as `gRPCurl` | Module dependency refactor: unified the duplicate dependencies to common module | Removing Lite FullNode Tool from frameworkModule | Stop broadcasting transactions when the block cannot be solidified |
26 | |----------------|-----------------------------------------------------------------------|-----------------------------------------------------------------------|-----------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------|--------------|--------|
27 | | **Java-tron** | [Merged](https://github.com/tronprotocol/java-tron/pull/5584) | [Merged](https://github.com/tronprotocol/java-tron/pull/5406) + [Merged](https://github.com/tronprotocol/java-tron/pull/5654) + [Merged](https://github.com/tronprotocol/java-tron/pull/5683) | [Merged](https://github.com/tronprotocol/java-tron/pull/5643)+[Merged](https://github.com/tronprotocol/java-tron/pull/5751) | [Merged](https://github.com/tronprotocol/java-tron/pull/5625)+[Merged](https://github.com/tronprotocol/java-tron/pull/5689) | [Merged](https://github.com/tronprotocol/java-tron/pull/5650) | [Merged](https://github.com/tronprotocol/java-tron/pull/5643)+[Merged](https://github.com/tronprotocol/java-tron/pull/5751)
28 |
29 | ### Readiness Checklist
30 |
31 | **List of outstanding items before deployment.**
32 |
33 |
34 |
35 | - Deploy Clients
36 | - [x] Java-tron v4.7.4
37 | - SDK & Tools
38 | - [x] Tronweb
39 | - [x] Trident
40 | - [x] Tron IDE
41 | - [x] TronBox
42 | - [x] wallet-cli
43 | - [x] TronScan Nile
44 |
45 |
--------------------------------------------------------------------------------
/Mainnet Upgrade Archive/GreatVoyage-v4.8.0(Kant)/mainnet.md:
--------------------------------------------------------------------------------
1 | # Mainnet Tasks
2 |
3 | This document outlines the mainnet tasks that need to be completed to make Kant ready for Mainnet launch. **Last updated Jun 4, 2025.**
4 |
5 | Note: The target version number of Kant is v4.8.0 .
6 |
7 |
8 | ## Table of contents
9 |
10 | - [The main content of the release](#Release-included-in-the-Network-Upgrade.)
11 | - [Implementation Progresss](#Implementation-Progresss)
12 | - [Network Status](#Network-Status)
13 |
14 |
15 |
16 | ## The main content of the release
17 |
18 | This section summarizes all the details of Kant's releases. and all the content was disccussed in the [No.35 core devs meeting](https://github.com/tronprotocol/pm/issues/121), check detail meeting notes [here](https://github.com/tronprotocol/pm/blob/master/TRON%20Core%20Devs%20Meetings/Meeting%2035.md).
19 |
20 | Note: The following tags are used to indicate the status of each item.
21 | - [x] Indicates that the item has been developed and is in the final state.
22 | - [ ] Indicates that the implementation work is ongoing.
23 |
24 | #### New Features
25 |
26 | - [x] **Ethereum Cancun Upgrade Support**
27 | - [x] [TIP-650: Implement EIP-1153 Transient Storage Instructions](https://github.com/tronprotocol/tips/blob/master/tip-650.md ), see [PR#6185](https://github.com/tronprotocol/java-tron/pull/6185), [PR#6195](https://github.com/tronprotocol/java-tron/pull/6195), [PR#6214](https://github.com/tronprotocol/java-tron/pull/6214)
28 | - [x] [TIP-651: Implement EIP-5656 MCOPY - Memory Copying Instruction](https://github.com/tronprotocol/tips/blob/master/tip-651.md), see [PR#6185](https://github.com/tronprotocol/java-tron/pull/6185), [PR#6194](https://github.com/tronprotocol/java-tron/pull/6194)
29 | - [x] [TIP-745: Introduce EIP-4844 Instruction and EIP-7516 Instruction](https://github.com/tronprotocol/tips/blob/master/tip-745.md ), see [PR#6232](https://github.com/tronprotocol/java-tron/pull/6232), [PR#6247](https://github.com/tronprotocol/java-tron/pull/6247), [PR#6270](https://github.com/tronprotocol/java-tron/pull/6270), [PR#6283](https://github.com/tronprotocol/java-tron/pull/6283)
30 |
31 | #### Core
32 | - [x] **Enhanced Consensus Layer Verification**
33 | - [x] [TIP-694: Enhance Verification of Transaction Limitations at Consensus Layer](https://github.com/tronprotocol/tips/blob/master/tip-694.md ), see [PR#6172](https://github.com/tronprotocol/java-tron/pull/6172), [PR#6221](https://github.com/tronprotocol/java-tron/pull/6221)
34 | - [x] Enhanced Validation of Block Production during Maintenance Periods, see [PR#6187](https://github.com/tronprotocol/java-tron/pull/6187)
35 | - [x] Enhanced Block Header Validation, see [PR#6186](https://github.com/tronprotocol/java-tron/pull/6186 )
36 | - [x] Optimized Super Representative Election Ranking Algorithm, see [PR#6173](https://github.com/tronprotocol/java-tron/pull/6173 )
37 |
38 | #### Net
39 | - [x] **Optimized Block Synchronization Logic**
40 | - [x] Optimized P2P Protocol: Discarding Solidified Block Lists to Conserve Network Bandwidth, see [PR#6184](https://github.com/tronprotocol/java-tron/pull/6184 )
41 | - [x] Faster Block Synchronization Task Scheduling for Enhanced Efficiency, see [PR#6183](https://github.com/tronprotocol/java-tron/pull/6183)
42 |
43 | - [x] **Enhanced Transaction Validity Verification by Early Discarding Zero-Contract Transactions**, see [PR#6181](https://github.com/tronprotocol/java-tron/pull/6181)
44 |
45 | #### Other Changes
46 | - [x] **Enhanced Event Service Framework (V2.0) Provision**, see [PR#6192](https://github.com/tronprotocol/java-tron/issues/6192), [PR#6206](https://github.com/tronprotocol/java-tron/issues/6206), [PR#6223](https://github.com/tronprotocol/java-tron/issues/6223), [PR#6227](https://github.com/tronprotocol/java-tron/issues/6227), [PR#6234](https://github.com/tronprotocol/java-tron/issues/6234), [PR#6245](https://github.com/tronprotocol/java-tron/issues/6245), [PR#6256](https://github.com/tronprotocol/java-tron/issues/6256)
47 | - [x] [TIP-697: Cross-Platform Consistent java.strictMath Replacement for java.math](https://github.com/tronprotocol/tips/blob/master/tip-697.md), see [PR#6182](https://github.com/tronprotocol/java-tron/pull/6182), [PR#6210](https://github.com/tronprotocol/java-tron/pull/6210)
48 | - [x] **Optimized Node Exit and Startup Logic**
49 | - [x] Optimized Node Exit Logic, see [PR#6170](https://github.com/tronprotocol/java-tron/pull/6170), [PR#6177](https://github.com/tronprotocol/java-tron/pull/6177), [PR#6205](https://github.com/tronprotocol/java-tron/pull/6205)
50 | - [x] Optimized Node Startup Logic, see [PR#5857](https://github.com/tronprotocol/java-tron/pull/5857), [PR#6228](https://github.com/tronprotocol/java-tron/pull/6228), [PR#6233](https://github.com/tronprotocol/java-tron/pull/6233)
51 | - [x] **Dependency Library Security Upgrade**, see [PR#6180](https://github.com/tronprotocol/java-tron/pull/6180), [PR#6207](https://github.com/tronprotocol/java-tron/pull/6207), [PR#6257](https://github.com/tronprotocol/java-tron/pull/6257)
52 | - [x] **Gradle 7.6.4 Upgrade with Dependency Integrity Verification**, see [PR#5869](https://github.com/tronprotocol/java-tron/pull/5869), [PR#5903](https://github.com/tronprotocol/java-tron/pull/5903), [PR#6229](https://github.com/tronprotocol/java-tron/pull/6229)
53 | - [x] **Null Pointer Exception Fix During Startup**, see [PR#6216](https://github.com/tronprotocol/java-tron/pull/6216)
54 | - [x] **Internal Transaction Details Logging for CANCELALLUNFREEZEV2 Opcode**,see [PR#6191](https://github.com/tronprotocol/java-tron/pull/6191)
55 |
56 | #### API
57 | - [x] **Enhanced Compatibility for Ethereum JSON-RPC Interface**
58 | - [x] Support for Querying Solidified Data via finalized Block Parameter in JSON-RPC API, see [PR#6007](https://github.com/tronprotocol/java-tron/pull/6007), [PR#6238](https://github.com/tronprotocol/java-tron/pull/6238), [PR#6239](https://github.com/tronprotocol/java-tron/pull/6239)
59 | - [x] New Limits on Block Range and “Topics” Quantity for JSON-RPC Log Queries
60 | - [x] Optimized eth_getLogs to Resolve Data Retrieval Issue in Rare Hash Collisions, see [PR#6203](https://github.com/tronprotocol/java-tron/pull/6203)
61 | - [x] **Non-Null Payment Address Validation in Shielded Transaction Creation API**, see [PR#6174](https://github.com/tronprotocol/java-tron/pull/6174)
62 |
63 | ## Implementation Progresss
64 |
65 | Implementation status of Included TIPs in java-tron.
66 |
67 | TIP | [TIP-650](https://github.com/tronprotocol/tips/blob/master/tip-650.md) | [TIP-651](https://github.com/tronprotocol/tips/blob/master/tip-651.md) | [TIP-694](https://github.com/tronprotocol/tips/blob/master/tip-694.md) | [TIP-697](https://github.com/tronprotocol/tips/blob/master/tip-697.md) | [TIP-745](https://github.com/tronprotocol/tips/blob/master/tip-745.md) | Enhanced Event Service Framework (V2.0) Provision |
68 | |----------------|-----------------------------------------------------------------------|-----------------------------------------------------------------------|-----------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------|--------------|--------|
69 | | **Java-tron** | [Merged](https://github.com/tronprotocol/java-tron/pull/6185) + [Merged](https://github.com/tronprotocol/java-tron/pull/6195) + [Merged](https://github.com/tronprotocol/java-tron/pull/6214) | [Merged](https://github.com/tronprotocol/java-tron/pull/6185) + [Merged](https://github.com/tronprotocol/java-tron/pull/6194) | [Merged](https://github.com/tronprotocol/java-tron/pull/6172) + [Merged](https://github.com/tronprotocol/java-tron/pull/6221) | [Merged](https://github.com/tronprotocol/java-tron/pull/6182) + [Merged](https://github.com/tronprotocol/java-tron/pull/6210) | [Merged](https://github.com/tronprotocol/java-tron/pull/6232) + [Merged](https://github.com/tronprotocol/java-tron/pull/6247) + [Merged](https://github.com/tronprotocol/java-tron/pull/6270) + [Merged](https://github.com/tronprotocol/java-tron/pull/6283) | [Merged](https://github.com/tronprotocol/java-tron/pull/6256) + [Merged](https://github.com/tronprotocol/java-tron/pull/6245) + [Merged](https://github.com/tronprotocol/java-tron/pull/6234) + [Merged](https://github.com/tronprotocol/java-tron/pull/6227) + [Merged](https://github.com/tronprotocol/java-tron/pull/6223) + [Merged](https://github.com/tronprotocol/java-tron/pull/6206) + [Merged](https://github.com/tronprotocol/java-tron/pull/6192)
70 |
71 | ### Readiness Checklist
72 |
73 | **List of outstanding items before deployment.**
74 |
75 |
76 |
77 | - Deploy Clients
78 | - [x] Java-tron v4.8.0
79 |
80 |
81 | ## Network Status
82 |
83 | ### Network Upgrade Plan
84 |
85 | Estimated Nile upgrade time: about 15 days (2025.03.14 ~ 2025.03.31)
86 |
87 | - [x] Notify the community to upgrade (2025.03.15)
88 | - [x] Follow up to remind the community to complete the upgrade (2025.03.17)
89 |
90 | Estimated mainnet upgrade time: about 30 days (2025.04.29 ~ 2025.05.31)
91 |
92 | - [x] Notify the community, SRs, CEX, Wallets, DEX, etc.to upgrade (2025.05.01 ~ 2025.05.02)
93 | - [x] Follow up the upgrade status and progress closely (Contact project team every week, record the upgrade progress)
94 | - [x] Ensure the SRs, CEX, Wallets to complete before 2025.05.31 (Give feedbacks in time)
95 |
96 | Estimated Shasta upgrade time: about 7 days (2025.06.03 ~ 2025.06.10)
97 |
98 | - [ ] Notify the community to upgrade (2025.06.03 ~ 2025.06.10)
99 |
100 | ### Proposals Plan(Fork Plan)
101 |
102 | The Kant version has introduced 3 network parameters:
103 | - No.83 network parameter to enable the `TLOAD` `TSTORE` and `MCOPY` instructions, aligning with the Ethereum Cancun upgrade ([TIP-650](https://github.com/tronprotocol/tips/blob/master/tip-650.md ), and [TIP-651](https://github.com/tronprotocol/tips/blob/master/tip-651.md)).
104 | - No.88 network parameter to enable the verification of transaction limitations at consensus layer ([TIP-694](https://github.com/tronprotocol/tips/blob/master/tip-694.md )).
105 | - No.89 network parameter to enable the introduction of `BLOBHASH` and `BLOBBASEFEE` introductions to support the Ethereum Cancun upgrade ([TIP-745](https://github.com/tronprotocol/tips/blob/master/tip-745.md )).
106 |
107 | A draft plan is listed here, and it will be updated after the mainnet upgrade status is reviewed around 2025.05.31:
108 | - [x] Start proposals discussing on GitHub (around 2025.06.01 ~ 06.05)
109 | - [ ] Invite community devs and projects participate (2025.06.07 ~ 06.28)
110 | - [ ] Community and SRs review and decide the voting date according to the progress (around 2025.06.14 ~ 06.21)
111 |
112 | ### Network Upgrade and Fork Status
113 |
114 | | Network | Github | Kant Release Date | Latest Status | Fork |
115 | |---------|------------|-----|-----|-----|
116 | | [Nile](https://nileex.io/) | https://github.com/tron-nile-testnet/nile-testnet | 03/17/2025 | GreatVoyage-v4.8.0.2 (Kant) | Forked (Enabled No.83, No.88, No.89 Network Parameters)|
117 | | [Mainnet](https://tron.network/) |https://github.com/tronprotocol/java-tron | 04/29/2025| GreatVoyage-v4.7.7(Epicurus) | - |
118 | | [Shasta](https://www.trongrid.io/shasta) | https://github.com/tronprotocol/java-tron | 04/29/2025 | GreatVoyage-v4.7.7(Epicurus) | - |
119 |
120 | Nile Upgrade Instruction: https://nileex.io/run/getRunPage
121 |
122 | Mainnet/Shasta Upgrade Instruction: https://tronprotocol.github.io/documentation-en/releases/upgrade-instruction
123 |
124 |
125 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # TRON Project Management Repository
2 |
3 | This repository is used for project management for various discussions and initiatives affecting the TRON protocol.
4 | This repository is for:
5 |
6 | - [TRON Core Devs Meetings](https://github.com/tronprotocol/pm/tree/master/TRON%20Core%20Devs%20Meetings)
7 | - [SR Meetings](https://github.com/tronprotocol/pm/tree/master/SR%20Meetings)
8 | - [Mainnet Upgrade](https://github.com/tronprotocol/pm/tree/master/Mainnet%20Upgrade%20Archive) Specifications
9 |
10 | Agendas for these meetings can be found on the [Issues](https://github.com/tronprotocol/pm/issues) tab.
11 |
12 | ## TRON Core Devs Meetings and SR Meetings Overview
13 |
14 | ### Purpose
15 | The TRON core devs meeting is a technical gathering for developers shaping the TRON protocol. They share project updates, discuss [TIPs](https://github.com/tronprotocol/tips) for protocol improvements, and collaborate. Conversely, the SR meeting centers on community governance and ecosystem health. Elected SRs deliberate on boosting community engagement, crafting growth policies, and addressing issues threatening community well-being. This distinction ensures both technical progress and community-led development of the TRON network receive strategic attention.
16 |
17 | ### Agenda Items
18 | Agendas are posted to https://github.com/tronprotocol/pm/issues. Anyone is welcome to add an item to the agenda as long as it follows these guidelines:
19 |
20 | - The topic is technical in nature
21 | - The topic involves the TRON protocol
22 |
23 | Please note:
24 |
25 | - Dapps are generally not allowed as topics
26 | - The topic should not be philosophical
27 |
28 | The core devs meetings are not meant to decide philosophical contentious issues that should be decided by the community.
29 |
30 | ### Who Can Attend
31 | These meetings are held by TRON core devs. The following groups are invited to attend the meetings:
32 |
33 | - TRON core developers
34 | - client developers
35 | - core TRON researchers
36 |
37 | Sometimes, a non-core java-tron developer with particular expertise on a topic is invited on to discuss a specific agenda item. If you feel you would contribute to the meetings please contact coredevs@tron.network.
38 |
39 | ### Previous Meetings
40 |
41 |
42 | TRON Core Devs Meetings
43 |
44 | № | Date | Adgenda |Notes | Recording |
45 | --- | -------------------------------- |:--------------:|:--------------:|:--------------------:|
46 | 1 | Wed, 15 Jan, 2020 07:00 UTC | [agenda](https://github.com/tronprotocol/pm/issues/1) | [notes](https://github.com/tronprotocol/pm/blob/master/TRON%20Core%20Devs%20Meetings/Meeting%2001.md) | [video](https://www.youtube.com/watch?v=-kHiycFhnf8) |
47 | 2 | Mon, 17 Feb, 2020 07:00 UTC | [agenda](https://github.com/tronprotocol/pm/issues/3) | [notes](https://github.com/tronprotocol/pm/blob/master/TRON%20Core%20Devs%20Meetings/Meeting%2002.md) | [video](https://www.youtube.com/watch?v=ms3D8zL9_Dk) |
48 | 3 | Mon, 02 Mar, 2020 07:00 UTC | [agenda](https://github.com/tronprotocol/pm/issues/4) | [notes](https://github.com/tronprotocol/pm/blob/master/TRON%20Core%20Devs%20Meetings/Meeting%2003.md) | [video](https://www.youtube.com/watch?v=aegtFI4D_c0) |
49 | 4 | Mon, 16 Mar, 2020 09:00 UTC | [agenda](https://github.com/tronprotocol/pm/issues/5) | [notes](https://github.com/tronprotocol/pm/blob/master/TRON%20Core%20Devs%20Meetings/Meeting%2004.md) | [video](https://www.youtube.com/watch?v=hf_kpDRteB4) |
50 | 5 | Mon, 13 Apr, 2020 09:00 UTC | [agenda](https://github.com/tronprotocol/pm/issues/6) | [notes](https://github.com/tronprotocol/pm/blob/master/TRON%20Core%20Devs%20Meetings/Meeting%2005.md) | [video](https://www.youtube.com/watch?v=GAi-I2MlGgM&t=11s)
51 | 6 | Thur, 30 Apr, 2020 09:00 UTC | [agenda](https://github.com/tronprotocol/pm/issues/7) | [notes](https://github.com/tronprotocol/pm/blob/master/TRON%20Core%20Devs%20Meetings/Meeting%2006.md) | [video](https://www.youtube.com/watch?v=xXY7kf4tV-Q&feature=youtu.be)
52 | 7 | Tues, 16 Jun, 2020 09:00 UTC | [agenda](https://github.com/tronprotocol/pm/issues/8) | [notes](https://github.com/tronprotocol/pm/blob/master/TRON%20Core%20Devs%20Meetings/Meeting%2007.md) | [video](https://www.youtube.com/watch?v=fY6sG285ee4)
53 | 8 | Tues, 11 Aug, 2020 09:00 UTC | [agenda](https://github.com/tronprotocol/pm/issues/11) | [notes](https://github.com/tronprotocol/pm/blob/master/TRON%20Core%20Devs%20Meetings/Meeting%2008.md) | [video](https://youtu.be/EX63qtcvNAc)
54 | 9 | Thu, 24 Sep, 2020 09:00 UTC | [agenda](https://github.com/tronprotocol/pm/issues/14) | [notes](https://github.com/tronprotocol/pm/blob/master/TRON%20Core%20Devs%20Meetings/Meeting%2009.md) | [video](https://youtu.be/jq_tvSXnXss)
55 | 10 | Wed, 20 Jan. 2021 09:00 UTC | [agenda](https://github.com/tronprotocol/pm/issues/15) | [notes](https://github.com/tronprotocol/pm/blob/master/SR%20Meetings/SR%20Meeting%2002.md) | NA
56 | 11 | Thu, 20 May 2021 09:00 UTC | [agenda](https://github.com/tronprotocol/pm/issues/17) | [notes](https://github.com/tronprotocol/pm/blob/master/SR%20Meetings/SR%20Meeting%2003.md) | NA
57 | 12 | Thu, 11 Aug. 2021 09:00 UTC | [agenda](https://github.com/tronprotocol/pm/issues/19) | [notes](https://github.com/tronprotocol/pm/blob/master/SR%20Meetings/SR%20Meeting%2004.md) | NA
58 | 13 | Wed, 26 Oct. 2022 09:00 UTC | [agenda](https://github.com/tronprotocol/pm/issues/30) | [notes](https://github.com/tronprotocol/pm/blob/master/SR%20Meetings/SR%20Meeting%2005.md) | NA
59 | 14 | Wed, 08 Feb. 2023 09:00 UTC | [agenda](https://github.com/tronprotocol/pm/issues/37) | [notes](https://github.com/tronprotocol/pm/blob/master/SR%20Meetings/SR%20Meeting%2006.md) | NA
60 | 15 | Wed, 07 Jun. 2023 09:00 UTC | [agenda](https://github.com/tronprotocol/pm/issues/50) | [notes](https://github.com/tronprotocol/pm/blob/master/TRON%20Core%20Devs%20Meetings/Meeting%2010.md) | NA
61 | 16 | Wed, 19 Jul. 2023 09:00 UTC | [agenda](https://github.com/tronprotocol/pm/issues/60) | [notes](https://github.com/tronprotocol/pm/blob/master/TRON%20Core%20Devs%20Meetings/Wallet%20Devs%20Meeting%2001.md) | NA
62 | 17 | Fri, 02 Feb. 2024 07:00 UTC | [agenda](https://github.com/tronprotocol/pm/issues/72) | [notes](https://github.com/tronprotocol/pm/blob/master/TRON%20Core%20Devs%20Meetings/Meeting%2011.md) | NA
63 | 18 | Fri, 08 Mar. 2024 07:00 UTC | [agenda](https://github.com/tronprotocol/pm/issues/75) | [notes](https://github.com/tronprotocol/pm/blob/master/TRON%20Core%20Devs%20Meetings/Meeting%2012.md) | NA
64 | 19 | Thu, 21 Mar. 2024 07:00 UTC | [agenda](https://github.com/tronprotocol/pm/issues/78) | [notes](https://github.com/tronprotocol/pm/blob/master/TRON%20Core%20Devs%20Meetings/Meeting%2013.md) | NA
65 | 20 | Thu, 11 Apr. 2024 07:00 UTC | [agenda](https://github.com/tronprotocol/pm/issues/82) | [notes](https://github.com/tronprotocol/pm/blob/master/TRON%20Core%20Devs%20Meetings/Meeting%2014.md) | NA
66 | 21 | Thu, 25 Apr. 2024 07:00 UTC | [agenda](https://github.com/tronprotocol/pm/issues/86) | [notes](https://github.com/tronprotocol/pm/blob/master/TRON%20Core%20Devs%20Meetings/Meeting%2015.md) | NA
67 | 22 | Thu, 16 May 2024 07:00 UTC | [agenda](https://github.com/tronprotocol/pm/issues/91) | [notes](https://github.com/tronprotocol/pm/blob/master/TRON%20Core%20Devs%20Meetings/Meeting%2016.md) | NA
68 | 23 | Thu, 30 May 2024 07:00 UTC | [agenda](https://github.com/tronprotocol/pm/issues/93) | [notes](https://github.com/tronprotocol/pm/blob/master/TRON%20Core%20Devs%20Meetings/Meeting%2017.md) | NA
69 | 24 | Thu, 13 Jun. 2024 07:00 UTC | [agenda](https://github.com/tronprotocol/pm/issues/94) | [notes](https://github.com/tronprotocol/pm/blob/master/TRON%20Core%20Devs%20Meetings/Meeting%2018.md) | NA
70 | 25 | Thu, 04 Jul. 2024 07:00 UTC | [agenda](https://github.com/tronprotocol/pm/issues/95) | [notes](https://github.com/tronprotocol/pm/blob/master/TRON%20Core%20Devs%20Meetings/Meeting%2019.md) | NA
71 | 26 | Thu, 18 Jul. 2024 07:00 UTC | [agenda](https://github.com/tronprotocol/pm/issues/96) | [notes](https://github.com/tronprotocol/pm/blob/master/TRON%20Core%20Devs%20Meetings/Meeting%2020.md) | NA
72 | 27 | Thu, 08 Aug. 2024 07:00 UTC | [agenda](https://github.com/tronprotocol/pm/issues/97) | [notes](https://github.com/tronprotocol/pm/blob/master/TRON%20Core%20Devs%20Meetings/Meeting%2021.md) | NA
73 | 28 | Thu, 22 Aug. 2024 07:00 UTC | [agenda](https://github.com/tronprotocol/pm/issues/99) | [notes](https://github.com/tronprotocol/pm/blob/master/TRON%20Core%20Devs%20Meetings/Meeting%2022.md) | NA
74 | 29 | Thu, 05 Sep. 2024 07:00 UTC | [agenda](https://github.com/tronprotocol/pm/issues/100) | [notes](https://github.com/tronprotocol/pm/blob/master/TRON%20Core%20Devs%20Meetings/Meeting%2023.md) | NA
75 | 30 | Thu, 26 Sep. 2024 07:00 UTC | [agenda](https://github.com/tronprotocol/pm/issues/101) | [notes](https://github.com/tronprotocol/pm/blob/master/TRON%20Core%20Devs%20Meetings/Meeting%2024.md) | NA
76 | 31 | Thu, 24 Oct. 2024 07:00 UTC | [agenda](https://github.com/tronprotocol/pm/issues/102) | [notes](https://github.com/tronprotocol/pm/blob/master/TRON%20Core%20Devs%20Meetings/Meeting%2025.md) | NA
77 | 32 | Thu, 07 Nov. 2024 06:00 UTC | [agenda](https://github.com/tronprotocol/pm/issues/104) | [notes](https://github.com/tronprotocol/pm/blob/master/TRON%20Core%20Devs%20Meetings/Meeting%2026.md) | NA
78 | 33 | Thu, 21 Nov. 2024 06:00 UTC | [agenda](https://github.com/tronprotocol/pm/issues/105) | [notes](https://github.com/tronprotocol/pm/blob/master/TRON%20Core%20Devs%20Meetings/Meeting%2027.md) | NA
79 | 34 | Thu, 05 Dec. 2024 06:00 UTC | [agenda](https://github.com/tronprotocol/pm/issues/106) | [notes](https://github.com/tronprotocol/pm/blob/master/TRON%20Core%20Devs%20Meetings/Meeting%2028.md) | NA
80 | 35 | Thu, 19 Dec. 2024 06:00 UTC | [agenda](https://github.com/tronprotocol/pm/issues/107) | [notes](https://github.com/tronprotocol/pm/blob/master/TRON%20Core%20Devs%20Meetings/Meeting%2029.md) | NA
81 | 36 | Thu, 09 Jan. 2025 06:00 UTC | [agenda](https://github.com/tronprotocol/pm/issues/108) | [notes](https://github.com/tronprotocol/pm/blob/master/TRON%20Core%20Devs%20Meetings/Meeting%2030.md) | NA
82 | 37 | Wed, 26 Feb. 2025 06:00 UTC | [agenda](https://github.com/tronprotocol/pm/issues/112) | [notes](https://github.com/tronprotocol/pm/blob/master/TRON%20Core%20Devs%20Meetings/Meeting%2031.md) | NA
83 | 38 | Wed, 12 Mar. 2025 06:00 UTC | [agenda](https://github.com/tronprotocol/pm/issues/114) | [notes](https://github.com/tronprotocol/pm/blob/master/TRON%20Core%20Devs%20Meetings/Meeting%2032.md) | NA
84 | 39 | Wed, 02 Apr. 2025 06:00 UTC | [agenda](https://github.com/tronprotocol/pm/issues/116) | [notes](https://github.com/tronprotocol/pm/blob/master/TRON%20Core%20Devs%20Meetings/Meeting%2033.md) | NA
85 | 40 | Wed, 16 Apr. 2025 06:00 UTC | [agenda](https://github.com/tronprotocol/pm/issues/120) | [notes](https://github.com/tronprotocol/pm/blob/master/TRON%20Core%20Devs%20Meetings/Meeting%2034.md) | NA
86 | 41 | Fri, 18 Apr. 2025 06:00 UTC | [agenda](https://github.com/tronprotocol/pm/issues/121) | [notes](https://github.com/tronprotocol/pm/blob/master/TRON%20Core%20Devs%20Meetings/Meeting%2035.md) | NA
87 | 42 | Thu, 24 Apr. 2025 06:00 UTC | [agenda](https://github.com/tronprotocol/pm/issues/122) | [notes](https://github.com/tronprotocol/pm/blob/master/TRON%20Core%20Devs%20Meetings/Meeting%2036.md) | NA
88 | 43 | Thu, 08 May 2025 06:00 UTC | [agenda](https://github.com/tronprotocol/pm/issues/129) | [notes](https://github.com/tronprotocol/pm/blob/master/TRON%20Core%20Devs%20Meetings/Wallet%20Devs%20Meeting%2002.md) | NA
89 | 44 | Tue, 13 May 2025 06:00 UTC | [agenda](https://github.com/tronprotocol/pm/issues/127) | [notes](https://github.com/tronprotocol/pm/blob/master/TRON%20Core%20Devs%20Meetings/Meeting%2037.md) | NA
90 | 45 | Wed, 28 May 2025 06:00 UTC | [agenda](https://github.com/tronprotocol/pm/issues/136) | [notes](https://github.com/tronprotocol/pm/blob/master/TRON%20Core%20Devs%20Meetings/Meeting%2038.md) | NA
91 | 46 | Fri, 06 Jun. 2025 06:00 UTC | [agenda](https://github.com/tronprotocol/pm/issues/140) | [notes](https://github.com/tronprotocol/pm/blob/master/TRON%20Core%20Devs%20Meetings/Meeting%2039.md) | NA
92 |
93 |
94 |
95 |
96 | SR Meetings
97 |
98 | № | Date | Adgenda |Notes | Recording |
99 | --- | -------------------------------- |:--------------:|:--------------:|:--------------------:|
100 | 2 | Wed, 20 Jan, 2021 09:00 UTC | [agenda](https://github.com/tronprotocol/pm/issues/15) | [notes](https://github.com/tronprotocol/pm/blob/master/SR%20Meetings/SR%20Meeting%2002.md) | NA |
101 | 3 | Thur, 20 May, 2021 09:00 UTC | [agenda](https://github.com/tronprotocol/pm/issues/17) | [notes](https://github.com/tronprotocol/pm/blob/master/SR%20Meetings/SR%20Meeting%2003.md) | NA |
102 | 4 | Wed, 11 Aug, 2021 09:00 UTC | [agenda](https://github.com/tronprotocol/pm/issues/19) | [notes](https://github.com/tronprotocol/pm/blob/master/SR%20Meetings/SR%20Meeting%2004.md) | NA |
103 | 5 | Wed, 26 Oct, 2022 09:00 UTC | [agenda](https://github.com/tronprotocol/pm/issues/30) | [notes](https://github.com/tronprotocol/pm/blob/master/SR%20Meetings/SR%20Meeting%2005.md) | NA |
104 | 6 | Wed, 08 Feb, 2023 09:00 UTC | [agenda](https://github.com/tronprotocol/pm/issues/6) | [notes](https://github.com/tronprotocol/pm/blob/master/SR%20Meetings/SR%20Meeting%2006.md) | NA |
105 |
106 |
107 |
--------------------------------------------------------------------------------
/SR Meetings/SR Meeting 02.md:
--------------------------------------------------------------------------------
1 | # TRON SR Meeting 02 Notes
2 |
3 | ### Meeting Date/Time: Wednesday, 20th Jan. 2021, 9:00 AM UTC
4 |
5 | ### Meeting Duration: 1 hour
6 |
7 | ### [GitHub Agenda Page](https://github.com/tronprotocol/pm/issues/15)
8 |
9 | # Agenda
10 |
11 | - GreatVoyage-v4.1.2 Introduction.
12 | - [TIP-196](https://github.com/tronprotocol/tips/blob/master/tip-196.md)
13 | - [TIP-205](https://github.com/tronprotocol/tips/issues/205)
14 | - [TIP-207](https://github.com/tronprotocol/tips/issues/207)
15 | - Propose to increase the resource fee.
16 |
17 | ## Main features of GreatVoyage-v4.1.2
18 |
19 | - Sakary
20 | - Let’s first take a look at the new features of GreatVoyage-v4.1.2. Mainly 3 features.
21 | - First one, the new APIs for historical data, the user can query the account history balance at a specific block. you can find the detailed instruction from our official guide.
22 | - Second one, publish java-tron with Jitpack to be easily added as a dependency.
23 | - And TVM updates, including below 2 parts.
24 | - Support Solidity v0.6.0
25 | - Max_fee_limit can be changed now
26 | - These are the main update of GreatVoyage-v4.1.2.
27 |
28 | ## TIP-196
29 |
30 | * Sakary
31 |
32 | * Let’s first talk about the motivation of TIP-196.
33 |
34 | * One of the motivations is SR reward is low, especially compared with the prosperous network. and this TIP could improve the stability and efficiency of TRON network. at the same time, it will enhance SRs’ enthusiasm of packing transactions, after this TIP is implemented, SR will get $0.6 for each block(packed 70 trans) as an average, and it will be more if the transaction fee increases.
35 | * Here is the solution of TIP-196: Real-time reward method: transaction fee is sent to the SR who packages the transactions.
36 |
37 | * Do you have any questions?
38 |
39 | * Crypto Chain
40 |
41 | * I would say most SR will disagree with this TIP. First of all, SR reward is not low, most SRs have huge staking, and they can get huge rewards based on voting. and currently, the only way to destroy coin is the TRX burning for transaction fees, if we enable this TIP it will increase the inflation.
42 |
43 | * George
44 |
45 | * The community is very against this TIP.
46 |
47 | * Sakary
48 |
49 | * Justin Sun also shares his opinion on this TIP, seems no one agree with this TIP so far.
50 |
51 |
52 |
53 |
54 | ## TIP-205
55 |
56 | * Sakary
57 |
58 | * TIP 205 proposes an idea of the tokenization of the frozen TRX.
59 | * For now, the frozen TRX can only be used for voting, and the annualized return is about 7-8%. Apparently, this is low and will be a discouragement for staking. In a DPOS network, a low staking rate just equals instability and unreliability.
60 | * This TIP wants to encourage staking by increasing the profitability of TRX holders, in order to ensure the stability of the TRON network.
61 | * To let TRX holders more willing to stake, they must get more profit from it. The TIP mentions 2 rules:
62 | * The functions of frozen TRX are not limited to voting
63 | * Improve voting revenue.
64 | * With the rules, there comes 2 solutions
65 | * Design a TRC-10 token. At the time someone freezes his/her TRX, a fixed amount of the token will be gained. The token can be used to do operations more than voting, for example, mining. The token gained from freezing must be returned(burn) to unfreeze the corresponding TRX.
66 | * Deploy a set of TRC-20 smart contracts for each SR for users to vote. There will be a TRC-20 token.
67 | * The TIP prefers the first solution and gives options for setting the ratio to TRX. The ratio can be fixed or dynamic. do you have any questions?
68 |
69 | * Crypto Chain
70 |
71 | * I would not agree on this TIP, from my point of view, This TIP will increase the complexity for the user. our current voting mechanism is already very complex for the user to understand. after tokenized it will make it even more complex.
72 |
73 | * Justinas
74 |
75 | * From another point of view, if we go with the TRC-20 option, the smart contract way will bring more traffic to the network. And the current voting mechanism already works very well, no need to make it more complex.
76 |
77 | * George
78 |
79 | * One more question, what is the vision of “Mining” here? can you give an example?
80 |
81 | * Sakary
82 |
83 | * Currently this TIP is still under discussion, and the TIP does not mention this part. I would suggest you can directly start the discussion in the TIP page on GitHub, and everyone else can also see that. thanks.
84 |
85 |
86 |
87 | ## TIP-207
88 |
89 | * Sakary
90 | * TIP 207 proposes an idea of solving the low utilization rate of network frozen resources.
91 | * Executing transactions on TRON network requires bandwidth/energy. Currently, there are 2 ways to obtain resources. One is burning TRX, the price is 40 SUN. The other is freezing.
92 | * In the description of this TIP, about 76% of energy is obtained by burning. It also does a calculation, we know that the frozen income includes resource and voting rights. Taking 10000 TRX as an example, if I freeze this for bandwidth the income is approximately 0.056 USD daily, and 0.39USD for energy.
93 | * The TIP comes up with 2 solutions:
94 | * Freezing TRX gets only bandwidth, energy, or voting right.
95 | * Freezing to get vote right and share the network transaction fee. This means the burning TRX will be thrown into a pool and be distributed to all users who have frozen TRX.
96 | * The Resource obtained is calculated based on the total frozen amount, so it's clear that the first solution will increase the resources that can be obtained by freezing.
97 | * The second solution makes no difference to those who burn TRX for resources, but it brings extra profitability to the voters. The calculation shows that there can be approximately 0.02 USD from the pool.
98 | * Crypto Chain:
99 | * I am gonna agree with the first option, it is a very good proposal. If we go with the first option, it might increase the TRX freezing amount. for exchanges they may need both vote and energy, they may freeze more TRX to get extra energy if they do not want to reduce the voting.
100 | * From another point of view, for energy itself. it might be cheaper because most users may choose to freeze for voting, so the total freezing TRX for energy is less, same freezing TRX will get more energy.
101 |
102 |
103 |
104 | ## Increase the Resource cost
105 |
106 | * Sakary
107 | * 
108 | * 
109 | * 
110 | * Let’s first take a look at these data, the transaction fees have been increased from 10 sun to 40 sun on 25th Nov. 2020. The TRX burning was rising, the transaction volume looks quite stable, the circulation was also rising. So some SR suggest to double the transaction fees, could you please share your opinions?
111 | * CryptoGuyinZA
112 | * It is good to increase the fee, but not the moment now. There are already transaction movement now, we need more uses to come to the TRON network, if we increase the fee, we will lose users.
113 | * Justinas
114 | * It is very good to have these graphics to see what is changed, it is really good resources, it would be great if it can be published and be seen by everyone on GitHub or other public places. regarding the increase the fee, we need more time to monitor, maybe 4-5 months, and then made a decison based on the data.
115 | * George
116 | * Please keep in mind that many other chains are already much cheaper than TRON, like Binance, increasing fee may driver users move to other chains.
117 | * Crypto Chain
118 | * Yes, compare to the Binance chain, Tron is not cheap, but compare to other mainstream chains, it is still very cheap.
119 | * We can’t just look at this topic from a cost perspective, it is not only about cost, for those chains with a lower fee, but their efficiency and stability are far behind TRON. They have many issues that impact the users.
120 | * CryptoGuyinZA
121 | * what is the goal of increasing the fees?
122 | * Sakary
123 | * From this data we can see there is no impact on transaction volume, more TRXs were burned, Circulation continues to rise. I would say fee increasing is helpful to the network.
124 | * CryptoGuyinZA
125 | * what is the timeline of this? The last time fee increasing is quite rush, we did not give DAPP developers enough time to adapt to the new fees.
126 | * Sakary
127 | * It is just a discussion now. we did not go that far.
128 | * CryptoChain
129 | * We should think from another point of view.
130 | * If the TIP-207 is online, with TIP-207, we probably have low fees because more users choose to freeze for voting to get rewards, this may be helpful for DAPP developers.
131 | * We should see how it works after TIP-207 is online, and then we can decide whether to increase the fees after we have detail data.
132 | * Do we have any schedule of TIP-207 implementation?
133 | * Sakary
134 | * Only for discussion now.
135 | * Justinas
136 | * Is this meeting recorded? can we see the meeting content in any public place?
137 | * Benson
138 | * No, this meeting is not recorded, however, we will summarize all the meeting content and publish the meeting content on GitHub so everyone can see it.
139 |
140 |
141 |
142 |
143 |
144 | ## Attendees
145 |
146 | - Benson
147 | - Andy Lu
148 | - Calvin
149 | - Crypto Chain
150 | - CryptoguyinZA
151 | - Genie Kim - NEOPLY
152 | - George (Tron Spark)
153 | - Joy
154 | - Justinas TeamTronics
155 | - LIU ZHI
156 | - Louis
157 | - Marco
158 | - Rainy
159 | - Rovak
160 | - Sakary
161 | - Samuel
162 | - Sean Liu
163 | - xiansheng liang
164 |
165 |
--------------------------------------------------------------------------------
/SR Meetings/SR Meeting 03.md:
--------------------------------------------------------------------------------
1 | # TRON SR Meeting 03 Notes
2 |
3 |
4 | ### Meeting Date/Time: Thursday, 20th May. 2021, 9:00 AM UTC
5 |
6 | ### Meeting Duration: 1 hour
7 |
8 | ### [GitHub Agenda Page](https://github.com/tronprotocol/pm/issues/17)
9 |
10 | # Agenda
11 |
12 | - GreatVoyage-v4.2.0(Plato) Introduction.
13 | - [TIP-157](https://github.com/tronprotocol/tips/blob/master/tip-157.md)
14 | - [TIP-207](https://github.com/tronprotocol/tips/issues/207)
15 | - TRON Cross-chain progress
16 |
17 | ## Welcome
18 |
19 | - Sakary
20 | Good afternoon to all present here.
21 |
22 | I am Sakary, the host of the conference today. Before going right into the events, I'd like to thank each one of you for being with us today. Super representative is always one of the most important roles of TRON's ecosystem and I'm really honored that the chance to share our latest news here.
23 |
24 | ## Overview
25 |
26 | - Sakary
27 |
28 | At today's conference I'd like to focus on the following topics:
29 |
30 | Firstly, we've recently released the version of Great Voyage 4.2.0, also we call it Plato. The main content of this version update includes 2 TIPs, which are TIP-157 and TIP-207.
31 |
32 | The second topic is our latest progress of the TRON's cross-chain. Today we have Ray Wu here, he is on behalf of the cross-chain development and being ready to answer your questions.
33 |
34 | Last, I will invite you to join in the discussion about today's news. We always attach great importance to opinions from super representatives, I believe they will be helpful to the further work.
35 |
36 | Now let's move on to TIP-157.
37 |
38 | ## TIP-157
39 |
40 | - Sakary
41 |
42 | TIP-157 added 2 TVM instructions to support freezing related operations in TVM. The adding of the 2 instructions allows smart contracts to get resources from the staking mechanism. This means, from now on, smart contracts will be able to get and delegate resources to others.
43 |
44 | (Sample code displaying)
45 |
46 | Here is a sample contract. Smart contracts can delegate only resources but not TRON power to other accounts. TVM will prevent a contract from self destruction if it has freezing balance.
47 |
48 | Freezing assets for the resource is a unique mechanism for TRON, however, this is only available with ordinary accounts currently. Therefore, the development team want to give contract accounts the same ability, that is, by adding these TVM instructions.
49 |
50 | After this proposal goes into effect, it will be easy to build decentralisation energy banks with smart contracts, that can meet an outstanding need in the community -- energy renting and leasing.
51 |
52 | Also, contract owners are able to make full use of the assets staked in the contract, as freezing is a risk-free action.
53 |
54 | That's all about TIP-157, let's move on to the next part.
55 |
56 | ## TIP-207
57 |
58 | - Sakary
59 |
60 | TIP-207 has been proposed for some time. Compared with 157, in actual promotion, apparently, TIP-207 is more closely related to the interests of community developers and has sparked a lot of discussions.
61 |
62 | The resource had been got before this TIP became effective will not change, however resources will be recalculated if any adjustment is made.
63 |
64 | In the former resource mechanism, freezing whether for bandwidth or energy will definitely obtain TRON Power. Considering that many freezing behaviours are only for obtaining TRON Power, we believe this TIP can significantly imporve the resource utillization.
65 |
66 | 207 will mostly benefit developers those who freeze TRX only for resources. Also, this TIP may cause who originally obtains resources by burning TRX to switch to holding and freezing.
67 |
68 | This may effect the revenue of users who both develop and vote, however, this is not certain, because energy obtained by freezing is finally calculated based on the total amount of frozen for energy. Loss or gain needs to be calculated based on the final energy released.
69 |
70 | - CryptoChain
71 |
72 | At the beginnning of this proposal, I thought it could be very good for us.
73 |
74 | However, users have large amount of TRX, like exchanges, can still have a lot frozen for energy for TRC-20 transfers, and have a lot for voting.
75 |
76 | In the end, only users who have minimal TRX suffer from this.
77 |
78 | So, would it be possible to add some small gap on the maximum amount of energy to get, or at least some free energy, like we have some free bandwidth, so users can take at least 2 transactions of TRC-20. Something like we have with bandwidth. This may help users who make one or two transactions per day and they can still vote for SRs to get rewards from that.
79 |
80 | - CryptoChain
81 |
82 | I have another point.
83 |
84 | Right now there a lot of TRX frozen for energy. For big developers is OK.
85 |
86 | I was working with another project, they've all set on the test net. But the business model they have doesn't work on main net anymore, because the increasing of the price.
87 |
88 | Once we split it for energy and rewards, if they get reward from the staking system, they don't have enough to make energy.
89 |
90 | - Sakary
91 |
92 | You mean exchanges freeze TRX not only for voting, correct?
93 |
94 | - CryptoChain
95 |
96 | Exchanges have enough TRX put for voting, and enough for their TRC-20 transaction. So they have for both. Once they have both for energy and the voting system, they are ok. But developers can't, they need voting reward to compensate the energy that they don't have enough energy.
97 |
98 | So they really need the staking reward to compensate this part.
99 |
100 | - Sakary
101 |
102 | You mean some free energy like the bandwidth?
103 |
104 | - CryptoChain
105 |
106 | Yeah. Just a minimum, for just one or two transactions per day.
107 |
108 | - Justin Kairys
109 |
110 | I actually agree with CryptoChain. Now the smart contract related operations is getting more expensive. It would be good for developers at least to have some free energy without staking. Maybe for two or three transactions per day.
111 |
112 | - Benson
113 |
114 | Currently some projects freeze TRX for both energy and staking reward, later they use the reward to pay transaction fees, is that your point, CryptoChain?
115 |
116 | - CryptoChain
117 |
118 | Yes.
119 |
120 | - Benson
121 |
122 | If you don't do further freeze/unfreeze operation, the resources and TRON Power you have won't be changed.
123 |
124 | - CryptoChain
125 |
126 | There can be business adjustment that needs freezing strategy changes. There should be a gap, like if I freeze 2M TRX, I get 2M energy and 1M voting rights from that.
127 |
128 | - Benson
129 |
130 | I got you. Though the code implementation is done, there is enough time to discuss about this TIP, as this will keep disabled until SRs agree with this.
131 |
132 | - Justin Kairys
133 |
134 | Can you give an example, that who will only freeze for TRON Power.
135 |
136 | - Benson
137 |
138 | The answer is in the TIP. We've analysed the data and we did find some users are only interested in voting. The TIP starts from these statistics.
139 |
140 | ## Cross-chain
141 |
142 | ### Vision of the Future
143 |
144 | - Sakary
145 |
146 | Cross-chain is the process of data interoperability between two independent blockchains. It's mainly manifested in asset exchange and asset transfer. TRON started the cross-chain project long ago, because we believe that cross-chain is an inevitable stage in the development of blockchain.
147 |
148 | Due to limited resources, TRON restricts the number of cross-chain access to the TRON public chain. At the same time, we'll continue to introduce more detailed mortgage and incentive mechanisms, to reward honest parallel chains and punish malicious behaviours.
149 |
150 | A sound reward and punishment mechanism will attach high-quality projects to join the TRON ecosystem.
151 |
152 | ### Progress
153 |
154 | #### Slot Auction
155 |
156 | - Sakary
157 |
158 | Currently, the main functions accomplished are TRC-10/smart contract cross-chain, slot auction and parallel chain access. We start from slot auction.
159 |
160 | Like Polkadot, TRON will conduct parallel-chain slot auction soon. Refer to the description of in the related TIP, it is currently tentatively determinded that TRON will use the ordinary mark-up England auction method.
161 |
162 | The auction starts with a proposal that defines the round, number of slots, ending time and the slot expiration time. It costs 1,000 TRX to register for a candidate.
163 |
164 | Any user can vote for candidate chains by lock their TRX. These TRX will be locked till the end of the auction. For a winning candidate, the TRX used for voting will remain locked till the slot expiration time.
165 |
166 | The auction winner and TRON main chain will be recorded in each other's white list(to prevent duplicated bids).
167 |
168 | - CryptoGuyinZA
169 |
170 | I've got a question. Are we getting a slot on Polkadot or TRON? I'm just curious that should there be many TRON chains or what whould they be?
171 |
172 | Polkadot has substrate, and it allows you to connect heterogeneous chains to Polkadot.
173 |
174 | - Sakary
175 |
176 | Currently the parallel chains should be another java-tron. You can make changes, but basically they are java-tron. The cross-chain is still on development.
177 |
178 | - CryptoChain
179 |
180 | Right now we have a side chain, SUN network, it's basically the same thing.
181 |
182 | Why don't we just have a slot on Polkadot, as there have already been many chains on it.
183 |
184 | - Benson
185 |
186 | Currently, the auction only works with TRON chains. It works with huge DAPPs for now.
187 |
188 | - CryptoGuyinZA
189 |
190 | Polkadot allows different chains, and each chain brings different functionalities. There no value being added if there are many java-trons getting connected to each other.
191 |
192 | What is the value being added to that?
193 |
194 | - CryptoChain
195 |
196 | If there are just many TRON chains, we're going a different model with Polkadot. It's model of expension.
197 |
198 | - CryptoGuyinZA
199 |
200 | I'm not going to participate this auction if the model is like this. It's no reason join in this auction and win a slot.
201 |
202 | The main take away, you guys should think more about it, not technically, maybe the business model.
203 |
204 | - Ray
205 |
206 | We can do customisations to the actuators to make parallel chains different from TRON's mainnet.
207 |
208 | For historical reason, we must be compitable with smart contracts.
209 |
210 | So basically we have two solutions for the cross-chain: actuator modification and smart contract cross-chain.
211 |
212 | As for parallel chains of Polkadot, their business logic is hard coded in Substrate, however we provide the flexibility in smart contracts.
213 |
214 | - Sakary
215 |
216 | Our development is still ongoing. Certainly we will support heterogeneous cross-chain in the future.
217 |
218 | - CryptoGuyinZA
219 |
220 | The degree of customization determines its value.
221 |
222 | - Sakary
223 |
224 | We'll give details in TIPs.
225 |
226 | - Justin Kairys
227 |
228 | I think the main purpose of the cross-chain is to connect different blockchain networks.
229 |
230 | - CryptoGuyinZA
231 |
232 | In Polkadot, different parallel chains will do specific functionalities, like smart contracts, DEFIs and stable coins and different chains have their own chains. That's things about value. Without value, people have no motivations to participate the slot auction.
233 |
234 | You should think about the use cases.
235 |
236 | #### TRC-10 Transfer
237 |
238 | - Sakary
239 |
240 | TRC-10 is the first asset can be transfered between parallel chains.
241 |
242 | The original TRC-10 asset, I call this 'origin token', will have been mapped to a token I call that 'mirror token'. This mapping will always remain the same. The circulation of the origin token and the mirror token will be the same as the token circulation before any cross-chain transactions.
243 |
244 | - CryptoChain
245 |
246 | The main thing is for what chain can we transfer TRC-10 tokens to? We need to think about the business model. What is the value can we add to the cross-chain ecosystem if there are just TRON chains?
247 |
248 | #### Smart Contract Cross-chain
249 |
250 | - Sakary
251 |
252 | The smart contract cross-chain requires some preaparations:
253 |
254 | - Firstly, the contract author(owner) deploy 2 contracts on a pair of parallel chains
255 |
256 | - A full transaction will be taken into 2 parts. In the implementation, there should be 2 'triggersmartcontract' transactions, which are respectively responsible for the processing of the sender and the receiver.
257 |
258 | For now, the contract caller must have enough knowledge of Solidity, to ensure whether the function logic meets the expectations.
259 |
260 | Please refer to TIP-246.
261 |
262 | ## Roadmap
263 |
264 | - Sakary
265 |
266 | There remain several things to do this year: the cross-chain team will launch a pioneer test net, which is called Apollo. Apollo will go through the complete parallel chain linking process, including: slot auction before the cross-chain function is available on the mainnet.
267 |
268 | Through the operation of the test net, the team will make further optimisation in response to the problem found during the test.
269 |
270 | ## Remark
271 |
272 | - Sakary
273 |
274 | Now that we have come to the end of this conference. We've just released version 4.2.0, and simultaneously, I'm pleased to inform you that a testnet of TRON's cross-chain solution is ongoing. Cross-chain will be an excellent promotion of the entire ecosystem of TRON.
275 |
276 | Finally, I would like to close my remarks and express my appreciation to all the participants for taking time out of your busy duties to attend this conference. Thank you and see you here next time.
277 |
278 |
279 |
280 | # Attendees
281 |
282 | - Benson
283 | - Sakary
284 | - BitTorrent
285 | - Crypto Chain
286 | - CryptoGuyinZA
287 | - David Yang
288 | - Genie Kim - NEOPLY
289 | - Ivan
290 | - Jason Neely
291 | - justyy
292 | - Niioxce
293 | - Ray
294 | - Sean
295 | - Sean Liu
296 | - Tron Spark - George
297 | - Justin Kairys
298 |
--------------------------------------------------------------------------------
/SR Meetings/SR Meeting 04.md:
--------------------------------------------------------------------------------
1 | # TRON SR Meeting 04 Notes
2 |
3 | ## Meeting Date/Time: Wednesday, 11 Aug 2021, 9:00 UTC
4 |
5 | ## Duration: 1 hour
6 |
7 | ## [GitHub Agenda Page](https://github.com/tronprotocol/pm/issues/19)
8 |
9 | ## Agenda
10 |
11 | - [TIP292](https://github.com/tronprotocol/tips/issues/292)
12 | - [TIP293](https://github.com/tronprotocol/tips/issues/293)
13 | - [TIP295](https://github.com/tronprotocol/tips/issues/295)
14 | - [TIP271](https://github.com/tronprotocol/tips/issues/271)
15 | - [TIP306](https://github.com/tronprotocol/tips/issues/306)
16 | - [TIP276](https://github.com/tronprotocol/tips/issues/276)
17 | - [TIP285](https://github.com/tronprotocol/tips/issues/285)
18 | - [TIP298](https://github.com/tronprotocol/tips/issues/298)
19 | - Other Changes
20 |
21 | ## Detailed Record
22 |
23 | ### Welcome
24 |
25 | - Sakary
26 |
27 | Good afternoon to all present here.
28 |
29 | I am Sakary, the host and the of the conference today. Before going right into the events, I'd like to thank each one of you for being with us today. I'm really honored that the chance to share our latest news here.
30 |
31 | ### Overview
32 |
33 | - Sakary
34 |
35 | At today's conference I'd like to focus on the following topics:
36 |
37 | We've recently released the version of Great Voyage 4.3.0, also we call it Bacon. A great many improves were included in this upgrade.
38 |
39 | In the rest of today's conference, we will talk about the upgrade from several perspectives.
40 |
41 | Firstly let's move on to the improves of the protocol core.
42 |
43 | ### Protocol Core
44 |
45 | - Sakary
46 |
47 | Everyone may have noticed that each time you made a transaction, small amounts of TRX or TRC-10 tokens would be sent to you. Scammers send low-value transfers( or we can call them spams) in this way. We've considered that the cost of sending spam is definitely low, and it's necessary to make changes when these kind of transactions take up too much network resources.
48 |
49 | For example, for the scam token [1004324](https://tronscan.org/#/token/1004324/), it has controlled 37, 871 addresses to airdrop fraudulent tokens to users continually. Each address can send about 17 free transaction in a day (Currently, the free net limit of an account is 5000, for the average 280 bandwidth consumption of a transaction, it allows the account to send about 17 (5000/280) free transactions in a day), then the scam token can send about 643, 807 fraudulent transactions everyday without any cost, which will lead to a great waste of precious resources in TRON network.
50 |
51 | Spams are sent mostly through non-contract transactions, as bandwidth is usually considered as a cheaper resource. It really is. Now these two parameters are adjustable, and the committee can make timely adjustments according to prevent.
52 |
53 | - Sakary
54 |
55 | The other change to the protocol core is about the data structure of Account. Shortly, we considered users' TRC-10 related data as uncommon, and moved them to a new store.
56 |
57 | This structure improves the IO efficiency. After this change, normal and smart contract trasactions will no longer call TRC-10 data.
58 |
59 | ### TVM
60 |
61 | #### Vote Instructions and Precompile Contracts
62 |
63 | - Sakary
64 |
65 | After TIP-157, smart contracts can freeze their TRX balance to get resource, including TRON power. However, smart contracts are not yet able to vote and get that part of reward.
66 |
67 | With the new feature, smart contracts will have full power over their balance, and get potentially more advantages from it.
68 |
69 | #### Type `Error`
70 |
71 | - Sakary
72 |
73 | The other new feature of TVM is the type of `Error`.
74 |
75 | To adapt Solidity 0.8.4, a new type `Error` is added to TRON's smart contract ABI.
76 |
77 | ### API
78 |
79 | - Sakary
80 |
81 | I believe this is the function that users have the most interest in.
82 |
83 | This field gives users a path to evaluate the energy cost before the transaction going on chain. When invoking the function of `TriggerconstantContract`, a sandbox environment based on the most recently synchronized block at the current node is created to supply TVM with this method call.
84 |
85 | - CryptoChain
86 |
87 | Can user trigger it many times to overload the node? Or will you have any limitation methods?
88 |
89 | - Benson
90 |
91 | You are right. We don't have this kind of functions. If there is a user keeps on triggering the API, the node can be overloaded.
92 |
93 | ### Changes
94 |
95 | #### SpongyCastle -> BouncyCastle
96 |
97 | - Sakary
98 |
99 | The latest release of SpongyCastle is on 2017. For safety considerations, since version 4.3, the cryptography library has been changed to BouncyCastle.
100 |
101 | #### Block Verification Acceleration
102 |
103 | - Sakary
104 |
105 | From version 4.3, during the block verification process, except from `AccountUpdateContract`, transactions will no longer be verified for the second time. (`AccountUpdateContract` changes account permissions).
106 |
107 | #### Node Startup Acceleration
108 |
109 | - Sakary
110 |
111 | Java-tron used to read transaction and block caches to initialize the transaction cache. This time, some unnecessary parsing process has been removed from the cache initialization.
112 |
113 | Else, a plugin call `archive-manifest` is added to streamline the file of `manifest` and accelerate the start up of levelDB.
114 |
115 | These changes have about ten times' speed up to our test machines. Also, there are some positive comments from the community on github.
116 |
117 | ### Energy Fee
118 |
119 | - Sakary
120 |
121 | The community proposed to increase the energy to 420 sun.
122 |
123 | The unit price of energy and bandwidth has been increased twice, firstly increased from 10 sun to 40 sun on 25th Nov. 2020, secondly increased from 40 sun to 140 sun on 11th Feb. 2021, and in the months that followed, the daily Net new TRX has been greatly reduced due to more TRX burned. For details, see [this](https://tronscan.org/#/data/charts/supply).
124 |
125 | On the other hand, due to the increased fees, users will get bandwidth or energy by staking TRX to reduce the consumption of TRX. With the increase in fees, the TRX staking ratio also shows a growing trend. From 22% in early November 2020 to 32% in mid-July 2021, the network-wide stacking rate has increased by about 10%. For detail, see [this](https://tronscan.org/#/data/charts/OverallFreezingRate).
126 |
127 | The following two graphs show that the number of energy obtained by burning TRX starts to decrease, while the number of energy obtained by staking TRX is increasing shortly after the fee increase, such as after April 2021. Check detail at [here](https://tronscan.org/#/data/stats/EnergyConsume).
128 |
129 | In addition, there was no significant change in the daily transaction volume after the two proposals to increase the unit price of energy and bandwidth on November 25, 2020, and February 11, 2021. Even after January 20, 2021, there was a significant increase in daily transaction volume, from a previous average of approximately 2 million transactions per day to a daily average of approximately 3.5 million transactions per day. In late July, the average daily number of transactions grew to 5 million transactions. The above data suggest that the increase in fees did not lead to a decrease in transaction volume. Check detail at [here](https://tronscan.org/#/data/stats/txOverviewStatsType).
130 |
131 | - CryptoChain
132 |
133 | Right now most developers want lower fees. Exactly the low-value transaction will be harmful to the network and nodes. However we've just increased some fees recently, community will not like this, especially the gamers and developers.You are wanting to increase the fee to reduce low-value transactions, but I don't think it's a good idea to do this right now. We can do it in other ways. My opinion is not doing this at this time.
134 |
135 | - TronSpark
136 |
137 | This will impact the applications that rely on low-value transactions, especially gaming, as they rely on small value transactions. We're no longer the cheapest choice. We just increased the fee recently. I agree with CryptoChain that not to increase the fee, and I think the community will be against it.
138 |
139 | - Team Tronic
140 |
141 | TRX's price used to be 30 cents, and with the rising price, developers had already suffered from the doubled price.
142 |
143 | ### Free Net Limit Reducing
144 |
145 | - Sakary
146 |
147 | We've received an another suggestion, to reduce some of the free bandwidth. It may start after the former proposal on GitHub.
148 |
149 | - Benson
150 |
151 | How much free bandwidth do you think should be appropriate?
152 |
153 | - CryptoChain
154 |
155 | 3 or 4 free transactions may be possible numbers. We can get a number from the statistics. For example, statistics from the past two months, we can use this to decide how many free transactions do normal users exactly need per day.
156 |
157 | - Sakary
158 |
159 | I need to say these two proposals are still in the stage of discussion.
160 |
161 | - Klever
162 |
163 | I don't know if these will be accepted by the community. TRON is not the cheapest chain anymore, some applications may be moved to other chains. Maybe we should have another way to remove spam or scammers. It's important to address how many accounts from the 1.4M are actually real.
164 |
165 | ### Other
166 |
167 | - Team Tronic
168 |
169 | SUN is the smallest unit of TRX but also a kind of TRC-20 token. It's not friendly to new developers. Do you have any plan to rename any from these?
170 |
171 | - Benson
172 |
173 | We've notice this, but it's really hard to change the name. I'll talk to the team later.
174 |
175 | ## Attendance
176 |
177 | - Ant
178 | - Benson
179 | - BinanceStaking
180 | - Crypto Chain
181 | - CryptoGuyinZA
182 | - David Yang
183 | - justyy
184 | - Kayle Liu
185 | - Klever
186 | - NEOPLY
187 | - Sakary
188 | - Team Tronics
189 | - Tron Spark
190 | - Wayne Zhang
191 |
--------------------------------------------------------------------------------
/TRON Core Devs Meetings/Meeting 20.md:
--------------------------------------------------------------------------------
1 | # Core Devs Community Call 20
2 | ### Meeting Date/Time: July 18, 2024, 7:00-8:00 UTC
3 | ### Meeting Duration: 60 Mins
4 | ### [GitHub Agenda Page](https://github.com/tronprotocol/pm/issues/96)
5 | ### Agenda
6 | * [Improve Unit Tests Code Coverage to 70%](https://github.com/tronprotocol/java-tron/issues/5434)
7 | * [More detailed results of the execution of the CANCELALLUNFREEZEV2(0xdc) opcode](https://github.com/tronprotocol/java-tron/issues/5530)
8 |
9 | ### Details
10 | * Jake
11 |
12 | OK, let’s roll. Today we have the Core Devs Community Call 20th, and there are two issues need to be discussed. The first one is shared by Daniel.
13 |
14 | * Daniel
15 |
16 | Sure, alright. Since last October, we have experienced several updates on the unit test coverage rate, and before that, Kayle was in charge of it. Here are a few records of the previous updates on the unit test coverage rate. Regarding the details of the unit test coverage rate for each module, currently, I see that the latest unit test coverage rate is 66.83%, which is a few percentage points short of 70%. According to the unit test coverage rate of each module, the coverage rate of the Framework part is relatively low, with Actuator at 75%, Chainbase at 77%, Common at 61%, and Consensus at 63.75%. My idea is to increase the coverage rate of the modules that are below 70%, and the team should try to increase the coverage rate as close to 70% as possible, as the coverage rate of each module is too low.
17 |
18 | Next, we can specifically check which modules have a lower coverage rate, which is under the framework directory. There are several sub-modules under Framework, including Common, Core, Keystore, and Program, and the coverage rates of these are all very low and seriously insufficient. Regarding Program, my idea is to allocate tasks among several active teams in the community to try to increase the unit test coverage rate as much as possible, whether it is to improve other modules or mainly to improve the framework module, we should try to increase the overall coverage rate to reach a goal of 70%.
19 |
20 | Ray, are you there?
21 |
22 | * Ray
23 |
24 | Yeah.
25 |
26 | * David
27 |
28 | We cannot solely rely on the coverage rate here; we also need to consider the number of lines of code in each module. Otherwise, it will be difficult to allocate the work. The specific workload is different.
29 |
30 | * Daniel
31 |
32 | I understand that the number of code lines in each module varies greatly. For example, if the coverage rate of the framework module can reach 71%, it is estimated that the overall coverage rate can also reach 70%.
33 |
34 | * Ray
35 |
36 | Should we reconfirm the content details and the workload in each module? If time is limited, it is best to focus our energy on the part with the highest priority and increase the proportion. This involves a more detailed task division.
37 |
38 | * David
39 |
40 | This workload may be very large. For example, there are more than 20,000 lines of code in Core. If it is allocated to developers in the community, the workload will vary greatly.
41 |
42 | * Daniel
43 |
44 | I just proposed to increase the coverage rate. I did not directly allocate the work, and it still needs to be discussed.
45 |
46 | * Ray
47 |
48 | Although I have not looked at it carefully, I understand that some unit test coverage rates are very low, possibly because they are not very important. So, should we sort out a priority for each module? We can first divide the key and easy-to-do parts, and then see which module is suitable for which team to do or to be allocated evenly.
49 |
50 | * Jake
51 |
52 | Then, Daniel, could you supplement this in the issue later, write in more detail about the approximate workload of each module, and then see the comments and reactions from the community?
53 |
54 | * Daniel
55 |
56 | I think this is fine.
57 |
58 | * Jake
59 |
60 | Ray, what do you think?
61 |
62 | * Ray
63 |
64 | I think this form is also good. Because the workload is huge, it still needs to be discussed more widely in the community. It is a good idea to supplement it in the issue and let a wider range of developers discuss it.
65 |
66 | * Jake
67 |
68 | OK, let's temporarily settle this issue like this. Does anyone else have any other questions?
69 |
70 | * Jake
71 |
72 | OK, then let's move on to the next topic. Regarding the opcode, was it submitted by you, David?
73 |
74 | * David
75 |
76 | Yes, I will share the screen.
77 |
78 | The purpose of this function is as follows. In the system contract, we all know that there is an interface called `cancelallunfreezeV2`, which can cancel all the user's queued unfreeze or unstake operations. In the VM, there is also an instruction that implements a similar function to the system interface. The result of the internal transaction generated by this instruction, does not include the canceled quantity of each resource, only the total canceled amount. This is somewhat different from the current implementation of the system and interface. At the same time, for some statistical services, they may need to know which resources will be canceled in the instruction-level cancellation operation. This is the main purpose of this issue.
79 |
80 | There are two implementation methods. Plan A is to add a new internal transaction type for each resource. We see that there are three types of bandwidth, energy, and tron power. Plan B implementation method is to write the specific quantity of each resource in the note field of the internal transaction, which is equivalent to using the note field to record the cancellation quantity of the three resources separately.
81 |
82 | There have been some small discussions on this issue in the early stage, mainly focusing on the implementation method. I personally mentioned that some community members are more inclined to use Plan B. Plan A requires adding three transaction types, so for the back-end service and statistical service, they may need to add additional code to parse these three.
83 |
84 | Regarding the purpose and implementation plan of this function, does anyone have any opinions?
85 |
86 | * Daniel
87 |
88 | I see that a field has also been added in the system contract to record the canceled amount of these three types of resources separately. Then we can align with the system contract.
89 |
90 | * David
91 |
92 | Yes, that's right. The recording format uses a JSON format to record.
93 |
94 | * Ray
95 |
96 | Where is it recorded?
97 |
98 | * David
99 |
100 | In the extended field, `string extra`.
101 |
102 | There is another issue that needs to be discussed. Does this function require a hard fork? The current implementation plan adopts a switch mode, and this switch can be configured to control whether detailed information about the cancellation instruction is added to the extended field of the transaction.
103 |
104 | * Ray
105 |
106 | I want to confirm a question. Where is it placed in the internal transaction?
107 |
108 | * David
109 |
110 | Inside the `transaction info`.
111 |
112 | * Ray
113 |
114 | If the user is also monitoring events at the same time, will this field appear in the event report?
115 |
116 | * David
117 |
118 | If the switch is turned on, it will appear. If it is obtained, if he is monitoring the entire transaction's transaction info, this field will appear.
119 |
120 | * David
121 |
122 | This approach is similar to the previous one. When Stake 2.0 was launched, some internal transactions related to Stake 2.0 instructions were added. At that time, a switch design like this was used. This is because there is a hard fork, and the increase in internal transactions is not controlled by the hard fork. The switch is closed by default, and for users who need to track and record the cancel instruction and which type of resources unstaked are canceled, they can choose to turn on the switch.
123 |
124 | * Ray
125 |
126 | From the perspective of monitoring contract events, can it only add a log to the contract?
127 |
128 | * David
129 |
130 | Monitoring events needs to be in the implementation code, usually written in Solidity. The event logic has nothing to do with the instruction level, but it needs to be considered in the contract logic.
131 |
132 | * Ray
133 |
134 | It is necessary to add the log output of the instruction execution at the instruction level.
135 |
136 | * David
137 |
138 | Yes, specifically for this instruction. This instruction originally generated an internal transaction with only a total cancel amount and no specific type. Now, a switch is added to complete this. When the switch is turned on, the canceled resource type will be shown in the internal transaction.
139 |
140 | * Ray
141 |
142 | If it is Plan A, there may be compatibility issues. Is this a concern?
143 |
144 | * David
145 |
146 | Plan A is more like the processing method of new internal transactions when stake 2.0 was launched. All the instructions related to stake 2.0 added in the VM will add one or more corresponding internal transactions, and the switch mentioned earlier was used for control at that time.
147 |
148 | * Ray
149 |
150 | I am mainly not clear about the specific advantages and disadvantages of Plan A or B. Do both require a hard fork?
151 |
152 | * David
153 |
154 | The implementation of Plan B does not require a hard fork. It just uses a switch to control whether to output detailed information about the canceled resource types.
155 |
156 | * Ray
157 |
158 | Then Plan A requires?
159 |
160 | * David
161 |
162 | In fact, Plan A may not be required either. It is only necessary to clarify the storage location when storing the specific resource quantity. Three internal transactions are added, which is equivalent to storing the canceled amount of each resource. For the cancellation instruction, if Plan A is adopted, it may generate 1 to 4 internal transactions. For B, it is still the original situation, generating one internal transaction.
163 |
164 | * Ray
165 |
166 | Will B affect the business parsing?
167 |
168 | * David
169 |
170 | No, the extended field is not new. The voting instruction will use this field to store voting information.
171 |
172 | * Ray
173 |
174 | Will there be a situation where both the voting information and the details of the canceled resources need to be stored in one instruction?
175 |
176 | * David
177 |
178 | No, voting and canceling are two instructions and will not reuse the same internal transaction. For some active nodes, transaction info will participate in the calculation of the state, and I am not sure about this.
179 |
180 | * Ray
181 |
182 | Me neither, and it needs to be confirmed.
183 |
184 | * David
185 |
186 | If both nodes are active nodes, and one turns on this function while the other does not, it will definitely affect the state calculation.
187 |
188 | * Ray
189 |
190 | This part should not be involved in the calculation because theoretically, the `info` itself can also be switched, and the whole is controllable.
191 |
192 | * David
193 |
194 | What's everyone's opinion? Should it be made into a switch or a hard fork? Is a hard fork making a mountain out of a molehill?
195 |
196 | * Ray
197 |
198 | From the current situation, I think a switch is more reasonable. However, if it is from the perspective that the transaction info needs to have a state info root and needs to be extended to a consensus, then a hard fork is still better.
199 |
200 | * David
201 |
202 | In fact, there is already a switch for internal transactions. Even if we want to do the info root in the future, internal transactions will not participate in the calculation of the root.
203 |
204 | * Ray
205 |
206 | Oh, that's right.
207 |
208 | * David
209 |
210 | For the consensus, internal transactions need to be closed. When calculating the root, only the common part that is not controlled by the switch should be calculated.
211 |
212 | * Ray
213 |
214 | Yes, that's right.
215 |
216 | * David
217 |
218 | What do you think about the necessity of this function?
219 |
220 | * Ray
221 |
222 | I think it is still necessary from the perspective of the development of the ecosystem.
223 |
224 | * David
225 |
226 | There must be many upgrading requirements for Fullnode. That is to say, from the perspective of the community, is the priority of this function high?
227 |
228 | * Ray
229 |
230 | I think if such a function can be provided and compatibility can be maintained, it may be a reasonable idea. If this function is made into a switch, the development difficulty and cycle will be just fine, no problem.
231 |
232 | * David
233 |
234 | Does anyone else have any opinions?
235 |
236 | * Jake
237 |
238 | If not, then that's it for today. Thank you all for your time. Goodbye!
239 |
240 |
241 |
242 |
243 |
244 | ### Attendance
245 | * Ray
246 | * David
247 | * Andy
248 | * Daniel
249 | * Super
250 | * Murphy
251 | * Jake
--------------------------------------------------------------------------------
/TRON Core Devs Meetings/Meeting 21.md:
--------------------------------------------------------------------------------
1 | # Core Devs Community Call 21
2 | ### Meeting Date/Time: August 8, 2024, 7:00-8:00 UTC
3 | ### Meeting Duration: 60 Mins
4 | ### [GitHub Agenda Page](https://github.com/tronprotocol/pm/issues/97)
5 | ### Agenda
6 | * [Implement eth_getBlockReceipts method](https://github.com/tronprotocol/java-tron/issues/5910)
7 |
8 | ### Details
9 | * Jake
10 |
11 | OK, it seems everyone is here. Let's start today's topic. We only have one issue to talk about today, which is to implement the eth_getBlockReceipts method. Hi Brown, you submitted this one, right?
12 |
13 | * Brown
14 |
15 | OK, I'll share my screen.
16 |
17 | First, I'd like to introduce the background of this issue. A community developer submitted this issue some time ago. Ethereum has added some JSON-RPC interfaces in the past period, including the one we are going to discuss today, eth_getBlockReceipts. The submitter wanted to use this interface in TRON but found that TRON did not have this interface, so he posted this issue in the community for everyone to discuss whether it was necessary to add this interface.
18 |
19 | Based on the above situation, I have sorted it out. The implementation of TRON's compatibility with Ethereum's JSON-RPC interface was in June 2022, and it has been two years since then. According to my research, Ethereum has added 6 new general JSON-RPC interfaces, and 4 Geth-specific interfaces, and deleted one interface after that.
20 |
21 | Ray, you are more familiar with these interfaces. Can you introduce them?
22 |
23 | * Ray
24 |
25 | OK, let me talk about it. I know something about it. I'll focus on the key points. The other interfaces have nothing to do with our business, so I won't discuss them here. You can take a look at them yourself to familiarize yourself with the interface functions of Ethereum.
26 |
27 | EIP-1559 launched a new social model early on, and everyone should know that the fee model for the contract part of TRON currently also refers to the fee model of EIP-1559. There is also a dynamic fee mechanism, which can be simply understood as the gas price consisting of two parts, one is the base fee, and the other part is a dynamic fee. Users can adjust part of the fee independently. The base fee will be burned, and the part of the dynamic fee can be adjusted by the user, so that it will be rewarded to the miners. This is a background premise.
28 |
29 | After EIP-4844 was launched, a new type of blob transaction was added. The only difference between the blob transaction and the previous transaction is the addition of the blob field, and another set of fee models similar to EIP-1559 is implemented for the blob field. You can think that its social model is identical, but the two exist independently, so their names are base fee and blob base fee respectively.
30 |
31 | This is the new interface added for EIP-4844 transactions. Considering that TRON has not yet started to implement the 4844 function, theoretically, the interface does not need to be followed up urgently, at least the 4844 function is needed first.
32 |
33 | Then the third and fourth ones can be skipped as you can tell from their names. Then for the fifth one, just now I said that the fee calculation of 4844 is divided into two parts, one is the base fee, and the other part is the fee that the user can adjust. Then for the fifth one, I think it should be the maximum value of the part that the user can adjust the fee.
34 |
35 | I'm not sure about the sixth one, let Brown talk about it. And I skipped the second one just now.
36 |
37 | * Brown
38 |
39 | OK. Let's talk about the second one first. The function of the second interface is to obtain the historical price of the gas fee.
40 |
41 | * Andy
42 |
43 | Is the historical fee here for a given period or all historical prices? Is it queried by a given time or a given block?
44 |
45 | * Brown
46 |
47 | By default, it is to query all, and for a given block range, it is to query the price changes within the range. This is relatively easy to understand. Currently, compared to this, TRON can only query the current price, but not the historical price.
48 |
49 | The third interface, eth_getBlockReceipts, is to query the receipts of all transactions in a block. In Ethereum, it is called transaction receipt, and in TRON, it is called transaction info. We will take a look at the details of this interface later, and this is the main topic we are going to discuss today. The fourth one, TRON does not have Merkel proof, so we don't need to look at it. For the sixth one, eth_newPendingTransactionFilter, the interface creates a filter to filter specific pending transactions, and when a new transaction is filtered, a notification message will be received. The interface it calls behind is eth_getFilterChanges, but there is a condition that these two interfaces must both be local.
50 |
51 | I have classified these 6 interfaces into two categories, one is that Java-tron can consider implementing, and the other is that it is not necessary to implement. Among them, the second, third, and sixth interfaces can be considered for implementation by Java-tron. Just now I said that the sixth interface is a bit troublesome to implement. The interface it calls behind must be on the same fullnode and the same machine as it, which is difficult to implement, especially considering the situation of service providers like Trongrid.
52 |
53 | These are the six general interfaces. Let me briefly introduce the four interfaces used by the Go client. The first one, txpool_content, is to return all pending and queued transactions. The second one, txpool_inspect, is to return all pending and queued transactions in text form. The third interface is to query all transactions of a specific address in all pending and queued transactions. The fourth interface is the number of each of all pending and queued transactions.
54 |
55 | For the implementation of these four interfaces, my conclusion is that they can all be implemented. The difference is that TRON only has pending transactions, no queued transactions, and no such state. For the fourth interface, txpool_status, TRON has a similar HTTP interface, getPendingSizeServlet, which returns the size of the pending transaction.
56 |
57 | Finally, let's take a look at the deleted interface, eth_getWork. This interface is to return the hash of the current block, the seed hash, and the boundary conditions to be met. Currently, TRON only returns the current hash for this interface, and the latter two values are null. It may not be necessary to retain it under POS.
58 |
59 | Next, let's take a look at the main topic of this time, whether it is necessary to implement eth_getBlockReceipts; if so, whether the difficulty is great.
60 |
61 | If it is implemented, I'll briefly talk about the general technical route. First, you can obtain the info of all transactions in a block through getTransactionInfobyBlockNum in the wallet API. Alternatively, through the JSON-RPC method, it can be divided into the following two steps. The first step is to call eth_getBlockBy{Number, Hash} to retrieve all transactions of a certain block. The second step is to traverse all transactions obtained in the first step and call eth_getTransactionReceipt to obtain the info of each transaction, which is called the receipt in Ethereum.
62 |
63 | The interface formats obtained by the above two methods are very different, and complex format conversion is required. The later JSON-RPC method is very inefficient for obtaining a large number of blocks and transaction data.
64 |
65 | That's roughly the situation. Feel free to express your opinions to see if it is necessary to implement this interface.
66 |
67 | * Ray
68 |
69 | Is there any performance issue in implementing this interface? There will be a large amount of data returned in the info, and the data volume will be large, or the query frequency will be very high. Did the author of this issue mention in what scenarios this interface will be used?
70 |
71 | * Brown
72 |
73 | The author only mentioned that he found it incompatible when using it and hoped that TRON would improve its compatibility with Ethereum.
74 |
75 | * Andy
76 |
77 | There was a previous interface to query all log information within a block range, and the performance issue of that interface was very serious because the maximum query was 100. Currently, the number of transactions in a block in TRON can support up to four or five hundred, and usually, there will be three or four hundred. If the database is queried many times, then the serialization and deserialization situations need to be considered. From some results of the previous stress test, deserialization is still very time-consuming.
78 |
79 | * Brown
80 |
81 | Many interfaces in TRON now also have similar situations, and there are no performance issues. As for the deserialization situation, generally, the database will only be queried once, not 100 times. In some previous implementations, it was also executed one by one through getTransactionByInfo, and there was no problem.
82 |
83 | * Ray
84 |
85 | I think we still need to discuss the demand for this interface first. It is not certain whether the existing interfaces can support the business scenario mentioned by the issue author. In addition, I am not sure about the way Ethereum obtains the receipts. Do they store the blocks in the database, and the receipts are stored separately and can be directly obtained, or is it the same as TRON? If TRON stores them separately, our performance may be much worse than theirs.
86 |
87 | * Brown
88 |
89 | It was stored separately before, but now it is stored together.
90 |
91 | * Ray
92 |
93 | That means there is no need to traverse through when obtaining the info, right?
94 |
95 | * Brown
96 |
97 | No, only when converting, when doing the mapping, it needs to be traversed.
98 |
99 | * Ray
100 |
101 | The cost of modification will not have an impact on the underlying storage business logic. It only adds a read-only query interface.
102 |
103 | * Brown
104 |
105 | If the speed reduction is too fast, it may affect the read and write in other aspects.
106 |
107 | * Ray
108 |
109 | Whether to do this function still needs to be determined. At present, I don't have a good suggestion. If it is to be done, in the past, it may be necessary to test the performance and the limit of qps.
110 |
111 | * Brown
112 |
113 | Yes, let's see if the other interfaces should be done or not.
114 |
115 | * Jake
116 |
117 | Brown, it would be more convenient for everyone to see if you moved your screen to the table of the new interfaces you made.
118 |
119 | * Brown
120 |
121 | Here, everyone takes a look and thinks about it.
122 |
123 | * Ray
124 |
125 | I think you still need to go back to the issue and ask the author about the purpose of using the interface, in order to more accurately or in more detail understand the business scenario of the interface, and approximately how often it is used.
126 |
127 | * Brown
128 |
129 | This is one aspect. On the other hand, from a business perspective, TRON needs to directly improve its compatibility with Ethereum. Previously, when integrating with Metamask, there were problems with compatibility. This is also one of the motivations for doing this interface.
130 |
131 | * Andy
132 |
133 | I would like to add that it is still necessary to figure out which projects or scenarios the current JSON-RPC interface is used in.
134 |
135 | * Brown
136 |
137 | Yes, I will do my research on this later. Does anyone else have any other suggestions?
138 |
139 | * Jake
140 |
141 | If not, then that's it for today. Brown, you are responsible for following up on this issue, right? Including communicating with the author?
142 |
143 | * Brown
144 |
145 | Yes, I am responsible for it.
146 |
147 | * Jake
148 |
149 | OK, we will definitely discuss this issue again in the future. That's it for today. Thank you for your time, bye!
150 |
151 |
152 |
153 | ### Attendance
154 | * Ray
155 | * Brown
156 | * Andy
157 | * Boson
158 | * Allen
159 | * Lucas
160 | * Aaron
161 | * Super
162 | * Murphy
163 | * Jake
--------------------------------------------------------------------------------
/TRON Core Devs Meetings/Meeting 23.md:
--------------------------------------------------------------------------------
1 | # Core Devs Community Call 23
2 | ### Meeting Date/Time: September 5th, 2024, 7:00-8:00 UTC
3 | ### Meeting Duration: 70 Mins
4 | ### [GitHub Agenda Page](https://github.com/tronprotocol/pm/issues/100)
5 | ### Agenda
6 | * [Upgrade to JDK 17](https://github.com/tronprotocol/java-tron/issues/5976)
7 |
8 | ### Details
9 | * Jake
10 |
11 | Hello everyone! Today we are having Core Devs 23, and we will continue the topic from last time, which is about adapting to the ARM architecture. Shall we start now? Boson, are you here?
12 |
13 | * Boson
14 |
15 | Yes, let me get ready.
16 |
17 | Can you see my screen?
18 |
19 | * Jake
20 |
21 | Yes, we can. You can start now.
22 |
23 | * Boson
24 |
25 | We discussed this aspect last time, and now we can elaborate on the updates on several issues regarding the adaptation of the ARM architecture.
26 |
27 | The update mainly involves the issue of JDK versions, such as Oracle or Open JDK, and we need to consider Open JDK. Here I list examples of other vendors, such as Zulu and Amazon. In addition, Oracle JDK 17 will soon be charged, starting September 2024 for subsequent updates. If TRON wants to upgrade the JDK, when adapting to ARM, it may not consider using Oracle JDK but Open JDK instead.
28 |
29 | Next, let's talk about the data consistency issue. Whether it is supporting ARM or switching JDKs, the main problem is data consistency. At present, we haven't thought of any other methods except adding a state tree. If data consistency cannot be guaranteed, the subsequent work cannot proceed.
30 |
31 | * Ray
32 |
33 | I haven't thought it through, and I don't have any other ideas. Let's discuss it later.
34 |
35 | * Boson
36 |
37 | Then let's continue the discussion at the next meeting. At present, there is no good solution. Let's look at the matter of upgrading JDK 17. There is currently a problem regarding the commercial use of Java subscriptions. In a decentralized network like TRON, is the use of JDK in the client considered commercial use?
38 |
39 | * Andy
40 |
41 | It should be considered a commercial use, even if it is used for internal enterprise management, it is considered beneficial.
42 |
43 | * Boson
44 |
45 | This issue involves legal matters, and we still need to study it further. Let's move on to the next topic. Regarding the reason for upgrading to JDK 17 and skipping JDK 11, it is now certain that JDK 11 is charged. Because of the charge for JDK 11, everyone is dissatisfied. Starting from JDK 17, the charging method has changed. Older versions can be used for free on a trial basis, and subsequent updated versions will continue to be charged.
46 |
47 | * Andy
48 |
49 | If Open JDK is not used, then the current choice is to use version 21, which can be used until 2026.
50 |
51 | * Boson
52 |
53 | Another situation is to switch to Open JDK. Currently, due to unknown reasons, it is impossible to switch to Open JDK. Let's not discuss other options for now. At first, we chose version 17 because it was free. Now that version 17 is no longer free, it doesn't make much sense. Version 17 has better support for ARM, and the prerequisite for upgrading ARM is to upgrade to JDK 17. Version 17 has two problems. One is the garbage collector. ZGC has been in production since JDK 15. The other is the strict mode of JEP306. Starting from JDK 17, it can completely guarantee basic calculations, such as addition, subtraction, multiplication, and division, and they are consistent on any platform, without inconsistent behavior due to extended precision on certain platforms.
54 |
55 | There are also some changes in default behaviors, and I list three points here. The first is the change in null pointers. Previously, the message was null, so it was always a headache when troubleshooting null pointers. Now it has improved the null pointer, and it has a value since JDK 14. Then we currently found a way to judge the null pointer in the Java-Tron code or any other way. If the get message is equal to null, it is judged in the contract. If it is equal to null, it will catch and set a contract result. After JDK 17, for this type of null pointer, it is no longer equal to null, so compatibility is needed here. In addition, the garbage collector has removed CMS in JDK 17, and these are some problems. Also, when the module system was introduced in JDK 9, some classes in JDK 17 were inaccessible, and other problems such as log printing, JVM parameters, and garbage collection have also changed. Then regarding third-party dependencies, some dependencies may need to be upgraded, and here are some examples. There is also the same data consistency problem. If there is no state data, that is, without introducing state numbers, how to verify the consistency problem. Another issue is the problem of floating-point calculations, which may require a hard fork.
56 |
57 | There is another problem. Is it necessary to be compatible with both 8 and 17 at the same time? What are your thoughts?
58 |
59 | * Ray
60 |
61 | Is it under the ARM architecture?
62 |
63 | * Boson
64 |
65 | No, I mean in general. If we are compatible, we should be compatible with both, regardless of whether it is x86 or ARM. The current situation is that our code supports both 8 and 17, and it has always been in the development state of 8, and the syntax state has also been maintained in the syntax state of 8. When compiling, the source is 8, and the compiled class is also 8.
66 |
67 | * Andy
68 |
69 | TRON has many nodes, and it may take half a year or a year for all nodes to complete the upgrade. Compatibility should be necessary.
70 |
71 | * Boson
72 |
73 | The Java client of Ethereum does not consider this, and it upgrades directly.
74 |
75 | * Ray
76 |
77 | What does direct upgrade mean?
78 |
79 | * Andy
80 |
81 | It means directly specifying the version, and it is also upgraded from JDK 11, 17, and 21.
82 |
83 | * Ray
84 |
85 | Why does it consider upgrading Oracle JDK when it uses Open JDK?
86 |
87 | * Boson
88 |
89 | It supports Open JDK, but considering that many users deploy using Oracle, the client cannot limit which JDK is used, but it can limit the version to ensure that the versions used by everyone are free, so it was upgraded from 17 to 21.
90 |
91 | * Andy
92 |
93 | Ethereum has a significant characteristic. There is about one forced upgrade every year, so each upgrade must use the latest version. Due to the upgrade of Ethereum, it indirectly prompts the update of the client, and users are more motivated. TRON needs to consider this. If there is no forced upgrade, many nodes may keep using the old version of JDK.
94 |
95 | * Boson
96 |
97 | So if TRON insists on using JDK 17, it must be a hard fork version.
98 |
99 | * Ray
100 |
101 | Yes, I am still very worried about the occurrence of data inconsistency when upgrading the JDK, even if the probability is very low. If the old JDK version is forcibly replaced, will there be a greater risk? If such a thing happens, it may be disastrous.
102 |
103 | * Boson
104 |
105 | At the same time, being compatible with both JDK 8 and JDK 17, in my opinion, will also have disastrous consequences. In the most chaotic state, when both 8 and 17 exist at the same time, it will be more troublesome. If it is all 17, then it may not be so bad, and if it is all 8, it is also fine. As long as TRON's code can run on JDK 17, it is considered to support 17.
106 |
107 | * Ray
108 |
109 | I think it is highly unlikely that there will be a complete migration to JDK 17 in one upgrade.
110 |
111 | * Andy
112 |
113 | This cannot be done either.
114 |
115 | * Ray
116 |
117 | For safety reasons, this will not be done either, but when both 8 and 17 exist at the same time, it is actually very difficult to ensure that there are no problems.
118 |
119 | * Boson
120 |
121 | The result of the current discussion is to support both 8 and 17, that is, after a certain version, both 8 and 17, or all versions above 8 are supported. If multiple versions are supported for a long time, then the data consistency research must be completed.
122 |
123 | * Ray
124 |
125 | Then how to do the data verification problem?
126 |
127 | * Boson
128 |
129 | This is the most critical. I propose a small state number and make a state number for each latest session.
130 |
131 | * Ray
132 |
133 | I think the consistency research needs to be discussed separately, and this is the biggest risk point in the upgrade.
134 |
135 | * Boson
136 |
137 | Yes, for this consistency problem, everyone can think about what other good solutions there are. TRON must have this function. It supports consistency verification by itself, and this consistency verification cannot be a consensus, right?
138 |
139 | * Ray
140 |
141 | If it is not consensus when a problem is found after it is actually online, it is only a warning, and in fact, the data has already been messed up. I think there should be an upgrade and disaster recovery plan, at least a disaster recovery fallback plan to ensure that there is still a correct set of data when there is a problem online.
142 |
143 | * Boson
144 |
145 | Yes, a plan still needs to be designed.
146 |
147 | The first topic of this meeting is about commercial behavior. At present, we cannot clearly define which operations in the operation of TRON are considered commercial behaviors recognized by Oracle.
148 |
149 | The second is whether compatibility only supports version 17 or all versions above 8. At present, it seems that it should support all versions above 8, and there is no longer a limitation.
150 |
151 | * Ray
152 |
153 | This workload is very large. If it cannot be limited at the code level, can TRON's code limit it?
154 |
155 | * Boson
156 |
157 | So it is either use 8 or use 17?
158 |
159 | * Ray
160 |
161 | I think user feedback should also be considered. Should we support all versions above 8 and Open JDK versions? Grasp the user needs and workload.
162 |
163 | * Boson
164 |
165 | Then make a comment under the issue of upgrading JDK 17, and put these three topics of the definition of commercial behavior, supported JDK versions, and data consistency here for the community to discuss. Of course, we need to promote this situation in the community and attract a wider range of users to participate in the discussion.
166 |
167 | * Jake
168 |
169 | Is it to promote the link of the issue, briefly explain it, and attract the community developers to participate?
170 |
171 | * Boson
172 |
173 | Yes, promote both the adaptation of the ARM architecture and the upgrade of the JDK.
174 |
175 | * Jake
176 |
177 | Okay. Then after that, Boson will update the key points of this discussion. Does anyone else have any suggestions or opinions to discuss?
178 |
179 | * Jake
180 |
181 | If not, then that's it for today. Thank you all for attending the meeting. Goodbye!
182 |
183 |
184 |
185 | ### Attendance
186 | * Ray
187 | * Brown
188 | * Super
189 | * Andy
190 | * Boson
191 | * Daniel
192 | * Lucas
193 | * Aaron
194 | * Murphy
195 | * Jake
--------------------------------------------------------------------------------
/TRON Core Devs Meetings/Meeting 24.md:
--------------------------------------------------------------------------------
1 | # Core Devs Community Call 24
2 | ### Meeting Date/Time: September 26th, 2024, 7:00-8:00 UTC
3 | ### Meeting Duration: 45 Mins
4 | ### [GitHub Agenda Page](https://github.com/tronprotocol/pm/issues/101)
5 | ### Agenda
6 | * Introducing PowerMock to write unit tests for Java-tron
7 |
8 | ### Details
9 | * Jake
10 |
11 | Hello everyone. Today we are having Core Devs Community Call 24. Welcome everyone. For today's meeting, we have only one topic: "Introducing PowerMock to write unit tests for Java-tron" submitted by Super.
12 |
13 | Hi Super, can you hear me? Please share your screen and let's start now.
14 |
15 | * Super
16 |
17 | OK. Hi guys, I am going to explain why I would like to introduce PowerMock to write unit tests today.
18 |
19 | There are several advantages as follows. First, writing unit tests with Mock allows us to break the dependency between the test object and services. For example, some unit tests depend on the database startup or service startup corresponding to the API. If the mock method is used, the dependency on services or database startup can be removed, thereby reducing the memory occupied by services and saving a lot of resources.
20 |
21 | The second function is that it can replace service calls. For example, when we call a certain service, it can be written in the Mock way without specifically writing the service interface. In this way, the running speed of test cases will be faster. We can save a lot of service calls. For example, when calling service A, and A calls service B and service C, etc. If we make these services into Mock, it will save a lot of trouble.
22 |
23 | The third point is to improve test efficiency. For example, within a unit of time, you can run more tests and the speed can be faster. Java-tron has introduced the Mockito module. However, due to the insufficient power of Mockito, for example, it cannot mock static methods, private methods, and constructors. If Java-tron wants to increase the unit test coverage rate to 70% or more than 80%, only introducing Mockito is not enough. It cannot solve the need for Mock in many scenarios.
24 |
25 | After introducing PowerMock, we can use Mock to write unit tests. The coverage rate should be able to increase to 80% or even more. There is no problem that a certain function cannot be covered because it cannot be constructed. There are many reasons for not being able to construct. Its parameters are very complex and the dependent service is very complex. A large number of services need to be started to call this method. Parameter construction is very troublesome. If PowerMock is used, all problems can be easily solved.
26 |
27 | I will share my practice of using PowerMock to improve the unit test coverage rate of Java-tron during this period for your reference and communication. If you have any questions, we can discuss them later. If you want to use PowerMock, then you must reference its dependencies. Currently, it is the PowerMock 2.0 version. Then you also need to use the annotation RunWith(PowerMockRunner.class) to indicate that the test case is run using PowerMockRunner. This must be added, otherwise PowerMock cannot be used. Another annotation is PrepareForTest({Util.class}), which is used to add all classes that need to be tested. Usually, when testing a category, these two prerequisites need to be added.
28 |
29 | I have sorted out some relatively complex unit test cases written with PowerMock and share them with you.
30 |
31 | The first practice is that PowerMock can assign private member variables non-intrusively. For example, here, in the wallet class, there is a private variable, chainBaseManager, which has no `get` and `set` methods. It may be assigned through the constructor. In this case, testing will be more troublesome. If PowerMock is used, I can directly assign a value to it. Create a Mock object for chainBaseManager, and then directly call this Mock function.
32 |
33 | The second is to call private methods non-intrusively. For example, here, in the RuntimeImpl class, it has a private method setResultCode. If I want to write a unit test case for this private method, since it is private and cannot be called directly, reflection may be used, which will be more troublesome. If PowerMock is used, it can be solved with one line of code. According to the object I defined here, the private method can be called directly by using the function Whitebox.invokeMethod. If reflection mechanism is used, there will be much more code than here. PowerMock has many encapsulated methods like this, which is very convenient when writing.
34 |
35 | The third is to mock constructors. For example, here I have a class to be tested. The usage of its constructor is relatively complex, and it is very troublesome to write test case logic during testing. If PowerMock is used to write, here directly define this class, and then use the method whenNew to return a Mock object to test this class.
36 |
37 | Here are a few more examples. Similarly, mocking static methods and private methods is very simple and convenient when writing test cases. I recommend that you get familiar with the official wiki of PowerMock here. It has many powerful functions, and people who often write test cases will be very impressed.
38 |
39 | I encountered a problem during the practice process. There is an incompatibility issue between PowerMock and Jacoco. The reason is that a class is decorated in PrepareForTest. JaCoCo cannot perform coverage statistics in this class. Both of them implement the functions of statistical coverage and mocking static classes by modifying bytecode files when loading classes. JaCoCo inserts statistical code into the class when loading the class. However, when PowerMock uses the PrepareForTest annotation, it will re-read bytecode information from the class file when loading related classes, resulting in the modifications of JaCoCo being lost, so it cannot be statistically counted. The solution is to use the offline mode of JaCoCo. Look at me redefining the steps here. In the end, the path of the unit test coverage report is the same as before. Finally, just upload the coverage data.
40 |
41 | For example, after introducing PowerMock, when writing unit tests, no matter how complex the code method is, there can be corresponding relatively simple methods to implement. For example, the most complex is the manager test. If too many things are used and when running to a certain case, a lot of code needs to be written. If we construct a case, it is very complex. If the reporting method is used, it may be relatively simple. That's about it. Do you have any questions?
42 |
43 | * Andy
44 |
45 | What are the disadvantages or compromises of PowerMock for Java-tron tests? I see that you only shared the advantages.
46 |
47 | * Super
48 |
49 | The first is that the coverage statistics in not compatible with Jacoco. Although this has been solved, I don't think it is very sufficient. We still need to look at the specific situation of other modules later.
50 |
51 | The second is that it is based on Mockito. It can be understood as an extended version of Mockito. If Mockito has already been introduced, then PowerMock plays an icing on the cake role.
52 |
53 | * Andy
54 |
55 | How is its performance compared to before? Have you done a comparison?
56 |
57 | * Super
58 |
59 | Surely it is much better to use Mock. First, the dependency is removed. In terms of running speed, for example, the number of interfaces run per unit of time is obviously better than when running unit tests before. It is based on Mockito, but it has more powerful functions. However, if these functions are not used, there is not much effect. This depends on the specific situation.
60 |
61 | * Andy
62 |
63 | I understand. Does mocking these static methods and private methods still use Java's Reflection or something else at the bottom?
64 |
65 | * Super
66 |
67 | Yes, part of it uses Reflection, and part of it is bytecode manipulation. Basically, it can be understood that everything that Mockito cannot do but you want to use is added here. From the past unit test experience of Java-tron, for a case that was very troublesome to construct in the past and needed to write a unit test to run, PowerMock can solve it perfectly. There will be no case that cannot be solved.
68 |
69 | * Andy
70 |
71 | OK, I understand.
72 |
73 | * Super
74 |
75 | In addition, for newly written code in the future, a perfect 100% test coverage can also be achieved no matter how the code is written.
76 |
77 | * Super
78 |
79 | Any more questions? I see that some newly added unit tests have begun to be written with Mockito. I have looked at it. Many things that Mockito cannot solve can be solved by PowerMock. So I think it is very necessary to introduce it.
80 |
81 | * Andy
82 |
83 | Will there be a conflict if both are introduced to Java-tron?
84 |
85 | * Super
86 |
87 | No, they have corresponding versions. Its bottom layer also calls Mockito in part, and the other part is to strengthen it by modifying bytecode again. Lucas, do you have any opinions or questions?
88 |
89 | * Lucas
90 |
91 | No other questions for now.
92 |
93 | I suggest using Mock in the future and not depending on system startup. I basically use Mock for all my unit tests now.
94 |
95 | * Super
96 |
97 | Literally, there is no problem using Mockito. If we purely use Mockito, the code will be more complex. For example, when calling a private method, I see that when using Mock to call a private method, it is calling a private method using reflection. If PowerMock is used to call, the code is very simple. It has encapsulated all the content of calling private methods. There is no need to reprocess those things again. Just focus on construction and configuration.
98 |
99 | I have looked at the newly written unit tests and can do this. For some of the things that tested results fluctuated before, are the plans to keep them in the future? Do you have any ideas to redo them all over again? Do you have this idea?
100 |
101 | * Allen
102 |
103 | Is there a plan to refactor existing use cases with PowerMock later?
104 |
105 | * Super
106 |
107 | At present, I am working on improving coverage. However, for existing content, in-depth discussion may be needed. If the Mockito plus Power method is used for rewriting, it can indeed reduce the memory consumption of unit tests and execution speed, which is very helpful for the current situation. I think this issue can be discussed again.
108 |
109 | * Super
110 |
111 | I think we need to introduce the powerful content and functions of Power first, and then discuss in depth to see if refactoring is needed. If refactoring is done, the workload will be very large.
112 |
113 | * Allen
114 |
115 | So I understand that this still needs to be discussed and there is currently no plan.
116 |
117 | * Super
118 |
119 | That's right, currently only considering improving the unit test coverage rate.
120 |
121 | * Allen
122 |
123 | OK, I understand.
124 |
125 | * Super
126 |
127 | Any other questions? If not, I'll stop sharing here.
128 |
129 | * Jake
130 |
131 | Does anyone else have any questions? If not, today's meeting is over here. The next Call is tentatively scheduled for October 17. After that, we will adjust the development progress within the community in October according to the situation. Do you think it's okay?
132 |
133 | * Murphy
134 |
135 | Sure, 17th it is. If not in time, it could be postponed by one week to the 24th. Let's discuss this in the community.
136 |
137 | * Jake
138 |
139 | OK, that's it for today. Thank you all for attending. Goodbye!
140 |
141 |
142 |
143 | ### Attendance
144 | * Ray
145 | * Brown
146 | * Super
147 | * Andy
148 | * Allen
149 | * Lucas
150 | * Murphy
151 | * Jake
--------------------------------------------------------------------------------
/TRON Core Devs Meetings/Meeting 25.md:
--------------------------------------------------------------------------------
1 | # Core Devs Community Call 25
2 | ### Meeting Date/Time: October 24th, 2024, 7:00-8:00 UTC
3 | ### Meeting Duration: 45 Mins
4 | ### [GitHub Agenda Page](https://github.com/tronprotocol/pm/issues/101)
5 | ### Agenda
6 | * [ I cannot get results from api eth_getLogs sometimes](https://github.com/tronprotocol/java-tron/issues/6037)
7 |
8 | ### Details
9 | * Jake
10 |
11 | Hello everyone, let’s stop waiting for others and start now. I will check and let them know once they show up. We only have one topic to discuss today. An issue was raised on GitHub, where people complained about the eth_getLogs. It seems that, for some reason under certain circumstances, this API does not perform normally and return what was requested.
12 |
13 | Brown, you have dug into this one. Would you mind sharing your findings with us?
14 |
15 | * Brown
16 |
17 | Sure, one second.
18 |
19 | Everyone can see my screen, right? OK, this is a tricky one. Just now Jake briefly talked about it. I will explain the situation in detail.
20 |
21 | Someone in the community posted an issue regarding the return of the eth_getLogs interface. This interface requires an address and a specified block range to be passed in. Normally, it should return the logs and events related to the passed-in address. He gave an example in the issue, specifying an address and a range, but no log was returned. However, there are indeed logs for this address within this block range. He used the same interface with the JSON parameter and dropped the ‘address’ to verify it and successfully got the log. I tried to follow his steps to reproduce and found that the issue was real and it was a bug.
22 |
23 | I found other times in the block in his example and then used the relevant address of the relevant event as a parameter to call the eth_getLogs interface to query, and found that it could also be queried. But when using the address given in his issue to query, it could not be found. After that, I tried many other addresses and found that they could all query related events, which means the probability of this problem is extremely low. So I still focused on this specific address in his issue. I suspect that when this address is hashed in the code, the result may have a problem in the subsequent use of the code, that is to say, the problem may be caused by the specific result generated by the specific address, which leads to the occurrence of the exception.
24 |
25 | Based on this inference, I carefully look at the code of this interface and share it with you. The logic of writing and querying these logs to be queried is different, resulting in the writing conditions being more stringent than the querying conditions, which may be the cause of the problem. This interface has four main parameters, namely the address, two parameters of the block range, and the topic of the event. The data type of the address is an array, and the topic is a two-dimensional array. The length of the first dimension is 4, indicating the type of event, and the second dimension is unlimited, indicating the specific event.
26 |
27 | Now let's see how this event is written in. Actually, the main thing is to let the event pass through the bloom filter, and also use the bloom filter to search when looking for it. First, understand a definition. We define every 2048 blocks as a section. Each section corresponds to a key in the section bloom, and the value is a byte array with a length of 2048 * 2048, which is a matrix with an initial value of 0. When stored, it will be compressed with snappy and will be less than 4MB.
28 |
29 | After processing a block, traverse each transaction info in the transaction info list of this block. Each transaction info will have several events, and each event will have addresses and multiple topics. There are at most 4 topics in one event. The following is the data writing. First, generate the sha256 hash value of the address or topic; then apply 3 hash functions to the hash value to get 3 values, and the value range is [0, 2047]; then merge the positions of multiple events in a transaction, and then merge the positions of multiple transactions in a block to complete the writing of event data.
30 |
31 | Suppose the non-zero positions in this block are k0, k1 til km, the section corresponding to the block number is `s`, and the offset corresponding to the block number is f. Then read the bloom k0, bloom k1 til bloom km of section `s` from the database, set the f-th position to 1, and then write it back to the database. Only process the data of solidified blocks. Reading and writing only need one operation. This is the process of event writing.
32 |
33 | Now let's talk about data querying. When querying, a block range is given, and then the combination of address and topic is given, and then all events that meet the conditions are queried. First, calculate the sha256 hash of the address and the sha256 hash of each topic; then apply 3 hash functions to the hash value to get 3 values, and the value range is [0, 2047]. The following is the logical processing. Take the union of the values of the address and the topic. Suppose the positions of non-zero values are p0, p1 til pm; then split it into multiple sections according to the block number range: s, s + 1 til s + n. For section s, find the bitset values corresponding to bloom p0 to bloom pm, and then take the intersection of these m bitsets; suppose there are q non-zero values, that is, q offset blocks. Here, at most 10,000 block numbers are calculated. For the s-th section, the corresponding block number set is 2048 * s + the set of offset values. We take the transaction info list of the block corresponding to 2048 * s + the offset value, traverse the events corresponding to each transaction info, perform an exact match with the query conditions, and then merge and return all the results. If the block number range includes non-solidified blocks, directly read the in-memory data for traversal and matching. The method is the same. This is the whole process of event querying. This logic is actually much more complicated than what I said. Many conditions need to be considered, and it may not be possible to understand it just by looking at the code.
34 |
35 | Now let's talk about the cause of the problem mentioned in the issue. When the contract address is converted to bits by 3 hash functions and then written into the bitset, generally speaking, there will be 3 values after conversion, corresponding to 3 positions. However, there is a very small probability that there may be duplicate values among these three values, that is to say, two or even three of the values are the same, and ultimately there is a certain probability that the written value only occupies 2 or 1 position. However, in the reading logic, the bitset of the contract is forcibly set to 3 different values, and the unassigned ones default to 0, which is inconsistent with the data situation when writing, resulting in the inability to find it, because the length of the non-zero value found may be smaller than 3, which is 1 or 2. This is the cause of this problem. So here, adjust the code. Change the fixed-length data to ArrayList, and convert it to an array after writing the data, and this problem can be solved.
36 |
37 | Actually, it is a very simple problem. Essentially, it is a hash collision problem. Throwing 3 data into a hash bucket with a length of 2048 at the same time, the probability that at least 2 data occupy the same position is easily calculated. The denominator is all the situations, and the numerator is the number of collisions of two values.
38 |
39 | I downloaded the contract library and tried it. I scanned 2.5 million addresses and found that there are about 3,700 contract addresses that will have collision problems, with a probability of 0.148%, that is to say, given an address or topic, the probability of not being able to find it is about 0.148%. Here, everyone can simply understand it.
40 |
41 | Does anyone have any opinions or questions?
42 |
43 | * Jake
44 |
45 | Regarding this problem, what measures should be taken currently?
46 |
47 | * Brown
48 |
49 | It is here, `new int[3]`. Change the array here to an arraylist. Any amount of data can be put into it. In this way, the situation of having 0 value can be completely avoided, and the conditions for writing and querying can be guaranteed to be the same, so that this problem is solved.
50 |
51 | * Jake
52 |
53 | Has this adjustment or measure been finalized?
54 |
55 | * Brown
56 |
57 | Yes, I have tested it and there is no problem.
58 |
59 | * Jake
60 |
61 | Currently, the 0.148% of addresses actually cannot be found under the current logic, because the value after the hash operation is certain, so there will definitely be a collision. Am I understanding correctly?
62 |
63 | * Brown
64 |
65 | Yes, for those 3,700 addresses, no result can be returned under the current code operation. Unless it is a non-solidified block, that is, the event is traversed from the memory, because that does not need to pass through the bloom filter.
66 |
67 | * Jake
68 |
69 | Then there should be no development difficulty. It is a very small adjustment. Is this adjustment expected to go online soon?
70 |
71 | * Brown
72 |
73 | There is currently no clear plan. There is indeed no development difficulty. This problem is not very serious at present. The main thing is that the logic is rather complicated, and it is also very difficult to read the code. But after the problem is clarified, it is actually very simple. The go-live time has not been determined yet.
74 |
75 | * Jake
76 |
77 | OK, thank you. Does anyone else have any questions?
78 |
79 | If there are no questions, today's Community Call is over. Thank you all for your time. Goodbye!
80 |
81 |
82 |
83 |
84 | ### Attendance
85 | * Brown
86 | * Andy
87 | * Allen
88 | * Daniel
89 | * Super
90 | * Murphy
91 | * Jake
--------------------------------------------------------------------------------
/TRON Core Devs Meetings/Meeting 26.md:
--------------------------------------------------------------------------------
1 | # Core Devs Community Call 26
2 | ### Meeting Date/Time: November 7th, 2024, 6:00-7:00 UTC
3 | ### Meeting Duration: 55 Mins
4 | ### [GitHub Agenda Page](https://github.com/tronprotocol/pm/issues/104)
5 | ### Agenda
6 | * [ eth_getblockbynumber supports finalized except latest, pending and blocknumber](https://github.com/tronprotocol/java-tron/issues/5953)
7 | * [TIP-697: Migrate Floating-Point Calculations from Math to StrictMath](https://github.com/tronprotocol/tips/issues/697)
8 |
9 | ### Details
10 | * Jake
11 |
12 | Welcome everyone to Core Devs Community Call 26. Today we have two topics to discuss. The first one is about the adjustment of the eth_getblockbynumber interface, which was submitted by Wayne. The second one is an old topic, some updates on the migration of the floating-point operation method in Java-tron.
13 |
14 | Now let's start in order. Wayne, would you like to go first?
15 |
16 | * Wayne
17 |
18 | Okay, just a moment. I can't share my screen. There is a problem. Can anyone help me share it?
19 |
20 | * Jake
21 |
22 | Is it the GitHub issue page that you want to share? I'll do it.
23 |
24 | * Wayne
25 |
26 | Thank you.
27 |
28 | OK, when I am developing, I usually have a need. If I obtain blocks through JSON-RPC, which is the Ethereum interface, currently I can only get the un-solidified blocks, right? Sometimes I want to get the solidified blocks, but currently, the interface level does not support such parameters as the “finalized” parameter in Ethereum. This kind of parameter is not supported in Java-tron. So the idea I want to propose is to support the “finalized” parameter, which is the same as the solidified state in TRON, in the eth_getblockbynumber interface. This is the scenario where I raised this issue.
29 |
30 | The current situation is that I have modified several interfaces. Since TRON does not support the state tree, many interfaces cannot obtain data by block number. So I adjusted the eth_getblockbynumber interface and added this parameter that is equivalent to Ethereum. Later, I discussed with Brown in the community. Brown believes that we should not only adjust one interface. If we want to adjust, we should add similar parameters to all the JSON-RPC interfaces. His reason is that if TRON does not support it at the mechanism level, many times when other interfaces are called, errors will be returned. However, due to the workload of development, currently, we only consider adjusting the three interfaces of eth_getBlockByNumber, eth_getBlockTransactionCountByNumber, and eth_getLogs. The implementation logic is the same. By recognizing the “finalized” parameter, we can get the corresponding data of the solidified block. For other interfaces, such as obtaining the balance by specifying the block number, I did not make any adjustments. I just let them return an error when they recognize the finalized parameter. This is roughly the implementation of this issue. Do you have any questions?
31 |
32 | * Jake
33 |
34 | What do you think of this implementation, guys?
35 |
36 | Wayne, I have a question. Regarding this issue, do you have any other materials to supplement? On the GitHub issue, that is, the page we are looking at now, there is very little information. For example, the content in the specification and subsequent paragraphs has not been filled in yet.
37 |
38 | * Wayne
39 |
40 | Well, a lot of content is discussed in the comments section below. Brown's suggestions are also in the comments section.
41 |
42 | * Jake
43 |
44 | So is the implementation plan basically determined now?
45 |
46 | * Wayne
47 |
48 | Yes, it is almost determined. There are no other problems.
49 |
50 | * Jake
51 |
52 | Then please explain the detailed implementation approach and the scope of the adjusted interfaces in the specification.
53 |
54 | * Wayne
55 |
56 | Okay, I will fill it in later. I will list the content I just talked about in this issue.
57 |
58 | * Jake
59 |
60 | Okay. Many people will check the issue page. If it is not listed and people are trying to learn the issue in advance, like in today's meeting, it will take them some time to understand the specific content, and they may not be able to raise any questions for a while.
61 |
62 | * Wayne
63 |
64 | I understand. After I fill in the content, everyone can discuss further under the issue further.
65 |
66 | * Jake
67 |
68 | Any other questions? If there are no questions, let's move on to the next topic. Boson, would you like to update us on the situation of the calculation method migration?
69 |
70 | * Boson
71 |
72 | Okay, just a moment. Let me share my screen.
73 |
74 | This topic has been mentioned before. Now I have organized it into a TIP. Let's take a look. Let me briefly introduce it. Up to the v4.7.6 version, Java-tron has been using the java.lang.Math class for floating-point calculations. The java.lang.Math class may have different calculation results for the same input on different hardware platforms and different JDK versions. So far, all versions of Java-tron only support the JDK8 and x86 environments, and there will be no data inconsistency due to the java.lang.Math class. Previously, when upgrading to JDK11, in the attempt on the ARM architecture, a database inconsistency was found. The specific problem was caused by the floating-point operation result of Math. If Java-tron considers supporting cross-platform and more JDK versions in the future, then it needs to replace the java.lang.Math class with the java.lang.StrictMath class, which has consistent calculation results on cross-platform and higher JDK versions.
75 |
76 | The following is a list of all the methods of the Math class used in TRON, such as pow, ceil, round, min, max, signum, abs, and the int type methods addExact, floorDiv, multiplyExact, subtractExact. Among all the calculation types used in TRON, only the calculation result of pow will be inconsistent in a cross-platform environment.
77 |
78 | There are two scenarios where the results are inconsistent, which have been mentioned before. For example, in the Bancor transaction, the calculation of the 2000th power and the 2000th root. The other one is in the dynamic energy model, there is a decay model, which also uses pow. Currently, it is considered to replace these two methods through a proposal.
79 |
80 | I also did tests in these two scenarios. In the Bancor transaction, we can see here that when doing the square root operation, Math is faster and has better performance than StrictMath; but when doing the power operation, StrictMath is still faster than Math. The unit here is nanoseconds. For TRON's millisecond-level transactions, the impact can be ignored. Moreover, for the comprehensive performance of the power and square root operations, their operation times can cancel each other out. The difference between the two methods is 300 nanoseconds, one positive and one negative. So for the Bancor transaction scenario, there is no performance loss.
81 |
82 | For the dynamic energy model scenario, the contract will only call this method once within a maintenance period, which is 6 hours. The frequency is extremely low. The power value of the operation is equal to the number of rounds of the current maintenance period when calling the contract minus the number of rounds of the maintenance period when the last time calling the contract. That is to say, for a popular contract being called each maintenance period, the power value of this operation is 1. In this case, let's look at the performance test. Only in the first maintenance period, the performance of Math is higher than that of StrictMath. From the second maintenance period onwards, the performance of StrictMath is better than Math's. The operation time of Math.pow is 75 nanoseconds, while StrictMath.pow only needs 17 nanoseconds. These are all nanosecond-level differences, and for the overall transaction performance, it can be said that there is no impact.
83 |
84 | That's about it. Do you have any ideas?
85 |
86 | * Lucas
87 |
88 | Does this change need to be implemented through a proposal?
89 |
90 | * Boson
91 |
92 | Yes, it is necessary. Because the calculation results are inconsistent, it will be a hard fork. This is a change to the calculation logic and requires a proposal. If this proposal is passed, then Java-tron will theoretically be able to support versions after JDK8 and the ARM architecture.
93 |
94 | * Ray
95 |
96 | I have a question. How can we be sure that using the StrictMath method can ensure completely consistent calculation results across platforms?
97 |
98 | * Boson
99 |
100 | This is clearly stated in the Java official documentation. We have also done verification tests, and there is no problem. In fact, the results of basic operations are the same between Math and StrictMath. Only the complex operation of pow in TRON will have inconsistent results.
101 |
102 | * Brown
103 |
104 | So after that, the newly written code cannot use Math anymore, right?
105 |
106 | * Boson
107 |
108 | Yes. After the proposal is passed, new development and code should use the StrictMath class.
109 |
110 | * Brown
111 |
112 | In fact, only the consensus part that needs to be written to the database must use StrictMath. It doesn't matter if Math is used in other parts.
113 |
114 | * Boson
115 |
116 | What is the significance of having to use Math in those scenarios? If the proposal is passed, I suggest using StrictMath whenever possible. This also makes the code more standardized and unified.
117 |
118 | * Allen
119 |
120 | I also have a question. Maybe I didn't hear clearly. Math.pow has different calculation results on different architecture platforms, right?
121 |
122 | * Boson
123 |
124 | Not only among different architectures but also among different JDK versions.
125 |
126 | * Allen
127 |
128 | So are the calculation results of these two methods the same on the same JDK version and platform?
129 |
130 | * Boson
131 |
132 | On the JDK8 version and X86 platform, the results are also inconsistent.
133 |
134 | Any other questions?
135 |
136 | * Jake
137 |
138 | Does anyone else have any questions?
139 |
140 | Regarding the adjustment of the JSON-RPC interfaces, Brown, do you have anything to add? You participated a lot in the GitHub discussion before.
141 |
142 | * Brown
143 |
144 | Trongrid currently only opens the 8545 port. The other ports, 8555 and 8565, are not supported, right?
145 |
146 | * Boson
147 |
148 | There is no need to open so many ports.
149 |
150 | * Wayne
151 |
152 | Yes, opening too many ports will confuse developers and is not user-friendly.
153 |
154 | * Brown
155 |
156 | I just want to make sure that after the development is completed, the ports on the client side and the service provider side are the same, and there are no omissions that might cause errors.
157 |
158 | * Ray
159 |
160 | I think if we want to adjust the JSON-RPC interface, we should follow the principle of being compatible with Ethereum. Because Ethereum uses only that one port, so TRON should also be compatible with it in the design. We can use only one port and distinguish the states with parameters. Don't open multiple ports. This does not conform to the design principle of TRON.
161 |
162 | * Wayne
163 |
164 | Yes, currently we do not consider using ports other than 8545.
165 |
166 | * Boson
167 |
168 | One more question, Java-tron currently does not support the pending state, right?
169 |
170 | * Wayne
171 |
172 | Yes, TRON does not support the earliest and pending states because TRON does not have a state tree. The pending state in TRON refers to the transactions in the pending pool.
173 |
174 | * Boson
175 |
176 | So what are the pending and latest states in Ethereum like?
177 |
178 | * Wayne
179 |
180 | In Ethereum, the latest transaction state means that this transaction has been executed locally, and since it is in a distributed network, it has not reached a consensus and there is a possibility of being rolled back. This is my understanding. And the transactions in the pending pool have not been executed yet.
181 |
182 | * Boson
183 |
184 | This is indeed different from the pending state in TRON. In the TRON network, the transactions in the pending pool have all been executed, but they have not been packaged yet, so they are placed in the pending pool. That is to say, the latest state in Ethereum corresponds to the pending state in TRON.
185 |
186 | * Wayne
187 |
188 | Most likely, that is the case.
189 |
190 | * Brown
191 |
192 | This issue still needs to be evaluated. It is currently in a relatively initial state, and it is not certain when it can be launched.
193 |
194 | * Jake
195 |
196 | Any other questions?
197 |
198 | That's all for today. Thank you all for your time. Goodbye!
199 |
200 |
201 |
202 |
203 | ### Attendance
204 | * Brown
205 | * Andy
206 | * Allen
207 | * Daniel
208 | * Lucas
209 | * Wayne
210 | * Boson
211 | * Federico
212 | * Ray
213 | * Aaron
214 | * Super
215 | * Murphy
216 | * Jake
217 |
--------------------------------------------------------------------------------
/TRON Core Devs Meetings/Meeting 28.md:
--------------------------------------------------------------------------------
1 | # Core Devs Community Call 28
2 | ### Meeting Date/Time: December 5th, 2024, 6:00-7:00 UTC
3 | ### Meeting Duration: 60 Mins
4 | ### [GitHub Agenda Page](https://github.com/tronprotocol/pm/issues/106)
5 | ### Agenda
6 | * [Introduce delegating resource usage right](https://github.com/tronprotocol/tips/issues/671)
7 | * [TIP-697: Migrate Floating-Point Calculations from Math to StrictMath](https://github.com/tronprotocol/tips/issues/697)
8 | * Mechanism Discussion of Permission Management
9 |
10 | ### Details
11 |
12 | * Jake
13 |
14 | Today we are having Core Devs Community Call 28. We have three topics to discuss, and we've added one more topic temporarily, which was submitted by Brown. We will discuss that later.
15 |
16 | Let's follow the agenda and start with the first topic. Who is the submitter of this topic? Are they in the meeting?
17 |
18 | * Murphy
19 |
20 | I will be presenting this topic. This request was proposed based on feedback I gathered from the community.
21 |
22 | * Jake
23 |
24 | Alright, go ahead!
25 |
26 | * Murphy
27 |
28 | Boson, are you here? If you have something urgent, you can present the second topic instead since you submitted it.
29 |
30 | * Boson
31 |
32 | I'm good, we can go in order. Go ahead.
33 |
34 | **Introduce Delegating Resource Usage Right**
35 |
36 | * Murphy
37 |
38 | The topic is "Introduce Delegating Resource Usage Right." This was a request from a project in the community that wants to introduce a new mechanism on TRON called the "resource usage right."
39 |
40 | Let me explain this with an example. They want to address A to delegate X amount of energy to address B. In essence, it’s delegating the resource usage right. After delegation, the energy still remains in address A, but the usage right is given to B. When address B needs to use the energy, if the energy usage is within the delegated amount, it will be deducted from address A directly. If the usage exceeds the delegated limit, the excess will be consumed from address B’s energy. This was the initial idea—to introduce this resource usage right mechanism. I briefly discussed this with Daniel earlier, and it involves changes to the underlying logic of TRON, which would be difficult to implement. Therefore, the team hoped the developers could consider the technical challenges more deeply. Recently, the project team asked for progress updates, so I explained the situation to them. Now, we have a new plan using a multi-signature approach to create a new type of transaction and aggregate transactions using multi-sig. When making the transaction, they can specify which address in the multi-sig wallet should consume the energy. This plan seems feasible, so I wanted to bring it up in today’s meeting to see if the approach they want is viable. If it is, we can discuss how to proceed.
41 |
42 | * Jake
43 |
44 | Murphy explained it very clearly. Does anyone have any thoughts? Feel free to share, and it’s not limited to these two options.
45 |
46 | * Aaron
47 |
48 | I have a question. If the multi-sig option is used, does that mean every transaction requires the signature of the energy owner?
49 |
50 | * Murphy
51 |
52 | Yes, mainly the private keys for hot wallet addresses.
53 |
54 | * Aaron
55 |
56 | Does this resemble the current delegate and undelegate process? They would need to sign for each transaction, but if they need to aggregate transactions, it doesn’t seem to save much in terms of operations.
57 |
58 | * Murphy
59 |
60 | The goal is that the project team needs to aggregate energy payments for transactions and directly specify which main hot wallet address will consume the energy. If the previous method was used, the project team would first need to delegate, then the sub-address would perform a transfer transaction, and the main address would later undelegate. At least three transactions are required to complete the aggregation. Because there are many addresses, the process becomes time-consuming. The core issue from the community’s perspective is that the whole process is too cumbersome.
61 |
62 | * Aaron
63 |
64 | I understand now. I thought of a zero-gas platform built by another team, and this solution might be suitable for the situation. It essentially doesn't require many changes to TRON. Instead, an external platform could use a script to complete the aggregation. This would be like using a script to automate the previous three steps and avoid redundant operations while ensuring that the energy consumption is handled by the same main address.
65 |
66 | * Murphy
67 |
68 | I’m not familiar with the zero-gas platform in detail, but is the functionality similar? If so, Aaron, could you comment on this issue and briefly describe this solution?
69 |
70 | * Aaron
71 |
72 | Sure. Actually, it's not an on-chain platform but a centralized one. Let’s see how the community responds to this solution and how the project team accepts it. One other point I want to mention is that, based on Murphy’s new plan, adding a new transaction type might not fully meet the project team’s needs. I think they’re looking for something similar to exchange aggregation actions, which might involve TRX and USDT, right?
73 |
74 | * Murphy
75 |
76 | Yes, both TRC-10 and TRC-20 are involved.
77 |
78 | * Aaron
79 |
80 | Then there could be more complex operations like calling smart contracts during aggregation. Adding a new transaction type might not meet the project team's needs. So, I think a standalone platform, designed externally to minimize chain-side development requirements, would be a better solution.
81 |
82 | * Jake
83 |
84 | Okay, if there are no more questions, let’s move on to the next topic. Boson will update us on the latest progress regarding the migration of calculation methods.
85 |
86 | **TIP-697: Migrate Floating-Point Calculations from Math to StrictMath**
87 |
88 | * Boson
89 |
90 | Can everyone see my screen? I’ll give a brief update on the current situation. The migration of the pow floating-point calculation method has been included in version 4.7.7 and can be activated through a proposal. This TIP is divided into two stages:
91 |
92 | * Stage 1: Migrate the pow operation from `java.lang.Math` to `java.lang.StrictMath`.
93 | * Stage 2: Migrate all other operations from `java.lang.Math` to `java.lang.StrictMath`.
94 |
95 | Afterward, the TRON development code will no longer allow using Math for numerical calculations.
96 |
97 | After statistics, we found that operations using Math still exist in the list. These operations include addition, subtraction, multiplication, and division, which don’t involve floating-point operations, so the results are the same as StrictMath. The other operations like `max`, `min`, `signum`, `round`, `abs`, `random`, and `ceil` also have results identical to those of strictMath, although some of them may still be internally called Math methods. The only operation that differs is `pow`, which has already been migrated to StrictMath. Some pow operations in TRON are still not replaced because they are integer power calculations, and their results are identical.
98 |
99 | Stage 2 is to directly replace these operations in the next version without needing a proposal. The implementation includes a `strictMathWrapper` that unifies the calls to strictMath. We are also using GitHub Actions, which checks every commit to see if Math is used, and if so, the CI will throw an error. That's the current plan, and any thoughts on this TIP?
100 |
101 | * Jake
102 |
103 | I have a question: Do Stage 1 and Stage 2 have a specific timeline?
104 |
105 | * Boson
106 |
107 | Stage 1 has already been included in version 4.7.7. Stage 2 is planned to be included in the next major version.
108 |
109 | * Brown
110 |
111 | Since the calculation results of all methods except `pow` are the same, why do we need to migrate everything to StrictMath? Why not just leave Math for those who don't have differences?
112 |
113 | * Boson
114 |
115 | Let me explain. While the results of all methods except `pow` are currently the same between Math and strictMath, there’s no guarantee that they will remain consistent in the future. Some of the calculations in Math can be implemented using native code, such as `ceil`. But strictMath has fixed implementations, ensuring consistent results. If we don’t unify under strictMath, we might face inconsistencies in the future as new features are added. Mixing the two could lead to potential calculation discrepancies.
116 |
117 | Ethereum clients, for example, use `big int` for all calculations and avoid floating-point calculations at the lowest level, ensuring consistency.
118 |
119 | * Jake
120 |
121 | Boson’s point is that unifying the calculation methods ensures we avoid potential inconsistencies in the future.
122 |
123 | * Boson
124 |
125 | Exactly, it eliminates that issue. Any further questions?
126 |
127 | * Jake
128 |
129 | If not, let’s move on to the next topic. This one was submitted by Brown.
130 |
131 | **Mechanism Discussion of Permission Management**
132 |
133 | * Brown
134 |
135 | Today, I want to use the opportunity to discuss Ethereum's Geth interface permission management mechanism to explore how we should implement interface permission management for TRON in the future. Currently, Java-tron does not have this functionality, but it's quite necessary to implement it.
136 |
137 | Java-tron currently manages interface access through port differentiation, while Ethereum's Geth controls different functionalities through different namespaces. Here's an overview of Geth's interface permission management mechanism.
138 |
139 | The first mechanism is access restriction, which allows access only from specific IP addresses. In Geth, this is implemented by specifying IPs during node startup, using the `--http.addr` and `--http.port` parameters to restrict HTTP-RPC service access. This ensures that remote hosts cannot access it directly. Additionally, allowed domains can be specified using the`--http.corsdomain` parameter to restrict access to the RPC from certain domains.
140 |
141 | The second mechanism is enabling and disabling specific modules. Using the `--http.api` and `--ws.api` parameters, you can specify which modules are enabled, preventing the exposure of sensitive modules. For example, only the `eth` and `net` modules can be enabled. In terms of API modules, a namespace is a space to categorize APIs; a service hosts these namespaces, and multiple namespaces can be grouped under one service. The authenticated field indicates whether an API requires authentication before it can be accessed. Some fields like `version` and `public` are deprecated now. Geth has several modules, such as `admin`, `debug`, `eth`, `les`, `net`, etc. Some modules, like `personal` and `miner`, have been deprecated.
142 |
143 | The third mechanism is JWT authentication (JSON Web Token). To use Geth's authenticated APIs, a `--authrpc.jwtsecret` parameter can specify the JWT secret key file (in hexadecimal format) for verification. Without this secret, access to these APIs will be denied. Since Ethereum nodes may expose JSON-RPC APIs that allow users to interact with the blockchain, JWT can prevent unauthorized access. With the JWT secret, we can ensure that only authorized parties can generate valid JWTs, preventing man-in-the-middle attacks or data tampering.
144 |
145 | The above three mechanisms are some of the key features of Geth. Other mechanisms, such as logging, firewall settings, and HTTPS, are more similar to Java-tron, so they are not the main focus of this discussion.
146 |
147 | To summarize: Geth controls the accessibility of APIs and namespaces during node startup using the `--http.api` parameter; each API/namespace corresponds to a service, which may contain multiple APIs; the same port is used for all HTTP/JSON-RPC services; IP or domain access restrictions can be set; JWT secrets can be used for API authorization, ensuring that only authorized users can access certain APIs.
148 |
149 | For Java-tron, we can take inspiration from Ethereum's methods by dynamically maintaining IP blacklists and whitelists or controlling access based on time parameters during virtual execution. We can also add extra validation steps during interface access to achieve similar results. That's pretty much the gist of it. Any ideas?
150 |
151 | * Jake
152 |
153 | Brown, this hasn't been posted on GitHub yet, right? If it's for open discussion, once you have a concrete proposal, please post it as soon as possible so the community can discuss it.
154 |
155 | * Brown
156 |
157 | I understand. This is just a preliminary investigation to see how others have done it, and I’ll organize a more concrete plan and post it for discussion later.
158 |
159 | * Allen
160 |
161 | Can you give an example of how identity verification is done? At which stages?
162 |
163 | * Brown
164 |
165 | Are you referring to JWT? This hasn't been fully considered yet, but it's an open standard, and there are many examples. It's not difficult to implement.
166 |
167 | * Andy
168 |
169 | I remember that in Ethereum when deploying consensus layer and execution layer clients, they used JWT for authentication between them.
170 |
171 | * Allen
172 |
173 | Besides IP restrictions and JWT, how is module restriction implemented?
174 |
175 | * Brown
176 |
177 | It is like the code is running, but access to the corresponding module or private spaces is restricted. The module itself is operational, but certain parts are inaccessible.
178 |
179 | * Andy
180 |
181 | Can Ethereum clients also restrict which specific methods in a module can be called, and which cannot? Can it be that granular?
182 |
183 | * Brown
184 |
185 | It seems not. The granularity is usually limited to module-level access control, not down to individual method calls.
186 |
187 | * Jake
188 |
189 | Please post it as soon as you have a clearer direction.
190 |
191 | * Brown
192 |
193 | Got it. I’ll move forward with that.
194 |
195 | * Jake
196 |
197 | Any other thoughts? If not, let’s wrap up today’s meeting. Goodbye, everyone!
198 |
199 |
200 |
201 | ### Attendance
202 | * Brown
203 | * Andy
204 | * Allen
205 | * Boson
206 | * Daniel
207 | * Lucas
208 | * Ray
209 | * Aaron
210 | * Super
211 | * Murphy
212 | * Jake
--------------------------------------------------------------------------------
/TRON Core Devs Meetings/Meeting 29.md:
--------------------------------------------------------------------------------
1 | # Core Devs Community Call 29
2 | ### Meeting Date/Time: December 19th, 2024, 6:00-7:00 UTC
3 | ### Meeting Duration: 60 Mins
4 | ### [GitHub Agenda Page](https://github.com/tronprotocol/pm/issues/107)
5 | ### Agenda
6 | * Upgrade Mockito and Replace PowerMock
7 | * [Optimize System.exit Usage](https://github.com/tronprotocol/java-tron/issues/6125)
8 |
9 | ### Details
10 |
11 | * Jake
12 |
13 | Hi everyone, we’ve got a couple of newcomers from the community today, and we have two topics to cover. One is Upgrade Mockito and Replace PowerMock, and the other is Optimize System.exit Usage.
14 |
15 | Super, are you ready to share with us?
16 |
17 | * Super
18 |
19 | No problem, I’ll go now. Can you see my screen?
20 |
21 | * Jake
22 |
23 | You're good to go.
24 |
25 | **Upgrade Mockito and Replace PowerMock**
26 |
27 | * Super
28 |
29 | So here’s the background on this topic: When we were using PowerMock, it was really convenient to mock static methods and constructors using `mockStatic` and `whenNew`. However, after upgrading the JDK, I found that PowerMock is no longer being maintained and doesn’t support JDK 17. After doing some research, I found that Mockito can replace PowerMock.
30 |
31 | This issue is about upgrading to a higher version of Mockito, specifically using `Mockito.mockStatic` and `Mockito.mockConstruction` to meet our needs, including constructor mocking.
32 |
33 | Looking into it, Mockito’s advanced versions, 4.0 and above, are split into two modules: mockito-core and mockito-inline. The core module covers most of the common Java testing scenarios, and it’s suitable for mocking regular classes and interfaces. If there are no special requirements, just using mockito-core should work fine for us.
34 |
35 | On the other hand, the inline module is for more special cases, like mocking static methods, constructors, and final classes.One thing to note: starting from version 5.0, the inline features have been merged into the core module, so for Java-tron, the core module alone can meet our requirements. However, version 5.0 only supports JDK 11 and above, and we still need to support JDK 8 in our project, so we can’t use version 5.0 directly. That’s why this issue is based on Mockito 4.0.
36 |
37 | Boson, do you have any thoughts on this?
38 |
39 | * Boson
40 |
41 | No issues here. I was planning to upgrade PowerMock as part of the JDK 17 upgrade anyway, so since you’ve already looked into this, I can focus on other tasks.
42 |
43 | * Super
44 |
45 | Great, I’ve already done some testing. Although Mockito can replace PowerMock, it’s not super friendly for mocking private methods. Mockito doesn’t support private methods directly, so we’d have to use reflection to call them. Alternatively, we can rethink the approach. Usually, private methods have a public entry point, and private variables can be set via reflection. Even with the upgraded version of Mockito, it doesn’t fully support private methods. But for mockStatic, mockConstruction, and final class support, it works well.
46 |
47 | One concern is that if Java-tron uses Mockito’s inline module, it could impact overall performance because it involves bytecode manipulation. I ran some tests, and it wasn’t too bad—running 2120 unit tests went from 22 minutes to just over 23 minutes, which is still acceptable. Test coverage also improved to over 70%, adding 700+ lines of code coverage based on the pull request I submitted.
48 |
49 | To summarize the versioning: Mockito 4.0 supports JDK 8 to JDK 17, while version 5.0 only supports JDK 11 and above. All the discussion above is based on Mockito 4.0. Any questions from anyone?
50 |
51 | * Boson
52 |
53 | No other questions for now. After this feature is live, we’ll probably stop using Spring-based test startup, right?
54 |
55 | * Super
56 |
57 | Yes. There are two aspects to consider here: one is service startup. We’ll need to improve this since many places in the code start services, and the ports they use clash, causing some services to fail to start. The other aspect is with databases, many test cases use `openDatabase`, and if we use mocks instead, the performance would improve significantly, making the tests run faster.
58 |
59 | Since there’s too much legacy code to modify, it’ll be more of an ongoing process, with people adjusting as they go. But I think around 24 minutes for the tests is still acceptable.
60 |
61 | * Boson
62 |
63 | Is there a plan to improve CI performance and bring the build time under 15 minutes?
64 |
65 | * Super
66 |
67 | That would go hand-in-hand with the parallel execution of unit tests we discussed earlier.
68 |
69 | * Boson
70 |
71 | Here’s the thing: there are about 2000 tests now, and a lot of them are repetitive. For example, many database-related tests are covered across different services, so removing those redundant tests could help lower the execution time.
72 |
73 | * Super
74 |
75 | The redundancy issue isn’t fully clear yet. After the Mockito upgrade, many of the test cases will need some adjustments. But as long as we keep parallel execution, we should be able to bring the time down to around 15 minutes. If we also remove the duplicate tests, we should be able to keep it under 15 minutes.
76 |
77 | By the way, you mentioned there’s an issue with test run times being really long on Mac OS, what was that about?
78 |
79 | * Boson
80 |
81 | That issue only happens with Mac OS 12. After upgrading to version 14 or 15, it’s fine.
82 |
83 | * Super
84 |
85 | Alright, so it’s not related to our current work. This feature should be included in version 4.8.0. I’ve already submitted the PR. If there are no more questions, I’ll wrap up my part.
86 |
87 | * Boson
88 |
89 | Okay, I’ll start sharing then.
90 |
91 | * Jake
92 |
93 | Sounds good!
94 |
95 | **Optimize System.exit Usage**
96 |
97 | * Boson
98 |
99 | My topic is pretty simple. It's about optimizing the use of `System.exit` in the system. Currently, there are several cases where `System.exit` is called directly to shut down the system after encountering specific exceptions. While this approach is straightforward, it leads to a few technical debts:
100 | 1. Poor maintainability: Scattered `System.exit` calls make it hard to trace and maintain the program flow.
101 | 2. Testing issues: Code with `System.exit` is hard to unit test because it causes Gradle tests to unexpectedly terminate, which messes up code coverage stats and reduces the reliability and stability of CI.
102 | 3. Resource cleanup risks: `System.exit` doesn’t run finally blocks, meaning resources like database connections or file handles might not get closed properly.
103 |
104 | Right now in TRON, there are a dozen places where `System.exit` is used to exit the system. The problem with this command is that it doesn’t collect any information and exits immediately, so it’s difficult to trace the exit reason in the stack trace.
105 |
106 | The improvement I propose is to replace `System.exit` with throwing an error instead. So, whenever the system would have called `System.exit`, it should throw an error instead. Then, at the top level, we can have a unified exit logic based on that error. This makes it much easier to test the business logic.
107 |
108 | In terms of design, I suggest using errors instead of exceptions. For example, we could have a `TronError` as the base class with several subclasses based on the places where we’ve identified the need to exit. Some examples are `ConfigurationError`, `DatabaseError`, `EventSubscribeError`, and `OtherError`. Once we have these errors categorized, we can throw the appropriate error at the places where we previously had `System.exit`, and then exit from there.
109 |
110 | Previously, when we encountered `System.exit` in tests, we would use a JAR to intercept it. But this JAR is no longer supported in JDK 17, so solving the `System.exit` problem is essential if we want to upgrade to JDK 17.
111 |
112 | After making these changes, there are a few exceptions we need to be aware of. The first is when argument parsing fails, such as during SR node startup with keystore file. In the old setup, the main process would exit, but now we throw a `ConfigurationError` and then exit, so this behavior is consistent with before. We’ll need to track this further.
113 |
114 | Another issue happens during Spring initialization when errors are thrown, like `ConfigurationError` or `DatabaseError`, and it leaves two leftover processes called Thread-3 and leveldb. We haven’t pinpointed the exact cause of this yet, so we’ll need to track it as well.
115 |
116 | That’s about it. Any questions?
117 |
118 | * Andy
119 |
120 | So, your solution is essentially wrapping all those scattered `System.exit` calls into different error types. You throw an error, and instead of immediately handling it, you let it propagate to the top level where you have a unified exit logic, right? And where exactly does the exit logic happen?
121 |
122 | * Boson
123 |
124 | Yes, that’s correct. There’s a global thread handler for handling exits, kind of like a listener. If we don’t use that, we’ll need to design a new global handler for the errors.
125 |
126 | * Andy
127 |
128 | I understand now that you're handling `System.exit`, which isn't part of the business logic, at the top level. You don’t need to include any business-specific details, just check for the error and exit accordingly.
129 |
130 | * Boson
131 |
132 | Right, there won’t be any new logic. We’ll just change where the exit happens, but the exit itself remains the same. The exit will still occur, but now it will happen at the top level if it’s not handled by any lower layers. However, as I mentioned, there are still two threads `Thread-3` and `leveldb` created during Spring initialization that are causing issues when trying to exit. We still need to figure out the cause of those.
133 |
134 | * Ray
135 |
136 | Are you concerned about those two threads because they’re preventing a clean exit?
137 |
138 | * Boson
139 |
140 | Yes, that’s the issue.
141 |
142 | * Ray
143 |
144 | Earlier, you were talking about throwing errors and then handling the exit logic yourself, but I was wondering if you’re still relying on the JVM’s exception handling to exit automatically? I’m not sure which option you’re going with. If you choose the first one, where you handle the exit yourself, would the daemon threads still cause issues?
145 |
146 | * Boson
147 |
148 | Yes, I’m still proposing that we handle the exit manually. The issue is that the leftover daemon threads prevent a clean exit, so we’ll still need to use a similar approach to the one we have now to handle the shutdown process.
149 |
150 | * Lucas
151 |
152 | So, the plan is to throw errors up to the top level and let that handle the exit? How do you ensure that the top-level entry point is in the right place?
153 |
154 | * Boson
155 |
156 | I’ve traced it in the stack trace. I’ll list all the places where this happens in the issue for everyone to review and check for any mistakes. For example, during the startup phase, we throw the error directly in the main method. In other cases, like transaction processing, the logic is divided into layers like the interface layer, P2P layer, and repush layer. Block processing also has various threads for block production, syncing blocks, and processing messages via P2P.
157 |
158 | * Lucas
159 |
160 | So, Spring initialization errors will be thrown to main, right?
161 |
162 | * Boson
163 |
164 | Yes, exactly. Since Spring is running in the main thread, any errors there will go directly to main. Other errors will be thrown to their respective layers or threads.
165 |
166 | * Ray
167 |
168 | When you throw errors to the top level, what exactly do you mean by "top level"? Is there a chance that these errors could be caught elsewhere before they reach the top level?
169 |
170 | * Boson
171 |
172 | I’ve identified the top level based on the stack trace, it’s where the thread starts, so it’s a clear entry point for the errors.
173 |
174 | * Lucas
175 |
176 | If you stick with the original `System.exit` approach, there wouldn’t really be any significant impact, right?
177 |
178 | * Boson
179 |
180 | Correct, there wouldn’t be any immediate impact. The real issue is that this approach is a bad coding practice. We shouldn’t be exiting directly in the middle of business logic. Instead, errors should be propagated up the stack.
181 |
182 | * Lucas
183 |
184 | Would it be better to define a new enum instead of using multiple error subclasses? I think defining 12 different error types is a bit much. We could just define a single type or description for each case, so instead of 12 subclasses, we’d have 12 different descriptions.
185 |
186 | * Boson
187 |
188 | What do you all think?
189 |
190 | * Andy
191 |
192 | You could include the exit code and description in the enum. That might simplify things.
193 |
194 | * Boson
195 |
196 | That’s a good point. We don’t need to define so many error types. Let's stick with the plan: Step 1, throw errors to the top level; Step 2, during the next developer meeting, we can discuss whether we really need to exit at those points in the code.
197 |
198 | The root cause of this issue is really poor coding practices. Directly exiting within threads is just not a good design. We shouldn’t be calling `System.exit` in the middle of business logic, that is, it should be thrown up to higher levels.
199 |
200 | One of the teams from community has already pointed this out and requested that the fix be submitted to the dev branch as soon as possible.
201 |
202 | * Jake
203 |
204 | So there's no question about whether we should do this, it needs to be done, and we need to get it live in the next release, right?
205 |
206 | * Boson
207 |
208 | Exactly. Any other questions?
209 |
210 | * Jake
211 |
212 | No? Then we’ll wrap up here. Thanks, everyone!
213 |
214 |
215 |
216 | ### Attendance
217 | * Brown
218 | * Andy
219 | * Sunny
220 | * Federico
221 | * Allen
222 | * Boson
223 | * Daniel
224 | * Lucas
225 | * Ray
226 | * SunnyBella
227 | * Aaron
228 | * Super
229 | * Murphy
230 | * Jake
--------------------------------------------------------------------------------
/TRON Core Devs Meetings/Meeting 35.md:
--------------------------------------------------------------------------------
1 | # Core Devs Community Call 35
2 | ### Meeting Date/Time: April 18th, 2025, 6:00-7:00 UTC
3 | ### Meeting Duration: 60 Mins
4 | ### [GitHub Agenda Page](https://github.com/tronprotocol/pm/issues/121)
5 | ### Agenda
6 | Ethereum Cancun Upgrade Support
7 | * [TIP-650: Implement EIP-1153 Transient Storage Instructions](https://github.com/tronprotocol/tips/blob/master/tip-650.md)
8 | * [TIP-651: Implement EIP-5656 MCOPY - Memory Copying Instruction](https://github.com/tronprotocol/tips/blob/master/tip-651.md)
9 | * [TIP-745: Introduce EIP-4844 Instruction and EIP-7516 Instruction](https://github.com/tronprotocol/tips/blob/master/tip-745.md)
10 |
11 | Enhanced Consensus Layer Verification
12 | * [TIP-694: Enhance Verification of Transaction Limitations at Consensus Layer](https://github.com/tronprotocol/tips/blob/master/tip-694.md)
13 |
14 | Optimized Block Synchronization Logic
15 | * [Optimized P2P Protocol: Discarding Solidified Block Lists to Conserve Network Bandwidth](https://github.com/tronprotocol/java-tron/pull/6184)
16 | * [Enhanced Transaction Validity Verification by Early Discarding Zero-Contract Transactions](https://github.com/tronprotocol/java-tron/pull/6181)
17 |
18 | Other Changes
19 | * [Enhanced Event Service Framework (V2.0) Provision](https://github.com/tronprotocol/java-tron/issues/6153)
20 | * [TIP-697: Cross-Platform Consistent java.strictMath Replacement for java.math](https://github.com/tronprotocol/tips/blob/master/tip-697.md)
21 |
22 | API
23 | * [Enhanced Compatibility for Ethereum JSON-RPC Interface](https://github.com/tronprotocol/java-tron/issues/5953)
24 |
25 | ### Detail
26 |
27 | * Jake
28 |
29 | Hello, everyone. Today's Core Devs Community Call will mainly focus on the upcoming release of GreatVoyage-v4.8.0 (Kant). In the previous meetings, these contents have been fully discussed and the development tasks have been basically completed. So today, I'd like each developer to briefly introduce the update contents and the situation after the final adjustments before the release.
30 |
31 | Let's start with TIP-650, TIP-651 and TIP-745 first. Raymond, are you ready?
32 |
33 | **Ethereum Cancun Upgrade Support**
34 |
35 | * Raymond
36 |
37 | First of all, TIP-650 is to implement the transient storage of Ethereum EIP-1153. To put it simply, this feature is a new type of storage method within transaction execution. After the transaction is completed, the stored data will get disposed instead of persistent storage. Currently, the TIP has been updated to the 'final' status and has been merged into the TIP master branch of Java-tron.
38 |
39 | The second one, TIP-651, implements a new instruction for memory copying in EIP-5656. The main function of this instruction is to copy a segment of data from a certain position in the memory to a new position, and a new instruction called `M COPY` is introduced. Currently, the code of this TIP has also been merged into the master branch, and the status of the TIP has been changed to 'final'.
40 |
41 | Finally, TIP-745 introduces the instructions of Ethereum EIP-4844 and 7516, mainly two instructions `BLOBHASH`and `BLOBBASEFEE`. In fact, EIP-4844 also introduced blob transactions and a precompiled contract. Currently, this TIP has made some functional modifications, removing the previous kzg precompiled contract and only retaining these two instructions. So it means that it is not a complete implementation of EIP-4844, and it does not implement the blob transaction and the precompiled contract. The functions of these two instructions are not complete at present. Currently, these two instructions only return a default value of '0', mainly serving as a compatibility placeholder. And currently, the status of the TIP has also been changed to final and merged into the master branch.
42 |
43 | * Benson
44 |
45 | I have a question. Except for 745, there are no changes in the other two TIPs compared with before, right?
46 |
47 | * Raymond
48 |
49 | Yes, only 745 has been slightly modified. We will not implement that precompiled contract for now.
50 |
51 | * Jake
52 |
53 | If there are no other questions, let's move on to the next one.
54 |
55 | Daniel, could you please share the situation of TIP-694?
56 |
57 | **Enhanced Consensus Layer Verification**
58 |
59 | * Daniel
60 |
61 | OK, regarding TIP-694, it is a TIP that strengthens the transaction verification in the consensus stage. At the end of 2024, the transaction verification was optimized during the transaction broadcasting stage. And now we plan to optimize the verification at the consensus level as well, mainly to prevent the situation of block-producing nodes acting maliciously. It is mainly divided into four scenarios. The first one is to limit the scale of account creation transactions. The second one is to strengthen the size of critical transactions to avoid transactions within the block exceeding the maximum transaction limit. The third one is to limit the length of the transaction result list. The fourth one is to make the restrictions on expiring transactions stricter. This change is relatively simple. It was also mentioned in the previous developer meetings. It is mainly extended from the original broadcasting stage to the consensus level, which can be regarded as an improvement. This TIP has also entered the 'final' status. Do you have any questions?
62 |
63 | * Jake
64 |
65 | OK, if there are no other updates and questions, let's move on to the next one. Lucas, please tell us about it.
66 |
67 | **Optimization P2P and Event Service**
68 |
69 | * Lucas
70 |
71 | Pull 6184 is to discard the block list below the solidified block. A problem was previously raised that if users broadcast some historical block lists and then the nodes fetch them, it will occupy network bandwidth and some other resources. Because these historical transaction blocks already exist, it is not easy to make judgments through transactions currently. Here, the optimization is mainly aimed at the blocks. Since the block list contains the block height, and the blocks below the solidified block must already exist on the chain, there is no need to request them again. So this function is to make the nodes discard the block list whose block height is lower than that of the solidified block when they receive it. That's roughly the logic, it's very simple.
72 |
73 | In addition, the event service function has been greatly adjusted. The background is that in the current version of the event service, the execution logic and the block execution logic are completely coupled in the code. This will lead to the situation that the exception of the event service may affect the normal block execution. This modification mainly decouples the logic of block execution and event service. In addition, a feature is added which is to support synchronizing historical data starting from a specified block height.
74 |
75 | There is one thing to note. When migrating to the new version of the event service, if users have subscribed to the fields of internal transactions, it is recommended not to migrate to the new version for now; for users who want to migrate to the new version, it is recommended to use the latest plugin version.
76 |
77 | * Boson
78 |
79 | If users use the new version, do we need to prompt them that they must use the new plugin?
80 |
81 | * Lucas
82 |
83 | Yes.
84 |
85 | * Boson
86 |
87 | Is this part of the content mentioned in the technical interpretation of Kant?
88 |
89 | * Lucas
90 |
91 | Yes, and a special document will be provided later.
92 |
93 | * Jake
94 |
95 | OK, if there is no problem, let's continue. Now, Allen, please share your part.
96 |
97 | **Enhanced Transaction Validity Verification**
98 |
99 | * Allen
100 |
101 | Regarding Pull 6181, it is related to issue 6178. It mainly describes a bug. The bug is that when processing transaction messages in p2p, an exception of numeric out-of-bounds occurs. The reason is as follows. When processing transaction messages, since the transaction type needs to be obtained, p2p will distinguish between system transactions and contract transactions and make different processing and scheduling for them. When judging the transaction type, the transaction type needs to be obtained from the contract. When the received transaction message does not carry the contract, an array out-of-bounds exception occurs at this time. So TIP-6181 fixes this problem. The method of fixing it is that when processing the transaction, before obtaining the transaction type, first determine whether the transaction carries the contract. If it does not carry it, the transaction will be directly discarded.
102 | The specific code adjustments have been shared before. Do you have any questions?
103 |
104 | * Jake
105 |
106 | If there is no questions upon this topic, then Boson, please update us on the situation of the algorithm library migration.
107 |
108 | **TIP-697: Cross-Platform Consistent java.strictMath Replacement for java.math**
109 |
110 | * Boson
111 |
112 | TIP-697 refers to the migration of our database algorithm from math to strict.math. This TIP is already in the 'final' state. The conversion is divided into two stages. One stage is to migrate the power floating-point operation from math to strictMath, which has been released in 4.7.7, and the proposal has also taken effect. The modification to be made in the 4.8.0 version is to disable the math library in Java-tron. That is to say, after this TIP takes effect, the subsequent development of Java-tron will no longer use the math library and will fully switch to strict.math. This is implemented for the subsequent compatibility with architectures such as ARM and other architectures. Do you have any questions?
113 |
114 |
115 | * Jake
116 |
117 | Will there be any further work on the algorithm library in future versions?
118 |
119 |
120 | * Boson
121 |
122 | There will be no more in the future. That is, after 4.8.0, developers should pay attention that they should not use the math library during development, and can only use strict.math. This is to ensure the consistency of numerical calculations across platforms, and it is also a prerequisite for our subsequent support of the ARM architecture. These are the two progressions. At the beginning, it was said that this migration would not be promoted in the form of a proposal, but after subsequent discussions, these migrations in 4.8.0 will still use the proposal, which is the only difference from the previous discussion.
123 |
124 |
125 | * Raymond
126 |
127 | Then what if the math library is used in a third-party library?
128 |
129 | * Boson
130 |
131 | There is only one situation of inconsistency, which is the Bancor transaction. If a third party also uses it, the relevant developers will be required to simulate a set of algorithms by themselves for adaptation. The math libraries of other languages, such as Python and Go, have strict cross-platform consistency in math calculations. If it is other languages, there is no need to consider this. Only JDK8 will have this problem, and it must be on the x86 platform and involve floating-point operations to have this inconsistent problem. If this is the case, developers need to simulate the algorithm by themselves to adapt to Java-tron.
132 |
133 | * Raymond
134 |
135 | I see.
136 |
137 | * Jake
138 |
139 | OK, then Wayne, please introduce the updated situation of the JSON-RPC interfaces in 4.8.0.
140 |
141 | **Enhanced Compatibility for Ethereum JSON-RPC Interface**
142 |
143 | * Wayne
144 |
145 | OK, I'll briefly talk about it. There are two changes to the JSON-RPC interface. The first one is that a new finalized is added to the block parameter. We should have briefly mentioned it before, and there has been no update recently. And more importantly, when printing logs and querying, two new parameters are added, namely SubTopics and BlockRange. It adds a restriction to be consistent with Ethereum. The BlockRange is currently set to 5000 by default, and the SubTopics is currently set to 2000 by default.
146 |
147 | When constructing the log filter parameters, the system will determine whether the sub topic is greater than the maximum value, and this value must be greater than 0 to take effect. If it is less than or equal to 0, there is no restriction. In addition, for the block range, it will also determine whether the query parameter will exceed the maximum value. Both are for making restrictions and verifications.
148 |
149 | Do you have any other questions?
150 |
151 | * Jake
152 |
153 | If there are no other questions, that's all for today. GreatVoyage-v4.8.0 (Kant) will be released according to the latest adjustments synchronized by everyone today. Developers who need to know about it can pay attention to the update of the technical interpretation of the version and the developer documents of specific functions.
154 |
155 |
156 | That's all for today. Thank you all for your time. Goodbye!
157 |
158 |
159 |
160 | ### Attendance
161 | * Boson
162 | * Aaron
163 | * Wayne
164 | * Brown
165 | * Blade
166 | * Gordan
167 | * Leem
168 | * Mia
169 | * Sunny
170 | * Raymond
171 | * Sunnybella
172 | * Elvis
173 | * Benson
174 | * Daniel
175 | * Lucas
176 | * Federico
177 | * Murphy
178 | * Jake
--------------------------------------------------------------------------------
/TRON Core Devs Meetings/Meeting 36.md:
--------------------------------------------------------------------------------
1 | # Core Devs Community Call 36
2 | ### Meeting Date/Time: April 24th, 2025, 6:00-6:30 UTC
3 | ### Meeting Duration: 30 Mins
4 | ### [GitHub Agenda Page](https://github.com/tronprotocol/pm/issues/122)
5 | ### Agenda
6 | * The GreatVoyage-v4.8.0(Kant) release and mainnet upgrade process
7 | * Hard fork proposals plan
8 |
9 | ## Details
10 |
11 | * Jake
12 |
13 | Hello everyone, welcome to Core Devs Community Call 36. Today’s agenda focuses on discussing the release of 4.8.0, the procedural work for the mainnet upgrade, and finalizing the launch timelines and order for three newly introduced proposals.
14 |
15 | Let’s dive in. Raymond, could you start by sharing the preparation status for the 4.8.0 release?
16 |
17 | * Raymond
18 |
19 | The next version is 4.8.0. All related features have been fully developed and merged into the master branch. Key features include functionality related to the Ethereum Cancun upgrade, a new version of the event service, and several other enhancements. The testnet went live on March 17, and three associated proposals have already been activated. Mainnet gray testing began on March 26, and the TIPs related to 4.8.0 have all been merged into the master branch with their statuses marked as "final." That’s the current update.
20 |
21 | * Murphy
22 |
23 | So, can we confirm a specific release date for 4.8.0 now?
24 |
25 | * Raymond
26 |
27 | The tentative date is next Tuesday, April 29.
28 |
29 | * Murphy
30 |
31 | Any issues with April 29 as the release date?
32 |
33 | * Jake
34 |
35 | If we stick to this date, this will be the last collective meeting to discuss the release before launch.
36 |
37 | Assuming no objections, Murphy, please proceed.
38 |
39 | * Murphy
40 |
41 | Alright, I’ll share my screen.
42 |
43 | Following Raymond’s update on the 4.8.0 development readiness, since we’ve tentatively set the release date as April 29, the community team will now outline the process for driving the mainnet upgrade.
44 |
45 | The estimated total duration for the mainnet upgrade is approximately 30 days, from April 29, 2025, to May 31, 2025. Here are the key steps:
46 |
47 | * Within 1–2 days after the version is released on GitHub (approximately May 1–2), the community team will notify community channels (Telegram, Discord, etc.), Super Representatives (SRs), and key project partners like exchanges and wallets to initiate upgrades.
48 |
49 | * Weekly follow-ups will be conducted with these key partners to track their upgrade progress, maintain records, and ensure cooperation, aiming for full completion by May 31.
50 |
51 | * At developer meetings near the deadline, the community team will share upgrade progress. If any critical partners haven’t upgraded for any reason, we’ll provide timely feedback.
52 |
53 | That’s the plan for the mainnet upgrade. Any questions? If not, let’s move on.
54 |
55 | * Murphy
56 |
57 | Next, Raymond will introduce the three new proposals, and we’ll discuss their launch timelines, order, and how the community should coordinate.
58 |
59 | * Raymond
60 |
61 | Version 4.8.0 introduces three proposals. Two are related to the Virtual Machine: One controls the activation of instructions for transient storage and memory copy; and the other controls two blob-related instructions. The third proposal pertains to consensus validation, which will be activated at network-layer.
62 |
63 | * Jake
64 |
65 | Is there a specific order required for launching these proposals?
66 |
67 | * Raymond
68 |
69 | They are entirely independent and have no interdependencies.
70 |
71 | * Murphy
72 |
73 | So we can initiate discussions for all three proposals simultaneously, then determine the voting dates for each based on the discussion progress. Is that acceptable?
74 |
75 | * Raymond
76 |
77 | Yes, that works.
78 |
79 | * Murphy
80 |
81 | I have a question about TIP-697, which switches all arithmetic libraries to `strict.Math`. I recall that in the previous version, this was activated via a hard fork, providing backward compatibility. Since this switch is forward-compatible, we don’t need a new proposal for it, right?
82 |
83 | * Boson
84 |
85 | This is bundled with #87.
86 |
87 | * Murphy
88 |
89 | Alright, moving on if there are no issues here. Finally, let’s sync on the upcoming proposal launch process.
90 |
91 | First, we need to confirm whether these three proposals require adaptation work from external projects. For example, when the dynamic energy model was activated, wallets with too low feeLimit settings caused transaction failures, requiring advance notice for adaptation. Developers should assess whether these proposals will impact project partners. If so, we need at least 30 days to notify them for adaptation. Please reach out to us promptly if adaptation is needed.
92 |
93 | Second, regarding the voting timeline:
94 |
95 | * If the mainnet upgrade progresses smoothly and completes by May 31, we’ll schedule developers to publish the proposals on GitHub between June 1–5, 2025 (including draft reviews and validation).
96 |
97 | * From June 7–28, 2025 (2–3 weeks), we’ll invite community developers and project partners to participate in discussions. During this period, we’ll update progress at a developer meeting between June 14–21 and collectively determine the exact voting start dates based on discussion outcomes.
98 |
99 | That’s the overview. Any questions?
100 |
101 | * Jake
102 |
103 | Murphy’s timeline is based on the April 29 release. If the release is delayed or rescheduled, all subsequent milestones will shift accordingly. Please raise any concerns or changes to the release status now.
104 |
105 | * Murphy
106 |
107 | No issues? We’ll proceed then—feel free to contact us later with questions.
108 |
109 | * Jake
110 |
111 | Great. I’ll finalize the meeting minutes shortly. For further discussions, let’s use GitHub.
112 |
113 | Thanks everyone for joining.
114 |
115 | * Murphy
116 |
117 | Thanks for attending, goodbye!
118 |
119 | ### Attendance
120 | * Boson
121 | * Aaron
122 | * Wayne
123 | * Blade
124 | * Allen
125 | * Gordan
126 | * Leem
127 | * Mia
128 | * Sunny
129 | * Raymond
130 | * Sunny Sun
131 | * Elvis
132 | * Daniel
133 | * Lucas
134 | * Federico
135 | * Murphy
136 | * Jake
--------------------------------------------------------------------------------
/TRON Core Devs Meetings/Meeting 38.md:
--------------------------------------------------------------------------------
1 | # Core Devs Community Call 38
2 | ### Meeting Date/Time: May 28th, 2025, 6:00-7:00 UTC
3 | ### Meeting Duration: 60 Mins
4 | ### [GitHub Agenda Page](https://github.com/tronprotocol/pm/issues/136)
5 | ### Agenda
6 | * Progress of the GreatVoyage-v4.8.0(Kant) Mainnet Upgrade
7 | * Progress of [Proposal: Enable TVM Cancun instructions and Enhance Consensus Layer Verification](https://github.com/tronprotocol/tips/issues/763)
8 | * Progress of [Proposal: Reduce TRX block rewards](https://github.com/tronprotocol/tips/issues/738)
9 | * [Expand ARM Architecture Compatibility: Principle of X87 Instruction Simulation](https://github.com/tronprotocol/java-tron/issues/5954#issuecomment-2862215231)
10 |
11 | ## Details
12 |
13 | **Progress of GreatVoyage-v4.8.0 Mainnet Upgrade**
14 |
15 | * Jake
16 |
17 | Hello everyone! Let’s proceed according to today’s agenda. First, I’ll report on the current status of the v4.8.0 provincial-level rollout. Out of 27 SRs in the entire community, 19 have completed the upgrade. This week, we’ll remind SRs again to finish the upgrade before the deadline to avoid forking issues.
18 |
19 | Next, let’s talk about the launch status of the three proposals brought by v4.8.0. Will you be leading this part, Murphy?
20 |
21 | **Enable TVM Cancun instructions and Enhance Consensus Layer Verification**
22 |
23 | * Murphy
24 |
25 | Alright, I’ll take it from here. Let me share my screen first. All pre-release work has been fully completed. We’re also following up on the upgrade progress of each SR and major projects and parties, such as wallets and exchanges, according to the timeline. I just updated everyone on the SR upgrade progress—so far, everything is proceeding on schedule.
26 |
27 | Now, I’d like to introduce the three proposals in the v4.8.0 version. According to the plan, discussions on these proposals are scheduled to begin in early June. Lucas has already released the relevant proposals. Based on the resolution of the last developers’ meeting, we’ve merged these three proposals for handling. Some discussions have already started, and they’ve been deployed and run on the testnet. After a week of observation, no obvious issues have been found. Therefore, this week we plan to start promoting them to the community and invite community developers to participate in the discussions. Core devs present here, if you have any comments or questions about these proposals, please feel free to raise them.
28 |
29 | Does anyone have other questions about the progress of the three v4.8.0 proposals? If not, the discussion and launch of the proposals will proceed as planned. We’ll continue to follow up on related work according to the timeline in the future.
30 |
31 | Additionally, we need to confirm the specific launch time for the proposals. Currently, two proposals are scheduled to launch in June: one is the v4.8.0-related proposal mentioned earlier, and the other is the TRX reduction proposal. Since the TRX reduction proposal had been discussed for a period, it is planned to launch it first, around June 10th. After it takes effect, we’ll then launch the v4.8.0-related proposal about a week later. If you have different suggestions for this timeline, please speak up.
32 |
33 | * Jake
34 |
35 | Any questions about the launch time and approach? If not, we’ll follow Murphy’s proposed timeline.
36 |
37 | **Progress of Reduce TRX block rewards**
38 |
39 | * Murphy
40 |
41 | Great, if there are no other issues, we’ll proceed with this plan. Now let’s move to the third agenda item: the progress of the TRX reduction proposal.
42 |
43 | At the last developers’ meeting, we discussed this proposal, and most developers were supportive. I’ve counted the comments under the proposal and found that over 70% of the feedback supports launching it. Therefore, next, we need to focus on discussing the specific parameters for launching the proposal. The latest comments list several optional parameter schemes, including a new set used when launching the proposal on the Nile testnet: block reward is 8 TRX, vote reward is reduced to 128 TRX, totaling 136 TRX.
44 |
45 | We welcome everyone to share their opinions on the final parameter settings. If we can’t conclude today, please leave your feedback in the relevant issue after the meeting. If there are no objections, we tentatively suggest adopting the parameters from the Nile testnet first. That’s all for the update on the TRX reduction proposal.
46 |
47 | * Jake
48 |
49 | Any questions about the TRX reduction? If not, Boson will update us on the ARM architecture adaptation progress.
50 |
51 | **Progress of Expand ARM Architecture Compatibility**
52 |
53 | * Boson
54 |
55 | Can you see the screen? The current progress with the ARM architecture is that simulating x86 instructions on ARM is still not feasible, so we can only use hardcoding. Does anyone have any suggestions regarding the instruction simulation vs. the hardcoding approach? Another point is that currently, there’s a lot of self-developed work on ARM architecture performance. Companies like Google, Amazon, and Huawei all have their own ARM servers, which may have different performance characteristics. Right now, we plan to start with stress testing based on Amazon’s servers. The characteristic of the ARM architecture is that it may offer higher cost-effectiveness, but we can’t guarantee its performance will be better than x86. It just means that under the same operational costs, ARM may be more cost-effective, but we can’t fully ensure its performance is superior to x86. Based on historical data, does anyone have questions about using hardcoding on ARM?
56 |
57 | * Sunny
58 |
59 | What’s the performance gap? Are there specific data?
60 |
61 | * Boson
62 |
63 | We’re still doing stress testing, so there’s no data yet. Also, because the hardware performance of ARM servers built by different cloud service providers varies, this is a huge workload. For the global developer community and the TRON ecosystem, we’ll first choose the mainstream server configuration on AWS for testing, and we’ll obtain benchmark data. For TRON’s mainnet block synchronization needs, we can confirm that the overall performance of the ARM architecture won’t be worse than x86.
64 |
65 | * Neo
66 |
67 | Regarding follow-up work, there are two directions worth exploring, first, should we conduct opcode performance comparison research? This could be done in two forms, one is fine-grained analysis, comparing each Opcode one by one; the other is a macro-level comparison of the overall block packaging speed on the chain. However, the feasibility of these two schemes needs further discussion and confirmation.
68 |
69 | The second is related to stress testing. If we plan to carry out stress testing in the future, we need to clarify the specific test plan. It’s recommended to publish the detailed plan in an issue so that other community developers can refer to it and participate in auxiliary testing to jointly advance the research.
70 |
71 | * Boson
72 |
73 | Yes, the current stress test scores have been obtained. We’re currently conducting stress testing based on AWS. As mentioned before, many platforms support the ARM architecture, but their performance varies. Therefore, the results from ARM-based stress testing may not apply to other platforms, such as x86-based AMD and Intel platforms, which themselves have different performance characteristics.
74 |
75 | Additionally, even on the same platform like AWS, there are low, medium, and high configuration specifications, each with different performance levels, and the same applies to x86 platforms. Considering practical feasibility, we can’t stress test all configurations—we can only select commonly used configurations as test subjects. For example, we can carry out stress testing based on the recommended configurations in the README document (such as specific core counts and 32GB memory). This ensures that the test results are widely applicable and valuable as references while avoiding unnecessary resource waste and repetitive work.
76 |
77 | * Neo
78 |
79 | Regarding the hardcoding issue, how many transactions are involved if syncing from scratch?
80 |
81 | * Boson
82 |
83 | There are 48 transactions. But this is only for the mainnet—private chains can’t be counted. So even if we don’t use hardcoding now, private chains can’t handle this. If a private chain syncs from scratch and ARM doesn’t support it, especially if there are a large number of Bancor transactions, we don’t need hardcoding on the Nile testnet. The current hardcoding is all for historical data synchronization because after the proposals for 4.8.0 are launched, there won’t be data inconsistency issues on ARM. The worst case is that private chains won’t support historical synchronization.
84 |
85 | * Brown
86 |
87 | I have a question about power calculation above, the upper part. I see values for a and c recorded, but not for b. Why?
88 |
89 | * Boson
90 |
91 | Because at the 2000th power calculation, there was no inconsistency in the results. The current inconsistencies are all from square root calculations. At the 2000th power, even if the last digit differed, the final data would be consistent because TRON truncates to a `long` type. However, for 0.0005, which involves intermediate calculations, first taking the 2000th root, then squaring 2000 times, this can cause database inconsistencies. Therefore, we don’t need to handle the 2000th power case.
92 |
93 | * Neo
94 |
95 | Is there any response from the officials?
96 |
97 | * Jake
98 |
99 | No official response yet. We’ve posted in the community forums for Oracle, ARM, and Intel, and only the ARM community replied, suggesting a step-by-step calculation and hardcoding approach, which isn’t helpful for us. It seems there are no better alternatives.
100 |
101 | * Boson
102 |
103 | Since hardcoding writes the values directly without calculation, there’s no performance loss at all—it doesn’t even perform calculations. For bancor transactions, they’re almost non-existent now.
104 |
105 | If anyone is interested in ARM, you can check out this PR, which has been submitted. It mainly includes two adaptations: one is upgrading to JDK 17, which involves some coding changes; the other is supporting the ARM platform, such as JNI changes and strict.Math adjustments—these are the three main types of changes.
106 |
107 | * Neo
108 |
109 | Another question, if we support ARM in the future, will we release two versions?
110 |
111 | * Boson
112 |
113 | Yes, JDK 8 and JDK 17 will coexist long-term. One version will be for the x86 platform with JDK 8, and the other for the ARM platform with JDK 17. Unless one day we abandon JDK 8 and the syntax changes, we’ll keep both. Currently, the release notes state support for JDK 8 and above. If everything is verified to be problem-free, after a few more versions, we may eventually only support JDK 17 and above.
114 |
115 | * Neo
116 |
117 | I just thought of another question, when both are on x86, have we compared the performance of JDK 8 and JDK 17?
118 |
119 | * Boson
120 |
121 | Not yet, because Bancor transactions can’t be upgraded to JDK 17 on x86, so we can’t meet the conditions. However, after completing the ARM stress testing, we might look into JDK 17 on x86. With different versions and databases on the two platforms, there are too many variables to easily observe results.
122 |
123 | * Neo
124 |
125 | Understood.
126 |
127 | * Jake
128 |
129 | If there are no other questions, we’ll adjourn here. Thank you, everyone. Goodbye!
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 | ### Attendance
138 | * Boson
139 | * Daniel
140 | * Lucas
141 | * Allen
142 | * Gordan
143 | * Sunny
144 | * Neo
145 | * Blade
146 | * Raymond
147 | * Sunny Bella
148 | * Leem
149 | * Brown
150 | * Mia
151 | * Wayne
152 | * Federico
153 | * Murphy
154 | * Jake
155 |
--------------------------------------------------------------------------------
/TRON Core Devs Meetings/Meeting 39.md:
--------------------------------------------------------------------------------
1 | # Core Devs Community Call 39
2 | ### Meeting Date/Time: June 6th, 2025, 6:00-6:30 UTC
3 | ### Meeting Duration: 30 Mins
4 | ### [GitHub Agenda Page](https://github.com/tronprotocol/pm/issues/140)
5 | ### Agenda
6 |
7 | * Progress of [Proposal: Reduce TRX block rewards](https://github.com/tronprotocol/tips/issues/738)
8 |
9 |
10 | ## Details
11 |
12 | **Progress of Proposal: Reduce TRX block rewards**
13 |
14 | * Jake
15 |
16 | Let's start now without waiting any longer to save everyone's time. We only have one agenda today: discussing the TRX production reduction proposal. Murphy will share the latest updates, and we'll dive straight in.
17 |
18 | * Murphy
19 |
20 | Can everyone see the screen?
21 |
22 |
23 | Alright, I’ll sync you with the latest developments and analyze the TRX production reduction plan. We’ll look at how the inflation rate is expected to change and update you on the proposal details. First, the proposal was released on March 19th, and we’ve invited community discussion for over two months. After receiving mostly positive feedback, we first discussed the proposal at the 37th developers’ meeting, where there were both supportive and opposing voices. We summarized the results and communicated them to the community through marketing and operations. Later, we launched the plan on the testnet and promoted the production reduction proposal, which didn’t cause significant community resistance.
24 |
25 | At last week’s developers’ meeting, we further confirmed the specific reduction parameters: the block reward will decrease from 16 TRX to 8 TRX, and the voting reward from 160 TRX to 128 TRX, with a total reduction ratio of approximately 77%. Today’s meeting focuses on sharing the analysis and impacts of the reduction.
26 |
27 | The proposal compares on-chain data from when it was initiated and predicts outcomes for 20%, 30%, and 50% production reductions. According to the analysis, the annual inflation rate after a 50% reduction would be -1.78% (a deflation rate of 1.78%), all within the range of -2%, which is a healthy metric compared to other mainstream public chains, indicating all options are viable.
28 |
29 | The main argument from opponents is that reducing rewards will affect stakers’ returns. We analyzed the specific impacts on stakers’ returns at different reduction ratios. Due to TRON’s unique energy model, we compared two dimensions: without energy leasing income, the annual staking yield of TRON would decrease from a maximum of 4.15%, dropping to approximately half (2.08%) at a 50% reduction. However, considering the active energy leasing market, where staked energy can be fully utilized in the energy market, the current comprehensive annual yield with leasing is as high as 9.15%. Even after a 50% reduction, the comprehensive annual yield would remain at 7.08%, still competitive compared to staking projects on other chains. This is the impact on staking returns.
30 |
31 | Regarding the impact on long-term staking rates, since there’s no direct formulaic relationship between production reduction and staking rates, we can only analyze qualitatively. Short-term after the proposal takes effect, some profit-driven funds may withdraw due to reduced returns. However, as analyzed, TRON’s staking returns remain competitive, so the withdrawal is expected to be limited. In the medium to long term, sustained deflation will increase TRX’s scarcity and value, creating a potential expectation of price appreciation. With a reduced TRX supply, the cost of obtaining energy (with a fixed energy supply) may rise, making energy more valuable. To compete for energy for transactions, more users may be incentivized to stake TRX for resources, which will impact staking rates.
32 |
33 | For the impact on burning, also a qualitative analysis: ignoring uncontrollable price factors, TRX production reduction doesn’t directly affect transaction fees. Short-term, with some stakers withdrawing, lower energy acquisition costs may lead to more transactions via staking, potentially reducing burning volume. In the medium to long term, rising transaction fees (due to potential price increases) may decrease transaction volume, also reducing burning volume. Thus, this proposal aims to adapt to TRON’s current transaction scale and activity, while the core for long-term benefits still requires finding new burning growth points and stimulating transaction scale and activity.
34 |
35 | Below is a comparison with historical token economic model changes on other public chains:
36 |
37 | BTC’s reward adjustment is pre-fixed, halving every 4 years, which has driven price increases after multiple halvings. And for ETH, it initially had a high inflation rate, about 90%; after EIP-1234 and EIP-1559 launched in 2021, it reduced rewards significantly, and post-Merge, with Layer 2 integration, ETH’s supply rate dropped from about 4.5% to 0.4%. Our reduction is more moderate by comparison. Solana on the other hand, uses a preset rule with a current 5% inflation rate and a 15% annual reduction. TRON last adjusted its supply in 2021, and after five years of ecosystem maturity and changing on-chain data, adjusting TRX rewards is now reasonable.
38 |
39 | Let’s talk about the proposal’s launch. After last week’s meeting, the parameters are confirmed as 8 (block reward) and 128 (voting reward). The proposal will launch on June 10th, 2025 (next Tuesday), and today’s meeting may be the final developers’ meeting on this proposal. The proposal is still open for feedback—please share any questions or comments via comments. Based on current on-chain data, the annual inflation rate is -0.85%, which will drop to -1.29% after the proposal takes effect, returning to the 2021-2022 level (before the energy unit price increased from 210 SUN to 420 SUN and the dynamic energy model was activated). That’s all for now. Any questions?
40 |
41 | We’ve updated the proposal with these parameters, the launch time, and relevant data. Feel free to review the proposal for details.
42 |
43 | * Neo
44 |
45 | Could you explain how the annual yields with and without energy leasing were calculated in that table? The percentages specifically.
46 |
47 | * Murphy
48 |
49 | One second, let me find that sheet for you. For the annual yield without energy leasing, we calculated it based on data: 176 TRX block rewards per block multiplied by one year, divided by the current total staked amount, resulting in a yield of 4.15% per TRX staked. The JustLend platform’s data includes energy leasing income; my calculations via other methods had slight deviations, but still around 9%. Therefore, for the "without leasing" yield, we subtracted the 5% annual energy leasing income from the comprehensive yield.
50 |
51 | * Neo
52 |
53 | Got it. Have any SRs participated in the discussion?
54 |
55 | * Murphy
56 |
57 | In the comments section, I believe no SRs have joined the discussion yet. The big whales from the community have been paying much attention to the issue, and some SRs have asked about it but do not have any feedback yet, and I haven’t seen direct SR participation in the GitHub issue.
58 |
59 | * Neo
60 |
61 | Understood.
62 |
63 | * Jake
64 |
65 | If there are no further questions, that is a wrap for today. Goodbye!
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 | ### Attendance
74 | * Daniel
75 | * Gordan
76 | * Sunny
77 | * Neo
78 | * Blade
79 | * Leem
80 | * Brown
81 | * Mia
82 | * Wayne
83 | * Federico
84 | * Murphy
85 | * Jake
--------------------------------------------------------------------------------
/TRON Core Devs Meetings/Meeting Template.md:
--------------------------------------------------------------------------------
1 | # All Core Devs Meeting #
2 |
3 | ### Meeting Date/Time: Thursday xx/xx/17 at 14:00 UTC
4 |
5 | ### Meeting Duration 2 hours
6 |
7 | ### [Audio/Video of the meeting]()
8 |
9 | ### [Reddit thread]()
10 |
11 | # Agenda
12 |
13 |
14 | # Decisions
15 |
16 |
17 | # Notes
18 |
19 |
20 | ## Attendance
21 |
--------------------------------------------------------------------------------
/TRON Core Devs Meetings/README.md:
--------------------------------------------------------------------------------
1 | ## TRON Core Devs Meetings
2 |
3 | ### Purpose
4 | The TRON core devs meeting is a technical meeting intended to bring together all the TRON developers who play major roles in determining the direction of the TRON protocol. TRON developers provide updates to their projects, discuss various [TIPs](https://github.com/tronprotocol/tips) to improve the protocol, and support each other.
5 |
6 | ### [Previous Meetings](https://github.com/tronprotocol/pm?tab=readme-ov-file#previous-meetings)
7 |
8 | ### Who Can Attend
9 | These meetings are held by TRON core devs. The following groups are invited to attend the meetings:
10 |
11 | - TRON core developers
12 | - client developers
13 | - core TRON researchers
14 |
15 | Sometimes, a non-core java-tron developer with particular expertise on a topic is invited on to discuss a specific agenda item. If you feel you would contribute to the meetings please contact coredevs@tron.network.
16 |
17 | ### Agenda Items
18 | Agendas are posted to https://github.com/tronprotocol/pm/issues. Anyone is welcome to add an item to the agenda as long as it follows these guidelines:
19 |
20 | - The topic is technical in nature
21 | - The topic involves the TRON protocol
22 |
23 | Please note:
24 |
25 | - Dapps are generally not allowed as topics
26 | - The topic should not be philosophical
27 |
28 | The core devs meetings are not meant to decide philosophical contentious issues that should be decided by the community.
29 |
--------------------------------------------------------------------------------
/TRON Core Devs Meetings/Wallet Devs Meeting 01.md:
--------------------------------------------------------------------------------
1 | # Wallet Devs Community Call
2 | ## Meeting Date/Time: Wednesday, 19 Jul. 2023, 9:00 UTC
3 | ## Duration: 1 hour
4 | ## [GitHub Agenda Page](https://github.com/tronprotocol/pm/issues/60)
5 |
6 | ## Agenda
7 | * TRON WalletConnect protocol
8 | * TronWeb Updates
9 |
10 | ## Details
11 |
12 | * Jake
13 |
14 | Okay guys, let's start now and stop waiting for other attendees. Thank you all for coming. And today's topic is about two things. The first one is the TROn WalletConnect protocol and the other one is TronWeb updates.
15 |
16 | **WalletConnect Intro**
17 |
18 | * Jake
19 |
20 | Let's just go through the first topic. I guess everyone's familiar with it, so I will give a simple introduction to this.
21 |
22 | WalletConnect is a set of open-source code supported by the foundation of the same name, and it is open-source and free to integrate. Many digital wallet developers focus on the development and optimization of mobile apps, in which many of them have no PC clients but mobile apps. Correspondingly, however, a considerable number of DApps tend to be developed based on web pages and do not support or only support login by specific mobile wallet apps. So users can only use browser plug-in wallets like Metamask to connect the DApps. The process of entering the key into the plug-in wallet will also increase security risks. The introduction of WalletConnect can change this situation.
23 |
24 | In terms of function implementation, when users log in to PC-side DApps with wallet APPs that support WalletConnect, they only need to scan the QR code, like we have here on the right side, to connect web DApps with mobile wallet APPs and use the address or account information used by mobile APPs to log in to DApps and perform related tasks. Kind of easy to operate.
25 |
26 | In terms of security, WalletConnect adopts a mature authorization scheme. During this process, the private key will not leave the mobile phone, and users no longer need to use a browser extension plug-in wallet like Metamask to authorize behaviors and transactions. The mobile APP can be completed by scanning the code. Interact with PC-side DApps without worrying about asset security.
27 |
28 | * Jake
29 |
30 | That's basic what WalletConnect is providing.
31 |
32 | According to their official website, there are currently over 300 wallets supporting their ecosystem and about a total of over 3000 apps supporting them as well, including many popular defi apps such as Compound, Makers, Uniswap, and so on.
33 |
34 | **TRON WalletConnect Protocol**
35 |
36 | * Jake
37 |
38 | To use the TRON WalletConnect protocol, there are two prerequisites for it. First, wallets need to support TRON protocol of course, and second, you need to integrate with WalletConnect.
39 |
40 | * Jake
41 |
42 | So to integrate with WalletConnect, here we have [an official example](https://github.com/WalletConnect/web-examples/tree/main/wallets/react-wallet-v2) on their page, which will be sent later along with the .ppt file. First, you need to go to cloud.walletconnect.com to obtain a project ID. And then, developers should add their project details in the WalletConnect utility files on their GitHub repositories.
43 |
44 | * Jake
45 |
46 | Next page, we will have the TRON WalletConnect protocol. One of the protocol essences is the chain ID. Both the mainnet ID and the testnet ID, it is Nile, are provided. So when developing, you need to specify the chain ID so that you can get access to the right networks. And on the second page, is about the two methods you must implement. In order to sign hexstring and even plaintext, use the method of TRON_SIGN_MESSAGE, and for signing transactions, use the method TRON_SIGN_TRANSACTIONS to invoke the function to do it. So these are the two prescriptive methods to be implemented in order to use the TRON WalletConnect protocol.
47 |
48 | * Jake
49 |
50 | And that's all for the protocols. Next, we will talk about some recent updates of TronWeb.
51 |
52 | **TronWeb Updates**
53 |
54 | * Jake
55 |
56 | The latest versions of TronWeb supporting Stake 2.0 full functions are version [5.1.1](https://tronweb.network/docu/docs/5.1.1/intro) and [5.3.0](https://tronweb.network/docu/docs/Release%20Note), and here are the two main features implemented in those two versions, [TIP-541](https://github.com/tronprotocol/tips/issues/541) and [TIP-542](https://github.com/tronprotocol/tips/issues/542). Developers may pick either one to integrate with your wallet, it depends on your preference.
57 |
58 | The difference between version 5.1.1 and version 5.3.0 is shown in this table. 5.1.1 uses Webpack 4 compared to version 5.3.0 uses Webpack 5, which is more secure and compact in size after building and packing. One more thing to know, Webpack 5 does not contain some dependencies by default, like the 'Crypto' library used by TronWeb, so in order to make it work properly, the dependencies should be installed and required manually.
59 |
60 | And then in the older version, 5.1.1, the transactions are built by the client requesting the nodes to build the transactions, and in 5.3.0, transactions are built locally. This also improves security and avoids requests being intercepted.
61 |
62 | Additionally, the ether library is also bumped to 6.6.0. The newer version brings advanced syntaxes and ES6 features. And the signing and PK generating library is also changed. Elliptic used in 5.1.1 is reported that has potential vulnerabilities. So 5.3.0 replace it with the Ethereum secp256k1 library.
63 |
64 | That's all the difference between those two versions, you need to pick the version you prefer, it's totally up to you. And either of them supports the full function of Stake 2.0, so you don't have to worry about missing any new features of TRON.
65 |
66 | **Discussion**
67 |
68 | * Jake
69 |
70 | That's all the topics discussed today. So we really like to hear if you guys have any suggestions or any comments for the whole community.
71 |
72 | * Paul
73 |
74 | Yes, sure. I've been wondering whether it's on using WalletConnect version one or version two because we've had issues before. Our wallets currently support only version one. And we had issues before with other projects that did not support WallectConnect version two. So that's just something I wanted to clarify.
75 |
76 | * Jake
77 |
78 | So your wallet already supports v1 and has some trouble with v2?
79 |
80 | * Paul
81 |
82 | To me. We always support WalletConnect version two. So yeah, I just want to confirm whether Tron supports version two.
83 |
84 | * Jake
85 |
86 | The protocol is working with v2, so you are fine and free to go.
87 |
88 | * Paul
89 |
90 | And I also wanted to ask, perhaps we don't want to have too long for today. But if we were to integrate it, would it be possible to perhaps introduce us to some DApps in your ecosystem so that we can explore some synergies between you, and perhaps incent changes in the Tron ecosystem?
91 |
92 | * Jake
93 |
94 | We don't have much right now. But later we can check on that. The wallet Bitkeep and Justlend have already supported TRON WalletConnect protocols for now.
95 |
96 | * Paul
97 |
98 | Yeah, yeah. Sure. That's something that we definitely could explore. So basically, you guys so once you want to go, like amplify your ecosystem, right? By exploring the possibilities and WalletConnect and everything, that's a very strong plan to be expanding right now, right?
99 |
100 | * Jake
101 |
102 | Yeah, check. We would like to attract other users using wallets and having assets from other chains, so they can invest their assets to DApps and protocols in TRON and yeah, expand the ecosystem.
103 |
104 | * Paul
105 |
106 | So great yeah. Sure. I will definitely pass it over to our developers like to delegate and everything so yeah, sure.
107 |
108 | * Jake
109 |
110 | Yes, any suggestions besides those two topics that we talked about here? Any improvements?
111 |
112 | * Jake
113 |
114 | Okay, that's it for today. Thank you for coming.
115 |
116 | * Paul
117 |
118 | We will continue our conversation in the chat if something comes up. So yeah. And I'm looking forward to connecting some more with you guys. It was fun, thank you for keeping us in the loop on what's happening. I really enjoyed this. This whole meeting. So yeah, see you around. Okay, let's keep in touch.
119 |
120 | * Jake
121 |
122 | We will keep you updated. Sure. Thanks for coming.
123 |
124 |
125 |
126 |
127 | ## Attendance
128 | * Jake Zhao (host)
129 | * Murphy Zhang
130 | * Token Pocket (Marcus)
131 | * Now Wallet (Paul)
132 | * BitPie Wallet (Joseph Johnson)
133 | * Huobi Wallet (Vic Cui)
134 |
--------------------------------------------------------------------------------
/TRON Core Devs Meetings/Wallet Devs Meeting 02.md:
--------------------------------------------------------------------------------
1 | # Wallet Devs Community Call 2
2 | ### Meeting Date/Time: May 8th, 2025, 6:00-6:30 UTC
3 | ### Meeting Duration: 30 Mins
4 | ### [GitHub Agenda Page](https://github.com/tronprotocol/pm/issues/129)
5 | ### Agenda
6 | * Implementation of TIP-6963 Multi Injected Provider Discovery
7 |
8 | ### Detail
9 |
10 |
11 | * Murphy
12 |
13 | Welcome everyone to today's meeting. The main topic we'll discuss is TIP-6963, which aims to resolve wallet conflicts in the TRON ecosystem. Now, let's invite Gary to share the details.
14 |
15 | * Gary
16 |
17 | Thank you. I'll start by introducing the background of TIP-6963. Currently, there are two main issues with wallets in the TRON ecosystem: wallet conflicts and new wallet onboarding. Let’s elaborate on both.
18 |
19 | First, wallet conflicts: The TIP-1193 proposal suggests that plugin wallets use the `window.tron` object as the carrier for the TRON provider. When a user’s browser has multiple plugin wallets installed, injection conflicts occur because all wallets use the same `window.tron` object, causing them to overwrite each other. This means when a user intends to use Wallet A, the system might actually invoke Wallet B, significantly affecting the user experience.
20 |
21 | Second, new wallet onboarding: Besides injecting `window.tron`, mainstream wallets also inject their own global variables to avoid overwrites—for example, TokenPocket injects `window.tokenpocket`, and Gate Wallet injects `window.gatewallet`. DApps must hardcode supported wallets into their code. If a new wallet isn’t listed in the DApp’s code, users can’t use it after installation. This not only harms the user experience in the TRON ecosystem but also hinders the growth of emerging wallets and their ability to acquire users.
22 |
23 | To address these issues, we researched solutions from mainstream blockchains. The first is Ethereum’s EIP-6963 protocol, designed to resolve multi-wallet conflicts by discovering multiple wallet providers. Instead of using global variables to store providers, it leverages browser event mechanisms for communication between DApps and wallets, exposing wallet providers to DApps. The second example is Solana, which established the Wallet Standard specification. This standard defines how wallets register themselves, expose information, and how DApps retrieve wallet data, while providing security packages for both wallets and DApps.
24 |
25 | **EIP-6963**
26 |
27 | * Gary
28 |
29 | Let’s first dive into Ethereum’s EIP-6963 protocol, which uses browser events for wallet-DApp communication. Two key events are defined:
30 |
31 | * `announceProvider`: Broadcast by wallets to register their provider information.
32 | * `requestProvider`: Initiated by DApps to actively request wallet information.
33 |
34 | Workflow of EIP-6963:
35 |
36 | On the left is the DApp, and on the right is the wallet. When the wallet loads, it first broadcasts an `announceProvider` event to notify the DApp of its provider details. Concurrently, the DApp sets up a listener to monitor `announceProvider` events upon loading. Upon receiving this event, the DApp saves the collected provider information, typically displaying it as a wallet list for users to select from. Additionally, the wallet listens for `requestProvider` events from the DApp. When the DApp triggers this event (at any time after loading) to request updated wallet information, the wallet re-broadcasts the `announceProvider` event. This bidirectional communication ensures no provider information is missed.
37 |
38 | **Wallet Standard of Solana**
39 |
40 | * Gary
41 |
42 | Next, let’s discuss Solana’s Wallet Standard, which defines how wallets register themselves, how DApps retrieve wallet information, and the interface types, including TypeScript types, that wallets must implement. The standard specifies how wallets should package their data for comprehensive discovery by DApps and provides several critical npm packages:
43 |
44 | * `wallet-standard/base`: Provides TypeScript type definitions.
45 | * `wallet`: Used by wallets to register their information.
46 | * `app`: Used by DApps to retrieve and listen for wallet information.
47 |
48 | Workflow:
49 |
50 | Wallets import the `registerWallet` method from the `wallet` package, populate their details according to the TypeScript definitions, and call `registerWallet` to register. DApps import the `getWallets` method from the app package, gaining access to `get()` to fetch all wallet info and `on()` to listen for new wallet registrations, ensuring no registrations are overlooked.
51 |
52 | **Comparison of EIP-6963 and Wallet Standard**
53 |
54 | * Gary
55 |
56 | EIP-6963 advantages: Simple architecture, transparent details, rich documentation (leveraging browser events, with clear specifications in the EIP), and compatibility with EIP-1193 (which defines the provider interface). Many wallets already implement EIP-6963.
57 |
58 | EIP-6963 disadvantages: Requires self-implementing event listening/broadcasting, lacks ready-to-use npm packages, and is limited to Ethereum’s multi-wallet conflicts (event names are EIP-specific, making it chain-incompatible).
59 |
60 | Wallet Standard advantages: Strong scalability (applicable to multiple blockchains, not just Solana) and official adapters for wallet registration and DApp integration.
61 |
62 |
63 | Wallet Standard disadvantages: Complex architecture, opaque internal logic (due to npm package reliance), steep learning curve for beginners, and outdated documentation (the standard deprecated the `window.navigator.wallets` storage method without clear documentation updates).
64 |
65 | **Why TIP-6963**
66 |
67 | * Gary
68 |
69 | For the TRON ecosystem, considering factors like ecosystem compatibility, implementation cost, and user habits, we’ve chosen a solution similar to EIP-6963. This protocol complements existing TIP-1193, both use the provider interface, allowing wallets and DApps to reuse existing provider objects, leverages browser events, requiring low entry barriers and minimal implementation costs. Since most wallets already support EIP-6963, adapting to TIP-6963 only requires modifying the prefix of `announceProvider` and `requestProvider` events. No additional npm packages or documentation are needed, avoiding new technical stacks.
70 |
71 | Detailed specifications for TIP-6963:
72 |
73 | Events:
74 | * `TIP6963:announceProvider`: Triggered by wallets to declare their provider.
75 | * `TIP6963:requestProvider`: Triggered by DApps to request wallet information.
76 |
77 | Type definitions:
78 | * `providerInfo`: Includes wallet `uuid`, `name`, `icon`, and `rdns`, which is the organization name, defined by the wallet.
79 | * `providerDetail`: Contains `providerInfo` and the existing `window.tron` provider and there is no changes needed, simply reuse the current provider.
80 |
81 | And the workflow is identical to EIP-6963, using bidirectional event communication.
82 |
83 | Code examples :
84 |
85 | * Wallet side:
86 | Create a custom event `TIP6963:announceProvider` with wallet info and provider data. Dispatch this event on page load and listen for `TIP6963:requestProvider` events. On reception, re-dispatch `announceProvider` to update DApp data.
87 | * DApp side:
88 | Listen for `announceProvider` events on load, saving `providerInfo` to a wallet list for display. Trigger `requestProvider` via `dispatchEvent` when updating wallet info is needed.
89 |
90 | That is pretty much of it.
91 |
92 | * Murphy
93 |
94 | Please feel free to share any questions or suggestions. We’ve received feedback from community wallet projects about call conflicts, which is why TRON plans to adopt EIP-6963. After Gary’s presentation, does everyone understand the proposal?
95 |
96 | * Tony
97 |
98 | I have a suggestion: TRON’s existing login libraries, like adapter-like tools, should support this new protocol as soon as possible.
99 |
100 | * Benson
101 |
102 | We’ll sync with the wallet adapter team to complete support promptly. Since this is our first meeting, if there are no objections, we’ll proceed with implementation. In the future, we’ll need your help to support this protocol in your wallets. Once supported, the wallet adapter will be updated to include your new versions, ensuring consistency.
103 |
104 | To our community wallet partners: How difficult do you think implementation will be? If we proceed, what’s your estimated timeline or schedule for completing support?
105 |
106 | * Tony
107 |
108 | TokenPocket can support this quickly, possibly in the next version. It’s not complicated, especially since we already support EVM protocols—maybe just a day’s work.
109 |
110 | * Benson
111 |
112 | Gary, do we have any additional requests for other wallet providers? Beyond supporting the protocol, are there other issues to address?
113 |
114 | * Gary
115 |
116 | Not at the moment. Will this be implemented only for plugin wallets, or also for mobile apps?
117 |
118 | * Tony
119 |
120 | It should be unified. For DApps, supporting this protocol universally makes sense; otherwise, they’d need to develop two sets of code (for plugins and mobile), which is inefficient.
121 |
122 | * Gary
123 |
124 | Understood. Regarding the final launch timeline: Let’s discuss further. If there are no other issues, we’ll finalize the proposal.
125 |
126 | * Benson
127 |
128 | Implementation relies on each wallet provider. Assuming smooth discussions, we’ll gradually recommend the protocol to all wallets. Specific timelines depend on each team, but we’ll prioritize collaborating with key projects for faster adoption.
129 |
130 | * Tony
131 |
132 | I shared a website in the chat that tracks EIP-6963 wallet support progress. It’s a great testing example and tracking platform, helping projects identify supported wallets and serving as a testing ground.
133 |
134 | * Benson
135 |
136 | Great suggestion! The TRON community can explore developing a similar demo and sync it to a GitHub issue. Today’s discussion went smoothly. The community will promote the proposal over the next few days, and if there are no objections, we’ll officially proceed with development.
137 |
138 | Wallet providers can begin implementing the TIP specifications based on your schedules.
139 |
140 | That’s all for today. We may hold 1–2 follow-up meetings. Meeting notices will be posted in the group and on GitHub, so please stay tuned. Thank you all for attending!
141 |
142 | * Murphy
143 |
144 | Thanks for your time. See you at the next meeting!
145 |
146 |
147 | ### Attendance
148 |
149 | * Gary
150 | * Murphy
151 | * Benson
152 | * Tony@TokenPocket
153 | * Jake
154 | * Bot
155 | * cell
156 | * He Xiao
157 | * Leslie
158 | * lin
159 | * marke
160 | * noname
161 | * SafePal Victor
162 | * Sam Jin
163 | * Taylor
164 | * Vic
165 | * XuNeal
166 | * xwartz
167 | * Yveline
--------------------------------------------------------------------------------