@@ -47,6 +47,8 @@ td::StringBuilder& operator<<(td::StringBuilder& sb, const ManualDns::EntryData&
4747 .move_as_ok ();
4848 case ManualDns::EntryData::Type::SmcAddress:
4949 return sb << " SMC:" << data.data .get <ManualDns::EntryDataSmcAddress>().smc_address .rserialize ();
50+ case ManualDns::EntryData::Type::StorageAddress:
51+ return sb << " STORAGE:" << data.data .get <ManualDns::EntryDataStorageAddress>().bag_id .to_hex ();
5052 }
5153 return sb << " <unknown>" ;
5254}
@@ -93,6 +95,11 @@ td::Result<td::Ref<vm::Cell>> DnsInterface::EntryData::as_cell() const {
9395 smc_address.smc_address .addr );
9496 dns.smc_addr = vm::load_cell_slice_ref (cb.finalize ());
9597 tlb::pack_cell (res, dns);
98+ },
99+ [&](const EntryDataStorageAddress& storage_address) {
100+ block::gen::DNSRecord::Record_dns_storage_address dns;
101+ dns.bag_id = storage_address.bag_id ;
102+ tlb::pack_cell (res, dns);
96103 }));
97104 if (error.is_error ()) {
98105 return error;
@@ -142,6 +149,11 @@ td::Result<DnsInterface::EntryData> DnsInterface::EntryData::from_cellslice(vm::
142149 }
143150 return EntryData::smc_address (block::StdAddress (wc, addr));
144151 }
152+ case block::gen::DNSRecord::dns_storage_address: {
153+ block::gen::DNSRecord::Record_dns_storage_address dns;
154+ tlb::unpack (cs, dns);
155+ return EntryData::storage_address (dns.bag_id );
156+ }
145157 }
146158 return td::Status::Error (" Unknown entry data" );
147159}
@@ -536,10 +548,12 @@ std::string DnsInterface::decode_name(td::Slice name) {
536548
537549std::string ManualDns::serialize_data (const EntryData& data) {
538550 std::string res;
539- data.data .visit (td::overloaded ([&](const ton::ManualDns::EntryDataText& text) { res = " UNSUPPORTED" ; },
540- [&](const ton::ManualDns::EntryDataNextResolver& resolver) { res = " UNSUPPORTED" ; },
541- [&](const ton::ManualDns::EntryDataAdnlAddress& adnl_address) { res = " UNSUPPORTED" ; },
542- [&](const ton::ManualDns::EntryDataSmcAddress& text) { res = " UNSUPPORTED" ; }));
551+ data.data .visit (
552+ td::overloaded ([&](const ton::ManualDns::EntryDataText& text) { res = " UNSUPPORTED" ; },
553+ [&](const ton::ManualDns::EntryDataNextResolver& resolver) { res = " UNSUPPORTED" ; },
554+ [&](const ton::ManualDns::EntryDataAdnlAddress& adnl_address) { res = " UNSUPPORTED" ; },
555+ [&](const ton::ManualDns::EntryDataSmcAddress& text) { res = " UNSUPPORTED" ; },
556+ [&](const ton::ManualDns::EntryDataStorageAddress& storage_address) { res = " UNSUPPORTED" ; }));
543557 return res;
544558}
545559
@@ -559,6 +573,12 @@ td::Result<td::optional<ManualDns::EntryData>> ManualDns::parse_data(td::Slice c
559573 } else if (type == " NEXT" ) {
560574 TRY_RESULT (address, block::StdAddress::parse (parser.read_all ()));
561575 return ManualDns::EntryData::next_resolver (address);
576+ } else if (type == " STORAGE" ) {
577+ td::Bits256 bag_id;
578+ if (bag_id.from_hex (parser.read_all (), false ) != 256 ) {
579+ return td::Status::Error (" failed to parse bag id" );
580+ }
581+ return ManualDns::EntryData::storage_address (bag_id);
562582 } else if (parser.data () == " DELETED" ) {
563583 return {};
564584 }
0 commit comments