text: int op::ownership_proof() asm "0x0524c7ae PUSHINT"; int equal_slices
(slice a, slice b) asm "SDEQ"; _ load_data() { slice ds =
get_data().begin_parse(); return ( ds~load_msg_addr(), ;; collection_addr
ds~load_ref() ;; sbt_code ); } slice calculate_sbt_address(slice
collection_addr, cell sbt_item_code, int wc, int index) { cell data =
begin_cell().store_uint(index, 64).store_slice(collection_addr).end_cell();
cell state_init = begin_cell().store_uint(0,
2).store_dict(sbt_item_code).store_dict(data).store_uint(0, 1).end_cell();
return begin_cell().store_uint(4, 3) .store_int(wc, 8)
.store_uint(cell_hash(state_init), 256) .end_cell() .begin_parse(); } ()
recv_internal(int balance, int msg_value, cell in_msg_full, slice in_msg)
impure { slice cs = in_msg_full.begin_parse(); int flags = cs~load_uint(4);
slice sender_address = cs~load_msg_addr(); int op = in_msg~load_uint(32); int
query_id = in_msg~load_uint(64); if (op == op::ownership_proof()) { int id =
in_msg~load_uint(256); (slice collection_addr, cell sbt_code) = load_data();
throw_unless(403, equal_slices(sender_address,
collection_addr.calculate_sbt_address(sbt_code, 0, id))); slice owner_addr =
in_msg~load_msg_addr(); cell payload = in_msg~load_ref(); int revoked_at =
in_msg~load_uint(64); throw_if(403, revoked_at > 0); int with_content =
in_msg~load_uint(1); if (with_content != 0) { cell sbt_content =
in_msg~load_ref(); } ;; ;; sbt verified, do something ;; return (); }
throw(0xffff); }
payload: b5ee9c7201010101002200004000000000696e74206f703a3a6f776e6572736869705f70726f6f662829206173