diff --git a/contracts/task3.fc b/contracts/task3.fc index 76ceac4..8288a1f 100644 --- a/contracts/task3.fc +++ b/contracts/task3.fc @@ -1,10 +1,10 @@ #include "imports/stdlib.fc"; -cell get_storage() { +cell get_storage() inline { return get_data().begin_parse().preload_ref(); } -cell wrap_storage(int version_id, cell storage) { +cell wrap_storage(int version_id, cell storage) inline { ;; add additional data required for versioning in this cell return begin_cell() .store_uint(version_id, 32) @@ -37,20 +37,23 @@ cell migrate_one(cell old_storage) { return old_storage; } () recv_internal(int msg_value, int balance, cell in_msg_full, slice in_msg_body) impure { if (in_msg_body.slice_bits() < 32) { return(); } ;; deploy / ordinary int expected_version = in_msg_body~load_uint(32); - - if (expected_version == 0) { - set_data(begin_cell() - .store_uint(1, 32) - .store_ref(get_data()) - .end_cell() - ); - return(); - } - cell expected_code = in_msg_body~load_maybe_ref(); cell migrations = in_msg_body~load_dict(); cell payload = in_msg_body~load_ref(); + if (expected_version == 0) { + if (expected_code.null?()) { + if (migrations.dict_empty?()) { + set_data(begin_cell() + .store_uint(1, 32) + .store_ref(get_data()) + .end_cell() + ); + return (); + } + } + } + slice ds = get_data().begin_parse(); int version = ds.preload_uint(32); cell storage = ds.preload_ref();