MCPcopy Create free account
hub / github.com/TelegramMessenger/cocoon / custom_initialize

Method custom_initialize

runners/proxy/ProxyRunner.cpp:408–582  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

406}
407
408void ProxyRunner::custom_initialize(td::Promise<td::Unit> promise) {
409 kv_ = std::make_shared<td::RocksDb>(td::RocksDb::open(db_path_).move_as_ok());
410
411 std::shared_ptr<RunnerConfig> snapshot_runner_config;
412 ton::BlockIdExt sc_init_block_id;
413
414 td::Random::secure_bytes(session_unique_hash_.as_slice());
415
416 {
417 td::UniqueSlice value = get_from_db("config");
418
419 if (value.size() > 0) {
420 auto obj = cocoon::fetch_tl_object<cocoon_api::proxyDb_Config>(value.as_slice(), true).move_as_ok();
421
422 cocoon_api::downcast_call(
423 *obj, td::overloaded(
424 [&](cocoon_api::proxyDb_configEmpty &c) { UNREACHABLE(); },
425 [&](cocoon_api::proxyDb_configV4 &c) {
426 auto conf = RootContractConfig::load_from_tl(*c.root_contract_state_, is_testnet()).move_as_ok();
427
428 if (conf->version() > runner_config()->root_contract_config->version()) {
429 set_root_contract_config(std::move(conf), c.root_contract_state_block_ts_);
430 snapshot_runner_config = runner_config();
431 } else {
432 snapshot_runner_config = std::make_shared<RunnerConfig>();
433 snapshot_runner_config->root_contract_config = std::move(conf);
434 snapshot_runner_config->root_contract_ts = c.root_contract_state_block_ts_;
435 snapshot_runner_config->is_testnet = runner_config()->is_testnet;
436 snapshot_runner_config->ton_disabled = runner_config()->ton_disabled;
437 }
438
439 sc_init_block_id = TonScWrapper::block_id_tl_to_obj(*c.sc_block_id_);
440 last_saved_state_seqno_ = c.last_seqno_committed_to_blockchain_;
441
442 for (auto &e : c.pending_blockchain_seqno_commits_) {
443 CHECK(pending_blockchain_seqno_commits_.emplace(e->seqno_, e->session_hash_).second);
444 }
445 },
446 [&](cocoon_api::proxyDb_configV4Disabled &c) {
447 auto conf = RootContractConfig::load_from_tl(*c.root_contract_state_, is_testnet()).move_as_ok();
448
449 if (conf->version() > runner_config()->root_contract_config->version()) {
450 set_root_contract_config(std::move(conf), c.root_contract_state_block_ts_);
451 snapshot_runner_config = runner_config();
452 } else {
453 snapshot_runner_config = std::make_shared<RunnerConfig>();
454 snapshot_runner_config->root_contract_config = std::move(conf);
455 snapshot_runner_config->root_contract_ts = c.root_contract_state_block_ts_;
456 snapshot_runner_config->is_testnet = runner_config()->is_testnet;
457 snapshot_runner_config->ton_disabled = runner_config()->ton_disabled;
458 }
459
460 is_disabled_until_version_ = c.disabled_until_version_;
461 }));
462
463 } else {
464 snapshot_runner_config = runner_config();
465 config_to_db(snapshot_runner_config);

Callers

nothing calls this directly

Calls 5

as_sliceMethod · 0.80
versionMethod · 0.80
params_versionMethod · 0.80
set_errorMethod · 0.80

Tested by

no test coverage detected