diff --git a/crypto/smc-envelope/WalletInterface.cpp b/crypto/smc-envelope/WalletInterface.cpp index 418bc4a4..c76ac4a2 100644 --- a/crypto/smc-envelope/WalletInterface.cpp +++ b/crypto/smc-envelope/WalletInterface.cpp @@ -55,18 +55,21 @@ td::Ref WalletInterface::create_int_message(const Gift &gift) { } else { cbi.store_zeroes(1); } - cbi.store_zeroes(1); store_gift_message(cbi, gift); return cbi.finalize(); } void WalletInterface::store_gift_message(vm::CellBuilder &cb, const Gift &gift) { if (gift.body.not_null()) { auto body = vm::load_cell_slice(gift.body); - //TODO: handle error - CHECK(cb.append_cellslice_bool(body)); + if (cb.can_extend_by(1 + body.size(), body.size_refs())) { + CHECK(cb.store_zeroes_bool(1) && cb.append_cellslice_bool(body)); + } else { + CHECK(cb.store_ones_bool(1) && cb.store_ref_bool(gift.body)); + } return; } + cb.store_zeroes(1); if (gift.is_encrypted) { cb.store_long(0x2167da4b, 32); } else { diff --git a/crypto/smc-envelope/WalletInterface.h b/crypto/smc-envelope/WalletInterface.h index 20141f5c..b7f80630 100644 --- a/crypto/smc-envelope/WalletInterface.h +++ b/crypto/smc-envelope/WalletInterface.h @@ -73,6 +73,8 @@ class WalletInterface : public SmartContract { td::uint32 valid_until = std::numeric_limits::max()) const; static td::Ref create_int_message(const Gift &gift); + + private: static void store_gift_message(vm::CellBuilder &cb, const Gift &gift); }; diff --git a/tonlib/tonlib/TonlibClient.cpp b/tonlib/tonlib/TonlibClient.cpp index 1e7ef384..816c6868 100644 --- a/tonlib/tonlib/TonlibClient.cpp +++ b/tonlib/tonlib/TonlibClient.cpp @@ -4290,7 +4290,7 @@ auto to_tonlib_api(const vm::StackEntry& entry, int& limit) -> td::Result( tonlib_api::make_object(dec_string(entry.as_int()))); case vm::StackEntry::Type::t_slice: - return tonlib_api::make_object(tonlib_api::make_object( + return tonlib_api::make_object(tonlib_api::make_object( to_bytes(vm::CellBuilder().append_cellslice(entry.as_slice()).finalize()))); case vm::StackEntry::Type::t_cell: return tonlib_api::make_object(