Skip to content

Commit 8bcaa25

Browse files
committed
new release update
1 parent b9ce9c3 commit 8bcaa25

File tree

7 files changed

+76
-268
lines changed

7 files changed

+76
-268
lines changed

docs/contracts/compiler.md

Lines changed: 6 additions & 136 deletions
Original file line numberDiff line numberDiff line change
@@ -10,148 +10,18 @@
1010
### 2. TronBox
1111

1212
波场智能合约部署工具。支持solidity语言智能合约的编译,部署,移植等功能。
13-
[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)
13+
[https://developers.tron.network/reference/what-is-tronbox](https://developers.tron.network/reference/what-is-tronbox)
1414

1515
### 3. TronWeb
1616

17-
波场智能合约开发使用的http api库。提供和主链交互,合约部署调用等接口。
18-
[https://cn.developers.tron.network/docs/dapp-development-tools-tronweb](https://cn.developers.tron.network/docs/dapp-development-tools-tronweb)
17+
波场智能合约开发使用的javascript库。提供和主链交互,合约部署调用等接口。
18+
[https://tronweb.network/docu/docs/intro/](https://tronweb.network/docu/docs/intro/)
1919

2020
### 4. TronGrid
2121

2222
波场智能合约事件查询服务。可以查询智能合约中写入的事件log信息。
23-
[https://cn.developers.tron.network/docs/trongrid](https://cn.developers.tron.network/docs/trongrid)
23+
[https://developers.tron.network/docs/trongrid](https://developers.tron.network/docs/trongrid)
2424

25-
## 使用命令行工具进行智能合约开发
2625

27-
在tron上进行智能合约的开发,除了使用现有的工具(tron-studio)之外,也可以直接使用wallet-cli命令行工具进行智能合约的开发,编译和部署。编写智能合约,可以使用使用TronStudio进行编译、调试等前期的开发工作。 当合约开发完成之后,可以把合约复制到[SimpleWebCompiler](https://github.com/tronprotocol/tron-demo/tree/master/SmartContractTools/SimpleWebCompiler)中进行编译,获取ABI和ByteCode。
28-
29-
我们提供一个简单的数据存取的合约代码示例,以这个示例来说明编译、部署、调用的步骤。
30-
31-
```text
32-
pragma solidity ^0.4.0;
33-
contract DataStore {
34-
35-
mapping(uint256 => uint256) data;
36-
37-
function set(uint256 key, uint256 value) public {
38-
data[key] = value;
39-
}
40-
41-
function get(uint256 key) view public returns (uint256 value) {
42-
value = data[key];
43-
}
44-
}
45-
```
46-
47-
### 启动私有链
48-
49-
确保前提条件中,私有链已经在本地部署完成。可以检查FullNode/logs/tron.log中,是否有持续产块的log信息出现:“Produce block successfully”
50-
51-
### 开发智能合约
52-
53-
把上述代码复制到remix中编译,调试,确保代码的逻辑是自己需要的,编译通过,没有错误
54-
55-
### 在SimpleWebCompiler编译得到ABI和ByteCode
56-
57-
因为波场的编译器与以太坊的编译略有差异,正在与Remix集成中,所以临时采用改方案获取ABI和ByteCode,而不是通过Remix直接获取ABI和ByteCode。
58-
把上述代码复制到SimpleWebCompiler中,点击Compile按钮,获取ABI和ByteCode。
59-
60-
### 通过Wallet-cli部署智能合约
61-
62-
下载Wallet-Cli,文件然后编译。
63-
64-
```shell
65-
# 下载源代码
66-
git clone https://github.com/tronprotocol/wallet-cli
67-
cd wallet-cli
68-
# 编译
69-
./gradlew build
70-
cd build/libs
71-
```
72-
73-
注意:
74-
wallet-cli 默认的配置会连接本地127.0.0.1:50051的 fullnode,如果开发者需要连接不同的其他节点或者端口可在 config.conf 文件中进行修改
75-
76-
启动wallet-cli
77-
78-
```text
79-
java -jar wallet-cli.jar
80-
```
81-
82-
启动之后,可在命令中交互式输入指令。导入私钥,并查询余额是否正确
83-
84-
```text
85-
importwallet
86-
<输入你自己的设定的钱包密码2次>
87-
<输入私钥:da146374a75310b9666e834ee4ad0866d6f4035967bfc76217c5a495fff9f0d0>
88-
login
89-
<输入你自己的设定的钱包密码>
90-
getbalance
91-
```
92-
93-
部署合约
94-
95-
```text
96-
# 合约部署指令
97-
DeployContract contractName ABI byteCode constructor params isHex fee_limit consume_user_resource_percent <value> <library:address,library:address,...>
98-
99-
# 参数说明
100-
contract_name:自己制定的合约名
101-
ABI:从SimpleWebCompiler中获取到的 ABI json 数据
102-
bytecode:从SimpleWebCompiler中获取到的二进制代码
103-
constructor:部署合约时,会调用构造函数,如果需要调用,就把构造函数的参数类型填写到这里,例如:constructor(uint256,string),如果没有,就填写一个字符#
104-
params:构造函数的参数,使用逗号分隔开来,例如 1,"test" ,如果没有构造函数,就填写一个字符#
105-
fee_limit:本次部署合约消耗的TRX的上限,单位是SUN(1 SUN = 10^-6 TRX),包括CPU资源、STORAGE资源和可用余额的消耗
106-
consume_user_resource_percent:指定的使用该合约用户的资源占比,是[0, 100]之间的整数。如果是0,则表示用户不会消耗资源。如果开发者资源消耗完了,才会完全使用用户的资源。
107-
value:在部署合约时,给该合约转账金额,使用十六进制32位表示
108-
library:address,library:address,...:如果合约包含library,则需要在部署合约的时候指定library的地址,具体见下文;没有library的话则不需要填写。
109-
110-
# 运行例子
111-
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
112-
部署成功会显示Deploy the contract successfully
113-
```
114-
115-
得到合约的地址
116-
117-
```text
118-
Your smart contract address will be: <合约地址>
119-
120-
# 在本例中
121-
Your smart contract address will be: TTWq4vMEYB2yibAbPV7gQ4mrqTyX92fha6
122-
```
123-
124-
调用合约存储数据、查询数据
125-
126-
```text
127-
Shell
128-
# 调用合约指令
129-
triggercontract <contract_address> <method> <args> <is_hex> <fee_limit> <value>
130-
131-
# 参数说明
132-
contract_address:即之前部署过合约的地址,格式 base58,如:TTWq4vMEYB2yibAbPV7gQ4mrqTyX92fha6
133-
method:调用的函数签名,如set(uint256,uint256)或者 fool(),参数使用','分割且不能有空格
134-
args:如果非十六进制,则自然输入使用','分割且不能有空格,如果是十六进制,直接填入即可
135-
is_hex:输入参数是否为十六进制,false 或者 true
136-
fee_limit:和deploycontract的时候类似,表示本次部署合约消耗的TRX的上限,单位是SUN(1 SUN = 10^-6 TRX),包括CPU资源、STORAGE资源和可用余额的消耗。
137-
value:在部署合约时,给该合约转账金额,使用十六进制32位表示
138-
139-
# 调用的例子
140-
## 设置 mapping 1->1
141-
triggercontract TTWq4vMEYB2yibAbPV7gQ4mrqTyX92fha6 set(uint256,uint256) 1,1 false 1000000 0000000000000000000000000000000000000000000000000000000000000000
142-
143-
## 取出 mapping key = 1的 value
144-
triggercontract TTWq4vMEYB2yibAbPV7gQ4mrqTyX92fha6 get(uint256) 1 false 1000000 0000000000000000000000000000000000000000000000000000000000000000
145-
```
146-
147-
如果调用的函数是 constant 或 view,wallet-cli 将会直接返回结果
148-
149-
如果包含library,则需要在部署合约之前先部署library,部署完library之后,知道了library地址,将地址填进library:address,library:address,...
150-
151-
```text
152-
# 比如使用remix生成的合约,bytecode是
153-
608060405234801561001057600080fd5b5061013f806100206000396000f300608060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063f75dac5a14610046575b600080fd5b34801561005257600080fd5b5061005b610071565b6040518082815260200191505060405180910390f35b600073<b>__browser/oneLibrary.sol.Math3__________<\b>634f2be91f6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b1580156100d357600080fd5b505af41580156100e7573d6000803e3d6000fd5b505050506040513d60208110156100fd57600080fd5b81019080805190602001909291905050509050905600a165627a7a7230582052333e136f236d95e9d0b59c4490a39e25dd3a3dcdc16285820ee0a7508eb8690029
154-
```
155-
156-
之前部署的library地址是:TSEJ29gnBkxQZR3oDdLdeQtQQykpVLSk54
157-
那么部署的时候,需要将 browser/oneLibrary.sol.Math3:TSEJ29gnBkxQZR3oDdLdeQtQQykpVLSk54 作为deploycontract的参数。
26+
### 5. Trident-java
27+
trident-java是一个极其轻量的JAVA SDK。它包含了一系列库,方便开发者使用波场网络的系统与智能合约。

docs/contracts/contract.md

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
## 波场智能合约介绍
44

55
智能合约是一种能自动执行其条款的计算化交易协议。智能合约和普通合约一样,定义了参与者相关的条款和奖惩机制。一旦合约被启动,便能按照设定的条款执行,并自动检查所承诺的条款实施情形。
6-
Tron兼容以太坊(Ethereum)上采用Solidity编写的智能合约。当前建议的Solidity语言版本为0.4.24 ~ 0.4.25。合约编写、编译完成后,部署到Tron公链上。部署后的合约,被触发时,就会在公链的各个节点上自动执行。
6+
Tron兼容以太坊(Ethereum)上采用Solidity编写的智能合约。你可以在[Tron solidity 代码库](https://github.com/tronprotocol/solidity/releases)中了解最新的版本。合约编写、编译完成后,部署到Tron公链上。部署后的合约,被触发时,就会在公链的各个节点上自动执行。
77

88
## 波场智能合约特性
99

@@ -96,7 +96,7 @@ Constant function 是指用 view/pure/constant 修饰的函数。会在调用的
9696

9797
另一个与合约调用相关的是调用指令集的时候使用CREATE指令。这个指令将会创建一个新的合约并生成新的地址。与以太坊的创建唯一的不同在于波场新生成的地址使用的是传入的本次智能合约交易id与调用的nonce的哈希组合。和以太坊不同,这个nonce的定义为本次根调用开始创建的合约序号。即如果有多次的 CREATE指令调用,从1开始,顺序编号每次调用的合约。详细请参考代码。还需注意,与deploycontract的grpc调用创建合约不同,CREATE的合约并不会保存合约的abi。
9898

99-
* 内置功能属性及内置函数 (Odyssey-v3.1.1及之后的版本暂时不支持TVM内置函数)
99+
* 内置功能
100100

101101
```shell
102102
1)TVM兼容solidity语言的转账形式,包括:
@@ -106,23 +106,12 @@ transfer/send/call/callcode/delegatecall函数调用转账
106106

107107
注意,波场的智能合约与波场系统合约的逻辑不同,如果转账的目标地址账户不存在,不能通过智能合约转账的形式创建目标地址账户。这也是与以太坊的不同点。
108108

109-
2)不同账户为超级节点投票 (Odyssey-v3.1.1及之后的版本暂时不支持)
110-
3)超级节点获取所有奖励 (Odyssey-v3.1.1及之后的版本暂时不支持)
111-
4)超级节点通过或否定提案 (Odyssey-v3.1.1及之后的版本暂时不支持)
112-
5)超级节点提出提案 (Odyssey-v3.1.1及之后的版本暂时不支持)
113-
6)超级节点删除提案 (Odyssey-v3.1.1及之后的版本暂时不支持)
114-
7)波场byte地址转换为solidity地址 (Odyssey-v3.1.1及之后的版本暂时不支持)
115-
8)波场string地址转换为solidity地址 (Odyssey-v3.1.1及之后的版本暂时不支持)
116-
9)向目标账户地址发送token转账 (Odyssey-v3.1.1及之后的版本暂时不支持)
117-
10)查询目标账户地址的指定token的数量 (Odyssey-v3.1.1及之后的版本暂时不支持)
118-
11)兼容所有以太坊内置函数
109+
2)为超级节点投票
110+
3)质押
111+
4)资源代理
112+
5)兼容所有以太坊内置函数
119113
```
120114

121-
注意:
122-
波场2)- 10)为波场自己的内置函数 具体中文文档请参看:https://github.com/tronprotocol/Documentation/blob/master/中文文档/虚拟机/虚拟机内置函数.md
123-
124-
以太坊 RIPEMD160 函数不推荐使用,波场返回的是一个自己的基于sha256的hash结果,并不是准确的以太坊RIPEMD160。以后会考虑删除这个函数。
125-
126115
### 3. 合约地址在solidity语言的使用
127116

128117
以太坊虚拟机地址为是20字节,而波场虚拟机解析地址为21字节。

docs/introduction/dpos.md

Lines changed: 1 addition & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -87,55 +87,8 @@ DPOS共识在区块链系统中根据节点获取选票的多少确定出部分
8787

8888
## 基于提案对参数进行调整
8989

90-
DPOS的一个重要的特性是任何系统参数的调整都可以通过链上的提案发起,记账人通过对提案的投票来决定提案是否生效这样的好处是在链上新增加一些特性不需要进行硬分叉升级,波场目前能够支持的系统参数调整有:
90+
DPOS的一个重要的特性是任何系统参数的调整都可以通过链上的提案发起,记账人通过对提案的投票来决定提案是否生效这样的好处是在链上新增加一些特性不需要进行硬分叉升级。目前TRON网络的动态参数及其值,以及过往的提案,请参考[这里](https://tronscan.org/#/sr/committee)
9191

92-
1.两个维护期之间的时间间隔
93-
94-
2.申请成为记账候选人花费的TRX的数量
95-
96-
3.激活一个账号需要花费的TRX的数量
97-
98-
4.每笔交易中1个字节需要的带宽费用
99-
100-
5.在波场中发行资产需要花费的TRX的数量
101-
102-
6.witness生产每个区块的奖励
103-
104-
7.所有记账人(包括记账候选人)得票数在前127名按得票比例将要获得的TRX奖励总数
105-
106-
8.通过系统合约激活账号需要花费的TRX的数量
107-
108-
9.激活一个账号需要花费的带宽数量
109-
110-
10.能量和Sun的兑换关系
111-
112-
11.创建基于TRC-10的token去中心化交易对需要花费的TRX的数量
113-
114-
12.单笔交易执行允许花费的最大cpu时间
115-
116-
13.是否允许修改账号名称
117-
118-
14.是否允许发行同名的资产
119-
120-
15.是否允许资源委托
121-
122-
16.波场区块链系统中的能量上限值
123-
124-
17.是否允许在智能合约中转移TRC-10资产
125-
126-
18.是否允许开启能量上限动态调整
127-
128-
19.是否允许多重签名
129-
130-
20.账号权限更新需要花费的TRX数量
131-
132-
21.多重签名交易需要花费的TRX数量
133-
134-
22.是否对block和transaction的protobuf消息是否开启校验
135-
136-
## 带宽和能量机制
137-
138-
待补充
13992

14093
## 附录:参考文档
14194

docs/mechanism-algorithm/account.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
## 账户模型介绍
44

5-
Tron采用账户模型。账户的唯一标识为地址address,对账户操作需要验证私钥签名。每个账户拥有TRX、Token余额及智能合约、带宽、能量等各种资源。通过发送交易可以增减TRX或者Token余额,需要消耗带宽;可以发布并拥有智能合约,也可以调用他人发布的智能合约,需要消耗能量。可以申请成为超级代表并被投票,也可以对超级代表进行投票。等等。Tron所有的活动都围绕账户进行
5+
TRON采用账户模型,账户的唯一标识为地址(address),对账户操作需要私钥签名。每个账户可以拥有TRX、TRC10 Token、带宽、能量等各种资源。通过发送交易可以增减TRX或者TRC10 Token余额,可以发布并拥有智能合约,也可以调用自己或者他人发布的智能合约。可以申请成为超级代表并被投票,也可以对超级代表进行投票等等。TRON所有的活动都围绕账户进行
66

77
## 创建账号的方式
88

docs/mechanism-algorithm/multi-signatures.md

Lines changed: 8 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@
22

33
## 背景
44

5-
**注意:V3.5版本后支持**
6-
目前TRON的所有交易签名,都是用的同一个私钥完成。没有权限分级,也不能实现多人共同控制账户。因此,设计并实现多重签名功能,每个权限可以对应多个私钥。
5+
多重签名功能允许权限分级,每个权限可以对应多个私钥。这使得实现账户的多人联合控制成为可能。
76

87
[Tron multi-signatures TIP](https://github.com/tronprotocol/tips/blob/master/tip-16.md)
98

@@ -13,7 +12,7 @@
1312

1413
### 结构说明
1514

16-
#### Account修改
15+
#### Account
1716

1817
```protobuf
1918
message Account {
@@ -24,9 +23,9 @@ message Account {
2423
}
2524
```
2625

27-
在账户结构中新增三个权限属性,分别是 owner_permission、witness_permission 和 active_permission,其中 active_permission 是个列表,可以指定最多8个。
26+
在账户结构中有三个权限属性,分别是 owner_permission、witness_permission 和 active_permission,其中 active_permission 是个列表,可以指定最多8个。
2827

29-
#### ContractType修改
28+
#### ContractType
3029

3130
```protobuf
3231
message Transaction {
@@ -39,8 +38,7 @@ message Transaction {
3938
}
4039
}
4140
```
42-
43-
新增一种交易类型 AccountPermissionUpdateContract,用于更新账户权限。
41+
AccountPermissionUpdateContract类型的交易,用于更新账户权限。
4442

4543
#### AccountPermissionUpdateContract
4644

@@ -58,7 +56,7 @@ message AccountPermissionUpdateContract {
5856
`witness`:修改后的 witness 权限(如果是 witness )
5957
`actives`:修改后的 actives 权限
6058

61-
该接口是覆盖原账户权限,因此,如果只想修改owner权限,witness(如果是witnss账户)及actives的也需要设置。
59+
注意:该接口是覆盖原账户权限,因此,如果只想修改owner权限,witness(如果是witnss账户)及actives的也需要设置。
6260

6361
#### Permission
6462

@@ -102,7 +100,7 @@ message Key {
102100
`address`:拥有该权限的地址
103101
`weight`:该地址对该权限拥有权重
104102

105-
#### Transaction修改
103+
#### Transaction
106104

107105
```protobuf
108106
message Transaction {
@@ -243,7 +241,6 @@ http://{{host}}:{{port}}/wallet/accountpermissionupdate
243241
}]
244242
}
245243

246-
参数字段的定义及限制,请查看"2.1 结构说明"。
247244

248245
```
249246

@@ -280,9 +277,7 @@ n+1、验证多重签名的权重之和大于域值则接受交易,否则拒
280277

281278
[多重签名示例](https://github.com/tronprotocol/wallet-cli/blob/multi_sign_V2/src/main/java/org/tron/demo/MultiSignDemo.java)
282279

283-
### 其他新增接口
284-
285-
接口详细说明,请查看Tron-http.md与波场钱包RPC-API.md
280+
### 其他相关接口
286281

287282

288283
#### 查询已签名地址
@@ -300,13 +295,3 @@ curl -X POST http://127.0.0.1:8090/wallet/getsignweight -d '{"transaction"}'
300295

301296
rpc GetTransactionSignWeight (Transaction) returns (TransactionSignWeight) {}
302297
```
303-
304-
## 其他
305-
306-
### 支持多重签名后,创建账户时有什么变化?
307-
308-
在升级到V3.5版本后,并且多重签名提议生效后,创建账户时将自动生成owner-permission以及一个active-permission,
309-
其中owner-permission中仅包含一个key,权限及阈值都为1。active-permission中也包含一个key,权限及阈值都为1,并且
310-
operations为"7fff1fc0033e0000000000000000000000000000000000000000000000000000",表示支持除
311-
AccountPermissionUpdateContract以外的所有操作。
312-
在V3.5版本以后,如果有新增系统合约,新创建的账户的默认operations值会发生变化。已经创建的账户的operations不会发生变化。

0 commit comments

Comments
 (0)