1
0
Fork 0
mirror of https://github.com/ton-blockchain/ton synced 2025-03-09 15:40:10 +00:00

updated vm

- updated func/fift
- additional checks in block validator
- docs
- tunnel prototype in ADNL
This commit is contained in:
ton 2020-03-11 14:19:31 +04:00
parent ba76f1404e
commit 54c7a4dcc3
50 changed files with 972 additions and 300 deletions

View file

@ -249,6 +249,40 @@ class AdnlMessage {
}
};
class OutboundAdnlMessage {
public:
template <class T>
OutboundAdnlMessage(T m, td::uint32 flags) : message_{std::move(m)}, flags_(flags) {
}
td::uint32 flags() const {
return flags_;
}
void set_flags(td::uint32 f) {
flags_ = f;
}
tl_object_ptr<ton_api::adnl_Message> tl() const {
return message_.tl();
}
td::uint32 size() const {
return message_.size();
}
template <class F>
void visit(F &&f) {
message_.visit(std::move(f));
}
template <class F>
void visit(F &&f) const {
message_.visit(std::move(f));
}
AdnlMessage release() {
return std::move(message_);
}
private:
AdnlMessage message_;
td::uint32 flags_;
};
class AdnlMessageList {
public:
AdnlMessageList() {
@ -291,6 +325,48 @@ class AdnlMessageList {
std::vector<AdnlMessage> messages_;
};
class OutboundAdnlMessageList {
public:
OutboundAdnlMessageList() {
}
OutboundAdnlMessageList(tl_object_ptr<ton_api::adnl_Message> message, td::uint32 flags) {
auto msg = OutboundAdnlMessage{std::move(message), flags};
messages_.emplace_back(std::move(msg));
}
OutboundAdnlMessageList(std::vector<tl_object_ptr<ton_api::adnl_Message>> messages, td::uint32 flags) {
for (auto &message : messages) {
messages_.push_back(OutboundAdnlMessage{std::move(message), flags});
}
}
void push_back(OutboundAdnlMessage message) {
messages_.push_back(std::move(message));
}
td::uint32 size() const {
return static_cast<td::uint32>(messages_.size());
}
tl_object_ptr<ton_api::adnl_Message> one_message() const {
CHECK(size() == 1);
return messages_[0].tl();
}
std::vector<tl_object_ptr<ton_api::adnl_Message>> mult_messages() const {
std::vector<tl_object_ptr<ton_api::adnl_Message>> vec;
for (auto &m : messages_) {
vec.emplace_back(m.tl());
}
return vec;
}
static std::vector<tl_object_ptr<ton_api::adnl_Message>> empty_vector() {
return std::vector<tl_object_ptr<ton_api::adnl_Message>>{};
}
auto &vector() {
return messages_;
}
private:
std::vector<OutboundAdnlMessage> messages_;
};
} // namespace adnl
} // namespace ton