mirror of
				https://github.com/ton-blockchain/ton
				synced 2025-03-09 15:40:10 +00:00 
			
		
		
		
	Update op-code for provider/contract interaction (#602)
* Update provider->contract deploy_contract op-code
* Switch to B{} representation of child contracts
			
			
This commit is contained in:
		
							parent
							
								
									681b494410
								
							
						
					
					
						commit
						7a78ea33b7
					
				
					 8 changed files with 31 additions and 22 deletions
				
			
		| 
						 | 
				
			
			@ -258,9 +258,13 @@ void StorageProvider::process_transaction(tl_object_ptr<tonlib_api::raw_transact
 | 
			
		|||
    }
 | 
			
		||||
    td::Ref<vm::Cell> body = r_body.move_as_ok();
 | 
			
		||||
    vm::CellSlice cs = vm::load_cell_slice(body);
 | 
			
		||||
    // const op::offer_storage_contract = 0x107c49ef;
 | 
			
		||||
    if (cs.size() >= 32 && cs.prefetch_long(32) == 0x107c49ef) {
 | 
			
		||||
      new_contract_address = message->destination_->account_address_;
 | 
			
		||||
    if (cs.size() >= 32) {
 | 
			
		||||
      long long op_code = cs.prefetch_long(32);
 | 
			
		||||
      // const op::offer_storage_contract = 0x107c49ef; -- old versions
 | 
			
		||||
      // const op::deploy_storage_contract = 0xe4748df1; -- new versions
 | 
			
		||||
      if((op_code == 0x107c49ef) || (op_code == 0xe4748df1)) {
 | 
			
		||||
        new_contract_address = message->destination_->account_address_;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  if (!new_contract_address.empty()) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,4 +1,5 @@
 | 
			
		|||
const op::offer_storage_contract = 0x107c49ef;
 | 
			
		||||
const op::deploy_storage_contract = 0xe4748df1;
 | 
			
		||||
const op::close_contract = 0x79f937ea;
 | 
			
		||||
const op::contract_deployed = 0xbf7bd0c1;
 | 
			
		||||
const op::storage_contract_confirmed = 0xd4caedcd;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
										
											Binary file not shown.
										
									
								
							| 
						 | 
				
			
			@ -76,7 +76,7 @@ int check_proof(int merkle_hash, int byte_to_proof, int file_size, cell file_dic
 | 
			
		|||
 | 
			
		||||
    int query_id = in_msg_body~load_uint(64);
 | 
			
		||||
 | 
			
		||||
    if(op == op::offer_storage_contract) {
 | 
			
		||||
    if(op == op::deploy_storage_contract) {
 | 
			
		||||
        add_to_balance(msg_value - 2 * fee::receipt_value);
 | 
			
		||||
        var (client, torrent_hash) = get_client_data(get_data().begin_parse());
 | 
			
		||||
        var msg = begin_cell()
 | 
			
		||||
| 
						 | 
				
			
			@ -263,4 +263,4 @@ _ get_next_proof_info() method_id {
 | 
			
		|||
            next_proof, rate_per_mb_day, max_span, last_proof_time,
 | 
			
		||||
            client, torrent_hash) = get_storage_contract_data();
 | 
			
		||||
    return (next_proof, last_proof_time, max_span);
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -111,7 +111,7 @@ PROGRAM{
 | 
			
		|||
    }>	//  msg_value sender_address op in_msg_body
 | 
			
		||||
    64 LDU	//  msg_value sender_address op query_id in_msg_body
 | 
			
		||||
    s2 PUSH
 | 
			
		||||
    276580847 PUSHINT	//  msg_value sender_address op query_id in_msg_body op _27=276580847
 | 
			
		||||
    3832843761 PUSHINT	//  msg_value sender_address op query_id in_msg_body op _27=3832843761
 | 
			
		||||
    EQUAL	//  msg_value sender_address op query_id in_msg_body _28
 | 
			
		||||
    IF:<{	//  msg_value sender_address op query_id in_msg_body
 | 
			
		||||
      s0 s4 XCHG
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
										
											Binary file not shown.
										
									
								
							| 
						 | 
				
			
			@ -4,7 +4,10 @@
 | 
			
		|||
 | 
			
		||||
const min_deploy_amount = 50000000;
 | 
			
		||||
 | 
			
		||||
cell storage_contract_code() asm """ "storage-contract-code.boc" file>B B>boc PUSHREF """;
 | 
			
		||||
;; cell storage_contract_code() asm """ "storage-contract-code.boc" file>B B>boc PUSHREF """;
 | 
			
		||||
;; the same constant but more "compiler" friendly
 | 
			
		||||
cell storage_contract_code() asm " B{B5EE9C72010213010002FD000114FF00F4A413F4BCF2C80B0102016202030202CE04050201200D0E020120060700115D74CD0FA40D3FF30804E1007434C0C05C6C2497C0F83E900C0871C023A0D6F6CF380074C7C8700023A117C0F6CF3834CFC8A084391D237C6EA3AD4120829896802876CF3B51343C00E0842FDEF4305C20063232C1540133C5A0824C4B403E8084F2DA84B2C7D48832CFF2FFF25C3EC0244D388860841E8D85A22EA008080809006F35CE6CE4D7C11C3834C1C070C0E4D7C11C3834FFC12F64D7C0DC3800B50C1C25A010086B092E64693A0CC06AC140BD039BE84C645FF81C20002CED44D0D200FA0003A001C8CA0001FA0201CF16C9ED5403E68E4FED44D0D200FA00FA4003B3F2E3EF5350C705F2E1917FC8CA0058FA0201CF1621CF16C9ED54F003F8258210D4CAEDCD708018C8CB055005CF168209312D00FA0214CB6A13CB1F12CB3FCBFFC970FB00DE21821079F937EABAE30221821046ED2E94BA9130E30D8210419D5D4DBA915BE30D0A0B0C00EA10235F03ED44D0D200FA00FA40F0035352C7055162C70516B1F2E191F8258210B6236D63708018C8CB055004CF165005FA0212CB6A13CB1F12CB3F5230CBFFC902B39730318100A0FB00E0018040FB00F8258210B6236D63708018C8CB055004CF1623FA0213CB6A12CB1FCB3FCBFFC98100A0FB000092ED44D0D200FA00FA403002F2E3EB5341C705F2E19120C200998208989680A072FB029130E28210A91BAF56708018C8CB055003CF168209312D00FA0212CB6ACB1FCB3FC98100A0FB0000FA01D430ED44D0D200FA00FA40D3FFD33FD33FFA00D31FD31FD43009F2E3EB53A6C705F2E191544540525BF001F2E3EA22F811F8235003A128B6085331A8018102A3AA1AA984067007A116B609F8237FC8CA0058FA025005CF1613CBFFCB3FCB3F58FA0213CB1F12CB1FCCC9ED54708018C8CB0558CF16CB6EC98042FB000201200F100011BEE6576A2686B8500402012011120033B9241ED44D0D200FA00FA40D3FFD33FD33FFA00D31FD31FF00380017B6E4F0402A483DA87B0D9430001BB7CA50402A483DA87B0B664D8A70} B>boc PUSHREF ";
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
slice calculate_address_by_stateinit(cell state_init) {
 | 
			
		||||
    return begin_cell().store_uint(4, 3)
 | 
			
		||||
| 
						 | 
				
			
			@ -67,7 +70,7 @@ cell build_storage_contract_stateinit(int merkle_hash, int file_size, int rate_p
 | 
			
		|||
            .store_coins(0)
 | 
			
		||||
            .store_uint(4 + 2, 1 + 4 + 4 + 64 + 32 + 1 + 1 + 1)
 | 
			
		||||
            .store_ref(state_init)
 | 
			
		||||
            .store_uint(op::offer_storage_contract, 32)
 | 
			
		||||
            .store_uint(op::deploy_storage_contract, 32)
 | 
			
		||||
            .store_uint(query_id, 64)
 | 
			
		||||
            .end_cell();
 | 
			
		||||
    send_raw_message(msg, 64);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -52,7 +52,7 @@ PROGRAM{
 | 
			
		|||
    STREF	//  _33
 | 
			
		||||
    ENDC	//  data
 | 
			
		||||
    0 PUSHINT	//  data _36=0
 | 
			
		||||
     "storage-contract-code.boc" file>B B>boc PUSHREF 	//  data _36=0 _37
 | 
			
		||||
     B{B5EE9C72010213010002FD000114FF00F4A413F4BCF2C80B0102016202030202CE04050201200D0E020120060700115D74CD0FA40D3FF30804E1007434C0C05C6C2497C0F83E900C0871C023A0D6F6CF380074C7C8700023A117C0F6CF3834CFC8A084391D237C6EA3AD4120829896802876CF3B51343C00E0842FDEF4305C20063232C1540133C5A0824C4B403E8084F2DA84B2C7D48832CFF2FFF25C3EC0244D388860841E8D85A22EA008080809006F35CE6CE4D7C11C3834C1C070C0E4D7C11C3834FFC12F64D7C0DC3800B50C1C25A010086B092E64693A0CC06AC140BD039BE84C645FF81C20002CED44D0D200FA0003A001C8CA0001FA0201CF16C9ED5403E68E4FED44D0D200FA00FA4003B3F2E3EF5350C705F2E1917FC8CA0058FA0201CF1621CF16C9ED54F003F8258210D4CAEDCD708018C8CB055005CF168209312D00FA0214CB6A13CB1F12CB3FCBFFC970FB00DE21821079F937EABAE30221821046ED2E94BA9130E30D8210419D5D4DBA915BE30D0A0B0C00EA10235F03ED44D0D200FA00FA40F0035352C7055162C70516B1F2E191F8258210B6236D63708018C8CB055004CF165005FA0212CB6A13CB1F12CB3F5230CBFFC902B39730318100A0FB00E0018040FB00F8258210B6236D63708018C8CB055004CF1623FA0213CB6A12CB1FCB3FCBFFC98100A0FB000092ED44D0D200FA00FA403002F2E3EB5341C705F2E19120C200998208989680A072FB029130E28210A91BAF56708018C8CB055003CF168209312D00FA0212CB6ACB1FCB3FC98100A0FB0000FA01D430ED44D0D200FA00FA40D3FFD33FD33FFA00D31FD31FD43009F2E3EB53A6C705F2E191544540525BF001F2E3EA22F811F8235003A128B6085331A8018102A3AA1AA984067007A116B609F8237FC8CA0058FA025005CF1613CBFFCB3FCB3F58FA0213CB1F12CB1FCCC9ED54708018C8CB0558CF16CB6EC98042FB000201200F100011BEE6576A2686B8500402012011120033B9241ED44D0D200FA00FA40D3FFD33FD33FFA00D31FD31FF00380017B6E4F0402A483DA87B0D9430001BB7CA50402A483DA87B0B664D8A70} B>boc PUSHREF 	//  data _36=0 _37
 | 
			
		||||
    OVER	//  data _36=0 _37 _38=0
 | 
			
		||||
    NEWC	//  data _36=0 _37 _38=0 _39
 | 
			
		||||
    2 STU	//  data _36=0 _37 _41
 | 
			
		||||
| 
						 | 
				
			
			@ -93,19 +93,19 @@ PROGRAM{
 | 
			
		|||
    s1 s5 XCHG
 | 
			
		||||
    s1 s6 XCHG	//  query_id merkle_hash file_size rate_per_mb_day max_span client torrent_hash
 | 
			
		||||
    build_storage_contract_stateinit CALLDICT	//  query_id state_init
 | 
			
		||||
    276580847 PUSHINT	//  query_id state_init _54=276580847
 | 
			
		||||
    6 PUSHINT	//  query_id state_init _54=276580847 _57
 | 
			
		||||
    24 PUSHINT	//  query_id state_init _54=276580847 _57 _58=24
 | 
			
		||||
    NEWC	//  query_id state_init _54=276580847 _57 _58=24 _59
 | 
			
		||||
    6 STU	//  query_id state_init _54=276580847 _57 _61
 | 
			
		||||
    s3 PUSH	//  query_id state_init _54=276580847 _57 _61 state_init
 | 
			
		||||
    calculate_address_by_stateinit CALLDICT	//  query_id state_init _54=276580847 _57 _61 _62
 | 
			
		||||
    STSLICER	//  query_id state_init _54=276580847 _57 _63
 | 
			
		||||
    0 PUSHINT	//  query_id state_init _54=276580847 _57 _63 _64=0
 | 
			
		||||
    STGRAMS	//  query_id state_init _54=276580847 _57 _65
 | 
			
		||||
    108 STU	//  query_id state_init _54=276580847 _81
 | 
			
		||||
    s1 s2 XCHG	//  query_id _54=276580847 state_init _81
 | 
			
		||||
    STREF	//  query_id _54=276580847 _82
 | 
			
		||||
    3832843761 PUSHINT	//  query_id state_init _54=3832843761
 | 
			
		||||
    6 PUSHINT	//  query_id state_init _54=3832843761 _57
 | 
			
		||||
    24 PUSHINT	//  query_id state_init _54=3832843761 _57 _58=24
 | 
			
		||||
    NEWC	//  query_id state_init _54=3832843761 _57 _58=24 _59
 | 
			
		||||
    6 STU	//  query_id state_init _54=3832843761 _57 _61
 | 
			
		||||
    s3 PUSH	//  query_id state_init _54=3832843761 _57 _61 state_init
 | 
			
		||||
    calculate_address_by_stateinit CALLDICT	//  query_id state_init _54=3832843761 _57 _61 _62
 | 
			
		||||
    STSLICER	//  query_id state_init _54=3832843761 _57 _63
 | 
			
		||||
    0 PUSHINT	//  query_id state_init _54=3832843761 _57 _63 _64=0
 | 
			
		||||
    STGRAMS	//  query_id state_init _54=3832843761 _57 _65
 | 
			
		||||
    108 STU	//  query_id state_init _54=3832843761 _81
 | 
			
		||||
    s1 s2 XCHG	//  query_id _54=3832843761 state_init _81
 | 
			
		||||
    STREF	//  query_id _54=3832843761 _82
 | 
			
		||||
    32 STU	//  query_id _84
 | 
			
		||||
    64 STU	//  _86
 | 
			
		||||
    ENDC	//  msg
 | 
			
		||||
| 
						 | 
				
			
			@ -113,6 +113,7 @@ PROGRAM{
 | 
			
		|||
    SENDRAWMSG
 | 
			
		||||
  }>
 | 
			
		||||
  recv_internal PROC:<{
 | 
			
		||||
    c2 SAVE
 | 
			
		||||
    SAMEALTSAVE	//  msg_value in_msg_full in_msg_body
 | 
			
		||||
    SWAP	//  msg_value in_msg_body in_msg_full
 | 
			
		||||
    CTOS	//  msg_value in_msg_body cs
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue