-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtrc100_base.sol
More file actions
277 lines (263 loc) · 10.6 KB
/
trc100_base.sol
File metadata and controls
277 lines (263 loc) · 10.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;
import "./interface_trc100.sol";
/*
trc100 分片合约规范,是母链分片管理的唯一途径,也是每个分片的唯一运营合约,决定着当前分片的整个生命周期。
每个分片的运营实体,可以根据自身发展需要,通过接口实现不同属性和能力。
*/
contract trc100_base{
address private InitSender;
address private trc100_impl_addr; //合约实现地址
uint256 private sliceno; //分片号
uint256 private slicetype; //分片类型
bytes32 private name; //分片名称
bool private init;
uint256 private syncNonce; //识别同一个交易动作
address private syncSender;
interface_trc100 public impl;
constructor(){
InitSender = msg.sender;
trc100_impl_addr= msg.sender;
sliceno=0;
syncNonce=0;
syncSender=msg.sender;
init=false;
}
//初始化分片信息
function initslice(bytes32 _name,uint256 no,uint256 _slicetype)public returns (bool,uint){
if(init){
return (false,0);
}
init=true;
name=_name;
sliceno=no;
slicetype=_slicetype;
return (true,1);
}
//分片信息
function slice() public view returns (uint256,uint256,bytes32){
return (sliceno,slicetype,name);
}
//更新合约地址
function upateTrc100(address addr) public returns (bool,uint256){
if(InitSender==trc100_impl_addr){
trc100_impl_addr=addr;
return (true,0);
}else if(msg.sender==trc100_impl_addr){
trc100_impl_addr=addr;
return (true,0);
}
return (false,1);
}
//查询模块合约地址
function trc100Addr()public returns (address,address,address,address,address,address,address){
impl = interface_trc100(trc100_impl_addr);
return impl.trc100Addr(trc100_impl_addr);
}
/*
申请分片
该接口只有在主分片中执行才有效
sender: 检查合法申请人
content: 分片号说明
type: 分片类型(动态分片、静态分片)
*/
function trc100_applyStaticSlice()external returns (uint256){
impl = interface_trc100(trc100_impl_addr);
return impl.applyStaticSlice(msg.sender);
}
/*
检查分片有效性
*/
function trc100_checkslice(uint256 _slicetype,uint256 no)external returns (bool,address){
impl = interface_trc100(trc100_impl_addr);
return impl.checkslice(_slicetype,no);
}
function trc100_querySliceInfo(uint256 begin ,uint256 _len)external returns(bool success, address[] memory,uint256[] memory,uint256[] memory){
impl = interface_trc100(trc100_impl_addr);
return impl.QuerySliceInfo(begin,_len);
}
//查询动态分片数量
function trc100_QuerySliceSize()public returns(uint256){
impl = interface_trc100(trc100_impl_addr);
return impl.QuerySliceSize();
}
//动态分片申请
function trc100_applyslice(uint256 nonce,address submit)public returns (uint256){
require(syncSender==msg.sender,"applyslice11 access denied");
require(syncNonce==nonce,"applyslice21 access denied");
impl = interface_trc100(trc100_impl_addr);
return impl.applyslice(submit);
}
//配置分片矿池权重
function trc100_setSliceWeight(uint256 nonce,uint256 no,uint256 weight)public returns (uint256){
require(syncSender==msg.sender,"setSliceWeight11 access denied");
require(syncNonce==nonce,"setSliceWeight21 access denied");
impl = interface_trc100(trc100_impl_addr);
return impl.setSliceWeight(no,weight);
}
//增加RWA平台
function trc100_addRwaMiner(uint256 nonce,address miner)public returns (uint256){
require(syncSender==msg.sender,"addRwaMiner11 access denied");
require(syncNonce==nonce,"addRwaMiner21 access denied");
impl = interface_trc100(trc100_impl_addr);
return impl.addRwaMiner(miner);
}
//删除RWA平台
function trc100_removeRwaMiner(uint256 nonce,address miner)public returns (uint256){
require(syncSender==msg.sender,"removeRwaMiner11 access denied");
require(syncNonce==nonce,"removeRwaMiner21 access denied");
impl = interface_trc100(trc100_impl_addr);
return impl.removeRwaMiner(miner);
}
/*
锁定平台代币
可以自愿锁定一定数量的平台代币,在一定时间内线性释放或到期一次性释放
该接口只有地址本人提交才有效
nums:代币数量
begin:启始日期
_days:锁定天数
_type:(逐天释放、到期释放)
*/
function trc100_lockToken(uint256 nums,uint256 _begin,uint256 _days, uint256 _type) public returns (bool,uint256){
require(InitSender!=trc100_impl_addr,"access11 denied");
impl = interface_trc100(trc100_impl_addr);
return impl.lockToken(msg.sender,_begin,nums,_days,_type);
}
/*
查询平台代币锁定信息
*/
function trc100_lockTokenInfo()public returns (bool success,address[] memory addrs,uint256[] memory begin,uint256[] memory nums,uint256[] memory _days, uint256[] memory _type){
require(InitSender!=trc100_impl_addr,"access11 denied");
impl = interface_trc100(trc100_impl_addr);
return impl.lockTokenInfo();
}
/*
解除锁定
*/
function trc100_unlockToken()public returns(bool,uint256){
require(InitSender!=trc100_impl_addr,"access11 denied");
impl = interface_trc100(trc100_impl_addr);
return impl.unlockToken(msg.sender);
}
/*
基金会、社区、公私募等平台代币池(没有私钥)划转提案(0)
gas价格调整提案(1)
主网代码升级提案(2)
自身合约升级提案(3)
代币激励矿工提案(4)
DAO管理提案(5)
proposeno:提案号
*/
//参加投票
//主分片和跨链分片会自动提前平台币做为参数调用
//其他分片可以在实现类中,如果amount为零,自动提前指定合约代币实现
//确认权限
function trc100_confirminfo() public returns (uint256,uint256){
require(InitSender!=trc100_impl_addr,"submitpropose1 base access denied");
impl = interface_trc100(trc100_impl_addr);
return impl.confirminfo();
}
//提交提案
function trc100_submitpropose(address addr,bytes32 _contentmark,uint256 _days,uint256 _type,uint256 amount)public returns (bool,uint256) {
require(InitSender!=trc100_impl_addr,"submitpropose1 base denied");
impl = interface_trc100(trc100_impl_addr);
return impl.submitpropose(msg.sender,addr,_contentmark,_days,_type,amount);
}
//投票
function trc100_voteing(uint256 _type,uint256 _op,uint256 amount)public returns (bool,uint256){
require(InitSender!=trc100_impl_addr,"voteing base access denied");
impl = interface_trc100(trc100_impl_addr);
return impl.voteing(_type,_op,msg.sender,amount);
}
//执行提案
function trc100_runpropose(uint256 _type,uint256 nonce)public returns(bool success,uint256 result,uint256 _type1,address addr,bytes32 markid){
require(InitSender!=trc100_impl_addr,"runpropose base access denied");
syncNonce-=syncNonce;
syncNonce+=nonce;
syncSender=msg.sender;
impl = interface_trc100(trc100_impl_addr);
return impl.runpropose(_type);
}
//查询提案状态
function trc100_QueryPropose(uint256 _type)public returns(address,bool,uint256,address,bytes32,uint256,uint256,bool){
require(InitSender!=trc100_impl_addr,"QueryPropose base access denied");
impl = interface_trc100(trc100_impl_addr);
return impl.QueryPropose(_type,msg.sender);
}
//查询提案投票信息
function trc100_queryVoteInfo(uint256 _type) public returns(uint256,uint256,uint256,uint256){
impl = interface_trc100(trc100_impl_addr);
return impl.queryVoteInfo(_type);
}
//删除提案
function trc100_removepropose(uint256 _type) public returns(bool){
impl = interface_trc100(trc100_impl_addr);
return impl.removepropose(msg.sender,_type);
}
//静态分片配置激励合约
function trc100_setCoinbase(address coin)public returns(uint256){
require(msg.sender==InitSender,"setCoinbase base denied");
impl = interface_trc100(trc100_impl_addr);
return impl.SetCoinbase(coin);
}
/*
激励合约必须支持的标准接口
function CanSubmitTrans(address sender,uint256 txlen)public returns(bool)//提交交易能量确认
function RunTrans(uint256 txlen)public returns(bool) //交易能量扣除
function SetGasPrice(uint256 v1,uint256 v2)public returns(bool) //配置能量价格
function SetMinerPrice(uint256 v1)public returns(bool) //配置矿机区块每分钟出块奖励
function AllocMiner(address[] addrs,uint256[] nums)public returns(bool) //奖励发放
*/
//查询激励合约
function trc100_coinbaseOf()public returns(bool,address){
impl = interface_trc100(trc100_impl_addr);
return impl.CoinbaseOf();
}
/*
增加准入网络节点ID
*/
function trc100_addnode(bytes32 s,bytes32 content)public returns (bool success){
require(InitSender!=trc100_impl_addr,"addnode base denied");
impl = interface_trc100(trc100_impl_addr);
return impl.addnode(s,content);
}
function trc100_addnodes(bytes32[] memory s,bytes32[] memory content)public returns (bool success){
require(InitSender!=trc100_impl_addr,"addnodes base denied");
impl = interface_trc100(trc100_impl_addr);
return impl.addnodes(s,content);
}
/*
删除准入网络节点ID
*/
function trc100_delnode(bytes32 nd) public returns (bool success){
require(InitSender!=trc100_impl_addr,"delnode base denied");
impl = interface_trc100(trc100_impl_addr);
return impl.delnode(nd);
}
/*
网络节点ID信息
*/
function trc100_nodeinfo(uint256 begin,uint256 _len) public returns(bool success, bytes32[] memory ss, bytes32[] memory content){
require(InitSender!=trc100_impl_addr,"nodeinfo base denied");
impl = interface_trc100(trc100_impl_addr);
return impl.nodeinfo(begin,_len);
}
//跨链
function trc100_transsend(address addr,uint256 amount,uint256 destsliceno,uint256 nonce) public returns (uint256){
impl = interface_trc100(trc100_impl_addr);
return impl.transsend(msg.sender,addr,amount,destsliceno,nonce);
}
//提案跨链
function trc100_transsend_propose(address submit,address addr,uint256 amount,uint256 destsliceno,uint256 nonce) public returns (uint256){
impl = interface_trc100(trc100_impl_addr);
return impl.transsend(submit,addr,amount,destsliceno,nonce);
}
function trc100_authsend(address submit,uint256 nonce,address addr,uint256 destsliceno) public returns (uint256){
impl = interface_trc100(trc100_impl_addr);
return impl.authsend(submit,nonce,addr,destsliceno);
}
function trc100_transrecv(address submit,uint256 nonce,address addr,uint256 amount,uint256 sousliceno) public returns (uint256){
impl = interface_trc100(trc100_impl_addr);
return impl.transrecv(submit,nonce,addr,amount,sousliceno);
}
}