mirror of
				https://github.com/ton-blockchain/ton
				synced 2025-03-09 15:40:10 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			227 lines
		
	
	
	
		
			7.3 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			227 lines
		
	
	
	
		
			7.3 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| #!/usr/bin/create-state -s
 | |
| "TonUtil.fif" include
 | |
| "Asm.fif" include
 | |
| "Lists.fif" include
 | |
| 
 | |
| def? $1 { @' $1 } { "" } cond constant suffix 
 | |
| { suffix $+ } : +suffix
 | |
| 256 1<<1- 15 / constant AllOnes
 | |
| 
 | |
| wc_master setworkchain
 | |
| 13 setglobalid   // negative value means a test instance of the blockchain
 | |
| 0x11EF55AA default-subwallet-id!  // use this subwallet id in user wallets by default
 | |
| 
 | |
| // Initial state of Workchain 0 (Basic workchain)
 | |
| 
 | |
| 0 mkemptyShardState 
 | |
| 
 | |
| cr ."initial basechain state is:" cr dup <s csr. cr
 | |
| dup dup 31 boc+>B dup Bx. cr
 | |
| dup "basestate0" +suffix +".boc" tuck B>file
 | |
| ."(Initial basechain state saved to file " type .")" cr
 | |
| Bhashu dup =: basestate0_fhash
 | |
| ."file hash=" dup 64x. space 256 u>B dup B>base64url type cr
 | |
| "basestate0" +suffix +".fhash" B>file
 | |
| hashu dup =: basestate0_rhash
 | |
| ."root hash=" dup 64x. space 256 u>B dup B>base64url type cr
 | |
| "basestate0" +suffix +".rhash" B>file
 | |
| 
 | |
| // root-hash file-hash start-at actual-min-split min-split-depth max-split-depth wc-id
 | |
| basestate0_rhash basestate0_fhash now 0 4 8 0 add-std-workchain
 | |
| config.workchains!
 | |
| 
 | |
| /*
 | |
|  *
 | |
|  *  Initial wallets (test)
 | |
|  *
 | |
|  */
 | |
| 
 | |
| // Stage 1 wallets
 | |
| 
 | |
| PK'Puasxr0QfFZZnYISRphVse7XHKfW7pZU5SJarVHXvQ+rpzkD rwallet-init-pubkey !
 | |
| -86400 rwallet-start-at +!
 | |
| 
 | |
| { swap create-wallet3 } : stage1
 | |
| { bl word $>GR bl word parse-pubkey } : parse-amount-pubkey
 | |
| { parse-amount-pubkey stage1 } : StA
 | |
| 
 | |
| // test
 | |
| StA 1001 PuZ8WoEOTgSR8-HopmCIVlOVSL94tNn9zgraiJqMk1SnioEQ
 | |
| 
 | |
| // Stage 2 wallets
 | |
| 
 | |
| { swap create-wallet0 } : stage2
 | |
| { parse-amount-pubkey stage2 } : StB
 | |
| 
 | |
| // test
 | |
| StB 999. PubMMGvqM08jx_6BibYldMclwjl-D88r7-u0_IEcDXHA30-G
 | |
| 
 | |
| // Lockdowns
 | |
| 
 | |
| { swap create-wallet3b } : stage3
 | |
| { parse-amount-pubkey stage3 } : StC
 | |
| 
 | |
| // SmartContract #1 (Advanced wallet)
 | |
| 
 | |
| // Create new advanced wallet; code adapted from `auto/wallet3-code.fif`
 | |
| WCode3 // code
 | |
| <b 0 32 u, 0 32 u,  // subwallet-id=0
 | |
|    "main-wallet" +suffix +".pk" load-generate-keypair drop
 | |
|    B, 
 | |
| b> // data
 | |
| empty_cell // libs
 | |
| GR$4999999000 allocated-balance - // balance
 | |
| 0 // split_depth
 | |
| 0 // ticktock
 | |
| AllOnes 1 * // address
 | |
| 6 // mode: create+setaddr
 | |
| register_smc
 | |
| dup make_special dup constant smc1_addr  
 | |
| Masterchain over 
 | |
| 2dup ."main wallet address = " .addr cr 2dup 6 .Addr cr
 | |
| "main-wallet" +suffix +".addr" save-address-verbose
 | |
| 
 | |
| /*
 | |
|  *
 | |
|  * SmartContract #4 (elector)
 | |
|  *
 | |
|  */
 | |
| "auto/elector-code.fif" include   // code in separate source file
 | |
| <b 0 1 1+ 1+ 4 + 32 + u, 0 256 u, b>  // data: dict dict dict grams uint32 uint256
 | |
| empty_cell  // libraries
 | |
| GR$500  // balance: 500 grams
 | |
| 0 // split_depth
 | |
| 2 // ticktock: tick
 | |
| AllOnes 3 * // address: -1:333...333
 | |
| 6 // mode: create + setaddr
 | |
| register_smc
 | |
| dup make_special dup constant smc4_addr dup constant elector_addr
 | |
| Masterchain swap
 | |
| ."elector smart contract address = " 2dup .addr cr 2dup 7 .Addr cr
 | |
| "elector" +suffix +".addr" save-address-verbose
 | |
| 
 | |
| /*
 | |
|  *
 | |
|  * Configuration Parameters
 | |
|  *
 | |
|  */
 | |
| // version capabilities
 | |
| 1 capCreateStats capBounceMsgBody or capReportVersion or capShortDequeue or config.version!
 | |
| // max-validators max-main-validators min-validators
 | |
| // 9 4 1 config.validator_num!
 | |
| 1000 100 13 config.validator_num!
 | |
| // min-stake max-stake min-total-stake max-factor
 | |
| GR$10000 GR$10000000 GR$500000 sg~3 config.validator_stake_limits!
 | |
| // elected-for elect-start-before elect-end-before stakes-frozen-for
 | |
| // 400000 200000 4000 400000 config.election_params!
 | |
| // 4000 2000 500 1000 config.election_params!  // DEBUG
 | |
| 65536 32768 8192 32768 config.election_params!  // TestNet DEBUG
 | |
| // config-addr = -1:5555...5555
 | |
| AllOnes 5 * constant config_addr
 | |
| config_addr config.config_smc!
 | |
| // elector-addr
 | |
| elector_addr config.elector_smc!
 | |
| 
 | |
| // 1 sg* 100 sg* 1000 sg* 1000000 sg* config.storage_prices!  // old values (too high)
 | |
| 1 500 1000 500000 config.storage_prices!
 | |
| config.special!
 | |
| 
 | |
| // gas_price gas_limit special_gas_limit gas_credit block_gas_limit freeze_due_limit delete_due_limit flat_gas_limit flat_gas_price -- 
 | |
| 1000 sg* 1 *M dup 10000 10 *M GR$0.1 GR$1.0 1000 1000000 config.gas_prices!
 | |
| 10000 sg* 1 *M 10 *M 10000 10 *M GR$0.1 GR$1.0 1000 10000000 config.mc_gas_prices!
 | |
| // lump_price bit_price cell_price ihr_factor first_frac next_frac
 | |
| 1000000 1000 sg* 100000 sg* 3/2 sg*/ 1/3 sg*/ 1/3 sg*/ config.fwd_prices!
 | |
| 10000000 10000 sg* 1000000 sg* 3/2 sg*/ 1/3 sg*/ 1/3 sg*/ config.mc_fwd_prices!
 | |
| // mc-cc-lifetime sh-cc-lifetime sh-val-lifetime sh-val-num mc-shuffle
 | |
| 250 250 1000 7 true config.catchain_params!
 | |
| // 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
 | |
| 3 2000 16000 3 8 4 2 *Mi 2 *Mi true config.consensus_params!
 | |
| 
 | |
| 
 | |
| 128 *Ki 512 *Ki 1 *Mi triple      // [ underload soft hard ] : block bytes limit
 | |
| 2000000 10000000 20000000 triple  // gas limits
 | |
| 1000 5000 10000 triple            // lt limits
 | |
| triple dup untriple config.mc_block_limits!
 | |
| untriple config.block_limits!
 | |
| 
 | |
| GR$160 GR$100 config.block_create_fees!
 | |
| // smc1_addr config.collector_smc!
 | |
| smc1_addr config.minter_smc!
 | |
| 
 | |
| 1000000000000 -17 of-cc 666666666666 239 of-cc cc+ config.to_mint!
 | |
| 
 | |
| ( 0 1 9 10 12 14 15 16 17 18 20 21 22 23 24 25 28 34 ) config.mandatory_params!
 | |
| ( -999 -1000 -1001 0 1 9 10 12 14 15 16 17 32 34 36 ) config.critical_params!
 | |
| 
 | |
| // [ min_tot_rounds max_tot_rounds min_wins max_losses min_store_sec max_store_sec bit_pps cell_pps ]
 | |
| // first for ordinary proposals, then for critical proposals
 | |
| _( 2 3 2 2 1000000 10000000 1 500 )
 | |
| _( 4 7 4 2 5000000 20000000 2 1000 )
 | |
| config.param_proposals_setup!
 | |
| 
 | |
| // deposit bit_pps cell_pps
 | |
| GR$100 1 500 config.complaint_prices!
 | |
| 
 | |
| { file>B { dup Blen } { 
 | |
|     32 B| swap dup ."Validator public key = " Bx. cr
 | |
|     17 add-validator
 | |
|   } while drop
 | |
| } : load-keys-from-file
 | |
| 
 | |
| false =: keys-from-file
 | |
| keys-from-file
 | |
| { "validator-keys" +suffix +".pub" load-keys-from-file
 | |
| } {
 | |
|   VPK'xrQTSOn2F9RjLgeHdSS0uIvde4Lv49l+/KXfJe0I7wYatz6e
 | |
|   B64{8E9AbL8blhRiBUoZt/b/vIo3+iZzglLKiL8MTf0g6Sg=} 256 B>u@
 | |
|   1 add-adnl-validator
 | |
| } cond
 | |
| // newkeypair nip dup ."Validator #1 public key = " Bx. cr 
 | |
| // 17 add-validator
 | |
| // newkeypair nip dup ."Validator #2 public key = " Bx. cr
 | |
| // 239 add-validator
 | |
| 
 | |
| 3000 =: orig_vset_valid_for  // original validator set valid 3000 seconds
 | |
| now dup orig_vset_valid_for + 0 config.validators!
 | |
| 
 | |
| /*
 | |
|  *
 | |
|  * SmartContract #5 (Configuration smart contract)
 | |
|  *
 | |
|  */
 | |
| "auto/config-code.fif" include   // code in separate source file
 | |
| <b configdict ref,  // initial configuration
 | |
|    0 32 u,          // seqno
 | |
|    "config-master" +suffix +".pk" load-generate-keypair drop
 | |
|    B,
 | |
|    dictnew dict,   // vote dict
 | |
| b> // data
 | |
| empty_cell  // libraries
 | |
| GR$500  // balance
 | |
| 0 1 config_addr 6 register_smc  // tock
 | |
| dup set_config_smc
 | |
| Masterchain swap
 | |
| ."config smart contract address = " 2dup .addr cr 2dup 7 .Addr cr
 | |
| "config-master" +suffix +".addr" save-address-verbose
 | |
| // Other data
 | |
|  
 | |
| /*
 | |
|  *
 | |
|  *  Create state
 | |
|  *
 | |
|  */
 | |
| 
 | |
| create_state
 | |
| cr cr ."new state is:" cr dup <s csr. cr
 | |
| dup 31 boc+>B dup Bx. cr
 | |
| dup "zerostate" +suffix +".boc" tuck B>file
 | |
| ."(Initial masterchain state saved to file " type .")" cr
 | |
| Bhashu dup =: zerostate_fhash
 | |
| ."file hash= " dup X. space 256 u>B dup B>base64url type cr
 | |
| "zerostate" +suffix +".fhash" B>file
 | |
| hashu dup =: zerostate_rhash ."root hash= " dup X. space 256 u>B dup B>base64url type cr
 | |
| "zerostate" +suffix +".rhash" B>file
 | |
| basestate0_rhash ."Basestate0 root hash= " dup X. space 256 u>B B>base64url type cr
 | |
| basestate0_fhash ."Basestate0 file hash= " dup X. space 256 u>B B>base64url type cr
 | |
| zerostate_rhash ."Zerostate root hash= " dup X. space 256 u>B B>base64url type cr
 | |
| zerostate_fhash ."Zerostate file hash= " dup X. space 256 u>B B>base64url type cr
 |