mirror of
				https://github.com/ton-blockchain/ton
				synced 2025-03-09 15:40:10 +00:00 
			
		
		
		
	TON Storage utilities (#564)
* Rename chunk to piece in MerkleTree for consistency * Refactor PeerManager * Make PeerState thread-safe * Download torrent by hash * First version of storage daemon * Download torrents partially * Improve storing and loading torrent state in DB * Rewrite MerkleTree * "Remove torrent" in storage daemon * Process errors, fix bugs in storage * Move TonlibClientWrapper from rldp-http-proxy to tonlib * Initial version of storage provider * Move interaction with contracts to smc-util * Improve TonlibClientWrapper interface * Various improvements in storage provider * Fix TorrentCreator.cpp * Improve interface for partial download * Client mode in storage-daemon * Improve interface of storage-daemon-cli * Fix calculating speed, show peers in storage-daemon * Use permanent adnl id in storage daemon * Fix sending large "storage.addUpdate" messages * Improve printing torrents in cli * Update tlo * Fix RldpSender::on_ack * Update storage provider * Add "address" parameter to get-provider-params * Allow client to close storage contract * Limit torrent description * Add more logs to storage provider * smc.forget tonlib method * Use smc.forget in storage daemon * Optimize sending messages in smc-util.cpp * Fix verbosity, remove excessive logs * Json output in storage-daemon-cli * Update storage provider contracts * Fix rldp2 acks * Change verbosity of logs in rldp2 * Update help and output of commands and in storage-daemon-cli Co-authored-by: SpyCheese <mikle98@yandex.ru>
This commit is contained in:
		
							parent
							
								
									434dc487a4
								
							
						
					
					
						commit
						360ef54e6b
					
				
					 75 changed files with 8872 additions and 1148 deletions
				
			
		|  | @ -26,19 +26,18 @@ | |||
| 
 | ||||
| namespace ton { | ||||
| bool TorrentInfo::pack(vm::CellBuilder &cb) const { | ||||
|   return cb.store_long_bool(depth, 32) && cb.store_long_bool(piece_size, 32) && cb.store_long_bool(file_size, 64) && | ||||
|          cb.store_bits_bool(root_hash) && cb.store_long_bool(header_size, 64) && cb.store_bits_bool(header_hash) && | ||||
|   return cb.store_long_bool(piece_size, 32) && cb.store_long_bool(file_size, 64) && cb.store_bits_bool(root_hash) && | ||||
|          cb.store_long_bool(header_size, 64) && cb.store_bits_bool(header_hash) && | ||||
|          vm::CellText::store(cb, description).is_ok(); | ||||
| } | ||||
| 
 | ||||
| bool TorrentInfo::unpack(vm::CellSlice &cs) { | ||||
|   return cs.fetch_uint_to(32, depth) && cs.fetch_uint_to(32, piece_size) && cs.fetch_uint_to(64, file_size) && | ||||
|          cs.fetch_bits_to(root_hash) && cs.fetch_uint_to(64, header_size) && cs.fetch_bits_to(header_hash) && | ||||
|          vm::CellText::fetch_to(cs, description); | ||||
|   return cs.fetch_uint_to(32, piece_size) && cs.fetch_uint_to(64, file_size) && cs.fetch_bits_to(root_hash) && | ||||
|          cs.fetch_uint_to(64, header_size) && cs.fetch_bits_to(header_hash) && vm::CellText::fetch_to(cs, description); | ||||
| } | ||||
| 
 | ||||
| vm::Cell::Hash TorrentInfo::get_hash() const { | ||||
|   return as_cell()->get_hash(); | ||||
| td::Bits256 TorrentInfo::get_hash() const { | ||||
|   return as_cell()->get_hash().bits(); | ||||
| } | ||||
| 
 | ||||
| void TorrentInfo::init_cell() { | ||||
|  | @ -48,7 +47,7 @@ void TorrentInfo::init_cell() { | |||
| } | ||||
| 
 | ||||
| td::Ref<vm::Cell> TorrentInfo::as_cell() const { | ||||
|   CHECK(cell_.not_null()); | ||||
|   CHECK(cell_.not_null()) | ||||
|   return cell_; | ||||
| } | ||||
| 
 | ||||
|  | @ -63,4 +62,17 @@ TorrentInfo::PieceInfo TorrentInfo::get_piece_info(td::uint64 piece_i) const { | |||
|   info.size = td::min(static_cast<td::uint64>(piece_size), file_size - info.offset); | ||||
|   return info; | ||||
| } | ||||
| 
 | ||||
| td::Status TorrentInfo::validate() const { | ||||
|   if (piece_size == 0) { | ||||
|     return td::Status::Error("Piece size is 0"); | ||||
|   } | ||||
|   if (header_size > file_size) { | ||||
|     return td::Status::Error("Header is too big"); | ||||
|   } | ||||
|   if (description.size() > 1024) { | ||||
|     return td::Status::Error("Description is too long"); | ||||
|   } | ||||
|   return td::Status::OK(); | ||||
| } | ||||
| }  // namespace ton
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue