diff --git a/docs/contracts/compiler.md b/docs/contracts/compiler.md index 205b62bc..8f3bd122 100644 --- a/docs/contracts/compiler.md +++ b/docs/contracts/compiler.md @@ -10,148 +10,18 @@ ### 2. TronBox 波场智能合约部署工具。支持solidity语言智能合约的编译,部署,移植等功能。 -[https://cn.developers.tron.network/reference/tronbox-%E7%AE%80%E4%BB%8B](https://cn.developers.tron.network/reference/tronbox-%E7%AE%80%E4%BB%8B) +[https://developers.tron.network/reference/what-is-tronbox](https://developers.tron.network/reference/what-is-tronbox) ### 3. TronWeb -波场智能合约开发使用的http api库。提供和主链交互,合约部署调用等接口。 -[https://cn.developers.tron.network/docs/dapp-development-tools-tronweb](https://cn.developers.tron.network/docs/dapp-development-tools-tronweb) +波场智能合约开发使用的javascript库。提供和主链交互,合约部署调用等接口。 +[https://tronweb.network/docu/docs/intro/](https://tronweb.network/docu/docs/intro/) ### 4. TronGrid 波场智能合约事件查询服务。可以查询智能合约中写入的事件log信息。 -[https://cn.developers.tron.network/docs/trongrid](https://cn.developers.tron.network/docs/trongrid) +[https://developers.tron.network/docs/trongrid](https://developers.tron.network/docs/trongrid) -## 使用命令行工具进行智能合约开发 -在tron上进行智能合约的开发,除了使用现有的工具(tron-studio)之外,也可以直接使用wallet-cli命令行工具进行智能合约的开发,编译和部署。编写智能合约,可以使用使用TronStudio进行编译、调试等前期的开发工作。 当合约开发完成之后,可以把合约复制到[SimpleWebCompiler](https://github.com/tronprotocol/tron-demo/tree/master/SmartContractTools/SimpleWebCompiler)中进行编译,获取ABI和ByteCode。 - -我们提供一个简单的数据存取的合约代码示例,以这个示例来说明编译、部署、调用的步骤。 - -```text -pragma solidity ^0.4.0; -contract DataStore { - - mapping(uint256 => uint256) data; - - function set(uint256 key, uint256 value) public { - data[key] = value; - } - - function get(uint256 key) view public returns (uint256 value) { - value = data[key]; - } -} -``` - -### 启动私有链 - -确保前提条件中,私有链已经在本地部署完成。可以检查FullNode/logs/tron.log中,是否有持续产块的log信息出现:“Produce block successfully” - -### 开发智能合约 - -把上述代码复制到remix中编译,调试,确保代码的逻辑是自己需要的,编译通过,没有错误 - -### 在SimpleWebCompiler编译得到ABI和ByteCode - -因为波场的编译器与以太坊的编译略有差异,正在与Remix集成中,所以临时采用改方案获取ABI和ByteCode,而不是通过Remix直接获取ABI和ByteCode。 -把上述代码复制到SimpleWebCompiler中,点击Compile按钮,获取ABI和ByteCode。 - -### 通过Wallet-cli部署智能合约 - -下载Wallet-Cli,文件然后编译。 - -```shell -# 下载源代码 -git clone https://github.com/tronprotocol/wallet-cli -cd wallet-cli -# 编译 -./gradlew build -cd build/libs -``` - -注意: -wallet-cli 默认的配置会连接本地127.0.0.1:50051的 fullnode,如果开发者需要连接不同的其他节点或者端口可在 config.conf 文件中进行修改 - -启动wallet-cli - -```text -java -jar wallet-cli.jar -``` - -启动之后,可在命令中交互式输入指令。导入私钥,并查询余额是否正确 - -```text -importwallet -<输入你自己的设定的钱包密码2次> -<输入私钥:da146374a75310b9666e834ee4ad0866d6f4035967bfc76217c5a495fff9f0d0> -login -<输入你自己的设定的钱包密码> -getbalance -``` - -部署合约 - -```text -# 合约部署指令 -DeployContract contractName ABI byteCode constructor params isHex fee_limit consume_user_resource_percent - -# 参数说明 -contract_name:自己制定的合约名 -ABI:从SimpleWebCompiler中获取到的 ABI json 数据 -bytecode:从SimpleWebCompiler中获取到的二进制代码 -constructor:部署合约时,会调用构造函数,如果需要调用,就把构造函数的参数类型填写到这里,例如:constructor(uint256,string),如果没有,就填写一个字符# -params:构造函数的参数,使用逗号分隔开来,例如 1,"test" ,如果没有构造函数,就填写一个字符# -fee_limit:本次部署合约消耗的TRX的上限,单位是SUN(1 SUN = 10^-6 TRX),包括CPU资源、STORAGE资源和可用余额的消耗 -consume_user_resource_percent:指定的使用该合约用户的资源占比,是[0, 100]之间的整数。如果是0,则表示用户不会消耗资源。如果开发者资源消耗完了,才会完全使用用户的资源。 -value:在部署合约时,给该合约转账金额,使用十六进制32位表示 -library:address,library:address,...:如果合约包含library,则需要在部署合约的时候指定library的地址,具体见下文;没有library的话则不需要填写。 - -# 运行例子 -deploycontract DataStore [{"constant":false,"inputs":[{"name":"key","type":"uint256"},{"name":"value","type":"uint256"}],"name":"set","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"key","type":"uint256"}],"name":"get","outputs":[{"name":"value","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}] 608060405234801561001057600080fd5b5060de8061001f6000396000f30060806040526004361060485763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416631ab06ee58114604d5780639507d39a146067575b600080fd5b348015605857600080fd5b506065600435602435608e565b005b348015607257600080fd5b50607c60043560a0565b60408051918252519081900360200190f35b60009182526020829052604090912055565b600090815260208190526040902054905600a165627a7a72305820fdfe832221d60dd582b4526afa20518b98c2e1cb0054653053a844cf265b25040029 # # false 1000000 30 0 -部署成功会显示Deploy the contract successfully -``` - -得到合约的地址 - -```text -Your smart contract address will be: <合约地址> - -# 在本例中 -Your smart contract address will be: TTWq4vMEYB2yibAbPV7gQ4mrqTyX92fha6 -``` - -调用合约存储数据、查询数据 - -```text -Shell -# 调用合约指令 -triggercontract - -# 参数说明 -contract_address:即之前部署过合约的地址,格式 base58,如:TTWq4vMEYB2yibAbPV7gQ4mrqTyX92fha6 -method:调用的函数签名,如set(uint256,uint256)或者 fool(),参数使用','分割且不能有空格 -args:如果非十六进制,则自然输入使用','分割且不能有空格,如果是十六进制,直接填入即可 -is_hex:输入参数是否为十六进制,false 或者 true -fee_limit:和deploycontract的时候类似,表示本次部署合约消耗的TRX的上限,单位是SUN(1 SUN = 10^-6 TRX),包括CPU资源、STORAGE资源和可用余额的消耗。 -value:在部署合约时,给该合约转账金额,使用十六进制32位表示 - -# 调用的例子 -## 设置 mapping 1->1 -triggercontract TTWq4vMEYB2yibAbPV7gQ4mrqTyX92fha6 set(uint256,uint256) 1,1 false 1000000 0000000000000000000000000000000000000000000000000000000000000000 - -## 取出 mapping key = 1的 value -triggercontract TTWq4vMEYB2yibAbPV7gQ4mrqTyX92fha6 get(uint256) 1 false 1000000 0000000000000000000000000000000000000000000000000000000000000000 -``` - -如果调用的函数是 constant 或 view,wallet-cli 将会直接返回结果 - -如果包含library,则需要在部署合约之前先部署library,部署完library之后,知道了library地址,将地址填进library:address,library:address,... - -```text -# 比如使用remix生成的合约,bytecode是 -608060405234801561001057600080fd5b5061013f806100206000396000f300608060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063f75dac5a14610046575b600080fd5b34801561005257600080fd5b5061005b610071565b6040518082815260200191505060405180910390f35b600073__browser/oneLibrary.sol.Math3__________<\b>634f2be91f6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b1580156100d357600080fd5b505af41580156100e7573d6000803e3d6000fd5b505050506040513d60208110156100fd57600080fd5b81019080805190602001909291905050509050905600a165627a7a7230582052333e136f236d95e9d0b59c4490a39e25dd3a3dcdc16285820ee0a7508eb8690029 -``` - -之前部署的library地址是:TSEJ29gnBkxQZR3oDdLdeQtQQykpVLSk54 -那么部署的时候,需要将 browser/oneLibrary.sol.Math3:TSEJ29gnBkxQZR3oDdLdeQtQQykpVLSk54 作为deploycontract的参数。 +### 5. Trident-java +trident-java是一个极其轻量的JAVA SDK。它包含了一系列库,方便开发者使用波场网络的系统与智能合约。 diff --git a/docs/contracts/contract.md b/docs/contracts/contract.md index c01797aa..eb2bb378 100644 --- a/docs/contracts/contract.md +++ b/docs/contracts/contract.md @@ -3,7 +3,7 @@ ## 波场智能合约介绍 智能合约是一种能自动执行其条款的计算化交易协议。智能合约和普通合约一样,定义了参与者相关的条款和奖惩机制。一旦合约被启动,便能按照设定的条款执行,并自动检查所承诺的条款实施情形。 -Tron兼容以太坊(Ethereum)上采用Solidity编写的智能合约。当前建议的Solidity语言版本为0.4.24 ~ 0.4.25。合约编写、编译完成后,部署到Tron公链上。部署后的合约,被触发时,就会在公链的各个节点上自动执行。 +Tron兼容以太坊(Ethereum)上采用Solidity编写的智能合约。你可以在[Tron solidity 代码库](https://github.com/tronprotocol/solidity/releases)中了解最新的版本。合约编写、编译完成后,部署到Tron公链上。部署后的合约,被触发时,就会在公链的各个节点上自动执行。 ## 波场智能合约特性 @@ -96,7 +96,7 @@ Constant function 是指用 view/pure/constant 修饰的函数。会在调用的 另一个与合约调用相关的是调用指令集的时候使用CREATE指令。这个指令将会创建一个新的合约并生成新的地址。与以太坊的创建唯一的不同在于波场新生成的地址使用的是传入的本次智能合约交易id与调用的nonce的哈希组合。和以太坊不同,这个nonce的定义为本次根调用开始创建的合约序号。即如果有多次的 CREATE指令调用,从1开始,顺序编号每次调用的合约。详细请参考代码。还需注意,与deploycontract的grpc调用创建合约不同,CREATE的合约并不会保存合约的abi。 -* 内置功能属性及内置函数 (Odyssey-v3.1.1及之后的版本暂时不支持TVM内置函数) +* 内置功能 ```shell 1)TVM兼容solidity语言的转账形式,包括: @@ -106,23 +106,12 @@ transfer/send/call/callcode/delegatecall函数调用转账 注意,波场的智能合约与波场系统合约的逻辑不同,如果转账的目标地址账户不存在,不能通过智能合约转账的形式创建目标地址账户。这也是与以太坊的不同点。 -2)不同账户为超级节点投票 (Odyssey-v3.1.1及之后的版本暂时不支持) -3)超级节点获取所有奖励 (Odyssey-v3.1.1及之后的版本暂时不支持) -4)超级节点通过或否定提案 (Odyssey-v3.1.1及之后的版本暂时不支持) -5)超级节点提出提案 (Odyssey-v3.1.1及之后的版本暂时不支持) -6)超级节点删除提案 (Odyssey-v3.1.1及之后的版本暂时不支持) -7)波场byte地址转换为solidity地址 (Odyssey-v3.1.1及之后的版本暂时不支持) -8)波场string地址转换为solidity地址 (Odyssey-v3.1.1及之后的版本暂时不支持) -9)向目标账户地址发送token转账 (Odyssey-v3.1.1及之后的版本暂时不支持) -10)查询目标账户地址的指定token的数量 (Odyssey-v3.1.1及之后的版本暂时不支持) -11)兼容所有以太坊内置函数 +2)为超级节点投票 +3)质押 +4)资源代理 +5)兼容所有以太坊内置函数 ``` -注意: -波场2)- 10)为波场自己的内置函数 具体中文文档请参看:https://github.com/tronprotocol/Documentation/blob/master/中文文档/虚拟机/虚拟机内置函数.md - -以太坊 RIPEMD160 函数不推荐使用,波场返回的是一个自己的基于sha256的hash结果,并不是准确的以太坊RIPEMD160。以后会考虑删除这个函数。 - ### 3. 合约地址在solidity语言的使用 以太坊虚拟机地址为是20字节,而波场虚拟机解析地址为21字节。 diff --git a/docs/introduction/dpos.md b/docs/introduction/dpos.md index 759025e3..4f0f6756 100644 --- a/docs/introduction/dpos.md +++ b/docs/introduction/dpos.md @@ -87,55 +87,8 @@ DPOS共识在区块链系统中根据节点获取选票的多少确定出部分 ## 基于提案对参数进行调整 -DPOS的一个重要的特性是任何系统参数的调整都可以通过链上的提案发起,记账人通过对提案的投票来决定提案是否生效。这样的好处是在链上新增加一些特性不需要进行硬分叉升级,波场目前能够支持的系统参数调整有: +DPOS的一个重要的特性是任何系统参数的调整都可以通过链上的提案发起,记账人通过对提案的投票来决定提案是否生效,这样的好处是在链上新增加一些特性不需要进行硬分叉升级。目前TRON网络的动态参数及其值,以及过往的提案,请参考[这里](https://tronscan.org/#/sr/committee)。 -1.两个维护期之间的时间间隔 - -2.申请成为记账候选人花费的TRX的数量 - -3.激活一个账号需要花费的TRX的数量 - -4.每笔交易中1个字节需要的带宽费用 - -5.在波场中发行资产需要花费的TRX的数量 - -6.witness生产每个区块的奖励 - -7.所有记账人(包括记账候选人)得票数在前127名按得票比例将要获得的TRX奖励总数 - -8.通过系统合约激活账号需要花费的TRX的数量 - -9.激活一个账号需要花费的带宽数量 - -10.能量和Sun的兑换关系 - -11.创建基于TRC-10的token去中心化交易对需要花费的TRX的数量 - -12.单笔交易执行允许花费的最大cpu时间 - -13.是否允许修改账号名称 - -14.是否允许发行同名的资产 - -15.是否允许资源委托 - -16.波场区块链系统中的能量上限值 - -17.是否允许在智能合约中转移TRC-10资产 - -18.是否允许开启能量上限动态调整 - -19.是否允许多重签名 - -20.账号权限更新需要花费的TRX数量 - -21.多重签名交易需要花费的TRX数量 - -22.是否对block和transaction的protobuf消息是否开启校验 - -## 带宽和能量机制 - -待补充 ## 附录:参考文档 diff --git a/docs/mechanism-algorithm/account.md b/docs/mechanism-algorithm/account.md index e1dc6c77..5da69015 100644 --- a/docs/mechanism-algorithm/account.md +++ b/docs/mechanism-algorithm/account.md @@ -2,7 +2,7 @@ ## 账户模型介绍 -Tron采用账户模型。账户的唯一标识为地址address,对账户操作需要验证私钥签名。每个账户拥有TRX、Token余额及智能合约、带宽、能量等各种资源。通过发送交易可以增减TRX或者Token余额,需要消耗带宽;可以发布并拥有智能合约,也可以调用他人发布的智能合约,需要消耗能量。可以申请成为超级代表并被投票,也可以对超级代表进行投票。等等。Tron所有的活动都围绕账户进行。 +TRON采用账户模型,账户的唯一标识为地址(address),对账户操作需要私钥签名。每个账户可以拥有TRX、TRC10 Token、带宽、能量等各种资源。通过发送交易可以增减TRX或者TRC10 Token余额,可以发布并拥有智能合约,也可以调用自己或者他人发布的智能合约。可以申请成为超级代表并被投票,也可以对超级代表进行投票等等。TRON所有的活动都围绕账户进行。 ## 创建账号的方式 diff --git a/docs/mechanism-algorithm/multi-signatures.md b/docs/mechanism-algorithm/multi-signatures.md index c8f0e783..b7f22e8f 100644 --- a/docs/mechanism-algorithm/multi-signatures.md +++ b/docs/mechanism-algorithm/multi-signatures.md @@ -2,8 +2,7 @@ ## 背景 -**注意:V3.5版本后支持** -目前TRON的所有交易签名,都是用的同一个私钥完成。没有权限分级,也不能实现多人共同控制账户。因此,设计并实现多重签名功能,每个权限可以对应多个私钥。 +多重签名功能允许权限分级,每个权限可以对应多个私钥。这使得实现账户的多人联合控制成为可能。 [Tron multi-signatures TIP](https://github.com/tronprotocol/tips/blob/master/tip-16.md) @@ -13,7 +12,7 @@ ### 结构说明 -#### Account修改 +#### Account ```protobuf message Account { @@ -24,9 +23,9 @@ message Account { } ``` -在账户结构中新增三个权限属性,分别是 owner_permission、witness_permission 和 active_permission,其中 active_permission 是个列表,可以指定最多8个。 +在账户结构中有三个权限属性,分别是 owner_permission、witness_permission 和 active_permission,其中 active_permission 是个列表,可以指定最多8个。 -#### ContractType修改 +#### ContractType ```protobuf message Transaction { @@ -39,8 +38,7 @@ message Transaction { } } ``` - -新增一种交易类型 AccountPermissionUpdateContract,用于更新账户权限。 +AccountPermissionUpdateContract类型的交易,用于更新账户权限。 #### AccountPermissionUpdateContract @@ -58,7 +56,7 @@ message AccountPermissionUpdateContract { `witness`:修改后的 witness 权限(如果是 witness ) `actives`:修改后的 actives 权限 -该接口是覆盖原账户权限,因此,如果只想修改owner权限,witness(如果是witnss账户)及actives的也需要设置。 +注意:该接口是覆盖原账户权限,因此,如果只想修改owner权限,witness(如果是witnss账户)及actives的也需要设置。 #### Permission @@ -102,7 +100,7 @@ message Key { `address`:拥有该权限的地址 `weight`:该地址对该权限拥有权重 -#### Transaction修改 +#### Transaction ```protobuf message Transaction { @@ -243,7 +241,6 @@ http://{{host}}:{{port}}/wallet/accountpermissionupdate }] } -参数字段的定义及限制,请查看"2.1 结构说明"。 ``` @@ -280,9 +277,7 @@ n+1、验证多重签名的权重之和大于域值则接受交易,否则拒 [多重签名示例](https://github.com/tronprotocol/wallet-cli/blob/multi_sign_V2/src/main/java/org/tron/demo/MultiSignDemo.java) -### 其他新增接口 - -接口详细说明,请查看Tron-http.md与波场钱包RPC-API.md +### 其他相关接口 #### 查询已签名地址 @@ -300,13 +295,3 @@ curl -X POST http://127.0.0.1:8090/wallet/getsignweight -d '{"transaction"}' rpc GetTransactionSignWeight (Transaction) returns (TransactionSignWeight) {} ``` - -## 其他 - -### 支持多重签名后,创建账户时有什么变化? - -在升级到V3.5版本后,并且多重签名提议生效后,创建账户时将自动生成owner-permission以及一个active-permission, -其中owner-permission中仅包含一个key,权限及阈值都为1。active-permission中也包含一个key,权限及阈值都为1,并且 -operations为"7fff1fc0033e0000000000000000000000000000000000000000000000000000",表示支持除 -AccountPermissionUpdateContract以外的所有操作。 -在V3.5版本以后,如果有新增系统合约,新创建的账户的默认operations值会发生变化。已经创建的账户的operations不会发生变化。 diff --git a/docs/mechanism-algorithm/sr.md b/docs/mechanism-algorithm/sr.md index 2028c973..a06f2b4a 100644 --- a/docs/mechanism-algorithm/sr.md +++ b/docs/mechanism-algorithm/sr.md @@ -13,7 +13,7 @@ 投票需要TRON Power(TP),你的TRON Power(TP)的多少由当前质押资金决定。TRON Power(TP)的计算方法:每质押1TRX,就可以获得1单位TRON Power(TP)。 - TRON网络中的每一个账户都具有选举权,可以通过投票选出自己认同的超级代表了。 + TRON网络中的每一个账户都具有选举权,可以通过投票选出自己认同的超级代表。 在解锁后,你没有了质押的资产,相应地失去了所有的TRON Power(TP),因此以前的投票会失效。你可以通过重新质押并投票来避免投票失效。 @@ -31,13 +31,13 @@ votewitness witness1 3 witness2 7 # 同时给witness1投了3票,给witness2投 ### Witnesses分红 -默认比例是20%,witnesses可以调整该值。 +默认比例是20%,超级代表和超级代表合伙人可以通过wallet/getBrokerage接口查询佣金比例, 也可以通过wallet/updateBrokerage接口修改佣金比例。 如果一个witness获得20%的奖励,那么剩余的80%奖励会被分配给投票者。如果分红比例设置为100%,那么只有witness可以获得奖励;相反,如果设置为0,那么只有投票者会获得奖励。 ## 3. 超级代表的奖励 -### 票数奖励 +### 投票奖励 票数奖励是每生成一个区块奖励160TRX,总奖励数是4,608,000 TRX / 天。 @@ -76,43 +76,7 @@ votewitness witness1 3 witness2 7 # 同时给witness1投了3票,给witness2投 只有超级代表(SR)、合伙人(Partner)和候选人(Candidates)对应账户具有提议权。 -允许修改的网络动态参数以及编号如下( [min,max] ): -{0,1}:1代表‘通过’或者‘激活’,0代表否。 - -| # | Command | Value | -| ---- | ---- | ---- | -| 0 | getMaintenanceTimeInterval
(修改超级代表调整时间间隔) | 6 Hours
[3 * 27, 24 * 3600] s | -| 1 | getAccountUpgradeCost
(修改账户升级为超级代表的费用) | 9999 TRX
[0, 100000000000] TRX | -| 2 | getCreateAccountFee
(修改创建账户费用) | 0.1 TRX
[0, 100000000000] TRX | -| 3 | getTransactionFee
(修改TRX抵扣带宽的费用) | 140 Sun/Byte
[0, 100000000000] TRX | -| 4 | getAssetIssueFee
(修改资产发行费用) | 1024 TRX
[0, 100000000000] TRX| -| 5 | getWitnessPayPerBlock
(修改超级代表出块奖励) | 16 TRX
[0, 100000000000] TRX | -| 6 | getWitnessStandbyAllowance
(修改分给前127名超级代表候选人的奖励) | 115200 TRX
[0, 100000000000] TRX | -| 7 | getCreateNewAccountFeeInSystemContract
(修改系统创建账户的费用) | 1 TRX | -| 8 | getCreateNewAccountBandwidthRate
(提议7、8,组合使用,用于修改创建账户时对资源或TRX的消耗) | 1 Bandwith/Byte | -| 9 | getAllowCreationOfContracts
(控制虚拟机功能的开启 ) | 1
{0, 1} | -| 10 | getRemoveThePowerOfTheGr
(用于清除GR的创世票数) | 1
{0, 1}| -| 11 | getEnergyFee
(修改能量费用) | 140 Sun
[0, 100000000000] TRX | -| 12 | getExchangeCreateFee
(修改创建交易对的费用) | 1024 TRX
[0, 100000000000] TRX | -| 13 | getMaxCpuTimeOfOneTx
(修改交易最长执行时间) | 50 ms
[0, 1000] ms | -| 14 | getAllowUpdateAccountName
(允许用户更改昵称以及昵称同名) | 0
{0, 1} | -| 15 | getAllowSameTokenName
(允许创建相同名称的token) | 1
{0, 1} | -| 16 | getAllowDelegateResource
(控制资源代理功能的开启) | 1
{0, 1} | -| 18 | getAllowTvmTransferTrc10
(允许智能合约调用TRC10 token的接口) | 1
{0, 1} | -| 19 | getTotalEnergyCurrentLimit
(修改ENERGY总量) | 50000000000 | -| 20 | getAllowMultiSign
(允许开启多重签名) | 1
{0, 1} | -| 21 | getAllowAdaptiveEnergy
(允许ENERGY总量自适应调整) | 0
{0, 1} | -| 22 | getUpdateAccountPermissionFee
(修改账户权限费用) | 100 TRX | -| 23 | getMultiSignFee
(修改多重签名费用) | 1 TRX | -| 24 | getAllowProtoFilterNum
(允许更新protobuf的数字) | 0
{0, 1} | -| 26 | getAllowTvmConstantinople
(允许TVM支持君士坦丁堡更新) | 1
{0, 1} | -| 27 | getAllowShieldedTransaction
(允许匿名交易开启) | 0
{0, 1} | -| 28 | getShieldedTransactionFee
(修改匿名交易手续费) | 10 TRX
[0, 10000] TRX | -| 29 | getAdaptiveResourceLimitMultiplier
(用于修改动态能量最大值) | 1000
[1, 10000] | -| 30 | getChangeDelegation
(修改更换委托机制) | 1
{0, 1} | -| 31 | getWitness127PayPerBlock
(修改票数排名奖励) | 160 TRX
[0, 100000000000] TRX | -| 32 | getAllowTvmSolidity059
(允许虚拟机支持0.5.9版本的Solidity编译器) | 0
{0, 1} | -| 33 | getAdaptiveResourceLimitTargetRatio
(修改能量目标值) | 10
[1, 1000] | +TRON网络动态参数及其编号请参考[这里](https://tronscan.org/#/sr/committee)。 + 示例: @@ -122,7 +86,6 @@ id0_N: 参数编号 value0_N: 新参数值 ``` -注:Tron网络中,1 TRX = 1_000_000 SUN。 ### 5.3 对提议进行投票 diff --git a/docs/releases/history.md b/docs/releases/history.md index 4de63e22..38ae43ab 100644 --- a/docs/releases/history.md +++ b/docs/releases/history.md @@ -3,6 +3,7 @@ | 名称 |版本号 | 发布日期 | 包含的TIP | 版本说明 | 技术解读 | | -------- | -------- | -------- | -------- | -------- | -------- | +| Epicurus | GreatVoyage-v4.7.7 | 2024-11-29 | [TIP-697](https://github.com/tronprotocol/tips/issues/697) | [Release Note](https://github.com/tronprotocol/java-tron/releases/tag/GreatVoyage-v4.7.7) | [Specs](#greatvoyage-477epicurus) | | Anaximander | GreatVoyage-v4.7.6 | 2024-10-04 | N/A | [Release Note](https://github.com/tronprotocol/java-tron/releases/tag/GreatVoyage-v4.7.6) | [Specs](#greatvoyage-v476anaximander) | | Cleobulus | GreatVoyage-v4.7.5 | 2024-5-30 | [TIP-653](https://github.com/tronprotocol/tips/blob/master/tip-653.md) | [Release Note](https://github.com/tronprotocol/java-tron/releases/tag/GreatVoyage-v4.7.5) | [Specs](#greatvoyage-v475cleobulus) | | Bias | GreatVoyage-v4.7.4 | 2024-3-15 | [TIP-635](https://github.com/tronprotocol/tips/blob/master/tip-635.md)
[TIP-621](https://github.com/tronprotocol/tips/blob/master/tip-621.md) | [Release Note](https://github.com/tronprotocol/java-tron/releases/tag/GreatVoyage-v4.7.4) | [Specs](#greatvoyage-v474bias) | @@ -78,6 +79,53 @@ | N/A | Odyssey-v1.0.3 | 2018-4-5 | N/A | [Release Note](https://github.com/tronprotocol/java-tron/releases/tag/Odyssey-v1.0.3) | N/A | | N/A | Exodus-v1.0 | 2017-12-28 | N/A | [Release Note](https://github.com/tronprotocol/java-tron/releases/tag/Exodus-v1.0) | N/A | +## GreatVoyage-4.7.7(Epicurus) +Epicurus版本引入了多个重要的优化和更新,新增一个升级浮点计算幂运算库的提案,扩展 TRON 硬件兼容性,为用户提供更灵活的硬件平台选择,节省运行成本;优化事件订阅处理逻辑,保证事件获取的完整性,为用户带来更友好的开发体验;适配 GRPC 异步调用模式,进一步完善节点监控系统。下面是详细介绍。 + +### 核心协议 +#### 1. 将浮点类型的幂运算库从java.lang.Math升级到java.lang.StrictMath + +为了Java-tron后续支持多平台,兼容新的JDK版本,Epicurus版本将浮点类型的幂运算库从 java.lang.Math 切换到 java.lang.StrictMath,以确保跨平台计算的一致性。 + +注意,该优化是TRON网络的第87号参数,Epicurus部署之后默认为关闭状态,可以通过发起提案投票的方式开启。 + + +TIP: https://github.com/tronprotocol/tips/issues/697 + +源代码:https://github.com/tronprotocol/java-tron/pull/6098 + +### 其它变更 +#### 1. 优化事件订阅处理逻辑 + +Java-tron提供事件订阅服务,开发者可以通过事件插件从节点订阅特定事件。针对区块事件,当节点收到一个新区块后,如果成功验证并处理该区块,则会将该区块数据保存在内存数据库中,同时如果有新的固化区块,会将固化区块数据写入到磁盘数据库。如果节点部署者订阅了区块事件,则在完成上述区块处理步骤后,会进行事件发送相关逻辑,即,将最新区块事件、最新固化区块事件发送给事件插件。但在Epicurus之前的版本中,区块处理与事件发送采用了同一个异常捕获逻辑:将新接收的区块数据从内存数据库中移除,并抛出异常。这将导致当区块处理正常,而事件服务发生异常时,新区块数据仍被删除,从而可能暂时影响区块同步。 + +Epicurus版本优化了事件订阅处理逻辑,对区块事件发送逻辑单独进行异常捕获,当事件服务发生异常时,输出错误日志,节点退出运行,以使节点部署者可以及时了解节点异常情况,保证事件获取的完整性。 + + +源代码:https://github.com/tronprotocol/java-tron/pull/6096 + +#### 2. 调整主备服务资源释放顺序 + +Epicurus版本调整了主备服务的资源释放顺序,先关闭主备节点通讯信道,再关闭线程池,以确保开启主备功能的节点可以通过`kill -15`命令优雅退出。 + +源代码:https://github.com/tronprotocol/java-tron/pull/6095 + + +#### 3. 优化GRPC接口调用耗时统计方法 +Epicurus版本优化了GRPC接口调用的耗时统计方法,以适配GRPC异步调用模式:新增一个服务端拦截器,用于记录GRPC调用的起始时间,并监听GRPC调用的结束事件,以准确的计算出GRPC接口异步调用耗时。 + + +源代码:https://github.com/tronprotocol/java-tron/pull/6097 + + + +Not what we have but what we enjoy, constitutes our abundance. + +

---Epicurus

+ +--- + + ## GreatVoyage-v4.7.6(Anaximander) Anaximander版本引入了多个重要的优化和更新,优化的单元测试任务,提高了测试用例执行的稳定性;新增的TCP、UDP流量统计,进一步完善了节点监控数据;优化的远端节点空闲判断逻辑,提升了区块同步的稳定性;优化的节点连接随机断开逻辑,提高了节点网络健壮性。下面是详细介绍。 @@ -139,12 +187,12 @@ Anaximander版本优化了区块处理逻辑,在处理广播过来的区块后 ---- + *Nature is eternal and does not age.*

---Anaximander

- +--- ## GreatVoyage-v4.7.5(Cleobulus)