Ton

Форк
0
/
gen-zerostate-test.fif 
277 строк · 9.6 Кб
1
#!/usr/bin/create-state -s
2
"TonUtil.fif" include
3
"Asm.fif" include
4
"Lists.fif" include
5

6
def? $1 { @' $1 } { "" } cond constant suffix 
7
{ suffix $+ } : +suffix
8
256 1<<1- 15 / constant AllOnes
9

10
wc_master setworkchain
11
-239 setglobalid   // negative value means a test instance of the blockchain
12

13
// Initial state of Workchain 0 (Basic workchain)
14

15
0 mkemptyShardState 
16

17
cr ."initial basechain state is:" cr dup <s csr. cr
18
dup dup 31 boc+>B dup Bx. cr
19
dup "basestate0" +suffix +".boc" tuck B>file
20
."(Initial basechain state saved to file " type .")" cr
21
Bhashu dup =: basestate0_fhash
22
."file hash=" dup 64x. space 256 u>B dup B>base64url type cr
23
"basestate0" +suffix +".fhash" B>file
24
hashu dup =: basestate0_rhash
25
."root hash=" dup 64x. space 256 u>B dup B>base64url type cr
26
"basestate0" +suffix +".rhash" B>file
27

28
// root-hash file-hash start-at actual-min-split min-split-depth max-split-depth wc-id
29
basestate0_rhash basestate0_fhash now 0 4 8 0 add-std-workchain
30
config.workchains!
31

32
// SmartContract #1 (Simple wallet)
33

34
<{ SETCP0 DUP IFNOTRET // return if recv_internal
35
   DUP 85143 INT EQUAL IFJMP:<{ // "seqno" get-method
36
     DROP c4 PUSHCTR CTOS 32 PLDU  // cnt
37
   }>
38
   INC 32 THROWIF  // fail unless recv_external
39
   512 INT LDSLICEX DUP 32 PLDU   // sign cs cnt
40
   c4 PUSHCTR CTOS 32 LDU 256 LDU ENDS  // sign cs cnt cnt' pubk
41
   s1 s2 XCPU            // sign cs cnt pubk cnt' cnt
42
   EQUAL 33 THROWIFNOT   // ( seqno mismatch? )
43
   s2 PUSH HASHSU        // sign cs cnt pubk hash
44
   s0 s4 s4 XC2PU        // pubk cs cnt hash sign pubk
45
   CHKSIGNU              // pubk cs cnt ?
46
   34 THROWIFNOT         // signature mismatch
47
   ACCEPT
48
   SWAP 32 LDU NIP 8 LDU LDREF ENDS      // pubk cnt mode msg
49
   SWAP SENDRAWMSG       // pubk cnt ; ( message sent )
50
   INC NEWC 32 STU 256 STU ENDC c4 POPCTR
51
}>c
52
// code
53
<b 0 32 u, 
54
   "main-wallet" +suffix +".pk" load-generate-keypair drop
55
   B, 
56
b> // data
57
Libs{
58
  x{ABACABADABACABA} s>c public_lib
59
  x{1234} x{5678} |_ s>c private_lib
60
}Libs  // libraries
61
GR$4999990000 // balance
62
0 // split_depth
63
0 // ticktock
64
AllOnes 0 * // address
65
6 // mode: create+setaddr
66
register_smc
67
dup make_special dup constant smc1_addr  
68
Masterchain over 
69
2dup ."wallet address = " .addr cr 2dup 6 .Addr cr
70
"main-wallet" +suffix +".addr" save-address-verbose
71

72
// SmartContract #2 (Simple money giver for test network)
73
<{ SETCP0 DUP IFNOTRET // return if recv_internal
74
   DUP 85143 INT EQUAL IFJMP:<{    // "seqno" get-method
75
     DROP c4 PUSHCTR CTOS 32 PLDU  // cnt
76
   }>
77
   INC 32 THROWIF    // fail unless recv_external
78
   32 LDU SWAP                         // cs cnt
79
   c4 PUSHCTR CTOS 32 LDU ENDS         // cs cnt cnt'
80
   TUCK EQUAL 33 THROWIFNOT            // ( seqno mismatch? )
81
   ACCEPT                              // cs cnt'
82
   SWAP 8 LDU LDREF ENDS               // cnt'' mode msg
83
   GR$20 INT 3 INT RAWRESERVE          // reserve all but 20 Grams from the balance
84
   SWAP SENDRAWMSG
85
   INC NEWC 32 STU ENDC c4 POPCTR      // store cnt''
86
}>c
87
// code
88
<b 0 32 u, b> // data
89
empty_cell    // libraries
90
GR$1000       // initial balance (1k test Grams)
91
0 0 AllOnes 6 * 6 register_smc
92
dup make_special dup constant smc2_addr
93
Masterchain over 
94
2dup ."free test gram giver address = " .addr cr 2dup 6 .Addr cr
95
"testgiver" +suffix +".addr" save-address-verbose
96

97
// SmartContract #3
98
PROGRAM{
99
  recv_internal x{} PROC
100
  run_ticktock PROC:<{
101
    c4 PUSHCTR CTOS 32 LDU 256 LDU ENDS
102
    NEWC ROT INC 32 STUR OVER 256 STUR ENDC
103
    c4 POPCTR
104
    // first 32 bits of persistent data have been increased
105
    // remaining 256 bits with an address have been fetched
106
    // create new empty message with 0.1 Grams to that address
107
    NEWC b{00100010011111111} STSLICECONST TUCK 256 STU
108
    100000000 INT STGRAMS  // store 0.1 Grams
109
    1 4 + 4 + 64 + 32 + 1+ 1+ INT STZEROES ENDC
110
    // send raw message from Cell
111
    ZERO SENDRAWMSG
112
    -17 INT 256 STIR 130000000 INT STGRAMS
113
    107 INT STZEROES ENDC 
114
    ZERO // another message with 0.13 Grams to account -17
115
    NEWC b{11000100100000} "test" $>s |+ STSLICECONST
116
    123456789 INT STGRAMS
117
    107 INT STZEROES "Hello, world!" $>s STSLICECONST ENDC
118
    ZERO SENDRAWMSG SENDRAWMSG // external message to address "test"
119
  }>
120
}END>c
121
// code
122
<b x{11EF55AA} s, smc1_addr 256 u, b> // data
123
// empty_cell // libraries
124
Libs{
125
  x{ABACABADABACABA} s>c public_lib
126
  x{1234} x{5678} |_ s>c public_lib
127
}Libs  // libraries
128
GR$666 // balance
129
0 // split_depth
130
3 // ticktock: tick
131
2 // mode: create
132
register_smc
133
dup make_special dup constant smc3_addr
134
."address = " 64x. cr
135

136
/*
137
 *
138
 * SmartContract #4 (elector)
139
 *
140
 */
141
"auto/elector-code.fif" include   // code in separate source file
142
<b 0 1 1+ 1+ 4 + 32 + u, 0 256 u, b>  // data: dict dict dict grams uint32 uint256
143
empty_cell  // libraries
144
GR$10  // balance: 10 grams
145
0 // split_depth
146
2 // ticktock: tick
147
AllOnes 3 * // address: -1:333...333
148
6 // mode: create + setaddr
149
register_smc
150
dup make_special dup constant smc4_addr dup constant elector_addr
151
Masterchain swap
152
."elector smart contract address = " 2dup .addr cr 2dup 7 .Addr cr
153
"elector" +suffix +".addr" save-address-verbose
154

155
/*
156
 *
157
 * Configuration Parameters
158
 *
159
 */
160
// version capabilities
161
1 capCreateStats capBounceMsgBody or capReportVersion or capShortDequeue or config.version!
162
// max-validators max-main-validators min-validators
163
// 9 4 1 config.validator_num!
164
1000 100 13 config.validator_num!
165
// min-stake max-stake min-total-stake max-factor
166
GR$10000 GR$10000000 GR$500000 sg~3 config.validator_stake_limits!
167
// elected-for elect-start-before elect-end-before stakes-frozen-for
168
// 400000 200000 4000 400000 config.election_params!
169
// 4000 2000 500 1000 config.election_params!  // DEBUG
170
65536 32768 8192 32768 config.election_params!  // TestNet DEBUG
171
// config-addr = -1:5555...5555
172
AllOnes 5 * constant config_addr
173
config_addr config.config_smc!
174
// elector-addr
175
elector_addr config.elector_smc!
176

177
// 1 sg* 100 sg* 1000 sg* 1000000 sg* config.storage_prices!  // old values (too high)
178
1 500 1000 500000 config.storage_prices!
179
config.special!
180

181
// gas_price gas_limit special_gas_limit gas_credit block_gas_limit freeze_due_limit delete_due_limit flat_gas_limit flat_gas_price -- 
182
1000 sg* 1 *M dup 10000 10 *M GR$0.1 GR$1.0 1000 1000000 config.gas_prices!
183
10000 sg* 1 *M 10 *M 10000 10 *M GR$0.1 GR$1.0 1000 10000000 config.mc_gas_prices!
184
// lump_price bit_price cell_price ihr_factor first_frac next_frac
185
1000000 1000 sg* 100000 sg* 3/2 sg*/ 1/3 sg*/ 1/3 sg*/ config.fwd_prices!
186
10000000 10000 sg* 1000000 sg* 3/2 sg*/ 1/3 sg*/ 1/3 sg*/ config.mc_fwd_prices!
187
// mc-cc-lifetime sh-cc-lifetime sh-val-lifetime sh-val-num mc-shuffle
188
250 250 1000 7 true config.catchain_params!
189
// round-candidates next-cand-delay-ms consensus-timeout-ms fast-attempts attempt-duration cc-max-deps max-block-size max-collated-size new-cc-ids
190
3 2000 16000 3 8 4 2 *Mi 2 *Mi true config.consensus_params!
191

192

193
128 *Ki 512 *Ki 1 *Mi triple      // [ underload soft hard ] : block bytes limit
194
2000000 10000000 20000000 triple  // gas limits
195
1000 5000 10000 triple            // lt limits
196
triple dup untriple config.mc_block_limits!
197
untriple config.block_limits!
198

199
GR$1.7 GR$1 config.block_create_fees!
200
// smc1_addr config.collector_smc!
201
smc1_addr config.minter_smc!
202

203
1000000000000 -17 of-cc 666666666666 239 of-cc cc+ config.to_mint!
204

205
( 0 1 9 10 12 14 15 16 17 18 20 21 22 23 24 25 28 34 ) config.mandatory_params!
206
( -999 -1000 -1001 0 1 9 10 12 14 15 16 17 32 34 36 ) config.critical_params!
207

208
// [ min_tot_rounds max_tot_rounds min_wins max_losses min_store_sec max_store_sec bit_pps cell_pps ]
209
// first for ordinary proposals, then for critical proposals
210
_( 2 3 2 2 1000000 10000000 1 500 )
211
_( 4 7 4 2 5000000 20000000 2 1000 )
212
config.param_proposals_setup!
213

214
// deposit bit_pps cell_pps
215
GR$100 1 500 config.complaint_prices!
216

217
"validator-keys" +suffix +".pub" file>B
218
{ dup Blen } { 32 B| swap dup ."Validator public key = " Bx. cr
219
  17 add-validator } while drop
220
// newkeypair nip dup ."Validator #1 public key = " Bx. cr 
221
// 17 add-validator
222
// newkeypair nip dup ."Validator #2 public key = " Bx. cr
223
// 239 add-validator
224
100000 =: orig_vset_valid_for  // original validator set valid 100000 seconds
225
now dup orig_vset_valid_for + 0 config.validators!
226

227
/*
228
 *
229
 * SmartContract #5 (Configuration smart contract)
230
 *
231
 */
232
"auto/config-code.fif" include   // code in separate source file
233
<b configdict ref,  // initial configuration
234
   0 32 u,          // seqno
235
   "config-master" +suffix +".pk" load-generate-keypair drop
236
   B,
237
   dictnew dict,   // vote dict
238
b> // data
239
empty_cell  // libraries
240
GR$10  // balance
241
0 1 config_addr 6 register_smc  // tock
242
dup set_config_smc
243
Masterchain swap
244
."config smart contract address = " 2dup .addr cr 2dup 7 .Addr cr
245
"config-master" +suffix +".addr" save-address-verbose
246
// Other data
247

248
/*
249
 *
250
 *  Initial wallets (test)
251
 *
252
 */
253
 
254
// pubkey amount `create-wallet1` or pubkey amount `create-wallet2`
255
PK'PuZPPXK5Rff9SvtoS7Y9lUuEixvy-J6aishYFj3Qn6P0pJMb GR$1000000000 create-wallet1
256
PK'PuYiB1zAWzr4p8j6I681+sGUrRGcn6Ylf7vXl0xaUl/w6Xfg GR$1700000000 create-wallet0
257

258
/*
259
 *
260
 *  Create state
261
 *
262
 */
263

264
create_state
265
cr cr ."new state is:" cr dup <s csr. cr
266
dup 31 boc+>B dup Bx. cr
267
dup "zerostate" +suffix +".boc" tuck B>file
268
."(Initial masterchain state saved to file " type .")" cr
269
Bhashu dup =: zerostate_fhash
270
."file hash= " dup X. space 256 u>B dup B>base64url type cr
271
"zerostate" +suffix +".fhash" B>file
272
hashu dup =: zerostate_rhash ."root hash= " dup X. space 256 u>B dup B>base64url type cr
273
"zerostate" +suffix +".rhash" B>file
274
basestate0_rhash ."Basestate0 root hash= " dup X. space 256 u>B B>base64url type cr
275
basestate0_fhash ."Basestate0 file hash= " dup X. space 256 u>B B>base64url type cr
276
zerostate_rhash ."Zerostate root hash= " dup X. space 256 u>B B>base64url type cr
277
zerostate_fhash ."Zerostate file hash= " dup X. space 256 u>B B>base64url type cr
278

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.