diff --git a/build/dns-auto-code.cell.fif b/build/dns-auto-code.cell.fif new file mode 100644 index 0000000..a39d34e --- /dev/null +++ b/build/dns-auto-code.cell.fif @@ -0,0 +1,975 @@ +"Asm.fif" include +"Asm.fif" include +// automatically generated from `contracts/dns-auto-code.fc` incl:`contracts/imports/stdlib.fc` +PROGRAM{ + DECLPROC load_data + DECLPROC load_prices + DECLPROC store_data + DECLPROC send_message + DECLPROC send_error + DECLPROC send_ok + DECLPROC housekeeping + DECLPROC calcprice_internal + DECLPROC check_owner + DECLPROC perform_ctl_op + DECLPROC recv_internal + DECLPROC recv_external + DECLPROC dnsdictlookup + 123660 DECLMETHOD dnsresolve + 87450 DECLMETHOD getexpirationx + 110574 DECLMETHOD getexpiration + 67418 DECLMETHOD getstdperiod + 109522 DECLMETHOD getppr + 108994 DECLMETHOD getppc + 113123 DECLMETHOD getppb + 113304 DECLMETHOD calcprice + 85700 DECLMETHOD calcregprice + DECLGLOBVAR query_info + load_data PROCREF:<{ + // + c4 PUSH // _1 + CTOS // cs + LDREF // _3 cs + LDDICT // _3 _5 cs + LDDICT // _3 _5 _7 cs + 30 LDU // _3 _5 _7 _10 cs + LDGRAMS // _3 _5 _7 _10 _13 cs + LDGRAMS // _3 _5 _7 _10 _13 _15 cs + LDGRAMS // _3 _5 _7 _10 _13 _15 _17 cs + 4 -ROLL // _3 _5 _7 cs _10 _13 _15 _17 + 4 TUPLE // _3 _5 _7 cs _9 + SWAP // _3 _5 _7 _9 cs + 32 LDU // _3 _5 _7 _9 _19 cs + 32 LDU // _3 _5 _7 _9 _19 _42 _41 + DROP // _3 _5 _7 _9 _19 _22 + }> + load_prices PROCREF:<{ + // + c4 PUSH // _1 + CTOS // cs + LDREF // _19 _18 + NIP // cs + LDDICT // _21 _20 + NIP // cs + LDDICT // _23 _22 + NIP // cs + 30 LDU // _9 cs + LDGRAMS // _9 _12 cs + LDGRAMS // _9 _12 _14 cs + LDGRAMS // _9 _12 _14 _31 _30 + DROP // _9 _12 _14 _16 + }> + store_data PROC:<{ + // ctl dd gc prices nhk lhk + s0 s2 XCHG // ctl dd gc lhk nhk prices + 4 UNTUPLE // ctl dd gc lhk nhk sp ppr ppc ppb + s0 s8 XCHG + NEWC // ppb dd gc lhk nhk sp ppr ppc ctl _11 + STREF // ppb dd gc lhk nhk sp ppr ppc _12 + s1 s7 XCHG // ppb ppc gc lhk nhk sp ppr dd _12 + STDICT // ppb ppc gc lhk nhk sp ppr _13 + s1 s5 XCHG // ppb ppc ppr lhk nhk sp gc _13 + STDICT // ppb ppc ppr lhk nhk sp _14 + 30 STU // ppb ppc ppr lhk nhk _16 + s0 s3 XCHG2 // ppb ppc nhk lhk _16 ppr + STGRAMS // ppb ppc nhk lhk _17 + s0 s3 XCHG2 // ppb lhk nhk _17 ppc + STGRAMS // ppb lhk nhk _18 + s0 s3 XCHG2 // nhk lhk _18 ppb + STGRAMS // nhk lhk _19 + s1 s2 XCHG // lhk nhk _19 + 32 STU // lhk _21 + 32 STU // _23 + ENDC // _24 + c4 POP + }> + send_message PROC:<{ + // addr tag query_id body grams mode + 0 PUSHINT // addr tag query_id body grams mode _7=0 + 24 PUSHINT // addr tag query_id body grams mode _7=0 _8=24 + NEWC // addr tag query_id body grams mode _7=0 _8=24 _9 + 6 STU // addr tag query_id body grams mode _7=0 _11 + s0 s7 XCHG2 // _7=0 tag query_id body grams mode _11 addr + STSLICER // _7=0 tag query_id body grams mode _12 + ROT // _7=0 tag query_id body mode _12 grams + STGRAMS // _7=0 tag query_id body mode _13 + s1 s5 XCHG // mode tag query_id body _7=0 _13 + 107 STU // mode tag query_id body _27 + s1 s3 XCHG // mode body query_id tag _27 + 32 STU // mode body query_id _29 + 64 STU // mode body msg + OVER // mode body msg body + -1 GTINT // mode body msg _33 + IF:<{ // mode body msg + 32 STU // mode msg + }>ELSE<{ + NIP // mode msg + }> + ENDC // mode _37 + SWAP // _37 mode + SENDRAWMSG + }> + send_error PROC:<{ + // error_code + query_info GETGLOB + UNTRIPLE // error_code addr query_id op + s2 s3 XCHG + 0 PUSHINT + 64 PUSHINT // addr error_code query_id op _5=0 _6=64 + send_message CALLDICT + }> + send_ok PROC:<{ + // price + 4 PUSHINT // price _1=4 + RAWRESERVE + query_info GETGLOB + UNTRIPLE // addr query_id op + 4016791929 PUSHINT // addr query_id op _7=4016791929 + -ROT + 0 PUSHINT + 7 PUSHPOW2 // addr _7=4016791929 query_id op _8=0 _9=128 + send_message CALLDICT + }> + housekeeping PROC:<{ + // ctl dd gc prices nhk lhk max_steps + NOW // ctl dd gc prices nhk lhk max_steps n + s2 PUSH // ctl dd gc prices nhk lhk max_steps n lhk + 60 ADDCONST // ctl dd gc prices nhk lhk max_steps n _10 + s4 s(-1) PUXC // ctl dd gc prices nhk lhk max_steps n nhk _10 + MAX // ctl dd gc prices nhk lhk max_steps n _11 + s1 s(-1) PUXC // ctl dd gc prices nhk lhk max_steps n n _11 + LESS // ctl dd gc prices nhk lhk max_steps n _12 + IFJMP:<{ // ctl dd gc prices nhk lhk max_steps n + 2DROP // ctl dd gc prices nhk lhk + store_data CALLDICT + }> // ctl dd gc prices nhk lhk max_steps n + s2 POP // ctl dd gc prices nhk n max_steps + s4 PUSH + 8 PUSHPOW2 // ctl dd gc prices nhk n max_steps gc _17=256 + DICTUMIN + NULLSWAPIFNOT2 // ctl dd gc prices nhk n max_steps _63 _62 _64 + s2 POP // ctl dd gc prices nhk n max_steps found? mkey + WHILE:<{ + s1 s2 XCPU // ctl dd gc prices nhk n max_steps mkey found? max_steps + AND // ctl dd gc prices nhk n max_steps mkey _19 + }>DO<{ // ctl dd gc prices nhk n max_steps mkey + s3 POP // ctl dd gc prices mkey n max_steps + s2 PUSH // ctl dd gc prices mkey n max_steps mkey + 224 RSHIFT# // ctl dd gc prices mkey n max_steps nhk + s0 s2 PUSH2 // ctl dd gc prices mkey n max_steps nhk nhk n + LESS // ctl dd gc prices mkey n max_steps nhk _24 + IF:<{ // ctl dd gc prices mkey n max_steps nhk + DROP // ctl dd gc prices mkey n max_steps + s2 PUSH // ctl dd gc prices mkey n max_steps mkey + 224 MODPOW2# // ctl dd gc prices mkey n max_steps key + s0 s6 PUSH2 + 224 PUSHINT // ctl dd gc prices mkey n max_steps key key dd _35 + DICTUGET + NULLSWAPIFNOT // ctl dd gc prices mkey n max_steps key val found? + IF:<{ // ctl dd gc prices mkey n max_steps key val + 32 PLDU // ctl dd gc prices mkey n max_steps key exp + s3 PUSH // ctl dd gc prices mkey n max_steps key exp n + LEQ // ctl dd gc prices mkey n max_steps key _40 + IF:<{ // ctl dd gc prices mkey n max_steps key + s0 s6 XCHG2 + 224 PUSHINT // ctl max_steps gc prices mkey n key dd _44 + DICTUDEL // ctl max_steps gc prices mkey n _67 _68 + DROP // ctl max_steps gc prices mkey n dd + s0 s5 XCHG // ctl dd gc prices mkey n max_steps + }>ELSE<{ + DROP // ctl dd gc prices mkey n max_steps + }> + }>ELSE<{ + 2DROP // ctl dd gc prices mkey n max_steps + }> + s2 s4 XCHG2 + 8 PUSHPOW2 // ctl dd max_steps prices n mkey gc _47=256 + DICTUDEL // ctl dd max_steps prices n _69 _70 + DROP // ctl dd max_steps prices n gc + DUP + 8 PUSHPOW2 // ctl dd max_steps prices n gc gc _50=256 + DICTUMIN + NULLSWAPIFNOT2 // ctl dd max_steps prices n gc _72 _71 _73 + s2 POP // ctl dd max_steps prices n gc found? mkey + OVER // ctl dd max_steps prices n gc found? mkey found? + IF:<{ // ctl dd max_steps prices n gc found? mkey + DUP // ctl dd max_steps prices n gc found? mkey mkey + 224 RSHIFT# // ctl dd max_steps prices n gc found? mkey _52 + }>ELSE<{ // ctl dd max_steps prices n gc found? mkey + 32 PUSHPOW2DEC // ctl dd max_steps prices n gc found? mkey _52=4294967295 + }> // ctl dd max_steps prices n gc found? mkey nhk + s0 s6 XCHG // ctl dd nhk prices n gc found? mkey max_steps + DEC // ctl dd nhk prices n gc found? mkey max_steps + }>ELSE<{ // ctl dd gc prices mkey n max_steps nhk + s5 s1 s5 XCHG3 + s0 s3 XCHG + FALSE + s0 s2 XCHG // ctl dd nhk prices n gc found? mkey max_steps + }> + s3 s6 XCHG + s3 s4 XCHG + -ROT // ctl dd gc prices nhk n max_steps found? mkey + }> // ctl dd gc prices nhk n max_steps mkey + 2DROP // ctl dd gc prices nhk n + store_data CALLDICT + }> + calcprice_internal PROCREF:<{ + // domain data ppc ppb + s0 s2 XCHG + 100 PUSHINT // domain ppb ppc data _7=100 + CDATASIZE // domain ppb ppc _24 _25 _26 + s2 POP // domain ppb ppc refs bits + s0 s4 XCHG // bits ppb ppc refs domain + SBITS // bits ppb ppc refs _9 + 1 LSHIFT# // bits ppb ppc refs _11 + 192 PUSHINT // bits ppb ppc refs _11 _16 + ADD // bits ppb ppc refs _17 + s1 s4 XCHG // refs ppb ppc bits _17 + ADD // refs ppb ppc bits + s0 s3 XCHG // bits ppb ppc refs + 2 ADDCONST // bits ppb ppc _20 + MUL // bits ppb _21 + s0 s2 XCHG // _21 ppb bits + MUL // _21 _22 + ADD // _23 + }> + check_owner PROCREF:<{ + // cat_table owner_info src_wc src_addr strict + s0 s4 XCHG // strict owner_info src_wc src_addr cat_table + ISNULL // strict owner_info src_wc src_addr _5 + s4 s(-1) PUXC // strict owner_info src_wc src_addr strict _5 + AND // strict owner_info src_wc src_addr _6 + IFJMP:<{ // strict owner_info src_wc src_addr + 4 BLKDROP // + 4000281702 PUSHINT // _7=4000281702 + }> // strict owner_info src_wc src_addr + s2 PUSH // strict owner_info src_wc src_addr owner_info + ISNULL // strict owner_info src_wc src_addr _8 + IFJMP:<{ // strict owner_info src_wc src_addr + 3 BLKDROP // strict + 4000263474 PUSHINT // strict _9=4000263474 + AND // _10 + }> // strict owner_info src_wc src_addr + s3 POP // src_addr owner_info src_wc + 3798033458 PUSHINT // src_addr owner_info src_wc ERR_BAD2=3798033458 + s0 s2 XCHG // src_addr ERR_BAD2=3798033458 src_wc owner_info + CTOS // src_addr ERR_BAD2=3798033458 src_wc sown + DUP // src_addr ERR_BAD2=3798033458 src_wc sown sown + SBITS // src_addr ERR_BAD2=3798033458 src_wc sown _15 + 283 PUSHINT // src_addr ERR_BAD2=3798033458 src_wc sown _15 _22 + LESS // src_addr ERR_BAD2=3798033458 src_wc sown _23 + IFJMP:<{ // src_addr ERR_BAD2=3798033458 src_wc sown + s2 s3 XCHG + 3 BLKDROP // ERR_BAD2=3798033458 + }> // src_addr ERR_BAD2=3798033458 src_wc sown + 19 LDU // src_addr ERR_BAD2=3798033458 src_wc _24 sown + SWAP + 327324 PUSHINT // src_addr ERR_BAD2=3798033458 src_wc sown _24 _33 + NEQ // src_addr ERR_BAD2=3798033458 src_wc sown _34 + IFJMP:<{ // src_addr ERR_BAD2=3798033458 src_wc sown + s2 s3 XCHG + 3 BLKDROP // ERR_BAD2=3798033458 + }> // src_addr ERR_BAD2=3798033458 src_wc sown + 1 2 BLKDROP2 // src_addr src_wc sown + 8 LDI // src_addr src_wc _37 sown + 256 PLDU // src_addr src_wc owner_wc owner_addr + s0 s2 XCHG // src_addr owner_addr owner_wc src_wc + NEQ // src_addr owner_addr _42 + s0 s2 XCHG // _42 owner_addr src_addr + NEQ // _42 _43 + OR // _44 + IFJMP:<{ // + 4000282478 PUSHINT // _45=4000282478 + }> // + 0 PUSHINT // _46=0 + }> + perform_ctl_op PROCREF:<{ + // op src_wc src_addr in_msg + load_data INLINECALLDICT // op src_wc src_addr in_msg ctl domdata gc prices nhk lhk + s5 PUSH // op src_wc src_addr in_msg ctl domdata gc prices nhk lhk ctl + CTOS // op src_wc src_addr in_msg ctl domdata gc prices nhk lhk cs + 8 LDI // op src_wc src_addr in_msg ctl domdata gc prices nhk lhk _13 cs + s0 s10 XCHG // op cs src_addr in_msg ctl domdata gc prices nhk lhk _13 src_wc + NEQ // op cs src_addr in_msg ctl domdata gc prices nhk lhk _16 + s0 s9 XCHG // op _16 src_addr in_msg ctl domdata gc prices nhk lhk cs + 256 LDU // op _16 src_addr in_msg ctl domdata gc prices nhk lhk _83 _82 + DROP // op _16 src_addr in_msg ctl domdata gc prices nhk lhk _17 + s0 s8 XCHG2 // op _16 lhk in_msg ctl domdata gc prices nhk _17 src_addr + NEQ // op _16 lhk in_msg ctl domdata gc prices nhk _20 + s1 s8 XCHG // op nhk lhk in_msg ctl domdata gc prices _16 _20 + OR // op nhk lhk in_msg ctl domdata gc prices _21 + IFJMP:<{ // op nhk lhk in_msg ctl domdata gc prices + 8 BLKDROP // + 4000282478 PUSHINT // _22=4000282478 + send_error CALLDICT + }> // op nhk lhk in_msg ctl domdata gc prices + s0 s7 XCHG + 1130909810 PUSHINT // prices nhk lhk in_msg ctl domdata gc op _24=1130909810 + EQUAL // prices nhk lhk in_msg ctl domdata gc _25 + IFJMP:<{ // prices nhk lhk in_msg ctl domdata gc + s6 POP // gc nhk lhk in_msg ctl domdata + s0 s2 XCHG // gc nhk lhk domdata ctl in_msg + 32 LDU // gc nhk lhk domdata ctl _30 in_msg + LDGRAMS // gc nhk lhk domdata ctl _30 _33 in_msg + LDGRAMS // gc nhk lhk domdata ctl _30 _33 _35 in_msg + LDGRAMS // gc nhk lhk domdata ctl stdper ppr ppc ppb in_msg + ENDS + 4 TUPLE // gc nhk lhk domdata ctl _40 + s0 s4 s4 XCHG3 + s0 s5 XCHG + s0 s3 XCHG // ctl domdata gc _40 nhk lhk + store_data CALLDICT + 0 PUSHINT // _42=0 + send_ok CALLDICT + }> // prices nhk lhk in_msg ctl domdata gc + s4 POP // prices nhk gc in_msg ctl domdata + query_info GETGLOB + UNTRIPLE // prices nhk gc in_msg ctl domdata addr query_id op + DUP + 1128555884 PUSHINT // prices nhk gc in_msg ctl domdata addr query_id op op _48=1128555884 + EQUAL // prices nhk gc in_msg ctl domdata addr query_id op _49 + IFJMP:<{ // prices nhk gc in_msg ctl domdata addr query_id op + s5 POP // prices nhk gc op ctl domdata addr query_id + s2 PUSH // prices nhk gc op ctl domdata addr query_id domdata + ISNULL // prices nhk gc op ctl domdata addr query_id _50 + IFNOT:<{ // prices nhk gc op ctl domdata addr query_id + s3 s4 XCHG + s2 s3 XCHG + s5 s7 s6 XCHG3 + 1 PUSHINT + -1 PUSHINT // addr query_id op ctl domdata gc prices nhk _51=1 _52=-1 + housekeeping CALLDICT + -ROT // op addr query_id + }>ELSE<{ + s4 s7 XCHG + 5 2 BLKDROP2 // op addr query_id + }> + load_data INLINECALLDICT // op addr query_id _95 _96 _97 _98 _99 _100 + s4 s5 XCHG + 5 BLKDROP // op addr query_id domdata + ISNULL // op addr query_id _55 + IFNOTJMP:<{ // op addr query_id + 3 BLKDROP // + 4000605549 PUSHINT // _56=4000605549 + send_error CALLDICT + }> // op addr query_id + 4016791929 PUSHINT // op addr query_id _58=4016791929 + s0 s1 s3 XCHG3 + 0 PUSHINT + 160 PUSHINT // addr _58=4016791929 query_id op _59=0 _62 + send_message CALLDICT + }> // prices nhk gc in_msg ctl domdata addr query_id op + s3 POP + s3 POP + s4 POP + s4 POP + s4 POP // query_id op addr in_msg + s2 PUSH + 1415670629 PUSHINT // query_id op addr in_msg op _64=1415670629 + EQUAL // query_id op addr in_msg _65 + IFJMP:<{ // query_id op addr in_msg + LDGRAMS // query_id op addr _102 _101 + DROP // query_id op addr amount + s1 s3 XCHG + 4016791929 PUSHINT + s3 s3 XCHG2 + 64 PUSHINT // addr _69=4016791929 query_id op amount _70=64 + send_message CALLDICT + }> // query_id op addr in_msg + 4 BLKDROP // + 32 PUSHPOW2DEC // _72=4294967295 + send_error CALLDICT + }> + recv_internal PROC:<{ + // msg_value in_msg_cell in_msg + DUP // msg_value in_msg_cell in_msg in_msg + SBITS // msg_value in_msg_cell in_msg _3 + 32 LESSINT // msg_value in_msg_cell in_msg _5 + IFJMP:<{ // msg_value in_msg_cell in_msg + 3 BLKDROP // + }> // msg_value in_msg_cell in_msg + SWAP // msg_value in_msg in_msg_cell + CTOS // msg_value in_msg cs + 4 LDU // msg_value in_msg flags cs + SWAP + 1 PUSHINT // msg_value in_msg cs flags _12=1 + AND // msg_value in_msg cs _13 + IFJMP:<{ // msg_value in_msg cs + 3 BLKDROP // + }> // msg_value in_msg cs + LDMSGADDR // msg_value in_msg _327 _326 + DROP // msg_value in_msg s_addr + DUP // msg_value in_msg s_addr s_addr + REWRITESTDADDR // msg_value in_msg s_addr src_wc src_addr + s0 s3 XCHG // msg_value src_addr s_addr src_wc in_msg + 32 LDU // msg_value src_addr s_addr src_wc op in_msg + OVER // msg_value src_addr s_addr src_wc op in_msg op + IFNOTJMP:<{ // msg_value src_addr s_addr src_wc op in_msg + 6 BLKDROP // + }> // msg_value src_addr s_addr src_wc op in_msg + 0 PUSHINT // msg_value src_addr s_addr src_wc op in_msg query_id=0 + OVER // msg_value src_addr s_addr src_wc op in_msg query_id=0 in_msg + SBITS // msg_value src_addr s_addr src_wc op in_msg query_id=0 _26 + 63 GTINT // msg_value src_addr s_addr src_wc op in_msg query_id=0 _28 + IF:<{ // msg_value src_addr s_addr src_wc op in_msg query_id=0 + DROP // msg_value src_addr s_addr src_wc op in_msg + 64 LDU // msg_value src_addr s_addr src_wc op query_id in_msg + SWAP // msg_value src_addr s_addr src_wc op in_msg query_id + }> // msg_value src_addr s_addr src_wc op in_msg query_id + s4 s0 s2 XC2PU // msg_value src_addr in_msg src_wc op s_addr query_id op + TRIPLE + query_info SETGLOB + DUP + 31 PUSHPOW2 // msg_value src_addr in_msg src_wc op op _34 + AND // msg_value src_addr in_msg src_wc op _35 + IFJMP:<{ // msg_value src_addr in_msg src_wc op + 5 BLKDROP // + }> // msg_value src_addr in_msg src_wc op + DUP // msg_value src_addr in_msg src_wc op op + 24 RSHIFT# // msg_value src_addr in_msg src_wc op _37 + 67 EQINT // msg_value src_addr in_msg src_wc op _39 + IFJMP:<{ // msg_value src_addr in_msg src_wc op + s4 POP // op src_addr in_msg src_wc + -ROT // op src_wc src_addr in_msg + perform_ctl_op INLINECALLDICT + }> // msg_value src_addr in_msg src_wc op + DUP + 1919248228 PUSHINT // msg_value src_addr in_msg src_wc op op _42=1919248228 + EQUAL // msg_value src_addr in_msg src_wc op _45 + OVER + 1886547820 PUSHINT // msg_value src_addr in_msg src_wc op _45 op _46=1886547820 + EQUAL // msg_value src_addr in_msg src_wc op _45 _47 + 1 LSHIFT# // msg_value src_addr in_msg src_wc op _45 _49 + ADD // msg_value src_addr in_msg src_wc op _50 + OVER + 1970300004 PUSHINT // msg_value src_addr in_msg src_wc op _50 op _51=1970300004 + EQUAL // msg_value src_addr in_msg src_wc op _50 _52 + 2 LSHIFT# // msg_value src_addr in_msg src_wc op _50 _54 + ADD // msg_value src_addr in_msg src_wc op _55 + SWAP + 1735354211 PUSHINT // msg_value src_addr in_msg src_wc _55 op _56=1735354211 + EQUAL // msg_value src_addr in_msg src_wc _55 _57 + 3 LSHIFT# // msg_value src_addr in_msg src_wc _55 _59 + ADD // msg_value src_addr in_msg src_wc qt + DUP // msg_value src_addr in_msg src_wc qt qt + IFNOTJMP:<{ // msg_value src_addr in_msg src_wc qt + 5 BLKDROP // + 32 PUSHPOW2DEC // _61=4294967295 + send_error CALLDICT + }> // msg_value src_addr in_msg src_wc qt + NEGATE // msg_value src_addr in_msg src_wc qt + load_data INLINECALLDICT // msg_value src_addr in_msg src_wc qt ctl domdata gc prices nhk lhk + s6 PUSH // msg_value src_addr in_msg src_wc qt ctl domdata gc prices nhk lhk qt + 8 EQINT // msg_value src_addr in_msg src_wc qt ctl domdata gc prices nhk lhk _72 + IFJMP:<{ // msg_value src_addr in_msg src_wc qt ctl domdata gc prices nhk lhk + DROP + s5 POP + s5 POP + s6 POP + s6 POP // domdata gc in_msg prices nhk ctl + s0 s3 XCHG // domdata gc ctl prices nhk in_msg + 32 LDI // domdata gc ctl prices nhk _341 _340 + DROP // domdata gc ctl prices nhk max_steps + s3 s5 XCHG + s3 s4 XCHG + 1 PUSHINT + SWAP // ctl domdata gc prices nhk _77=1 max_steps + housekeeping CALLDICT + 4016791929 PUSHINT // _79=4016791929 + send_error CALLDICT + }> // msg_value src_addr in_msg src_wc qt ctl domdata gc prices nhk lhk + s0 s8 XCHG // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg + LDOPTREF // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk domain_cell in_msg + OVER // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk domain_cell in_msg domain_cell + ISNULL // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk domain_cell in_msg _88 + IF:<{ // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk domain_cell in_msg + NIP // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg + 6 LDU // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk bytes in_msg + OVER // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk bytes in_msg bytes + 0 EQINT // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk bytes in_msg fail + s0 s2 XCHG // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk fail in_msg bytes + 3 LSHIFT# // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk fail in_msg _97 + LDSLICEX // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk fail domain in_msg + }>ELSE<{ // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk domain_cell in_msg + SWAP // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain_cell + CTOS // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain + DUP // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain domain + SBITREFS // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain bits refs + SWAP // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain refs bits + -8 ADDCONST // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain refs _104 + -121 PUSHINT // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain refs _104 _107 + AND // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain refs _108 + OR // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain fail + s0 s2 XCHG // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk fail domain in_msg + }> + s2 PUSH // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk fail domain in_msg fail + IFNOT:<{ // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk fail domain in_msg + s2 POP // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain + DUP + 8 PUSHINT // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain domain _110=8 + SDCUTLAST // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain _111 + 8 PLDU // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain fail + s0 s2 XCHG // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk fail domain in_msg + }> // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk fail domain in_msg + s0 s2 XCHG // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain fail + IFJMP:<{ // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain + 12 BLKDROP // + 4000275504 PUSHINT // _114=4000275504 + send_error CALLDICT + }> // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain + NOW // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n + PUSHNULL // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n _120 + DUP // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info + 0 PUSHINT // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info _124=0 + s0 s0 s4 PUSH3 // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info key=0 zeros=0 exp=0 tail + DUP // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info key=0 zeros=0 exp=0 tail tail + SBITS // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info key=0 zeros=0 exp=0 tail _126 + 3 RSHIFTC# // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info key=0 zeros=0 exp=0 tail _128 + REPEAT:<{ // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info key zeros exp tail + PUSHNULL + s6 POP // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info key zeros exp tail + 8 LDU // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info key zeros exp _131 tail + SWAP // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info key zeros exp tail _131 + 0 EQINT // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info key zeros exp tail z + s3 s3 XCPU // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info key z exp tail zeros z + SUB // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info key z exp tail zeros + s0 s3 XCHG // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info key zeros exp tail z + IF:<{ // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info key zeros exp tail + s3 POP // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info tail zeros exp + s2 PUSH // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info tail zeros exp tail + SBITS // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info tail zeros exp _137 + s7 s(-1) PUXC // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info tail zeros exp domain _137 + SDSKIPLAST // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info tail zeros exp _138 + SHA256U // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info tail zeros exp _139 + 32 RSHIFT# // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info tail zeros exp key + s0 s12 PUSH2 + 224 PUSHINT // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info tail zeros exp key key domdata _146 + DICTUGET + NULLSWAPIFNOT // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info tail zeros exp key val found? + IF:<{ // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info tail zeros exp key val + 1 2 BLKDROP2 // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info tail zeros key val + 32 LDU // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info tail zeros key exp val + s1 s7 PUSH2 // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info tail zeros key exp val exp n + GEQ // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info tail zeros key exp val _151 + IF:<{ // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info tail zeros key exp val + LDREF // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info tail zeros key exp cat_table val + ENDS + 0 PUSHINT // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info tail zeros key exp cat_table _158=0 + SWAP + 8 PUSHPOW2 // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info tail zeros key exp _158=0 cat_table _159=256 + DICTUGETREF // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info tail zeros key exp cown ok + IF:<{ // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info tail zeros key exp cown + s5 POP // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info tail zeros key exp + }>ELSE<{ + DROP // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info tail zeros key exp + }> + }>ELSE<{ + DROP // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info tail zeros key exp + }> + SWAP // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info tail zeros exp key + }>ELSE<{ + DROP // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info tail zeros exp key + }> + s0 s3 XCHG // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info key zeros exp tail + }> // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info key zeros exp tail + }> + DROP // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info key zeros exp + SWAP // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info key exp zeros + 4 GTINT // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info key exp _162 + IFJMP:<{ // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info key exp + 15 BLKDROP + 2DROP // + 4017511472 PUSHINT // _163=4017511472 + send_error CALLDICT + }> // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info key exp + s12 PUSH // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info key exp qt + 1 NEQINT // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info key exp _167 + s4 PUSH + s0 s4 XCHG + s15 s1 s3 XCHG3 + s0 17 s() XCHG + SWAP // msg_value key lhk exp qt ctl domdata gc prices nhk in_msg domain n cat_table cat_table owner_info src_wc src_addr _167 + check_owner INLINECALLDICT // msg_value key lhk exp qt ctl domdata gc prices nhk in_msg domain n cat_table err + DUP // msg_value key lhk exp qt ctl domdata gc prices nhk in_msg domain n cat_table err err + IFJMP:<{ // msg_value key lhk exp qt ctl domdata gc prices nhk in_msg domain n cat_table err + 14 1 BLKDROP2 // err + send_error CALLDICT + }> // msg_value key lhk exp qt ctl domdata gc prices nhk in_msg domain n cat_table err + DROP // msg_value key lhk exp qt ctl domdata gc prices nhk in_msg domain n cat_table + s9 PUSH // msg_value key lhk exp qt ctl domdata gc prices nhk in_msg domain n cat_table qt + 2 NEQINT // msg_value key lhk exp qt ctl domdata gc prices nhk in_msg domain n cat_table _173 + IF:<{ // msg_value key lhk exp qt ctl domdata gc prices nhk in_msg domain n cat_table + s0 s3 XCHG // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table domain n in_msg + LDREF // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table domain n _361 _360 + DROP // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table domain n data + DUP // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table domain n data data + DICTEMPTY // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table domain n data _176 + IFNOT:<{ // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table domain n data + 0 PUSHINT // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table domain n data _179=0 + OVER + 8 PUSHPOW2 // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table domain n data _179=0 data _180=256 + DICTUGETREF // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table domain n data oinfo ok + IF:<{ // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table domain n data oinfo + CTOS // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table domain n data cs + DUP // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table domain n data cs cs + SBITS // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table domain n data cs _185 + 283 PUSHINT // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table domain n data cs _185 _192 + GEQ // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table domain n data cs _193 + 31 THROWIFNOT + 19 PLDU // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table domain n data _197 + 327324 PUSHINT // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table domain n data _197 _202 + EQUAL // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table domain n data _203 + 31 THROWIFNOT + }>ELSE<{ + DROP // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table domain n data + }> + DUP + 8 PUSHPOW2 // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table domain n data data _208=256 + DICTUMIN + NULLSWAPIFNOT2 // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table domain n data _365 _364 _366 + 2 1 BLKDROP2 // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table domain n data minok + OVER + 8 PUSHPOW2 // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table domain n data minok data _213=256 + DICTUMAX + NULLSWAPIFNOT2 // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table domain n data minok _368 _367 _369 + 2 1 BLKDROP2 // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table domain n data minok maxok + AND // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table domain n data _216 + 31 THROWIFNOT + }> // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table domain n data + }>ELSE<{ // msg_value key lhk exp qt ctl domdata gc prices nhk in_msg domain n cat_table + s3 POP // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table domain n + s2 PUSH // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table domain n data + }> + s5 PUSH // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table domain n data prices + 4 UNTUPLE // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table domain n data stdper ppr ppc ppb + s3 PUSH // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table domain n data stdper ppr ppc ppb stdper + IFNOTJMP:<{ // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table domain n data stdper ppr ppc ppb + 15 BLKDROP + 3 BLKDROP // + 3545187910 PUSHINT // _223=3545187910 + send_error CALLDICT + }> // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table domain n data stdper ppr ppc ppb + s4 PUSH + s3 s7 XCHG + -ROT // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table ppr n data stdper domain data ppc ppb + calcprice_internal INLINECALLDICT // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table ppr n data stdper _226 + s11 PUSH // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table ppr n data stdper _226 qt + 4 NEQINT // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table ppr n data stdper _226 _228 + s1 s5 XCHG // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table _226 n data stdper ppr _228 + AND // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table _226 n data stdper _229 + s1 s4 XCHG // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table stdper n data _226 _229 + ADD // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table stdper n data price + s0 s14 XCHG + 30 PUSHPOW2 // price key lhk exp qt ctl domdata gc prices nhk cat_table stdper n data msg_value _233 + SUB // price key lhk exp qt ctl domdata gc prices nhk cat_table stdper n data _234 + s14 PUSH // price key lhk exp qt ctl domdata gc prices nhk cat_table stdper n data _234 price + LESS // price key lhk exp qt ctl domdata gc prices nhk cat_table stdper n data _235 + IFJMP:<{ // price key lhk exp qt ctl domdata gc prices nhk cat_table stdper n data + 14 BLKDROP // + 3883023472 PUSHINT // _236=3883023472 + send_error CALLDICT + }> // price key lhk exp qt ctl domdata gc prices nhk cat_table stdper n data + s9 PUSH // price key lhk exp qt ctl domdata gc prices nhk cat_table stdper n data qt + 2 EQINT // price key lhk exp qt ctl domdata gc prices nhk cat_table stdper n data _243 + IFJMP:<{ // price key lhk exp qt ctl domdata gc prices nhk cat_table stdper n data + s3 POP + s8 POP // price key lhk exp n ctl domdata gc prices nhk data stdper + s7 s7 XCPU // price key lhk exp stdper ctl domdata gc prices nhk data n stdper + ADD // price key lhk exp stdper ctl domdata gc prices nhk data _244 + s8 s(-1) PUXC // price key lhk exp stdper ctl domdata gc prices nhk data exp _244 + GREATER // price key lhk exp stdper ctl domdata gc prices nhk data _245 + IFJMP:<{ // price key lhk exp stdper ctl domdata gc prices nhk data + 11 BLKDROP // + 4083511919 PUSHINT // _246=4083511919 + send_error CALLDICT + }> // price key lhk exp stdper ctl domdata gc prices nhk data + s7 s6 PUSH2 // price key lhk exp stdper ctl domdata gc prices nhk data exp stdper + ADD // price key lhk exp stdper ctl domdata gc prices nhk data _249 + NEWC // price key lhk exp stdper ctl domdata gc prices nhk data _249 _250 + 32 STU // price key lhk exp stdper ctl domdata gc prices nhk data _252 + STREF // price key lhk exp stdper ctl domdata gc prices nhk _253 + s0 s9 s4 XCPUXC + 224 PUSHINT // price key lhk exp stdper ctl nhk gc prices _253 key domdata _256 + DICTUSETB // price key lhk exp stdper ctl nhk gc prices domdata + s0 s6 XCHG // price key lhk domdata stdper ctl nhk gc prices exp + 224 LSHIFT# // price key lhk domdata stdper ctl nhk gc prices _262 + s0 s8 XCHG2 // price prices lhk domdata stdper ctl nhk gc _262 key + ADD // price prices lhk domdata stdper ctl nhk gc gckeyO + s0 s4 XCHG // price prices lhk domdata gckeyO ctl nhk gc stdper + 224 LSHIFT# // price prices lhk domdata gckeyO ctl nhk gc _268 + s4 s(-1) PUXC // price prices lhk domdata gckeyO ctl nhk gc gckeyO _268 + ADD // price prices lhk domdata gckeyO ctl nhk gc gckeyN + s4 s4 XCHG2 + 8 PUSHPOW2 // price prices lhk domdata gckeyN ctl nhk gckeyO gc _271=256 + DICTUDEL // price prices lhk domdata gckeyN ctl nhk _376 _377 + DROP // price prices lhk domdata gckeyN ctl nhk gc + NEWC // price prices lhk domdata gckeyN ctl nhk gc _274 + s0 s4 s4 XCHG3 + 8 PUSHPOW2 // price prices lhk domdata nhk ctl _274 gckeyN gc _275=256 + DICTUSETB // price prices lhk domdata nhk ctl gc + s0 s3 XCHG + s5 s5 s4 XCHG3 + 1 PUSHINT // price ctl domdata gc prices nhk lhk _277=1 + housekeeping CALLDICT + send_ok CALLDICT + }> // price key lhk exp qt ctl domdata gc prices nhk cat_table stdper n data + s9 PUSH // price key lhk exp qt ctl domdata gc prices nhk cat_table stdper n data qt + 1 EQINT // price key lhk exp qt ctl domdata gc prices nhk cat_table stdper n data _281 + IFJMP:<{ // price key lhk exp qt ctl domdata gc prices nhk cat_table stdper n data + s9 POP + s9 POP // price key lhk n data ctl domdata gc prices nhk cat_table stdper + SWAP // price key lhk n data ctl domdata gc prices nhk stdper cat_table + ISNULL // price key lhk n data ctl domdata gc prices nhk stdper _282 + IFNOTJMP:<{ // price key lhk n data ctl domdata gc prices nhk stdper + 11 BLKDROP // + 3781980773 PUSHINT // _283=3781980773 + send_error CALLDICT + }> // price key lhk n data ctl domdata gc prices nhk stdper + s1 s7 XCHG // price key lhk nhk data ctl domdata gc prices n stdper + ADD // price key lhk nhk data ctl domdata gc prices expires_at + DUP + NEWC // price key lhk nhk data ctl domdata gc prices expires_at expires_at _288 + 32 STU // price key lhk nhk data ctl domdata gc prices expires_at _290 + s1 s6 XCHG // price key lhk nhk expires_at ctl domdata gc prices data _290 + STREF // price key lhk nhk expires_at ctl domdata gc prices _291 + s0 s8 s3 XCPUXC + 224 PUSHINT // price key lhk nhk expires_at ctl prices gc _291 key domdata _294 + DICTUSETB // price key lhk nhk expires_at ctl prices gc domdata + s4 PUSH // price key lhk nhk expires_at ctl prices gc domdata expires_at + 224 LSHIFT# // price key lhk nhk expires_at ctl prices gc domdata _300 + s0 s8 XCHG2 // price domdata lhk nhk expires_at ctl prices gc _300 key + OR // price domdata lhk nhk expires_at ctl prices gc gckey + NEWC // price domdata lhk nhk expires_at ctl prices gc gckey _303 + s0 s2 XCHG + 8 PUSHPOW2 // price domdata lhk nhk expires_at ctl prices _303 gckey gc _304=256 + DICTUSETB // price domdata lhk nhk expires_at ctl prices gc + s4 s3 XCHG2 // price domdata lhk prices gc ctl nhk expires_at + MIN // price domdata lhk prices gc ctl _306 + s1 s5 XCHG + s3 s0 s4 XCHG3 + 1 PUSHINT // price ctl domdata gc prices _306 lhk _307=1 + housekeeping CALLDICT + send_ok CALLDICT + }> // price key lhk exp qt ctl domdata gc prices nhk cat_table stdper n data + 3 1 BLKDROP2 // price key lhk exp qt ctl domdata gc prices nhk data + s0 s6 XCHG // price key lhk exp data ctl domdata gc prices nhk qt + 4 EQINT // price key lhk exp data ctl domdata gc prices nhk _311 + IFJMP:<{ // price key lhk exp data ctl domdata gc prices nhk + s0 s6 XCHG + NEWC // price key lhk nhk data ctl domdata gc prices exp _313 + 32 STU // price key lhk nhk data ctl domdata gc prices _315 + s1 s5 XCHG // price key lhk nhk prices ctl domdata gc data _315 + STREF // price key lhk nhk prices ctl domdata gc _316 + s7 s2 XCHG2 + 224 PUSHINT // price gc lhk nhk prices ctl _316 key domdata _319 + DICTUSETB // price gc lhk nhk prices ctl domdata + s5 s4 XCHG2 + s1 s3 XCHG + 1 PUSHINT // price ctl domdata gc prices nhk lhk _321=1 + housekeeping CALLDICT + send_ok CALLDICT + }> // price key lhk exp data ctl domdata gc prices nhk + 10 BLKDROP // + }> + recv_external PROC:<{ + // in_msg + DROP // + load_data INLINECALLDICT // _12 _13 _14 _15 _16 _17 + NIP // ctl dd gc prices lhk + IFNOTJMP:<{ // ctl dd gc prices + ACCEPT + 32 PUSHPOW2DEC // ctl dd gc prices _9=4294967295 + NOW // ctl dd gc prices _9=4294967295 _10 + store_data CALLDICT + }> // ctl dd gc prices + 4 BLKDROP // + }> + dnsdictlookup PROCREF:<{ + // domain nowtime + OVER // domain nowtime domain + SBITREFS // domain nowtime bits refs + OVER + 7 PUSHINT // domain nowtime bits refs bits _6=7 + AND // domain nowtime bits refs _7 + OR // domain nowtime bits _8 + 30 THROWIF + DUP // domain nowtime bits bits + IFNOT:<{ // domain nowtime bits + 30 THROW + }> // domain nowtime bits + s2 PUSH + 8 PUSHINT // domain nowtime bits domain _13=8 + SDCUTLAST // domain nowtime bits _14 + 8 PLDU // domain nowtime bits domain_last_byte + IF:<{ // domain nowtime bits + 0 PUSHINT // domain nowtime bits _17=0 + NEWC // domain nowtime bits _17=0 _18 + s0 s4 XCHG2 // _17=0 nowtime bits _18 domain + STSLICER // _17=0 nowtime bits _19 + s1 s3 XCHG // bits nowtime _17=0 _19 + 8 STU // bits nowtime _21 + ENDC // bits nowtime _22 + CTOS // bits nowtime domain + s0 s2 XCHG // domain nowtime bits + 8 ADDCONST // domain nowtime bits + }> // domain nowtime bits + DUP // domain nowtime bits bits + 8 EQINT // domain nowtime bits _27 + IFJMP:<{ // domain nowtime bits + 3 BLKDROP // + 0 PUSHINT // _28=0 + PUSHNULL // _28=0 _29 + 8 PUSHINT // _28=0 _29 _30=8 + PUSHNULL // _28=0 _29 _30=8 _31 + }> // domain nowtime bits + s2 PUSH // domain nowtime bits domain + 8 PLDU // domain nowtime bits domain_first_byte + 0 EQINT // domain nowtime bits _36 + IF:<{ // domain nowtime bits + s0 s2 XCHG // bits nowtime domain + 8 LDU // bits nowtime _95 _94 + NIP // bits nowtime domain + s0 s2 XCHG // domain nowtime bits + -8 ADDCONST // domain nowtime bits + }> // domain nowtime bits + c4 PUSH // domain nowtime bits _43 + CTOS // domain nowtime bits ds + LDREF // domain nowtime bits _97 _96 + NIP // domain nowtime bits ds + LDDICT // domain nowtime bits _99 _98 + DROP // domain nowtime bits root + PUSHNULL // domain nowtime bits root val + -1 PUSHINT // domain nowtime bits root val tail_bits=-1 + s5 PUSH // domain nowtime bits root val tail_bits=-1 tail + s0 s4 XCHG // domain nowtime tail root val tail_bits=-1 bits + 3 RSHIFT# // domain nowtime tail root val tail_bits=-1 _57 + REPEAT:<{ // domain nowtime tail root val tail_bits + s0 s3 XCHG // domain nowtime tail_bits root val tail + 8 LDU // domain nowtime tail_bits root val _58 tail + SWAP // domain nowtime tail_bits root val tail _58 + 0 EQINT // domain nowtime tail_bits root val tail _62 + IF:<{ // domain nowtime tail_bits root val tail + DUP // domain nowtime tail_bits root val tail tail + SBITS // domain nowtime tail_bits root val tail _64 + s6 s(-1) PUXC // domain nowtime tail_bits root val tail domain _64 + SDSKIPLAST // domain nowtime tail_bits root val tail _65 + SHA256U // domain nowtime tail_bits root val tail _66 + 32 RSHIFT# // domain nowtime tail_bits root val tail key + s3 PUSH + 224 PUSHINT // domain nowtime tail_bits root val tail key root _73 + DICTUGET + NULLSWAPIFNOT // domain nowtime tail_bits root val tail v found? + IF:<{ // domain nowtime tail_bits root val tail v + DUP // domain nowtime tail_bits root val tail v v + 32 PLDU // domain nowtime tail_bits root val tail v _76 + s6 PUSH // domain nowtime tail_bits root val tail v _76 nowtime + GEQ // domain nowtime tail_bits root val tail v _77 + IF:<{ // domain nowtime tail_bits root val tail v + s2 POP + s3 POP // domain nowtime tail root val + s2 PUSH // domain nowtime tail root val tail + SBITS // domain nowtime tail root val tail_bits + s0 s3 XCHG // domain nowtime tail_bits root val tail + }>ELSE<{ + DROP // domain nowtime tail_bits root val tail + }> + }>ELSE<{ + DROP // domain nowtime tail_bits root val tail + }> + }> // domain nowtime tail_bits root val tail + s0 s3 XCHG // domain nowtime tail root val tail_bits + }> + 2 2 BLKDROP2 + s2 POP // domain tail_bits val + DUP // domain tail_bits val val + ISNULL // domain tail_bits val _79 + IFJMP:<{ // domain tail_bits val + 3 BLKDROP // + 0 PUSHINT // _80=0 + PUSHNULL // _80=0 _81 + OVER // _80=0 _81 _82=0 + PUSHNULL // _80=0 _81 _82=0 _83 + }> // domain tail_bits val + 32 LDU // domain tail_bits _84 val + LDREF // domain tail_bits _84 _107 _106 + DROP // domain tail_bits _84 _87 + s2 PUSH // domain tail_bits _84 _87 tail_bits + 0 EQINT // domain tail_bits _84 _87 _90 + s4 s3 XCHG2 // _87 _90 _84 domain tail_bits + SDSKIPLAST // _87 _90 _84 _91 + s3 s3 s0 XCHG3 // _84 _87 _90 _91 + }> + dnsresolve PROC:<{ + // domain category + SWAP + NOW // category domain _6 + dnsdictlookup INLINECALLDICT // category exp cat_table exact? pfx + s0 s3 XCHG // category pfx cat_table exact? exp + IFNOTJMP:<{ // category pfx cat_table exact? + 3 1 BLKDROP2 // exact? + PUSHNULL // exact? _8 + }> // category pfx cat_table exact? + IFNOT:<{ // category pfx cat_table + 11732114750494247458678882651681748623800183221773167493832867265755123357695 PUSHINT + s3 POP // category=11732114750494247458678882651681748623800183221773167493832867265755123357695 pfx cat_table + }> // category pfx cat_table + SWAP // category cat_table pfx + SBITS // category cat_table pfx_bits + s2 PUSH // category cat_table pfx_bits category + IFJMP:<{ // category cat_table pfx_bits + -ROT + 8 PUSHPOW2 // pfx_bits category cat_table _13=256 + DICTUGETOPTREF // pfx_bits cat_found + }> // category cat_table pfx_bits + s2 POP // pfx_bits cat_table + }> + getexpirationx PROCINLINE:<{ + // domain nowtime + dnsdictlookup INLINECALLDICT // _7 _8 _9 _10 + 3 BLKDROP // exp + }> + getexpiration PROC:<{ + // domain + NOW // domain _1 + getexpirationx INLINECALLDICT // _2 + }> + getstdperiod PROC:<{ + // + load_prices INLINECALLDICT // _5 _6 _7 _8 + 3 BLKDROP // stdper + }> + getppr PROC:<{ + // + load_prices INLINECALLDICT // _5 _6 _7 _8 + s2 s3 XCHG + 3 BLKDROP // ppr + }> + getppc PROC:<{ + // + load_prices INLINECALLDICT // _5 _6 _7 _8 + s1 s3 XCHG + 3 BLKDROP // ppc + }> + getppb PROC:<{ + // + load_prices INLINECALLDICT // _5 _6 _7 _8 + 3 1 BLKDROP2 // ppb + }> + calcprice PROC:<{ + // domain val + load_prices INLINECALLDICT // domain val _8 _9 _10 _11 + 2 2 BLKDROP2 // domain val ppc ppb + calcprice_internal INLINECALLDICT // _7 + }> + calcregprice PROC:<{ + // domain val + load_prices INLINECALLDICT // domain val _9 _10 _11 _12 + s3 POP // domain val ppb ppr ppc + s3 s4 XCHG + s4 s0 s4 XCHG3 // ppr domain val ppc ppb + calcprice_internal INLINECALLDICT // ppr _7 + ADD // _8 + }> +}END>c + +boc>B "build/dns-auto-code.cell" B>file \ No newline at end of file diff --git a/build/dns-auto-code.fif b/build/dns-auto-code.fif new file mode 100644 index 0000000..9e05479 --- /dev/null +++ b/build/dns-auto-code.fif @@ -0,0 +1,972 @@ +"Asm.fif" include +// automatically generated from `contracts/dns-auto-code.fc` incl:`contracts/imports/stdlib.fc` +PROGRAM{ + DECLPROC load_data + DECLPROC load_prices + DECLPROC store_data + DECLPROC send_message + DECLPROC send_error + DECLPROC send_ok + DECLPROC housekeeping + DECLPROC calcprice_internal + DECLPROC check_owner + DECLPROC perform_ctl_op + DECLPROC recv_internal + DECLPROC recv_external + DECLPROC dnsdictlookup + 123660 DECLMETHOD dnsresolve + 87450 DECLMETHOD getexpirationx + 110574 DECLMETHOD getexpiration + 67418 DECLMETHOD getstdperiod + 109522 DECLMETHOD getppr + 108994 DECLMETHOD getppc + 113123 DECLMETHOD getppb + 113304 DECLMETHOD calcprice + 85700 DECLMETHOD calcregprice + DECLGLOBVAR query_info + load_data PROCREF:<{ + // + c4 PUSH // _1 + CTOS // cs + LDREF // _3 cs + LDDICT // _3 _5 cs + LDDICT // _3 _5 _7 cs + 30 LDU // _3 _5 _7 _10 cs + LDGRAMS // _3 _5 _7 _10 _13 cs + LDGRAMS // _3 _5 _7 _10 _13 _15 cs + LDGRAMS // _3 _5 _7 _10 _13 _15 _17 cs + 4 -ROLL // _3 _5 _7 cs _10 _13 _15 _17 + 4 TUPLE // _3 _5 _7 cs _9 + SWAP // _3 _5 _7 _9 cs + 32 LDU // _3 _5 _7 _9 _19 cs + 32 LDU // _3 _5 _7 _9 _19 _42 _41 + DROP // _3 _5 _7 _9 _19 _22 + }> + load_prices PROCREF:<{ + // + c4 PUSH // _1 + CTOS // cs + LDREF // _19 _18 + NIP // cs + LDDICT // _21 _20 + NIP // cs + LDDICT // _23 _22 + NIP // cs + 30 LDU // _9 cs + LDGRAMS // _9 _12 cs + LDGRAMS // _9 _12 _14 cs + LDGRAMS // _9 _12 _14 _31 _30 + DROP // _9 _12 _14 _16 + }> + store_data PROC:<{ + // ctl dd gc prices nhk lhk + s0 s2 XCHG // ctl dd gc lhk nhk prices + 4 UNTUPLE // ctl dd gc lhk nhk sp ppr ppc ppb + s0 s8 XCHG + NEWC // ppb dd gc lhk nhk sp ppr ppc ctl _11 + STREF // ppb dd gc lhk nhk sp ppr ppc _12 + s1 s7 XCHG // ppb ppc gc lhk nhk sp ppr dd _12 + STDICT // ppb ppc gc lhk nhk sp ppr _13 + s1 s5 XCHG // ppb ppc ppr lhk nhk sp gc _13 + STDICT // ppb ppc ppr lhk nhk sp _14 + 30 STU // ppb ppc ppr lhk nhk _16 + s0 s3 XCHG2 // ppb ppc nhk lhk _16 ppr + STGRAMS // ppb ppc nhk lhk _17 + s0 s3 XCHG2 // ppb lhk nhk _17 ppc + STGRAMS // ppb lhk nhk _18 + s0 s3 XCHG2 // nhk lhk _18 ppb + STGRAMS // nhk lhk _19 + s1 s2 XCHG // lhk nhk _19 + 32 STU // lhk _21 + 32 STU // _23 + ENDC // _24 + c4 POP + }> + send_message PROC:<{ + // addr tag query_id body grams mode + 0 PUSHINT // addr tag query_id body grams mode _7=0 + 24 PUSHINT // addr tag query_id body grams mode _7=0 _8=24 + NEWC // addr tag query_id body grams mode _7=0 _8=24 _9 + 6 STU // addr tag query_id body grams mode _7=0 _11 + s0 s7 XCHG2 // _7=0 tag query_id body grams mode _11 addr + STSLICER // _7=0 tag query_id body grams mode _12 + ROT // _7=0 tag query_id body mode _12 grams + STGRAMS // _7=0 tag query_id body mode _13 + s1 s5 XCHG // mode tag query_id body _7=0 _13 + 107 STU // mode tag query_id body _27 + s1 s3 XCHG // mode body query_id tag _27 + 32 STU // mode body query_id _29 + 64 STU // mode body msg + OVER // mode body msg body + -1 GTINT // mode body msg _33 + IF:<{ // mode body msg + 32 STU // mode msg + }>ELSE<{ + NIP // mode msg + }> + ENDC // mode _37 + SWAP // _37 mode + SENDRAWMSG + }> + send_error PROC:<{ + // error_code + query_info GETGLOB + UNTRIPLE // error_code addr query_id op + s2 s3 XCHG + 0 PUSHINT + 64 PUSHINT // addr error_code query_id op _5=0 _6=64 + send_message CALLDICT + }> + send_ok PROC:<{ + // price + 4 PUSHINT // price _1=4 + RAWRESERVE + query_info GETGLOB + UNTRIPLE // addr query_id op + 4016791929 PUSHINT // addr query_id op _7=4016791929 + -ROT + 0 PUSHINT + 7 PUSHPOW2 // addr _7=4016791929 query_id op _8=0 _9=128 + send_message CALLDICT + }> + housekeeping PROC:<{ + // ctl dd gc prices nhk lhk max_steps + NOW // ctl dd gc prices nhk lhk max_steps n + s2 PUSH // ctl dd gc prices nhk lhk max_steps n lhk + 60 ADDCONST // ctl dd gc prices nhk lhk max_steps n _10 + s4 s(-1) PUXC // ctl dd gc prices nhk lhk max_steps n nhk _10 + MAX // ctl dd gc prices nhk lhk max_steps n _11 + s1 s(-1) PUXC // ctl dd gc prices nhk lhk max_steps n n _11 + LESS // ctl dd gc prices nhk lhk max_steps n _12 + IFJMP:<{ // ctl dd gc prices nhk lhk max_steps n + 2DROP // ctl dd gc prices nhk lhk + store_data CALLDICT + }> // ctl dd gc prices nhk lhk max_steps n + s2 POP // ctl dd gc prices nhk n max_steps + s4 PUSH + 8 PUSHPOW2 // ctl dd gc prices nhk n max_steps gc _17=256 + DICTUMIN + NULLSWAPIFNOT2 // ctl dd gc prices nhk n max_steps _63 _62 _64 + s2 POP // ctl dd gc prices nhk n max_steps found? mkey + WHILE:<{ + s1 s2 XCPU // ctl dd gc prices nhk n max_steps mkey found? max_steps + AND // ctl dd gc prices nhk n max_steps mkey _19 + }>DO<{ // ctl dd gc prices nhk n max_steps mkey + s3 POP // ctl dd gc prices mkey n max_steps + s2 PUSH // ctl dd gc prices mkey n max_steps mkey + 224 RSHIFT# // ctl dd gc prices mkey n max_steps nhk + s0 s2 PUSH2 // ctl dd gc prices mkey n max_steps nhk nhk n + LESS // ctl dd gc prices mkey n max_steps nhk _24 + IF:<{ // ctl dd gc prices mkey n max_steps nhk + DROP // ctl dd gc prices mkey n max_steps + s2 PUSH // ctl dd gc prices mkey n max_steps mkey + 224 MODPOW2# // ctl dd gc prices mkey n max_steps key + s0 s6 PUSH2 + 224 PUSHINT // ctl dd gc prices mkey n max_steps key key dd _35 + DICTUGET + NULLSWAPIFNOT // ctl dd gc prices mkey n max_steps key val found? + IF:<{ // ctl dd gc prices mkey n max_steps key val + 32 PLDU // ctl dd gc prices mkey n max_steps key exp + s3 PUSH // ctl dd gc prices mkey n max_steps key exp n + LEQ // ctl dd gc prices mkey n max_steps key _40 + IF:<{ // ctl dd gc prices mkey n max_steps key + s0 s6 XCHG2 + 224 PUSHINT // ctl max_steps gc prices mkey n key dd _44 + DICTUDEL // ctl max_steps gc prices mkey n _67 _68 + DROP // ctl max_steps gc prices mkey n dd + s0 s5 XCHG // ctl dd gc prices mkey n max_steps + }>ELSE<{ + DROP // ctl dd gc prices mkey n max_steps + }> + }>ELSE<{ + 2DROP // ctl dd gc prices mkey n max_steps + }> + s2 s4 XCHG2 + 8 PUSHPOW2 // ctl dd max_steps prices n mkey gc _47=256 + DICTUDEL // ctl dd max_steps prices n _69 _70 + DROP // ctl dd max_steps prices n gc + DUP + 8 PUSHPOW2 // ctl dd max_steps prices n gc gc _50=256 + DICTUMIN + NULLSWAPIFNOT2 // ctl dd max_steps prices n gc _72 _71 _73 + s2 POP // ctl dd max_steps prices n gc found? mkey + OVER // ctl dd max_steps prices n gc found? mkey found? + IF:<{ // ctl dd max_steps prices n gc found? mkey + DUP // ctl dd max_steps prices n gc found? mkey mkey + 224 RSHIFT# // ctl dd max_steps prices n gc found? mkey _52 + }>ELSE<{ // ctl dd max_steps prices n gc found? mkey + 32 PUSHPOW2DEC // ctl dd max_steps prices n gc found? mkey _52=4294967295 + }> // ctl dd max_steps prices n gc found? mkey nhk + s0 s6 XCHG // ctl dd nhk prices n gc found? mkey max_steps + DEC // ctl dd nhk prices n gc found? mkey max_steps + }>ELSE<{ // ctl dd gc prices mkey n max_steps nhk + s5 s1 s5 XCHG3 + s0 s3 XCHG + FALSE + s0 s2 XCHG // ctl dd nhk prices n gc found? mkey max_steps + }> + s3 s6 XCHG + s3 s4 XCHG + -ROT // ctl dd gc prices nhk n max_steps found? mkey + }> // ctl dd gc prices nhk n max_steps mkey + 2DROP // ctl dd gc prices nhk n + store_data CALLDICT + }> + calcprice_internal PROCREF:<{ + // domain data ppc ppb + s0 s2 XCHG + 100 PUSHINT // domain ppb ppc data _7=100 + CDATASIZE // domain ppb ppc _24 _25 _26 + s2 POP // domain ppb ppc refs bits + s0 s4 XCHG // bits ppb ppc refs domain + SBITS // bits ppb ppc refs _9 + 1 LSHIFT# // bits ppb ppc refs _11 + 192 PUSHINT // bits ppb ppc refs _11 _16 + ADD // bits ppb ppc refs _17 + s1 s4 XCHG // refs ppb ppc bits _17 + ADD // refs ppb ppc bits + s0 s3 XCHG // bits ppb ppc refs + 2 ADDCONST // bits ppb ppc _20 + MUL // bits ppb _21 + s0 s2 XCHG // _21 ppb bits + MUL // _21 _22 + ADD // _23 + }> + check_owner PROCREF:<{ + // cat_table owner_info src_wc src_addr strict + s0 s4 XCHG // strict owner_info src_wc src_addr cat_table + ISNULL // strict owner_info src_wc src_addr _5 + s4 s(-1) PUXC // strict owner_info src_wc src_addr strict _5 + AND // strict owner_info src_wc src_addr _6 + IFJMP:<{ // strict owner_info src_wc src_addr + 4 BLKDROP // + 4000281702 PUSHINT // _7=4000281702 + }> // strict owner_info src_wc src_addr + s2 PUSH // strict owner_info src_wc src_addr owner_info + ISNULL // strict owner_info src_wc src_addr _8 + IFJMP:<{ // strict owner_info src_wc src_addr + 3 BLKDROP // strict + 4000263474 PUSHINT // strict _9=4000263474 + AND // _10 + }> // strict owner_info src_wc src_addr + s3 POP // src_addr owner_info src_wc + 3798033458 PUSHINT // src_addr owner_info src_wc ERR_BAD2=3798033458 + s0 s2 XCHG // src_addr ERR_BAD2=3798033458 src_wc owner_info + CTOS // src_addr ERR_BAD2=3798033458 src_wc sown + DUP // src_addr ERR_BAD2=3798033458 src_wc sown sown + SBITS // src_addr ERR_BAD2=3798033458 src_wc sown _15 + 283 PUSHINT // src_addr ERR_BAD2=3798033458 src_wc sown _15 _22 + LESS // src_addr ERR_BAD2=3798033458 src_wc sown _23 + IFJMP:<{ // src_addr ERR_BAD2=3798033458 src_wc sown + s2 s3 XCHG + 3 BLKDROP // ERR_BAD2=3798033458 + }> // src_addr ERR_BAD2=3798033458 src_wc sown + 19 LDU // src_addr ERR_BAD2=3798033458 src_wc _24 sown + SWAP + 327324 PUSHINT // src_addr ERR_BAD2=3798033458 src_wc sown _24 _33 + NEQ // src_addr ERR_BAD2=3798033458 src_wc sown _34 + IFJMP:<{ // src_addr ERR_BAD2=3798033458 src_wc sown + s2 s3 XCHG + 3 BLKDROP // ERR_BAD2=3798033458 + }> // src_addr ERR_BAD2=3798033458 src_wc sown + 1 2 BLKDROP2 // src_addr src_wc sown + 8 LDI // src_addr src_wc _37 sown + 256 PLDU // src_addr src_wc owner_wc owner_addr + s0 s2 XCHG // src_addr owner_addr owner_wc src_wc + NEQ // src_addr owner_addr _42 + s0 s2 XCHG // _42 owner_addr src_addr + NEQ // _42 _43 + OR // _44 + IFJMP:<{ // + 4000282478 PUSHINT // _45=4000282478 + }> // + 0 PUSHINT // _46=0 + }> + perform_ctl_op PROCREF:<{ + // op src_wc src_addr in_msg + load_data INLINECALLDICT // op src_wc src_addr in_msg ctl domdata gc prices nhk lhk + s5 PUSH // op src_wc src_addr in_msg ctl domdata gc prices nhk lhk ctl + CTOS // op src_wc src_addr in_msg ctl domdata gc prices nhk lhk cs + 8 LDI // op src_wc src_addr in_msg ctl domdata gc prices nhk lhk _13 cs + s0 s10 XCHG // op cs src_addr in_msg ctl domdata gc prices nhk lhk _13 src_wc + NEQ // op cs src_addr in_msg ctl domdata gc prices nhk lhk _16 + s0 s9 XCHG // op _16 src_addr in_msg ctl domdata gc prices nhk lhk cs + 256 LDU // op _16 src_addr in_msg ctl domdata gc prices nhk lhk _83 _82 + DROP // op _16 src_addr in_msg ctl domdata gc prices nhk lhk _17 + s0 s8 XCHG2 // op _16 lhk in_msg ctl domdata gc prices nhk _17 src_addr + NEQ // op _16 lhk in_msg ctl domdata gc prices nhk _20 + s1 s8 XCHG // op nhk lhk in_msg ctl domdata gc prices _16 _20 + OR // op nhk lhk in_msg ctl domdata gc prices _21 + IFJMP:<{ // op nhk lhk in_msg ctl domdata gc prices + 8 BLKDROP // + 4000282478 PUSHINT // _22=4000282478 + send_error CALLDICT + }> // op nhk lhk in_msg ctl domdata gc prices + s0 s7 XCHG + 1130909810 PUSHINT // prices nhk lhk in_msg ctl domdata gc op _24=1130909810 + EQUAL // prices nhk lhk in_msg ctl domdata gc _25 + IFJMP:<{ // prices nhk lhk in_msg ctl domdata gc + s6 POP // gc nhk lhk in_msg ctl domdata + s0 s2 XCHG // gc nhk lhk domdata ctl in_msg + 32 LDU // gc nhk lhk domdata ctl _30 in_msg + LDGRAMS // gc nhk lhk domdata ctl _30 _33 in_msg + LDGRAMS // gc nhk lhk domdata ctl _30 _33 _35 in_msg + LDGRAMS // gc nhk lhk domdata ctl stdper ppr ppc ppb in_msg + ENDS + 4 TUPLE // gc nhk lhk domdata ctl _40 + s0 s4 s4 XCHG3 + s0 s5 XCHG + s0 s3 XCHG // ctl domdata gc _40 nhk lhk + store_data CALLDICT + 0 PUSHINT // _42=0 + send_ok CALLDICT + }> // prices nhk lhk in_msg ctl domdata gc + s4 POP // prices nhk gc in_msg ctl domdata + query_info GETGLOB + UNTRIPLE // prices nhk gc in_msg ctl domdata addr query_id op + DUP + 1128555884 PUSHINT // prices nhk gc in_msg ctl domdata addr query_id op op _48=1128555884 + EQUAL // prices nhk gc in_msg ctl domdata addr query_id op _49 + IFJMP:<{ // prices nhk gc in_msg ctl domdata addr query_id op + s5 POP // prices nhk gc op ctl domdata addr query_id + s2 PUSH // prices nhk gc op ctl domdata addr query_id domdata + ISNULL // prices nhk gc op ctl domdata addr query_id _50 + IFNOT:<{ // prices nhk gc op ctl domdata addr query_id + s3 s4 XCHG + s2 s3 XCHG + s5 s7 s6 XCHG3 + 1 PUSHINT + -1 PUSHINT // addr query_id op ctl domdata gc prices nhk _51=1 _52=-1 + housekeeping CALLDICT + -ROT // op addr query_id + }>ELSE<{ + s4 s7 XCHG + 5 2 BLKDROP2 // op addr query_id + }> + load_data INLINECALLDICT // op addr query_id _95 _96 _97 _98 _99 _100 + s4 s5 XCHG + 5 BLKDROP // op addr query_id domdata + ISNULL // op addr query_id _55 + IFNOTJMP:<{ // op addr query_id + 3 BLKDROP // + 4000605549 PUSHINT // _56=4000605549 + send_error CALLDICT + }> // op addr query_id + 4016791929 PUSHINT // op addr query_id _58=4016791929 + s0 s1 s3 XCHG3 + 0 PUSHINT + 160 PUSHINT // addr _58=4016791929 query_id op _59=0 _62 + send_message CALLDICT + }> // prices nhk gc in_msg ctl domdata addr query_id op + s3 POP + s3 POP + s4 POP + s4 POP + s4 POP // query_id op addr in_msg + s2 PUSH + 1415670629 PUSHINT // query_id op addr in_msg op _64=1415670629 + EQUAL // query_id op addr in_msg _65 + IFJMP:<{ // query_id op addr in_msg + LDGRAMS // query_id op addr _102 _101 + DROP // query_id op addr amount + s1 s3 XCHG + 4016791929 PUSHINT + s3 s3 XCHG2 + 64 PUSHINT // addr _69=4016791929 query_id op amount _70=64 + send_message CALLDICT + }> // query_id op addr in_msg + 4 BLKDROP // + 32 PUSHPOW2DEC // _72=4294967295 + send_error CALLDICT + }> + recv_internal PROC:<{ + // msg_value in_msg_cell in_msg + DUP // msg_value in_msg_cell in_msg in_msg + SBITS // msg_value in_msg_cell in_msg _3 + 32 LESSINT // msg_value in_msg_cell in_msg _5 + IFJMP:<{ // msg_value in_msg_cell in_msg + 3 BLKDROP // + }> // msg_value in_msg_cell in_msg + SWAP // msg_value in_msg in_msg_cell + CTOS // msg_value in_msg cs + 4 LDU // msg_value in_msg flags cs + SWAP + 1 PUSHINT // msg_value in_msg cs flags _12=1 + AND // msg_value in_msg cs _13 + IFJMP:<{ // msg_value in_msg cs + 3 BLKDROP // + }> // msg_value in_msg cs + LDMSGADDR // msg_value in_msg _327 _326 + DROP // msg_value in_msg s_addr + DUP // msg_value in_msg s_addr s_addr + REWRITESTDADDR // msg_value in_msg s_addr src_wc src_addr + s0 s3 XCHG // msg_value src_addr s_addr src_wc in_msg + 32 LDU // msg_value src_addr s_addr src_wc op in_msg + OVER // msg_value src_addr s_addr src_wc op in_msg op + IFNOTJMP:<{ // msg_value src_addr s_addr src_wc op in_msg + 6 BLKDROP // + }> // msg_value src_addr s_addr src_wc op in_msg + 0 PUSHINT // msg_value src_addr s_addr src_wc op in_msg query_id=0 + OVER // msg_value src_addr s_addr src_wc op in_msg query_id=0 in_msg + SBITS // msg_value src_addr s_addr src_wc op in_msg query_id=0 _26 + 63 GTINT // msg_value src_addr s_addr src_wc op in_msg query_id=0 _28 + IF:<{ // msg_value src_addr s_addr src_wc op in_msg query_id=0 + DROP // msg_value src_addr s_addr src_wc op in_msg + 64 LDU // msg_value src_addr s_addr src_wc op query_id in_msg + SWAP // msg_value src_addr s_addr src_wc op in_msg query_id + }> // msg_value src_addr s_addr src_wc op in_msg query_id + s4 s0 s2 XC2PU // msg_value src_addr in_msg src_wc op s_addr query_id op + TRIPLE + query_info SETGLOB + DUP + 31 PUSHPOW2 // msg_value src_addr in_msg src_wc op op _34 + AND // msg_value src_addr in_msg src_wc op _35 + IFJMP:<{ // msg_value src_addr in_msg src_wc op + 5 BLKDROP // + }> // msg_value src_addr in_msg src_wc op + DUP // msg_value src_addr in_msg src_wc op op + 24 RSHIFT# // msg_value src_addr in_msg src_wc op _37 + 67 EQINT // msg_value src_addr in_msg src_wc op _39 + IFJMP:<{ // msg_value src_addr in_msg src_wc op + s4 POP // op src_addr in_msg src_wc + -ROT // op src_wc src_addr in_msg + perform_ctl_op INLINECALLDICT + }> // msg_value src_addr in_msg src_wc op + DUP + 1919248228 PUSHINT // msg_value src_addr in_msg src_wc op op _42=1919248228 + EQUAL // msg_value src_addr in_msg src_wc op _45 + OVER + 1886547820 PUSHINT // msg_value src_addr in_msg src_wc op _45 op _46=1886547820 + EQUAL // msg_value src_addr in_msg src_wc op _45 _47 + 1 LSHIFT# // msg_value src_addr in_msg src_wc op _45 _49 + ADD // msg_value src_addr in_msg src_wc op _50 + OVER + 1970300004 PUSHINT // msg_value src_addr in_msg src_wc op _50 op _51=1970300004 + EQUAL // msg_value src_addr in_msg src_wc op _50 _52 + 2 LSHIFT# // msg_value src_addr in_msg src_wc op _50 _54 + ADD // msg_value src_addr in_msg src_wc op _55 + SWAP + 1735354211 PUSHINT // msg_value src_addr in_msg src_wc _55 op _56=1735354211 + EQUAL // msg_value src_addr in_msg src_wc _55 _57 + 3 LSHIFT# // msg_value src_addr in_msg src_wc _55 _59 + ADD // msg_value src_addr in_msg src_wc qt + DUP // msg_value src_addr in_msg src_wc qt qt + IFNOTJMP:<{ // msg_value src_addr in_msg src_wc qt + 5 BLKDROP // + 32 PUSHPOW2DEC // _61=4294967295 + send_error CALLDICT + }> // msg_value src_addr in_msg src_wc qt + NEGATE // msg_value src_addr in_msg src_wc qt + load_data INLINECALLDICT // msg_value src_addr in_msg src_wc qt ctl domdata gc prices nhk lhk + s6 PUSH // msg_value src_addr in_msg src_wc qt ctl domdata gc prices nhk lhk qt + 8 EQINT // msg_value src_addr in_msg src_wc qt ctl domdata gc prices nhk lhk _72 + IFJMP:<{ // msg_value src_addr in_msg src_wc qt ctl domdata gc prices nhk lhk + DROP + s5 POP + s5 POP + s6 POP + s6 POP // domdata gc in_msg prices nhk ctl + s0 s3 XCHG // domdata gc ctl prices nhk in_msg + 32 LDI // domdata gc ctl prices nhk _341 _340 + DROP // domdata gc ctl prices nhk max_steps + s3 s5 XCHG + s3 s4 XCHG + 1 PUSHINT + SWAP // ctl domdata gc prices nhk _77=1 max_steps + housekeeping CALLDICT + 4016791929 PUSHINT // _79=4016791929 + send_error CALLDICT + }> // msg_value src_addr in_msg src_wc qt ctl domdata gc prices nhk lhk + s0 s8 XCHG // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg + LDOPTREF // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk domain_cell in_msg + OVER // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk domain_cell in_msg domain_cell + ISNULL // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk domain_cell in_msg _88 + IF:<{ // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk domain_cell in_msg + NIP // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg + 6 LDU // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk bytes in_msg + OVER // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk bytes in_msg bytes + 0 EQINT // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk bytes in_msg fail + s0 s2 XCHG // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk fail in_msg bytes + 3 LSHIFT# // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk fail in_msg _97 + LDSLICEX // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk fail domain in_msg + }>ELSE<{ // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk domain_cell in_msg + SWAP // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain_cell + CTOS // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain + DUP // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain domain + SBITREFS // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain bits refs + SWAP // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain refs bits + -8 ADDCONST // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain refs _104 + -121 PUSHINT // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain refs _104 _107 + AND // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain refs _108 + OR // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain fail + s0 s2 XCHG // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk fail domain in_msg + }> + s2 PUSH // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk fail domain in_msg fail + IFNOT:<{ // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk fail domain in_msg + s2 POP // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain + DUP + 8 PUSHINT // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain domain _110=8 + SDCUTLAST // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain _111 + 8 PLDU // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain fail + s0 s2 XCHG // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk fail domain in_msg + }> // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk fail domain in_msg + s0 s2 XCHG // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain fail + IFJMP:<{ // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain + 12 BLKDROP // + 4000275504 PUSHINT // _114=4000275504 + send_error CALLDICT + }> // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain + NOW // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n + PUSHNULL // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n _120 + DUP // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info + 0 PUSHINT // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info _124=0 + s0 s0 s4 PUSH3 // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info key=0 zeros=0 exp=0 tail + DUP // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info key=0 zeros=0 exp=0 tail tail + SBITS // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info key=0 zeros=0 exp=0 tail _126 + 3 RSHIFTC# // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info key=0 zeros=0 exp=0 tail _128 + REPEAT:<{ // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info key zeros exp tail + PUSHNULL + s6 POP // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info key zeros exp tail + 8 LDU // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info key zeros exp _131 tail + SWAP // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info key zeros exp tail _131 + 0 EQINT // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info key zeros exp tail z + s3 s3 XCPU // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info key z exp tail zeros z + SUB // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info key z exp tail zeros + s0 s3 XCHG // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info key zeros exp tail z + IF:<{ // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info key zeros exp tail + s3 POP // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info tail zeros exp + s2 PUSH // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info tail zeros exp tail + SBITS // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info tail zeros exp _137 + s7 s(-1) PUXC // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info tail zeros exp domain _137 + SDSKIPLAST // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info tail zeros exp _138 + SHA256U // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info tail zeros exp _139 + 32 RSHIFT# // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info tail zeros exp key + s0 s12 PUSH2 + 224 PUSHINT // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info tail zeros exp key key domdata _146 + DICTUGET + NULLSWAPIFNOT // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info tail zeros exp key val found? + IF:<{ // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info tail zeros exp key val + 1 2 BLKDROP2 // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info tail zeros key val + 32 LDU // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info tail zeros key exp val + s1 s7 PUSH2 // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info tail zeros key exp val exp n + GEQ // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info tail zeros key exp val _151 + IF:<{ // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info tail zeros key exp val + LDREF // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info tail zeros key exp cat_table val + ENDS + 0 PUSHINT // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info tail zeros key exp cat_table _158=0 + SWAP + 8 PUSHPOW2 // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info tail zeros key exp _158=0 cat_table _159=256 + DICTUGETREF // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info tail zeros key exp cown ok + IF:<{ // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info tail zeros key exp cown + s5 POP // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info tail zeros key exp + }>ELSE<{ + DROP // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info tail zeros key exp + }> + }>ELSE<{ + DROP // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info tail zeros key exp + }> + SWAP // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info tail zeros exp key + }>ELSE<{ + DROP // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info tail zeros exp key + }> + s0 s3 XCHG // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info key zeros exp tail + }> // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info key zeros exp tail + }> + DROP // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info key zeros exp + SWAP // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info key exp zeros + 4 GTINT // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info key exp _162 + IFJMP:<{ // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info key exp + 15 BLKDROP + 2DROP // + 4017511472 PUSHINT // _163=4017511472 + send_error CALLDICT + }> // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info key exp + s12 PUSH // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info key exp qt + 1 NEQINT // msg_value src_addr lhk src_wc qt ctl domdata gc prices nhk in_msg domain n cat_table owner_info key exp _167 + s4 PUSH + s0 s4 XCHG + s15 s1 s3 XCHG3 + s0 17 s() XCHG + SWAP // msg_value key lhk exp qt ctl domdata gc prices nhk in_msg domain n cat_table cat_table owner_info src_wc src_addr _167 + check_owner INLINECALLDICT // msg_value key lhk exp qt ctl domdata gc prices nhk in_msg domain n cat_table err + DUP // msg_value key lhk exp qt ctl domdata gc prices nhk in_msg domain n cat_table err err + IFJMP:<{ // msg_value key lhk exp qt ctl domdata gc prices nhk in_msg domain n cat_table err + 14 1 BLKDROP2 // err + send_error CALLDICT + }> // msg_value key lhk exp qt ctl domdata gc prices nhk in_msg domain n cat_table err + DROP // msg_value key lhk exp qt ctl domdata gc prices nhk in_msg domain n cat_table + s9 PUSH // msg_value key lhk exp qt ctl domdata gc prices nhk in_msg domain n cat_table qt + 2 NEQINT // msg_value key lhk exp qt ctl domdata gc prices nhk in_msg domain n cat_table _173 + IF:<{ // msg_value key lhk exp qt ctl domdata gc prices nhk in_msg domain n cat_table + s0 s3 XCHG // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table domain n in_msg + LDREF // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table domain n _361 _360 + DROP // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table domain n data + DUP // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table domain n data data + DICTEMPTY // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table domain n data _176 + IFNOT:<{ // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table domain n data + 0 PUSHINT // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table domain n data _179=0 + OVER + 8 PUSHPOW2 // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table domain n data _179=0 data _180=256 + DICTUGETREF // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table domain n data oinfo ok + IF:<{ // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table domain n data oinfo + CTOS // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table domain n data cs + DUP // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table domain n data cs cs + SBITS // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table domain n data cs _185 + 283 PUSHINT // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table domain n data cs _185 _192 + GEQ // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table domain n data cs _193 + 31 THROWIFNOT + 19 PLDU // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table domain n data _197 + 327324 PUSHINT // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table domain n data _197 _202 + EQUAL // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table domain n data _203 + 31 THROWIFNOT + }>ELSE<{ + DROP // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table domain n data + }> + DUP + 8 PUSHPOW2 // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table domain n data data _208=256 + DICTUMIN + NULLSWAPIFNOT2 // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table domain n data _365 _364 _366 + 2 1 BLKDROP2 // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table domain n data minok + OVER + 8 PUSHPOW2 // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table domain n data minok data _213=256 + DICTUMAX + NULLSWAPIFNOT2 // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table domain n data minok _368 _367 _369 + 2 1 BLKDROP2 // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table domain n data minok maxok + AND // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table domain n data _216 + 31 THROWIFNOT + }> // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table domain n data + }>ELSE<{ // msg_value key lhk exp qt ctl domdata gc prices nhk in_msg domain n cat_table + s3 POP // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table domain n + s2 PUSH // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table domain n data + }> + s5 PUSH // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table domain n data prices + 4 UNTUPLE // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table domain n data stdper ppr ppc ppb + s3 PUSH // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table domain n data stdper ppr ppc ppb stdper + IFNOTJMP:<{ // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table domain n data stdper ppr ppc ppb + 15 BLKDROP + 3 BLKDROP // + 3545187910 PUSHINT // _223=3545187910 + send_error CALLDICT + }> // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table domain n data stdper ppr ppc ppb + s4 PUSH + s3 s7 XCHG + -ROT // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table ppr n data stdper domain data ppc ppb + calcprice_internal INLINECALLDICT // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table ppr n data stdper _226 + s11 PUSH // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table ppr n data stdper _226 qt + 4 NEQINT // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table ppr n data stdper _226 _228 + s1 s5 XCHG // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table _226 n data stdper ppr _228 + AND // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table _226 n data stdper _229 + s1 s4 XCHG // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table stdper n data _226 _229 + ADD // msg_value key lhk exp qt ctl domdata gc prices nhk cat_table stdper n data price + s0 s14 XCHG + 30 PUSHPOW2 // price key lhk exp qt ctl domdata gc prices nhk cat_table stdper n data msg_value _233 + SUB // price key lhk exp qt ctl domdata gc prices nhk cat_table stdper n data _234 + s14 PUSH // price key lhk exp qt ctl domdata gc prices nhk cat_table stdper n data _234 price + LESS // price key lhk exp qt ctl domdata gc prices nhk cat_table stdper n data _235 + IFJMP:<{ // price key lhk exp qt ctl domdata gc prices nhk cat_table stdper n data + 14 BLKDROP // + 3883023472 PUSHINT // _236=3883023472 + send_error CALLDICT + }> // price key lhk exp qt ctl domdata gc prices nhk cat_table stdper n data + s9 PUSH // price key lhk exp qt ctl domdata gc prices nhk cat_table stdper n data qt + 2 EQINT // price key lhk exp qt ctl domdata gc prices nhk cat_table stdper n data _243 + IFJMP:<{ // price key lhk exp qt ctl domdata gc prices nhk cat_table stdper n data + s3 POP + s8 POP // price key lhk exp n ctl domdata gc prices nhk data stdper + s7 s7 XCPU // price key lhk exp stdper ctl domdata gc prices nhk data n stdper + ADD // price key lhk exp stdper ctl domdata gc prices nhk data _244 + s8 s(-1) PUXC // price key lhk exp stdper ctl domdata gc prices nhk data exp _244 + GREATER // price key lhk exp stdper ctl domdata gc prices nhk data _245 + IFJMP:<{ // price key lhk exp stdper ctl domdata gc prices nhk data + 11 BLKDROP // + 4083511919 PUSHINT // _246=4083511919 + send_error CALLDICT + }> // price key lhk exp stdper ctl domdata gc prices nhk data + s7 s6 PUSH2 // price key lhk exp stdper ctl domdata gc prices nhk data exp stdper + ADD // price key lhk exp stdper ctl domdata gc prices nhk data _249 + NEWC // price key lhk exp stdper ctl domdata gc prices nhk data _249 _250 + 32 STU // price key lhk exp stdper ctl domdata gc prices nhk data _252 + STREF // price key lhk exp stdper ctl domdata gc prices nhk _253 + s0 s9 s4 XCPUXC + 224 PUSHINT // price key lhk exp stdper ctl nhk gc prices _253 key domdata _256 + DICTUSETB // price key lhk exp stdper ctl nhk gc prices domdata + s0 s6 XCHG // price key lhk domdata stdper ctl nhk gc prices exp + 224 LSHIFT# // price key lhk domdata stdper ctl nhk gc prices _262 + s0 s8 XCHG2 // price prices lhk domdata stdper ctl nhk gc _262 key + ADD // price prices lhk domdata stdper ctl nhk gc gckeyO + s0 s4 XCHG // price prices lhk domdata gckeyO ctl nhk gc stdper + 224 LSHIFT# // price prices lhk domdata gckeyO ctl nhk gc _268 + s4 s(-1) PUXC // price prices lhk domdata gckeyO ctl nhk gc gckeyO _268 + ADD // price prices lhk domdata gckeyO ctl nhk gc gckeyN + s4 s4 XCHG2 + 8 PUSHPOW2 // price prices lhk domdata gckeyN ctl nhk gckeyO gc _271=256 + DICTUDEL // price prices lhk domdata gckeyN ctl nhk _376 _377 + DROP // price prices lhk domdata gckeyN ctl nhk gc + NEWC // price prices lhk domdata gckeyN ctl nhk gc _274 + s0 s4 s4 XCHG3 + 8 PUSHPOW2 // price prices lhk domdata nhk ctl _274 gckeyN gc _275=256 + DICTUSETB // price prices lhk domdata nhk ctl gc + s0 s3 XCHG + s5 s5 s4 XCHG3 + 1 PUSHINT // price ctl domdata gc prices nhk lhk _277=1 + housekeeping CALLDICT + send_ok CALLDICT + }> // price key lhk exp qt ctl domdata gc prices nhk cat_table stdper n data + s9 PUSH // price key lhk exp qt ctl domdata gc prices nhk cat_table stdper n data qt + 1 EQINT // price key lhk exp qt ctl domdata gc prices nhk cat_table stdper n data _281 + IFJMP:<{ // price key lhk exp qt ctl domdata gc prices nhk cat_table stdper n data + s9 POP + s9 POP // price key lhk n data ctl domdata gc prices nhk cat_table stdper + SWAP // price key lhk n data ctl domdata gc prices nhk stdper cat_table + ISNULL // price key lhk n data ctl domdata gc prices nhk stdper _282 + IFNOTJMP:<{ // price key lhk n data ctl domdata gc prices nhk stdper + 11 BLKDROP // + 3781980773 PUSHINT // _283=3781980773 + send_error CALLDICT + }> // price key lhk n data ctl domdata gc prices nhk stdper + s1 s7 XCHG // price key lhk nhk data ctl domdata gc prices n stdper + ADD // price key lhk nhk data ctl domdata gc prices expires_at + DUP + NEWC // price key lhk nhk data ctl domdata gc prices expires_at expires_at _288 + 32 STU // price key lhk nhk data ctl domdata gc prices expires_at _290 + s1 s6 XCHG // price key lhk nhk expires_at ctl domdata gc prices data _290 + STREF // price key lhk nhk expires_at ctl domdata gc prices _291 + s0 s8 s3 XCPUXC + 224 PUSHINT // price key lhk nhk expires_at ctl prices gc _291 key domdata _294 + DICTUSETB // price key lhk nhk expires_at ctl prices gc domdata + s4 PUSH // price key lhk nhk expires_at ctl prices gc domdata expires_at + 224 LSHIFT# // price key lhk nhk expires_at ctl prices gc domdata _300 + s0 s8 XCHG2 // price domdata lhk nhk expires_at ctl prices gc _300 key + OR // price domdata lhk nhk expires_at ctl prices gc gckey + NEWC // price domdata lhk nhk expires_at ctl prices gc gckey _303 + s0 s2 XCHG + 8 PUSHPOW2 // price domdata lhk nhk expires_at ctl prices _303 gckey gc _304=256 + DICTUSETB // price domdata lhk nhk expires_at ctl prices gc + s4 s3 XCHG2 // price domdata lhk prices gc ctl nhk expires_at + MIN // price domdata lhk prices gc ctl _306 + s1 s5 XCHG + s3 s0 s4 XCHG3 + 1 PUSHINT // price ctl domdata gc prices _306 lhk _307=1 + housekeeping CALLDICT + send_ok CALLDICT + }> // price key lhk exp qt ctl domdata gc prices nhk cat_table stdper n data + 3 1 BLKDROP2 // price key lhk exp qt ctl domdata gc prices nhk data + s0 s6 XCHG // price key lhk exp data ctl domdata gc prices nhk qt + 4 EQINT // price key lhk exp data ctl domdata gc prices nhk _311 + IFJMP:<{ // price key lhk exp data ctl domdata gc prices nhk + s0 s6 XCHG + NEWC // price key lhk nhk data ctl domdata gc prices exp _313 + 32 STU // price key lhk nhk data ctl domdata gc prices _315 + s1 s5 XCHG // price key lhk nhk prices ctl domdata gc data _315 + STREF // price key lhk nhk prices ctl domdata gc _316 + s7 s2 XCHG2 + 224 PUSHINT // price gc lhk nhk prices ctl _316 key domdata _319 + DICTUSETB // price gc lhk nhk prices ctl domdata + s5 s4 XCHG2 + s1 s3 XCHG + 1 PUSHINT // price ctl domdata gc prices nhk lhk _321=1 + housekeeping CALLDICT + send_ok CALLDICT + }> // price key lhk exp data ctl domdata gc prices nhk + 10 BLKDROP // + }> + recv_external PROC:<{ + // in_msg + DROP // + load_data INLINECALLDICT // _12 _13 _14 _15 _16 _17 + NIP // ctl dd gc prices lhk + IFNOTJMP:<{ // ctl dd gc prices + ACCEPT + 32 PUSHPOW2DEC // ctl dd gc prices _9=4294967295 + NOW // ctl dd gc prices _9=4294967295 _10 + store_data CALLDICT + }> // ctl dd gc prices + 4 BLKDROP // + }> + dnsdictlookup PROCREF:<{ + // domain nowtime + OVER // domain nowtime domain + SBITREFS // domain nowtime bits refs + OVER + 7 PUSHINT // domain nowtime bits refs bits _6=7 + AND // domain nowtime bits refs _7 + OR // domain nowtime bits _8 + 30 THROWIF + DUP // domain nowtime bits bits + IFNOT:<{ // domain nowtime bits + 30 THROW + }> // domain nowtime bits + s2 PUSH + 8 PUSHINT // domain nowtime bits domain _13=8 + SDCUTLAST // domain nowtime bits _14 + 8 PLDU // domain nowtime bits domain_last_byte + IF:<{ // domain nowtime bits + 0 PUSHINT // domain nowtime bits _17=0 + NEWC // domain nowtime bits _17=0 _18 + s0 s4 XCHG2 // _17=0 nowtime bits _18 domain + STSLICER // _17=0 nowtime bits _19 + s1 s3 XCHG // bits nowtime _17=0 _19 + 8 STU // bits nowtime _21 + ENDC // bits nowtime _22 + CTOS // bits nowtime domain + s0 s2 XCHG // domain nowtime bits + 8 ADDCONST // domain nowtime bits + }> // domain nowtime bits + DUP // domain nowtime bits bits + 8 EQINT // domain nowtime bits _27 + IFJMP:<{ // domain nowtime bits + 3 BLKDROP // + 0 PUSHINT // _28=0 + PUSHNULL // _28=0 _29 + 8 PUSHINT // _28=0 _29 _30=8 + PUSHNULL // _28=0 _29 _30=8 _31 + }> // domain nowtime bits + s2 PUSH // domain nowtime bits domain + 8 PLDU // domain nowtime bits domain_first_byte + 0 EQINT // domain nowtime bits _36 + IF:<{ // domain nowtime bits + s0 s2 XCHG // bits nowtime domain + 8 LDU // bits nowtime _95 _94 + NIP // bits nowtime domain + s0 s2 XCHG // domain nowtime bits + -8 ADDCONST // domain nowtime bits + }> // domain nowtime bits + c4 PUSH // domain nowtime bits _43 + CTOS // domain nowtime bits ds + LDREF // domain nowtime bits _97 _96 + NIP // domain nowtime bits ds + LDDICT // domain nowtime bits _99 _98 + DROP // domain nowtime bits root + PUSHNULL // domain nowtime bits root val + -1 PUSHINT // domain nowtime bits root val tail_bits=-1 + s5 PUSH // domain nowtime bits root val tail_bits=-1 tail + s0 s4 XCHG // domain nowtime tail root val tail_bits=-1 bits + 3 RSHIFT# // domain nowtime tail root val tail_bits=-1 _57 + REPEAT:<{ // domain nowtime tail root val tail_bits + s0 s3 XCHG // domain nowtime tail_bits root val tail + 8 LDU // domain nowtime tail_bits root val _58 tail + SWAP // domain nowtime tail_bits root val tail _58 + 0 EQINT // domain nowtime tail_bits root val tail _62 + IF:<{ // domain nowtime tail_bits root val tail + DUP // domain nowtime tail_bits root val tail tail + SBITS // domain nowtime tail_bits root val tail _64 + s6 s(-1) PUXC // domain nowtime tail_bits root val tail domain _64 + SDSKIPLAST // domain nowtime tail_bits root val tail _65 + SHA256U // domain nowtime tail_bits root val tail _66 + 32 RSHIFT# // domain nowtime tail_bits root val tail key + s3 PUSH + 224 PUSHINT // domain nowtime tail_bits root val tail key root _73 + DICTUGET + NULLSWAPIFNOT // domain nowtime tail_bits root val tail v found? + IF:<{ // domain nowtime tail_bits root val tail v + DUP // domain nowtime tail_bits root val tail v v + 32 PLDU // domain nowtime tail_bits root val tail v _76 + s6 PUSH // domain nowtime tail_bits root val tail v _76 nowtime + GEQ // domain nowtime tail_bits root val tail v _77 + IF:<{ // domain nowtime tail_bits root val tail v + s2 POP + s3 POP // domain nowtime tail root val + s2 PUSH // domain nowtime tail root val tail + SBITS // domain nowtime tail root val tail_bits + s0 s3 XCHG // domain nowtime tail_bits root val tail + }>ELSE<{ + DROP // domain nowtime tail_bits root val tail + }> + }>ELSE<{ + DROP // domain nowtime tail_bits root val tail + }> + }> // domain nowtime tail_bits root val tail + s0 s3 XCHG // domain nowtime tail root val tail_bits + }> + 2 2 BLKDROP2 + s2 POP // domain tail_bits val + DUP // domain tail_bits val val + ISNULL // domain tail_bits val _79 + IFJMP:<{ // domain tail_bits val + 3 BLKDROP // + 0 PUSHINT // _80=0 + PUSHNULL // _80=0 _81 + OVER // _80=0 _81 _82=0 + PUSHNULL // _80=0 _81 _82=0 _83 + }> // domain tail_bits val + 32 LDU // domain tail_bits _84 val + LDREF // domain tail_bits _84 _107 _106 + DROP // domain tail_bits _84 _87 + s2 PUSH // domain tail_bits _84 _87 tail_bits + 0 EQINT // domain tail_bits _84 _87 _90 + s4 s3 XCHG2 // _87 _90 _84 domain tail_bits + SDSKIPLAST // _87 _90 _84 _91 + s3 s3 s0 XCHG3 // _84 _87 _90 _91 + }> + dnsresolve PROC:<{ + // domain category + SWAP + NOW // category domain _6 + dnsdictlookup INLINECALLDICT // category exp cat_table exact? pfx + s0 s3 XCHG // category pfx cat_table exact? exp + IFNOTJMP:<{ // category pfx cat_table exact? + 3 1 BLKDROP2 // exact? + PUSHNULL // exact? _8 + }> // category pfx cat_table exact? + IFNOT:<{ // category pfx cat_table + 11732114750494247458678882651681748623800183221773167493832867265755123357695 PUSHINT + s3 POP // category=11732114750494247458678882651681748623800183221773167493832867265755123357695 pfx cat_table + }> // category pfx cat_table + SWAP // category cat_table pfx + SBITS // category cat_table pfx_bits + s2 PUSH // category cat_table pfx_bits category + IFJMP:<{ // category cat_table pfx_bits + -ROT + 8 PUSHPOW2 // pfx_bits category cat_table _13=256 + DICTUGETOPTREF // pfx_bits cat_found + }> // category cat_table pfx_bits + s2 POP // pfx_bits cat_table + }> + getexpirationx PROCINLINE:<{ + // domain nowtime + dnsdictlookup INLINECALLDICT // _7 _8 _9 _10 + 3 BLKDROP // exp + }> + getexpiration PROC:<{ + // domain + NOW // domain _1 + getexpirationx INLINECALLDICT // _2 + }> + getstdperiod PROC:<{ + // + load_prices INLINECALLDICT // _5 _6 _7 _8 + 3 BLKDROP // stdper + }> + getppr PROC:<{ + // + load_prices INLINECALLDICT // _5 _6 _7 _8 + s2 s3 XCHG + 3 BLKDROP // ppr + }> + getppc PROC:<{ + // + load_prices INLINECALLDICT // _5 _6 _7 _8 + s1 s3 XCHG + 3 BLKDROP // ppc + }> + getppb PROC:<{ + // + load_prices INLINECALLDICT // _5 _6 _7 _8 + 3 1 BLKDROP2 // ppb + }> + calcprice PROC:<{ + // domain val + load_prices INLINECALLDICT // domain val _8 _9 _10 _11 + 2 2 BLKDROP2 // domain val ppc ppb + calcprice_internal INLINECALLDICT // _7 + }> + calcregprice PROC:<{ + // domain val + load_prices INLINECALLDICT // domain val _9 _10 _11 _12 + s3 POP // domain val ppb ppr ppc + s3 s4 XCHG + s4 s0 s4 XCHG3 // ppr domain val ppc ppb + calcprice_internal INLINECALLDICT // ppr _7 + ADD // _8 + }> +}END>c diff --git a/build/dns-utils.cell.fif b/build/dns-utils.cell.fif new file mode 100644 index 0000000..e6a1112 --- /dev/null +++ b/build/dns-utils.cell.fif @@ -0,0 +1,208 @@ +"Asm.fif" include +"Asm.fif" include +// automatically generated from `contracts/dns-utils.fc` incl:`contracts/stdlib.fc` +PROGRAM{ + DECLPROC zero_address + DECLPROC get_top_domain_bits + DECLPROC read_domain_from_comment + DECLPROC check_domain_string + DECLPROC get_min_price_config + DECLPROC get_min_price + zero_address PROC:<{ + // + 0 PUSHINT // _0=0 + NEWC // _0=0 _1 + 2 STU // _3 + ENDC // _4 + CTOS // _5 + }> + get_top_domain_bits PROC:<{ + // domain + 0 PUSHINT // domain i=0 + UNTIL:<{ + SWAP // i domain + 8 LDU // i char domain + SWAP // i domain char + 0 EQINT // i domain need_break + DUP // i domain need_break need_break + NOT // i domain need_break _11 + IF:<{ // i domain need_break + s0 s2 XCHG // need_break domain i + 8 ADDCONST // need_break domain i + s0 s2 XCHG // i domain need_break + }> // i domain need_break + s1 s2 XCHG // domain i need_break + }> // domain i + NIP // i + DUP // i i + 0 EQINT // i _16 + 201 THROWIF + }> + read_domain_from_comment PROC:<{ + // in_msg_body + NEWC // in_msg_body result + UNTIL:<{ + OVER // in_msg_body result in_msg_body + SBITS // in_msg_body result _6 + s1 s2 XCHG // result in_msg_body _6 + LDSLICEX // result _5 in_msg_body + -ROT // in_msg_body result _5 + STSLICER // in_msg_body result + OVER // in_msg_body result in_msg_body + SREFS // in_msg_body result refs_len + DUP // in_msg_body result refs_len refs_len + 0 EQINT // in_msg_body result refs_len need_break + DUP // in_msg_body result refs_len need_break need_break + NOT // in_msg_body result refs_len need_break _13 + IF:<{ // in_msg_body result refs_len need_break + SWAP // in_msg_body result need_break refs_len + 1 EQINT // in_msg_body result need_break _16 + 202 THROWIFNOT + s0 s2 XCHG // need_break result in_msg_body + LDREF // need_break result _26 _25 + DROP // need_break result _18 + CTOS // need_break result in_msg_body + s0 s2 XCHG // in_msg_body result need_break + }>ELSE<{ + NIP // in_msg_body result need_break + }> + }> // in_msg_body result + NIP // result + ENDC // _21 + CTOS // _22 + }> + check_domain_string PROC:<{ + // domain + 0 PUSHINT // domain i=0 + OVER // domain i=0 domain + SBITS // domain i=0 len + UNTIL:<{ + 2DUP // domain i len i len + EQUAL // domain i len need_break + DUP // domain i len need_break need_break + NOT // domain i len need_break _8 + IF:<{ // domain i len need_break + DROP // domain i len + s0 s2 XCHG // len i domain + 8 LDU // len i char domain + OVER // len i char domain char + 45 EQINT // len i char domain is_hyphen + s3 PUSH // len i char domain is_hyphen i + 0 GTINT // len i char domain is_hyphen _18 + AND // len i char domain _19 + s4 PUSH // len i char domain _19 len + -8 ADDCONST // len i char domain _19 _21 + s4 s(-1) PUXC // len i char domain _19 i _21 + LESS // len i char domain _19 _22 + AND // len i char domain _23 + s2 PUSH // len i char domain _23 char + 47 GTINT // len i char domain _23 _25 + s3 PUSH // len i char domain _23 _25 char + 58 LESSINT // len i char domain _23 _25 _27 + AND // len i char domain _23 _28 + OR // len i char domain _29 + s2 PUSH // len i char domain _29 char + 96 GTINT // len i char domain _29 _31 + s0 s3 XCHG // len i _31 domain _29 char + 123 LESSINT // len i _31 domain _29 _33 + s1 s3 XCHG // len i _29 domain _31 _33 + AND // len i _29 domain _34 + s1 s2 XCHG // len i domain _29 _34 + OR // len i domain valid_char + NOT // len i domain need_break + DUP // len i domain need_break need_break + NOT // len i domain need_break _37 + IF:<{ // len i domain need_break + s0 s2 XCHG // len need_break domain i + 8 ADDCONST // len need_break domain i + s0 s2 XCHG // len i domain need_break + }> // len i domain need_break + s1 s3 XCHG // domain i len need_break + }> // domain i len need_break + }> // domain i len + 1 2 BLKDROP2 // i len + EQUAL // _40 + }> + get_min_price_config PROC:<{ + // domain_char_count + DUP // domain_char_count domain_char_count + 4 EQINT // domain_char_count _2 + IFJMP:<{ // domain_char_count + DROP // + 1000 PUSHINT // _3=1000 + 100 PUSHINT // _3=1000 _4=100 + }> // domain_char_count + DUP // domain_char_count domain_char_count + 5 EQINT // domain_char_count _6 + IFJMP:<{ // domain_char_count + DROP // + 500 PUSHINT // _7=500 + 50 PUSHINT // _7=500 _8=50 + }> // domain_char_count + DUP // domain_char_count domain_char_count + 6 EQINT // domain_char_count _10 + IFJMP:<{ // domain_char_count + DROP // + 400 PUSHINT // _11=400 + 40 PUSHINT // _11=400 _12=40 + }> // domain_char_count + DUP // domain_char_count domain_char_count + 7 EQINT // domain_char_count _14 + IFJMP:<{ // domain_char_count + DROP // + 300 PUSHINT // _15=300 + 30 PUSHINT // _15=300 _16=30 + }> // domain_char_count + DUP // domain_char_count domain_char_count + 8 EQINT // domain_char_count _18 + IFJMP:<{ // domain_char_count + DROP // + 200 PUSHINT // _19=200 + 20 PUSHINT // _19=200 _20=20 + }> // domain_char_count + DUP // domain_char_count domain_char_count + 9 EQINT // domain_char_count _22 + IFJMP:<{ // domain_char_count + DROP // + 100 PUSHINT // _23=100 + 10 PUSHINT // _23=100 _24=10 + }> // domain_char_count + 10 EQINT // _26 + IFJMP:<{ // + 50 PUSHINT // _27=50 + 5 PUSHINT // _27=50 _28=5 + }> // + 10 PUSHINT // _29=10 + 1 PUSHINT // _29=10 _30=1 + }> + get_min_price PROC:<{ + // domain_bits_length now_time + SWAP // now_time domain_bits_length + 3 RSHIFT# // now_time _5 + get_min_price_config CALLDICT // now_time start_min_price end_min_price + SWAP + 1000000000 PUSHINT // now_time end_min_price start_min_price _7=1000000000 + MUL // now_time end_min_price start_min_price + SWAP + 1000000000 PUSHINT // now_time start_min_price end_min_price _9=1000000000 + MUL // now_time start_min_price end_min_price + s0 s2 XCHG + 1659171600 PUSHINT // end_min_price start_min_price now_time _12=1659171600 + SUB // end_min_price start_min_price seconds + 2592000 PUSHINT // end_min_price start_min_price seconds _15=2592000 + DIV // end_min_price start_min_price months + DUP // end_min_price start_min_price months months + 21 GTINT // end_min_price start_min_price months _18 + IFJMP:<{ // end_min_price start_min_price months + 2DROP // end_min_price + }> // end_min_price start_min_price months + 1 2 BLKDROP2 // start_min_price months + REPEAT:<{ // start_min_price + 90 MULCONST // _20 + 100 PUSHINT // _20 _21=100 + DIV // start_min_price + }> + }> +}END>c + +boc>B "build/dns-utils.cell" B>file \ No newline at end of file diff --git a/build/dns-utils.fif b/build/dns-utils.fif new file mode 100644 index 0000000..22150e5 --- /dev/null +++ b/build/dns-utils.fif @@ -0,0 +1,205 @@ +"Asm.fif" include +// automatically generated from `contracts/dns-utils.fc` incl:`contracts/stdlib.fc` +PROGRAM{ + DECLPROC zero_address + DECLPROC get_top_domain_bits + DECLPROC read_domain_from_comment + DECLPROC check_domain_string + DECLPROC get_min_price_config + DECLPROC get_min_price + zero_address PROC:<{ + // + 0 PUSHINT // _0=0 + NEWC // _0=0 _1 + 2 STU // _3 + ENDC // _4 + CTOS // _5 + }> + get_top_domain_bits PROC:<{ + // domain + 0 PUSHINT // domain i=0 + UNTIL:<{ + SWAP // i domain + 8 LDU // i char domain + SWAP // i domain char + 0 EQINT // i domain need_break + DUP // i domain need_break need_break + NOT // i domain need_break _11 + IF:<{ // i domain need_break + s0 s2 XCHG // need_break domain i + 8 ADDCONST // need_break domain i + s0 s2 XCHG // i domain need_break + }> // i domain need_break + s1 s2 XCHG // domain i need_break + }> // domain i + NIP // i + DUP // i i + 0 EQINT // i _16 + 201 THROWIF + }> + read_domain_from_comment PROC:<{ + // in_msg_body + NEWC // in_msg_body result + UNTIL:<{ + OVER // in_msg_body result in_msg_body + SBITS // in_msg_body result _6 + s1 s2 XCHG // result in_msg_body _6 + LDSLICEX // result _5 in_msg_body + -ROT // in_msg_body result _5 + STSLICER // in_msg_body result + OVER // in_msg_body result in_msg_body + SREFS // in_msg_body result refs_len + DUP // in_msg_body result refs_len refs_len + 0 EQINT // in_msg_body result refs_len need_break + DUP // in_msg_body result refs_len need_break need_break + NOT // in_msg_body result refs_len need_break _13 + IF:<{ // in_msg_body result refs_len need_break + SWAP // in_msg_body result need_break refs_len + 1 EQINT // in_msg_body result need_break _16 + 202 THROWIFNOT + s0 s2 XCHG // need_break result in_msg_body + LDREF // need_break result _26 _25 + DROP // need_break result _18 + CTOS // need_break result in_msg_body + s0 s2 XCHG // in_msg_body result need_break + }>ELSE<{ + NIP // in_msg_body result need_break + }> + }> // in_msg_body result + NIP // result + ENDC // _21 + CTOS // _22 + }> + check_domain_string PROC:<{ + // domain + 0 PUSHINT // domain i=0 + OVER // domain i=0 domain + SBITS // domain i=0 len + UNTIL:<{ + 2DUP // domain i len i len + EQUAL // domain i len need_break + DUP // domain i len need_break need_break + NOT // domain i len need_break _8 + IF:<{ // domain i len need_break + DROP // domain i len + s0 s2 XCHG // len i domain + 8 LDU // len i char domain + OVER // len i char domain char + 45 EQINT // len i char domain is_hyphen + s3 PUSH // len i char domain is_hyphen i + 0 GTINT // len i char domain is_hyphen _18 + AND // len i char domain _19 + s4 PUSH // len i char domain _19 len + -8 ADDCONST // len i char domain _19 _21 + s4 s(-1) PUXC // len i char domain _19 i _21 + LESS // len i char domain _19 _22 + AND // len i char domain _23 + s2 PUSH // len i char domain _23 char + 47 GTINT // len i char domain _23 _25 + s3 PUSH // len i char domain _23 _25 char + 58 LESSINT // len i char domain _23 _25 _27 + AND // len i char domain _23 _28 + OR // len i char domain _29 + s2 PUSH // len i char domain _29 char + 96 GTINT // len i char domain _29 _31 + s0 s3 XCHG // len i _31 domain _29 char + 123 LESSINT // len i _31 domain _29 _33 + s1 s3 XCHG // len i _29 domain _31 _33 + AND // len i _29 domain _34 + s1 s2 XCHG // len i domain _29 _34 + OR // len i domain valid_char + NOT // len i domain need_break + DUP // len i domain need_break need_break + NOT // len i domain need_break _37 + IF:<{ // len i domain need_break + s0 s2 XCHG // len need_break domain i + 8 ADDCONST // len need_break domain i + s0 s2 XCHG // len i domain need_break + }> // len i domain need_break + s1 s3 XCHG // domain i len need_break + }> // domain i len need_break + }> // domain i len + 1 2 BLKDROP2 // i len + EQUAL // _40 + }> + get_min_price_config PROC:<{ + // domain_char_count + DUP // domain_char_count domain_char_count + 4 EQINT // domain_char_count _2 + IFJMP:<{ // domain_char_count + DROP // + 1000 PUSHINT // _3=1000 + 100 PUSHINT // _3=1000 _4=100 + }> // domain_char_count + DUP // domain_char_count domain_char_count + 5 EQINT // domain_char_count _6 + IFJMP:<{ // domain_char_count + DROP // + 500 PUSHINT // _7=500 + 50 PUSHINT // _7=500 _8=50 + }> // domain_char_count + DUP // domain_char_count domain_char_count + 6 EQINT // domain_char_count _10 + IFJMP:<{ // domain_char_count + DROP // + 400 PUSHINT // _11=400 + 40 PUSHINT // _11=400 _12=40 + }> // domain_char_count + DUP // domain_char_count domain_char_count + 7 EQINT // domain_char_count _14 + IFJMP:<{ // domain_char_count + DROP // + 300 PUSHINT // _15=300 + 30 PUSHINT // _15=300 _16=30 + }> // domain_char_count + DUP // domain_char_count domain_char_count + 8 EQINT // domain_char_count _18 + IFJMP:<{ // domain_char_count + DROP // + 200 PUSHINT // _19=200 + 20 PUSHINT // _19=200 _20=20 + }> // domain_char_count + DUP // domain_char_count domain_char_count + 9 EQINT // domain_char_count _22 + IFJMP:<{ // domain_char_count + DROP // + 100 PUSHINT // _23=100 + 10 PUSHINT // _23=100 _24=10 + }> // domain_char_count + 10 EQINT // _26 + IFJMP:<{ // + 50 PUSHINT // _27=50 + 5 PUSHINT // _27=50 _28=5 + }> // + 10 PUSHINT // _29=10 + 1 PUSHINT // _29=10 _30=1 + }> + get_min_price PROC:<{ + // domain_bits_length now_time + SWAP // now_time domain_bits_length + 3 RSHIFT# // now_time _5 + get_min_price_config CALLDICT // now_time start_min_price end_min_price + SWAP + 1000000000 PUSHINT // now_time end_min_price start_min_price _7=1000000000 + MUL // now_time end_min_price start_min_price + SWAP + 1000000000 PUSHINT // now_time start_min_price end_min_price _9=1000000000 + MUL // now_time start_min_price end_min_price + s0 s2 XCHG + 1659171600 PUSHINT // end_min_price start_min_price now_time _12=1659171600 + SUB // end_min_price start_min_price seconds + 2592000 PUSHINT // end_min_price start_min_price seconds _15=2592000 + DIV // end_min_price start_min_price months + DUP // end_min_price start_min_price months months + 21 GTINT // end_min_price start_min_price months _18 + IFJMP:<{ // end_min_price start_min_price months + 2DROP // end_min_price + }> // end_min_price start_min_price months + 1 2 BLKDROP2 // start_min_price months + REPEAT:<{ // start_min_price + 90 MULCONST // _20 + 100 PUSHINT // _20 _21=100 + DIV // start_min_price + }> + }> +}END>c diff --git a/build/main.compiled.json b/build/main.compiled.json new file mode 100644 index 0000000..60f13bb --- /dev/null +++ b/build/main.compiled.json @@ -0,0 +1 @@ +{"hex":"b5ee9c72c102370100062800000d00120017001c00210093009f00a400b100bd00c200c700cc00de00e600f000f501020108010d0112015b016001700175017a018e01a801ad01bd01d801dd01e201e701ec02220230023502480253029f02a402ce02d302d802f402fd037c03fe048104f2050b058605d006280114ff00f4a413f4bcf2c80b0102016213020201200a030201200704020120060500dfb461843ae92f152118001e5c08de01ebe11a1a60e038001e5c339e8086045ae140f800047ae938010a421611c2460644180012660f003c003060fe81e60f003c0d842412a03a60e6203bc43e006a245ae3061f2030401752791961e030402cf47da87b19e2d920322f122e1c425400300013b64a5e01e2050be11a1002014809080015b016fc03d7c21ffc0084a00013b3f3fc03d7c0cd100d20020120100b0202740f0c0201200e0d001fa74661e01e20acbe0c65e020e003e023000ba6b3e01ed9030010a874f00f10385f0802012012110015b6739da89a1a863ae17ff00007b56ba6300202cb1f140201201615008ddb836b692e4660be5fffc14678b2802678b0afa00667a0009659fe4f80bb810f808c10821bee20464658fe4b8bbc00c646582a802678b387d0109e5b589e665806664c0207d8040201201817001bf381064658089fa007a00658064c0201201c190201201b1a00233c04a0804ce73b50f600723332fff27b5520002f01b2330572ffd400f3c58073c5853304f304bd0032cff2600201201e1d001b3e401d3232c084b281f2fff27420003108323304b2fffe0a33c5b25c083232c044fd003d0032c03260020120292002012028210201202522020120242300673b5134350c343534fffe900835d270802384fe90351fc0753d0134cfcc04120411d788c40d380c1b5c1b5b5b48c4160415c411a00017321400f3c5807e80b2cff26002012027260021081ba50c1b5c0838343e903e8034cfcc2000113e910c1c2ebcb8536000936483001258c2040fa201938083001658c20407d200cb8083001a58c204064200a38083001e58c20404b2007b8083002258c204032200538083002650c20191eb83002a4e00c9d781e9c60201202b2a004fd64471010eba4896b8c2ce78b10eba51060001059cd80e000f97065016a1868014898f17318e4e840201202f2c0201202e2d00331c27c074c1c07000082ce500a98200b784b98c4830003cb43260000d1c3232c072742002f5420c70094840ff2f0def8276f1021c70091709401d31f59e203d0d3030171b0925f05e0fa40fa4031fa003171d721fa0031fa0030f00f26b3e302534ac70517b08e3410bd5f0dfa40307020f8256d8040708010c8cb055007cf165005fa0215cb6a12cb1fcb3f226eb39458cf17019132e201c901fb00e020f00d8363001fef82301bc0ed33f246eb301111001b08e6a333453bea182103b9aca005210a15250bc993482103b9aca0014a1923003e220c2008e378210370fec516d72275134544643708010c8cb055007cf165005fa0215cb6a12cb1fcb3f226eb39458cf17019132e201c901fb001ba10a9130e25477645476546d520df0130592385be23102fe8210437dc40852d0ba925f0ee0821016c7d43552d0ba8e4410685f083233018308d718d3fff82801d4308201339ced43d8c827cf165003cf165230cbff5210ccc9f900fe005042f910f2e19d5340be313403f2e19e22f9005023f018e03d82101a039a5152c0ba9a175f076c42c705f2e191e082105fcc3d1452c0bae30236333200de363782101a0b9d515290ba8e1331375132c705f2e19a04d430415614f823f013e050795f0582102fcb26a214ba8e397082108b77173505c8cbff58cf161344408040708010c8cb055007cf165005fa0215cb6a12cb1fcb3f226eb39458cf17019132e201c901fb00e05f04840ff2f0012c3b5370c705f2e191108b105a1049487615103402db3c3401f03502fa4021f00cfa40d20031fa0082103b9aca001ea121945314a0a1de22d70b01c300209205a19135e220c2fff2e192218e3e821005138d91c8500acf16500ecf1671244a145448b0708010c8cb055007cf165005fa0215cb6a12cb1fcb3f226eb39458cf17019132e201c901fb00105a94102d385be2013500908e3529f00c8210d53276db103a450a6d71708010c8cb055007cf165005fa0215cb6a12cb1fcb3f226eb39458cf17019132e201c901fb0093393330e21056104510341023f823f01300ac5f0432333334355202c705f2e19502fa40d4306d70c8cb07f400c9f823821062e4f310a18208278d00a90420c20c9330800cde8208093a808208092c7058a8800ca904a1f82301a0f0024488f00e5e321034f823f0131160775b"} \ No newline at end of file diff --git a/build/main.fif b/build/main.fif new file mode 100644 index 0000000..59b7f82 --- /dev/null +++ b/build/main.fif @@ -0,0 +1,1191 @@ +"Asm.fif" include +// automatically generated from `contracts/main.fc` incl:`contracts/imports/stdlib.fc` incl:`contracts/imports/constants.fc` incl:`contracts/imports/utils.fc` incl:`contracts/imports/dns-utils.fc` incl:`contracts/imports/op-codes.fc` incl:`contracts/imports/params.fc` +PROGRAM{ + DECLPROC send_grams + DECLPROC zero_address + DECLPROC get_top_domain_bits + DECLPROC read_comment + DECLPROC read_domain_from_comment + DECLPROC check_domain_string + DECLPROC split_by_semicolon + DECLPROC decode_asciicode + DECLPROC get_min_price_config + DECLPROC price_function + DECLPROC get_min_price + DECLPROC force_chain + DECLPROC unpack_auction + DECLPROC pack_auction + 78748 DECLMETHOD get_public_key + DECLPROC load_data + DECLPROC calculate_nft_item_state_init + DECLPROC calculate_nft_item_address + DECLPROC pack_state + DECLPROC store_data + DECLPROC send_msg + DECLPROC transfer_ownership + DECLPROC deploy_nft_item + DECLPROC pack_nft_item_state + DECLPROC deploy_bought_item + DECLPROC recv_internal + 102351 DECLMETHOD get_nft_data + 90228 DECLMETHOD get_editor + 119378 DECLMETHOD get_domain + 91481 DECLMETHOD get_last_fill_up_time + 102491 DECLMETHOD get_collection_data + 92067 DECLMETHOD get_nft_address_by_index + 68445 DECLMETHOD get_nft_content + 123660 DECLMETHOD dnsresolve + send_grams PROC:<{ + // address amount + 0 PUSHINT // address amount _3=0 + 24 PUSHINT // address amount _3=0 _4=24 + NEWC // address amount _3=0 _4=24 _5 + 6 STU // address amount _3=0 _7 + s0 s3 XCHG2 // _3=0 amount _7 address + STSLICER // _3=0 amount _8 + SWAP // _3=0 _8 amount + STGRAMS // _3=0 _9 + 107 STU // _11 + ENDC // msg + 3 PUSHINT // msg _13=3 + SENDRAWMSG + }> + zero_address PROC:<{ + // + 0 PUSHINT // _0=0 + NEWC // _0=0 _1 + 2 STU // _3 + ENDC // _4 + CTOS // _5 + }> + get_top_domain_bits PROC:<{ + // domain + 0 PUSHINT // domain i=0 + UNTIL:<{ + SWAP // i domain + 8 LDU // i char domain + SWAP // i domain char + 0 EQINT // i domain need_break + DUP // i domain need_break need_break + NOT // i domain need_break _11 + IF:<{ // i domain need_break + s0 s2 XCHG // need_break domain i + 8 ADDCONST // need_break domain i + s0 s2 XCHG // i domain need_break + }> // i domain need_break + s1 s2 XCHG // domain i need_break + }> // domain i + NIP // i + DUP // i i + 0 EQINT // i _16 + 201 THROWIF + }> + read_comment PROC:<{ + // in_msg_body + NEWC // in_msg_body result + UNTIL:<{ + OVER // in_msg_body result in_msg_body + SBITS // in_msg_body result _6 + s1 s2 XCHG // result in_msg_body _6 + LDSLICEX // result _5 in_msg_body + -ROT // in_msg_body result _5 + STSLICER // in_msg_body result + OVER // in_msg_body result in_msg_body + SREFS // in_msg_body result refs_len + DUP // in_msg_body result refs_len refs_len + 0 EQINT // in_msg_body result refs_len need_break + DUP // in_msg_body result refs_len need_break need_break + NOT // in_msg_body result refs_len need_break _13 + IF:<{ // in_msg_body result refs_len need_break + SWAP // in_msg_body result need_break refs_len + 1 EQINT // in_msg_body result need_break _16 + 202 THROWIFNOT + s0 s2 XCHG // need_break result in_msg_body + LDREF // need_break result _26 _25 + DROP // need_break result _18 + CTOS // need_break result in_msg_body + s0 s2 XCHG // in_msg_body result need_break + }>ELSE<{ + NIP // in_msg_body result need_break + }> + }> // in_msg_body result + NIP // result + ENDC // _21 + CTOS // _22 + }> + read_domain_from_comment PROC:<{ + // in_msg_body + read_comment CALLDICT // _1 + }> + check_domain_string PROC:<{ + // domain + 0 PUSHINT // domain i=0 + OVER // domain i=0 domain + SBITS // domain i=0 len + UNTIL:<{ + 2DUP // domain i len i len + EQUAL // domain i len need_break + DUP // domain i len need_break need_break + NOT // domain i len need_break _8 + IF:<{ // domain i len need_break + DROP // domain i len + s0 s2 XCHG // len i domain + 8 LDU // len i char domain + OVER // len i char domain char + 45 EQINT // len i char domain is_hyphen + s3 PUSH // len i char domain is_hyphen i + 0 GTINT // len i char domain is_hyphen _18 + AND // len i char domain _19 + s4 PUSH // len i char domain _19 len + -8 ADDCONST // len i char domain _19 _21 + s4 s(-1) PUXC // len i char domain _19 i _21 + LESS // len i char domain _19 _22 + AND // len i char domain _23 + s2 PUSH // len i char domain _23 char + 47 GTINT // len i char domain _23 _25 + s3 PUSH // len i char domain _23 _25 char + 58 LESSINT // len i char domain _23 _25 _27 + AND // len i char domain _23 _28 + OR // len i char domain _29 + s2 PUSH // len i char domain _29 char + 96 GTINT // len i char domain _29 _31 + s0 s3 XCHG // len i _31 domain _29 char + 123 LESSINT // len i _31 domain _29 _33 + s1 s3 XCHG // len i _29 domain _31 _33 + AND // len i _29 domain _34 + s1 s2 XCHG // len i domain _29 _34 + OR // len i domain valid_char + NOT // len i domain need_break + DUP // len i domain need_break need_break + NOT // len i domain need_break _37 + IF:<{ // len i domain need_break + s0 s2 XCHG // len need_break domain i + 8 ADDCONST // len need_break domain i + s0 s2 XCHG // len i domain need_break + }> // len i domain need_break + s1 s3 XCHG // domain i len need_break + }> // domain i len need_break + }> // domain i len + 1 2 BLKDROP2 // i len + EQUAL // _40 + }> + split_by_semicolon PROC:<{ + // str + 0 PUSHINT // str i=0 + OVER // str i=0 str + SBITS // str i=0 len + NEWC // str i=0 len result1 + UNTIL:<{ + s2 s1 PUSH2 // str i len result1 i len + EQUAL // str i len result1 need_break + DUP // str i len result1 need_break need_break + NOT // str i len result1 need_break _10 + IF:<{ // str i len result1 need_break + DROP // str i len result1 + s0 s3 XCHG // result1 i len str + 8 LDU // result1 i len char str + OVER // result1 i len char str char + 59 EQINT // result1 i len char str need_break + s0 s4 XCHG // result1 need_break len char str i + 8 ADDCONST // result1 need_break len char str i + s4 PUSH // result1 need_break len char str i need_break + NOT // result1 need_break len char str i _19 + IF:<{ // result1 need_break len char str i + s2 s5 XCHG2 // i need_break len str char result1 + 8 STU // i need_break len str result1 + s4 s4 XCHG2 // result1 need_break len i str + }>ELSE<{ + s2 POP // result1 need_break len i str + }> + s3 PUSH // result1 need_break len i str need_break + NOT // result1 need_break len i str _23 + s2 s3 PUSH2 // result1 need_break len i str _23 i len + GEQ // result1 need_break len i str _23 _24 + AND // result1 need_break len i str _25 + IF:<{ // result1 need_break len i str + 259 THROW + }> // result1 need_break len i str + s4 s4 XCHG2 + s0 s3 XCHG // str i len result1 need_break + }> // str i len result1 need_break + }> // str i len result1 + ENDC // str i len _28 + CTOS // str i len _29 + s0 s2 XCHG // str _29 len i + SUB // str _29 _31 + s1 s2 XCHG // _29 str _31 + LDSLICEX // _29 _36 _35 + DROP // _29 _30 + }> + decode_asciicode PROC:<{ + // str + DUP // str str + SBITS // str len + 0 PUSHINT // str len need_break=0 + NEWC // str len need_break=0 result + OVER // str len need_break=0 result res_len=0 + WHILE:<{ + s0 s2 XCHG // str len res_len result need_break + NOT // str len res_len result _9 + }>DO<{ // str len res_len result + s2 PUSH // str len res_len result len + 0 EQINT // str len res_len result need_break + DUP // str len res_len result need_break need_break + NOT // str len res_len result need_break _12 + IF:<{ // str len res_len result need_break + s0 s4 XCHG // need_break len res_len result str + 8 LDU // need_break len res_len result char str + 0 PUSHINT // need_break len res_len result char str byte=0 + s2 PUSH // need_break len res_len result char str byte=0 char + 64 GTINT // need_break len res_len result char str byte=0 _20 + s3 PUSH // need_break len res_len result char str byte=0 _20 char + 91 LESSINT // need_break len res_len result char str byte=0 _20 _22 + AND // need_break len res_len result char str byte=0 _23 + IF:<{ // need_break len res_len result char str byte=0 + DROP // need_break len res_len result char str + SWAP // need_break len res_len result str char + -65 ADDCONST // need_break len res_len result str byte + }>ELSE<{ // need_break len res_len result char str byte=0 + s2 PUSH // need_break len res_len result char str byte=0 char + 96 GTINT // need_break len res_len result char str byte=0 _27 + s3 PUSH // need_break len res_len result char str byte=0 _27 char + 123 LESSINT // need_break len res_len result char str byte=0 _27 _29 + AND // need_break len res_len result char str byte=0 _30 + IF:<{ // need_break len res_len result char str byte=0 + DROP // need_break len res_len result char str + SWAP // need_break len res_len result str char + -71 ADDCONST // need_break len res_len result str byte + }>ELSE<{ // need_break len res_len result char str byte=0 + s2 PUSH // need_break len res_len result char str byte=0 char + 47 GTINT // need_break len res_len result char str byte=0 _34 + s3 PUSH // need_break len res_len result char str byte=0 _34 char + 58 LESSINT // need_break len res_len result char str byte=0 _34 _36 + AND // need_break len res_len result char str byte=0 _37 + IF:<{ // need_break len res_len result char str byte=0 + DROP // need_break len res_len result char str + SWAP // need_break len res_len result str char + 4 ADDCONST // need_break len res_len result str byte + }>ELSE<{ // need_break len res_len result char str byte=0 + s2 PUSH // need_break len res_len result char str byte=0 char + 45 EQINT // need_break len res_len result char str byte=0 _41 + IF:<{ // need_break len res_len result char str byte=0 + DROP + NIP // need_break len res_len result str + 62 PUSHINT // need_break len res_len result str byte=62 + }>ELSE<{ // need_break len res_len result char str byte=0 + s0 s2 XCHG // need_break len res_len result byte=0 str char + 95 EQINT // need_break len res_len result byte=0 str _44 + IF:<{ // need_break len res_len result byte=0 str + NIP // need_break len res_len result str + 63 PUSHINT // need_break len res_len result str byte=63 + }>ELSE<{ // need_break len res_len result byte=0 str + 260 THROW + SWAP // need_break len res_len result str byte + }> + }> + }> + }> + }> + s0 s4 XCHG // need_break byte res_len result str len + -8 ADDCONST // need_break byte res_len result str len + DUP // need_break byte res_len result str len len + 0 GTINT // need_break byte res_len result str len _51 + IF:<{ // need_break byte res_len result str len + s4 s2 XCHG2 // need_break str res_len len byte result + 6 STU // need_break str res_len len result + }>ELSE<{ // need_break byte res_len result str len + 8 PUSHINT // need_break byte res_len result str len _56=8 + s4 s0 PUSH2 // need_break byte res_len result str len _56=8 res_len _57=8 + MOD // need_break byte res_len result str len _56=8 _58 + SUB // need_break byte res_len result str len _59 + s5 s3 s0 XCHG3 // need_break str res_len len byte result _59 + STUX // need_break str res_len len result + }> + s0 s2 XCHG // need_break str result len res_len + 6 ADDCONST // need_break str result len res_len + s0 s0 s3 XCHG3 + s0 s4 XCHG // str len res_len result need_break + }> // str len res_len result need_break + s0 s2 XCHG // str len need_break result res_len + }> // str len res_len result + 3 1 BLKDROP2 // result + ENDC // _63 + CTOS // _64 + }> + get_min_price_config PROC:<{ + // domain_char_count + DUP // domain_char_count domain_char_count + 4 EQINT // domain_char_count _2 + IFJMP:<{ // domain_char_count + DROP // + 1000 PUSHINT // _3=1000 + 100 PUSHINT // _3=1000 _4=100 + }> // domain_char_count + DUP // domain_char_count domain_char_count + 5 EQINT // domain_char_count _6 + IFJMP:<{ // domain_char_count + DROP // + 500 PUSHINT // _7=500 + 50 PUSHINT // _7=500 _8=50 + }> // domain_char_count + DUP // domain_char_count domain_char_count + 6 EQINT // domain_char_count _10 + IFJMP:<{ // domain_char_count + DROP // + 400 PUSHINT // _11=400 + 40 PUSHINT // _11=400 _12=40 + }> // domain_char_count + DUP // domain_char_count domain_char_count + 7 EQINT // domain_char_count _14 + IFJMP:<{ // domain_char_count + DROP // + 300 PUSHINT // _15=300 + 30 PUSHINT // _15=300 _16=30 + }> // domain_char_count + DUP // domain_char_count domain_char_count + 8 EQINT // domain_char_count _18 + IFJMP:<{ // domain_char_count + DROP // + 200 PUSHINT // _19=200 + 20 PUSHINT // _19=200 _20=20 + }> // domain_char_count + DUP // domain_char_count domain_char_count + 9 EQINT // domain_char_count _22 + IFJMP:<{ // domain_char_count + DROP // + 100 PUSHINT // _23=100 + 10 PUSHINT // _23=100 _24=10 + }> // domain_char_count + 10 EQINT // _26 + IFJMP:<{ // + 50 PUSHINT // _27=50 + 5 PUSHINT // _27=50 _28=5 + }> // + 10 PUSHINT // _29=10 + 1 PUSHINT // _29=10 _30=1 + }> + price_function PROC:<{ + // length multiplierx50 steepness + 25 PUSHINT // length multiplierx50 steepness price=25 + s3 PUSH // length multiplierx50 steepness price=25 length + 3 EQINT // length multiplierx50 steepness price=25 _6 + IF:<{ // length multiplierx50 steepness price=25 + DROP // length multiplierx50 steepness + 100 PUSHINT // length multiplierx50 steepness price=100 + }> // length multiplierx50 steepness price + s3 PUSH // length multiplierx50 steepness price length + 4 EQINT // length multiplierx50 steepness price _9 + IF:<{ // length multiplierx50 steepness price + DROP // length multiplierx50 steepness + 50 PUSHINT // length multiplierx50 steepness price=50 + }> // length multiplierx50 steepness price + s3 PUSH // length multiplierx50 steepness price length + 5 EQINT // length multiplierx50 steepness price _12 + IF:<{ // length multiplierx50 steepness price + DROP // length multiplierx50 steepness + 25 PUSHINT // length multiplierx50 steepness price=25 + }> // length multiplierx50 steepness price + s3 PUSH // length multiplierx50 steepness price length + 6 EQINT // length multiplierx50 steepness price _15 + IF:<{ // length multiplierx50 steepness price + DROP // length multiplierx50 steepness + 20 PUSHINT // length multiplierx50 steepness price=20 + }> // length multiplierx50 steepness price + s3 PUSH // length multiplierx50 steepness price length + 7 EQINT // length multiplierx50 steepness price _18 + IF:<{ // length multiplierx50 steepness price + DROP // length multiplierx50 steepness + 15 PUSHINT // length multiplierx50 steepness price=15 + }> // length multiplierx50 steepness price + s3 PUSH // length multiplierx50 steepness price length + 8 EQINT // length multiplierx50 steepness price _21 + IF:<{ // length multiplierx50 steepness price + DROP // length multiplierx50 steepness + 10 PUSHINT // length multiplierx50 steepness price=10 + }> // length multiplierx50 steepness price + s0 s3 XCHG // price multiplierx50 steepness length + 8 GTINT // price multiplierx50 steepness _24 + IF:<{ // price multiplierx50 steepness + 5 PUSHINT + s3 POP // price=5 multiplierx50 steepness + }> // price multiplierx50 steepness + s0 s2 PUXC // steepness multiplierx50 steepness price + MUL // steepness multiplierx50 _26 + 10 PUSHINT // steepness multiplierx50 _26 _27=10 + s0 s3 XCHG2 // _26 multiplierx50 _27=10 steepness + SUB // _26 multiplierx50 _28 + 25 MULCONST // _26 multiplierx50 _30 + s1 s2 XCHG // multiplierx50 _26 _30 + ADD // multiplierx50 _31 + 10 PUSHINT // multiplierx50 _31 _32=10 + DIV // multiplierx50 price + 1000000000 PUSHINT // multiplierx50 price _34=1000000000 + MUL // multiplierx50 _35 + SWAP // _35 multiplierx50 + MUL // _36 + 50 PUSHINT // _36 _37=50 + DIV // _38 + }> + get_min_price PROC:<{ + // domain_bits_length now_time + SWAP // now_time domain_bits_length + 3 RSHIFT# // now_time _5 + get_min_price_config CALLDICT // now_time start_min_price end_min_price + SWAP + 1000000000 PUSHINT // now_time end_min_price start_min_price _7=1000000000 + MUL // now_time end_min_price start_min_price + SWAP + 1000000000 PUSHINT // now_time start_min_price end_min_price _9=1000000000 + MUL // now_time start_min_price end_min_price + s0 s2 XCHG + 1659171600 PUSHINT // end_min_price start_min_price now_time _12=1659171600 + SUB // end_min_price start_min_price seconds + 2592000 PUSHINT // end_min_price start_min_price seconds _15=2592000 + DIV // end_min_price start_min_price months + DUP // end_min_price start_min_price months months + 21 GTINT // end_min_price start_min_price months _18 + IFJMP:<{ // end_min_price start_min_price months + 2DROP // end_min_price + }> // end_min_price start_min_price months + 1 2 BLKDROP2 // start_min_price months + REPEAT:<{ // start_min_price + 90 MULCONST // _20 + 100 PUSHINT // _20 _21=100 + DIV // start_min_price + }> + }> + force_chain PROC:<{ + // addr + REWRITESTDADDR // _8 _9 + DROP // wc + 0 PUSHINT // wc _5 + EQUAL // _6 + 333 THROWIFNOT + }> + unpack_auction PROC:<{ + // auction + DUP // auction auction + ISNULL // auction _1 + IFJMP:<{ // auction + DROP // + PUSHNULL // _2 + 0 PUSHINT // _2 _3=0 + DUP // _2 _3=0 _4=0 + }> // auction + CTOS // ds + LDMSGADDR // _7 ds + LDVARUINT16 // _7 _9 ds + 64 LDU // _7 _9 _19 _18 + DROP // _7 _9 _11 + }> + pack_auction PROC:<{ + // max_bid_address max_bid_amount auction_end_time + NEWC // max_bid_address max_bid_amount auction_end_time _3 + s0 s3 XCHG2 // auction_end_time max_bid_amount _3 max_bid_address + STSLICER // auction_end_time max_bid_amount _4 + SWAP // auction_end_time _4 max_bid_amount + STVARUINT16 // auction_end_time _5 + 64 STU // _7 + ENDC // _8 + }> + get_public_key PROC:<{ + // + c4 PUSH // _1 + CTOS // cs + LDREF // _8 _7 + NIP // cs + 256 PLDU // _6 + }> + load_data PROC:<{ + // + c4 PUSH // _1 + CTOS // root_cell + LDREF // _41 _40 + DROP // _4 + CTOS // ds + LDREF // code ds + 256 LDU // code _12 ds + LDMSGADDR // code index collection_address ds + DUP // code index collection_address ds ds + SBITS // code index collection_address ds _17 + 0 GTINT // code index collection_address ds _19 + IFJMP:<{ // code index collection_address ds + LDMSGADDR // code index collection_address owner ds + LDREF // code index collection_address owner content ds + -1 PUSHINT // code index collection_address owner content ds _26=-1 + SWAP // code index collection_address owner content _26=-1 ds + LDREF // code index collection_address owner content _26=-1 _27 ds + LDDICT // code index collection_address owner content _26=-1 _27 _29 ds + 64 LDU // code index collection_address owner content _26=-1 _27 _29 _57 _56 + DROP // code index collection_address owner content _26=-1 _27 _29 _31 + s4 s8 XCHG + s4 s7 XCHG + 4 3 REVERSE + s3 s4 XCHG // content code _26=-1 index collection_address owner _27 _29 _31 + }> // code index collection_address ds + DROP // code index collection_address + PUSHNULL // code index collection_address _34 + 0 PUSHINT // code index collection_address _34 _35=0 + PUSHNULL // code index collection_address _34 _35=0 _36 + PUSHNULL // code index collection_address _34 _35=0 _36 _37 + PUSHNULL // code index collection_address _34 _35=0 _36 _37 _38 + s3 PUSH // code index collection_address _34 _35=0 _36 _37 _38 _39=0 + s5 s8 XCHG + s5 s7 XCHG + s4 s6 XCHG // _34 code _35=0 index collection_address _36 _37 _38 _39=0 + }> + calculate_nft_item_state_init PROC:<{ + // item_index nft_item_code + DUP + NEWC // item_index nft_item_code nft_item_code _3 + STREF // item_index nft_item_code _4 + s1 s2 XCHG // nft_item_code item_index _4 + 256 STU // nft_item_code _6 + MYADDR // nft_item_code _6 _7 + STSLICER // nft_item_code _8 + ENDC // nft_item_code data + 0 PUSHINT // nft_item_code data _10=0 + DUP // nft_item_code data _10=0 _11=0 + NEWC // nft_item_code data _10=0 _11=0 _12 + 2 STU // nft_item_code data _10=0 _14 + s1 s3 XCHG // _10=0 data nft_item_code _14 + STDICT // _10=0 data _15 + STDICT // _10=0 _16 + 1 STU // _18 + ENDC // _19 + }> + calculate_nft_item_address PROC:<{ + // wc state_init + HASHCU // wc _2 + 4 PUSHINT // wc _2 _3=4 + NEWC // wc _2 _3=4 _4 + 3 STU // wc _2 _6 + s1 s2 XCHG // _2 wc _6 + 8 STI // _2 _8 + 256 STU // _10 + ENDC // _11 + CTOS // _12 + }> + pack_state PROC:<{ + // content nft_item_code index collection_address owner_address domain auction last_fill_up_time + s0 s6 XCHG + NEWC // content last_fill_up_time index collection_address owner_address domain auction nft_item_code _8 + STREF // content last_fill_up_time index collection_address owner_address domain auction _9 + s1 s5 XCHG // content last_fill_up_time auction collection_address owner_address domain index _9 + 256 STU // content last_fill_up_time auction collection_address owner_address domain _11 + s0 s3 XCHG2 // content last_fill_up_time auction domain owner_address _11 collection_address + STSLICER // content last_fill_up_time auction domain owner_address _12 + SWAP // content last_fill_up_time auction domain _12 owner_address + STSLICER // content last_fill_up_time auction domain _13 + s1 s4 XCHG // domain last_fill_up_time auction content _13 + STREF // domain last_fill_up_time auction _14 + s1 s3 XCHG // auction last_fill_up_time domain _14 + STREF // auction last_fill_up_time _15 + s1 s2 XCHG // last_fill_up_time auction _15 + STDICT // last_fill_up_time _16 + 64 STU // _18 + ENDC // _19 + }> + store_data PROC:<{ + // content nft_item_code index collection_address owner_address domain auction last_fill_up_time + pack_state CALLDICT // data + get_public_key CALLDICT // data public_key + SWAP + NEWC // public_key data _12 + STREF // public_key _13 + 256 STU // _15 + ENDC // _16 + c4 POP + }> + send_msg PROCINLINE:<{ + // to_address amount op query_id payload send_mode + 0 PUSHINT // to_address amount op query_id payload send_mode _7=0 + 16 PUSHINT // to_address amount op query_id payload send_mode _7=0 _8=16 + NEWC // to_address amount op query_id payload send_mode _7=0 _8=16 _9 + 6 STU // to_address amount op query_id payload send_mode _7=0 _11 + s0 s7 XCHG2 // _7=0 amount op query_id payload send_mode _11 to_address + STSLICER // _7=0 amount op query_id payload send_mode _12 + s0 s5 XCHG2 // _7=0 send_mode op query_id payload _12 amount + STVARUINT16 // _7=0 send_mode op query_id payload _13 + s1 s5 XCHG // payload send_mode op query_id _7=0 _13 + 107 STU // payload send_mode op query_id _27 + s1 s2 XCHG // payload send_mode query_id op _27 + 32 STU // payload send_mode query_id _29 + 64 STU // payload send_mode msg + s2 PUSH // payload send_mode msg payload + ISNULL // payload send_mode msg _32 + NOT // payload send_mode msg _33 + IF:<{ // payload send_mode msg + ROT // send_mode msg payload + STBR // send_mode msg + SWAP // msg send_mode + }>ELSE<{ + s2 POP // msg send_mode + }> + SWAP // send_mode msg + ENDC // send_mode _35 + SWAP // _35 send_mode + SENDRAWMSG + }> + transfer_ownership PROCINLINE:<{ + // my_balance collection_content nft_item_code index collection_address owner_address sender_address query_id in_msg_body fwd_fees domain auction + s5 POP // my_balance collection_content nft_item_code index collection_address owner_address auction query_id in_msg_body fwd_fees domain + s0 s2 XCHG // my_balance collection_content nft_item_code index collection_address owner_address auction query_id domain fwd_fees in_msg_body + LDMSGADDR // my_balance collection_content nft_item_code index collection_address owner_address auction query_id domain fwd_fees new_owner_address in_msg_body + OVER // my_balance collection_content nft_item_code index collection_address owner_address auction query_id domain fwd_fees new_owner_address in_msg_body new_owner_address + force_chain CALLDICT + LDMSGADDR // my_balance collection_content nft_item_code index collection_address owner_address auction query_id domain fwd_fees new_owner_address response_destination in_msg_body + 1 LDI // my_balance collection_content nft_item_code index collection_address owner_address auction query_id domain fwd_fees new_owner_address response_destination _58 _57 + NIP // my_balance collection_content nft_item_code index collection_address owner_address auction query_id domain fwd_fees new_owner_address response_destination in_msg_body + LDVARUINT16 // my_balance collection_content nft_item_code index collection_address owner_address auction query_id domain fwd_fees new_owner_address response_destination forward_amount in_msg_body + 1000000000 PUSHINT // my_balance collection_content nft_item_code index collection_address owner_address auction query_id domain fwd_fees new_owner_address response_destination forward_amount in_msg_body _26 + s1 s14 XCHG // in_msg_body collection_content nft_item_code index collection_address owner_address auction query_id domain fwd_fees new_owner_address response_destination forward_amount my_balance _26 + SUB // in_msg_body collection_content nft_item_code index collection_address owner_address auction query_id domain fwd_fees new_owner_address response_destination forward_amount rest_amount + OVER // in_msg_body collection_content nft_item_code index collection_address owner_address auction query_id domain fwd_fees new_owner_address response_destination forward_amount rest_amount forward_amount + IF:<{ // in_msg_body collection_content nft_item_code index collection_address owner_address auction query_id domain fwd_fees new_owner_address response_destination forward_amount rest_amount + s1 s4 PUSH2 // in_msg_body collection_content nft_item_code index collection_address owner_address auction query_id domain fwd_fees new_owner_address response_destination forward_amount rest_amount forward_amount fwd_fees + ADD // in_msg_body collection_content nft_item_code index collection_address owner_address auction query_id domain fwd_fees new_owner_address response_destination forward_amount rest_amount _28 + SUB // in_msg_body collection_content nft_item_code index collection_address owner_address auction query_id domain fwd_fees new_owner_address response_destination forward_amount rest_amount + }> // in_msg_body collection_content nft_item_code index collection_address owner_address auction query_id domain fwd_fees new_owner_address response_destination forward_amount rest_amount + s2 PUSH // in_msg_body collection_content nft_item_code index collection_address owner_address auction query_id domain fwd_fees new_owner_address response_destination forward_amount rest_amount response_destination + 2 PLDU // in_msg_body collection_content nft_item_code index collection_address owner_address auction query_id domain fwd_fees new_owner_address response_destination forward_amount rest_amount _32 + 0 NEQINT // in_msg_body collection_content nft_item_code index collection_address owner_address auction query_id domain fwd_fees new_owner_address response_destination forward_amount rest_amount need_response + DUP // in_msg_body collection_content nft_item_code index collection_address owner_address auction query_id domain fwd_fees new_owner_address response_destination forward_amount rest_amount need_response need_response + IF:<{ // in_msg_body collection_content nft_item_code index collection_address owner_address auction query_id domain fwd_fees new_owner_address response_destination forward_amount rest_amount need_response + s0 s5 XCHG // in_msg_body collection_content nft_item_code index collection_address owner_address auction query_id domain need_response new_owner_address response_destination forward_amount rest_amount fwd_fees + SUB // in_msg_body collection_content nft_item_code index collection_address owner_address auction query_id domain need_response new_owner_address response_destination forward_amount rest_amount + }>ELSE<{ + s5 POP // in_msg_body collection_content nft_item_code index collection_address owner_address auction query_id domain need_response new_owner_address response_destination forward_amount rest_amount + }> + DUP // in_msg_body collection_content nft_item_code index collection_address owner_address auction query_id domain need_response new_owner_address response_destination forward_amount rest_amount rest_amount + -1 GTINT // in_msg_body collection_content nft_item_code index collection_address owner_address auction query_id domain need_response new_owner_address response_destination forward_amount rest_amount _38 + 402 THROWIFNOT + OVER // in_msg_body collection_content nft_item_code index collection_address owner_address auction query_id domain need_response new_owner_address response_destination forward_amount rest_amount forward_amount + IF:<{ // in_msg_body collection_content nft_item_code index collection_address owner_address auction query_id domain need_response new_owner_address response_destination forward_amount rest_amount + 0x05138d91 PUSHINT // in_msg_body collection_content nft_item_code index collection_address owner_address auction query_id domain need_response new_owner_address response_destination forward_amount rest_amount _40 + NEWC // in_msg_body collection_content nft_item_code index collection_address owner_address auction query_id domain need_response new_owner_address response_destination forward_amount rest_amount _40 _41 + s0 s10 XCHG2 // in_msg_body collection_content nft_item_code index collection_address _40 auction query_id domain need_response new_owner_address response_destination forward_amount rest_amount _41 owner_address + STSLICER // in_msg_body collection_content nft_item_code index collection_address _40 auction query_id domain need_response new_owner_address response_destination forward_amount rest_amount _42 + s0 s14 XCHG2 // rest_amount collection_content nft_item_code index collection_address _40 auction query_id domain need_response new_owner_address response_destination forward_amount _42 in_msg_body + STSLICER // rest_amount collection_content nft_item_code index collection_address _40 auction query_id domain need_response new_owner_address response_destination forward_amount _43 + 1 PUSHINT // rest_amount collection_content nft_item_code index collection_address _40 auction query_id domain need_response new_owner_address response_destination forward_amount _43 _44=1 + s4 PUSH + s10 s1 s4 XCHG3 + s8 s10 s(-1) PUXC2 // rest_amount collection_content nft_item_code index collection_address response_destination auction query_id domain need_response new_owner_address new_owner_address forward_amount _40 query_id _43 _44=1 + send_msg INLINECALLDICT + s5 s10 XCHG // response_destination collection_content nft_item_code index collection_address rest_amount auction query_id domain need_response new_owner_address + }>ELSE<{ + s2 s13 XCHG + s8 POP + 2DROP // response_destination collection_content nft_item_code index collection_address rest_amount auction query_id domain need_response new_owner_address + }> + SWAP // response_destination collection_content nft_item_code index collection_address rest_amount auction query_id domain new_owner_address need_response + IF:<{ // response_destination collection_content nft_item_code index collection_address rest_amount auction query_id domain new_owner_address + s9 PUSH // response_destination collection_content nft_item_code index collection_address rest_amount auction query_id domain new_owner_address response_destination + force_chain CALLDICT + 0xd53276db PUSHINT // response_destination collection_content nft_item_code index collection_address rest_amount auction query_id domain new_owner_address _47 + s3 s10 XCHG + s5 s0 s10 XCHG3 + PUSHNULL + 1 PUSHINT // new_owner_address collection_content nft_item_code index collection_address domain auction response_destination rest_amount _47 query_id _48 _49=1 + send_msg INLINECALLDICT + }>ELSE<{ + s9 POP + s3 POP + DROP // new_owner_address collection_content nft_item_code index collection_address domain auction + }> + s5 s6 XCHG + s4 s5 XCHG + s3 s4 XCHG + s2 s3 XCHG + NOW // collection_content nft_item_code index collection_address new_owner_address domain auction _51 + store_data CALLDICT + }> + deploy_nft_item PROC:<{ + // item_index nft_item_code nft_content + -ROT // nft_content item_index nft_item_code + calculate_nft_item_state_init CALLDICT // nft_content state_init + 0 PUSHINT // nft_content state_init _6 + OVER // nft_content state_init _6 state_init + calculate_nft_item_address CALLDICT // nft_content state_init nft_address + 7 PUSHINT // nft_content state_init nft_address _13 + 24 PUSHINT // nft_content state_init nft_address _13 _14=24 + NEWC // nft_content state_init nft_address _13 _14=24 _15 + 6 STU // nft_content state_init nft_address _13 _17 + ROT // nft_content state_init _13 _17 nft_address + STSLICER // nft_content state_init _13 _18 + 0 PUSHINT // nft_content state_init _13 _18 _19=0 + STVARUINT16 // nft_content state_init _13 _20 + 108 STU // nft_content state_init _36 + STREF // nft_content _37 + STREF // msg + ENDC // _39 + 64 PUSHINT // _39 _40=64 + SENDRAWMSG + }> + pack_nft_item_state PROC:<{ + // nft_item_code data + 0 PUSHINT // nft_item_code data _2=0 + DUP // nft_item_code data _2=0 _3=0 + NEWC // nft_item_code data _2=0 _3=0 _4 + 2 STU // nft_item_code data _2=0 _6 + s1 s3 XCHG // _2=0 data nft_item_code _6 + STDICT // _2=0 data _7 + STDICT // _2=0 _8 + 1 STU // _10 + ENDC // _11 + }> + deploy_bought_item PROC:<{ + // item_index code owner_address domain + 0 PUSHINT // item_index code owner_address domain _5=0 + PUSHNULL // item_index code owner_address domain _5=0 _6 + PUSHNULL // item_index code owner_address domain _5=0 _6 _7 + s5 PUSH + NEWC // item_index code owner_address domain _5=0 _6 _7 code _8 + STREF // item_index code owner_address domain _5=0 _6 _7 _9 + s1 s7 XCHG // _7 code owner_address domain _5=0 _6 item_index _9 + 256 STU // _7 code owner_address domain _5=0 _6 _11 + MYADDR // _7 code owner_address domain _5=0 _6 _11 _12 + STSLICER // _7 code owner_address domain _5=0 _6 _13 + s0 s4 XCHG2 // _7 code _6 domain _5=0 _13 owner_address + STSLICER // _7 code _6 domain _5=0 _14 + s1 s5 XCHG // _5=0 code _6 domain _7 _14 + STDICT // _5=0 code _6 domain _15 + STREF // _5=0 code _6 _16 + STDICT // _5=0 code _17 + s1 s2 XCHG // code _5=0 _17 + 64 STU // code _19 + ENDC // code init_data + pack_nft_item_state CALLDICT // state_init + 0 PUSHINT // state_init _24 + OVER // state_init _24 state_init + calculate_nft_item_address CALLDICT // state_init nft_address + 1132315656 PUSHINT // state_init nft_address _27=1132315656 + NEWC // state_init nft_address _27=1132315656 _28 + 32 STU // state_init nft_address _30 + ENDC // state_init nft_address _31 + 1 PUSHINT // state_init nft_address _31 _32=1 + 7 PUSHINT // state_init nft_address _31 _32=1 _37 + 24 PUSHINT // state_init nft_address _31 _32=1 _37 _38=24 + NEWC // state_init nft_address _31 _32=1 _37 _38=24 _39 + 6 STU // state_init nft_address _31 _32=1 _37 _41 + s0 s4 XCHG2 // state_init _37 _31 _32=1 _41 nft_address + STSLICER // state_init _37 _31 _32=1 _42 + 0 PUSHINT // state_init _37 _31 _32=1 _42 _43=0 + STVARUINT16 // state_init _37 _31 _32=1 _44 + s1 s3 XCHG // state_init _32=1 _31 _37 _44 + 108 STU // state_init _32=1 _31 _60 + s1 s3 XCHG // _31 _32=1 state_init _60 + STREF // _31 _32=1 _61 + 1 STU // _31 _63 + STREF // msg + ENDC // _65 + 64 PUSHINT // _65 _66=64 + SENDRAWMSG + }> + recv_internal PROC:<{ + // msg_value in_msg_full in_msg_body + DUP // msg_value in_msg_full in_msg_body in_msg_body + SEMPTY // msg_value in_msg_full in_msg_body _3 + IF:<{ // msg_value in_msg_full in_msg_body + 16 PUSHPOW2DEC // msg_value in_msg_full in_msg_body _4=65535 + THROWANY + }> // msg_value in_msg_full in_msg_body + BALANCE // msg_value in_msg_full in_msg_body _7 + FIRST // msg_value in_msg_full in_msg_body my_balance + OVER // msg_value in_msg_full in_msg_body my_balance in_msg_body + SEMPTY // msg_value in_msg_full in_msg_body my_balance _10 + IF:<{ // msg_value in_msg_full in_msg_body my_balance + 0 PUSHINT // msg_value in_msg_full in_msg_body my_balance _11=0 + }>ELSE<{ // msg_value in_msg_full in_msg_body my_balance + SWAP // msg_value in_msg_full my_balance in_msg_body + 32 LDU // msg_value in_msg_full my_balance _11 in_msg_body + -ROT // msg_value in_msg_full in_msg_body my_balance _11 + }> // msg_value in_msg_full in_msg_body my_balance op + s0 s3 XCHG // msg_value op in_msg_body my_balance in_msg_full + CTOS // msg_value op in_msg_body my_balance cs + 4 LDU // msg_value op in_msg_body my_balance flags cs + SWAP + 1 PUSHINT // msg_value op in_msg_body my_balance cs flags _22=1 + AND // msg_value op in_msg_body my_balance cs _23 + IFJMP:<{ // msg_value op in_msg_body my_balance cs + 5 BLKDROP // + }> // msg_value op in_msg_body my_balance cs + LDMSGADDR // msg_value op in_msg_body my_balance sender_address cs + LDMSGADDR // msg_value op in_msg_body my_balance sender_address _217 _216 + NIP // msg_value op in_msg_body my_balance sender_address cs + LDVARUINT16 // msg_value op in_msg_body my_balance sender_address _219 _218 + NIP // msg_value op in_msg_body my_balance sender_address cs + 1 PUSHINT // msg_value op in_msg_body my_balance sender_address cs _32=1 + SDSKIPFIRST // msg_value op in_msg_body my_balance sender_address cs + LDVARUINT16 // msg_value op in_msg_body my_balance sender_address _221 _220 + NIP // msg_value op in_msg_body my_balance sender_address cs + LDVARUINT16 // msg_value op in_msg_body my_balance sender_address _223 _222 + DROP // msg_value op in_msg_body my_balance sender_address fwd_fee + load_data CALLDICT // msg_value op in_msg_body my_balance sender_address fwd_fee content item_code init? index collection_address owner_address domain auction last_fill_up_time + s6 PUSH // msg_value op in_msg_body my_balance sender_address fwd_fee content item_code init? index collection_address owner_address domain auction last_fill_up_time init? + NOT // msg_value op in_msg_body my_balance sender_address fwd_fee content item_code init? index collection_address owner_address domain auction last_fill_up_time _49 + IFJMP:<{ // msg_value op in_msg_body my_balance sender_address fwd_fee content item_code init? index collection_address owner_address domain auction last_fill_up_time + 4 BLKDROP + s2 POP + s3 POP + s3 POP + s4 POP + s5 POP // msg_value index in_msg_body item_code sender_address collection_address + s0 s1 PUXC // msg_value index in_msg_body item_code collection_address collection_address sender_address + SDEQ // msg_value index in_msg_body item_code collection_address _51 + 405 THROWIFNOT + s0 s2 XCHG // msg_value index collection_address item_code in_msg_body + LDMSGADDR // msg_value index collection_address item_code from_address in_msg_body + LDREF // msg_value index collection_address item_code from_address _236 _235 + DROP // msg_value index collection_address item_code from_address domain + NEWDICT // msg_value index collection_address item_code from_address domain _60 + 0 PUSHINT // msg_value index collection_address item_code from_address domain _60 _61=0 + NEWC // msg_value index collection_address item_code from_address domain _60 _61=0 _62 + 8 STU // msg_value index collection_address item_code from_address domain _60 _64 + STDICT // msg_value index collection_address item_code from_address domain _65 + ENDC // msg_value index collection_address item_code from_address domain content + NOW // msg_value index collection_address item_code from_address domain content _68 + 1659171600 PUSHINT // msg_value index collection_address item_code from_address domain content _68 _69=1659171600 + SUB // msg_value index collection_address item_code from_address domain content seconds + 2592000 PUSHINT // msg_value index collection_address item_code from_address domain content seconds _72=2592000 + DIV // msg_value index collection_address item_code from_address domain content months + DUP // msg_value index collection_address item_code from_address domain content months months + 12 GTINT // msg_value index collection_address item_code from_address domain content months _75 + IF:<{ // msg_value index collection_address item_code from_address domain content months + DROP // msg_value index collection_address item_code from_address domain content + 12 PUSHINT // msg_value index collection_address item_code from_address domain content months=12 + }> // msg_value index collection_address item_code from_address domain content months + 604800 PUSHINT // msg_value index collection_address item_code from_address domain content months _78=604800 + 601200 PUSHINT + ROT // msg_value index collection_address item_code from_address domain content _78=604800 _81 months + MUL // msg_value index collection_address item_code from_address domain content _78=604800 _82 + 12 PUSHINT // msg_value index collection_address item_code from_address domain content _78=604800 _82 _83=12 + DIV // msg_value index collection_address item_code from_address domain content _78=604800 _84 + SUB // msg_value index collection_address item_code from_address domain content duration + NOW // msg_value index collection_address item_code from_address domain content duration _87 + SWAP // msg_value index collection_address item_code from_address domain content _87 duration + ADD // msg_value index collection_address item_code from_address domain content auction_end_time + zero_address CALLDICT // msg_value index collection_address item_code from_address domain content auction_end_time _89 + s4 s8 s8 XCHG3 // _89 index collection_address item_code content domain from_address msg_value auction_end_time + pack_auction CALLDICT // _89 index collection_address item_code content domain _90 + 5 2 REVERSE + s3 s4 XCHG + NOW // content item_code index collection_address _89 domain _90 _91 + store_data CALLDICT + }> // msg_value op in_msg_body my_balance sender_address fwd_fee content item_code init? index collection_address owner_address domain auction last_fill_up_time + s4 s10 PUSH2 // msg_value op in_msg_body my_balance sender_address fwd_fee content item_code init? index collection_address owner_address domain auction last_fill_up_time collection_address sender_address + SDEQ // msg_value op in_msg_body my_balance sender_address fwd_fee content item_code init? index collection_address owner_address domain auction last_fill_up_time _93 + s1 s7 XCHG // msg_value op in_msg_body my_balance sender_address fwd_fee content item_code last_fill_up_time index collection_address owner_address domain auction init? _93 + AND // msg_value op in_msg_body my_balance sender_address fwd_fee content item_code last_fill_up_time index collection_address owner_address domain auction _94 + IFJMP:<{ // msg_value op in_msg_body my_balance sender_address fwd_fee content item_code last_fill_up_time index collection_address owner_address domain auction + s11 s13 XCHG + 13 BLKDROP // in_msg_body + LDMSGADDR // _238 _237 + DROP // from_address + 0 PUSHINT // from_address _98=0 + DUP // from_address _98=0 _99=0 + LTIME // from_address _98=0 _99=0 _100 + PUSHNULL // from_address _98=0 _99=0 _100 _101 + 64 PUSHINT // from_address _98=0 _99=0 _100 _101 _102=64 + send_msg INLINECALLDICT + }> // msg_value op in_msg_body my_balance sender_address fwd_fee content item_code last_fill_up_time index collection_address owner_address domain auction + DUP // msg_value op in_msg_body my_balance sender_address fwd_fee content item_code last_fill_up_time index collection_address owner_address domain auction auction + unpack_auction CALLDICT // msg_value op in_msg_body my_balance sender_address fwd_fee content item_code last_fill_up_time index collection_address owner_address domain auction max_bid_address max_bid_amount auction_end_time + NOW // msg_value op in_msg_body my_balance sender_address fwd_fee content item_code last_fill_up_time index collection_address owner_address domain auction max_bid_address max_bid_amount auction_end_time _109 + SWAP // msg_value op in_msg_body my_balance sender_address fwd_fee content item_code last_fill_up_time index collection_address owner_address domain auction max_bid_address max_bid_amount _109 auction_end_time + GREATER // msg_value op in_msg_body my_balance sender_address fwd_fee content item_code last_fill_up_time index collection_address owner_address domain auction max_bid_address max_bid_amount auction_complete + s0 s14 XCHG // msg_value op auction_complete my_balance sender_address fwd_fee content item_code last_fill_up_time index collection_address owner_address domain auction max_bid_address max_bid_amount in_msg_body + 64 LDU // msg_value op auction_complete my_balance sender_address fwd_fee content item_code last_fill_up_time index collection_address owner_address domain auction max_bid_address max_bid_amount query_id in_msg_body + s4 PUSH // msg_value op auction_complete my_balance sender_address fwd_fee content item_code last_fill_up_time index collection_address owner_address domain auction max_bid_address max_bid_amount query_id in_msg_body auction + ISNULL // msg_value op auction_complete my_balance sender_address fwd_fee content item_code last_fill_up_time index collection_address owner_address domain auction max_bid_address max_bid_amount query_id in_msg_body _115 + NOT // msg_value op auction_complete my_balance sender_address fwd_fee content item_code last_fill_up_time index collection_address owner_address domain auction max_bid_address max_bid_amount query_id in_msg_body _116 + s1 16 s() XCHG // msg_value op in_msg_body my_balance sender_address fwd_fee content item_code last_fill_up_time index collection_address owner_address domain auction max_bid_address max_bid_amount query_id auction_complete _116 + AND // msg_value op in_msg_body my_balance sender_address fwd_fee content item_code last_fill_up_time index collection_address owner_address domain auction max_bid_address max_bid_amount query_id _117 + IF:<{ // msg_value op in_msg_body my_balance sender_address fwd_fee content item_code last_fill_up_time index collection_address owner_address domain auction max_bid_address max_bid_amount query_id + s3 POP + s4 POP // msg_value op in_msg_body my_balance sender_address fwd_fee content item_code last_fill_up_time index collection_address max_bid_amount domain query_id max_bid_address + s11 s14 PUSH2 // msg_value op in_msg_body my_balance sender_address fwd_fee content item_code last_fill_up_time index collection_address max_bid_amount domain query_id max_bid_address my_balance msg_value + SUB // msg_value op in_msg_body my_balance sender_address fwd_fee content item_code last_fill_up_time index collection_address max_bid_amount domain query_id max_bid_address balance_without_msg + 1000000000 PUSHINT // msg_value op in_msg_body my_balance sender_address fwd_fee content item_code last_fill_up_time index collection_address max_bid_amount domain query_id max_bid_address balance_without_msg _121 + s1 s(-1) PUXC // msg_value op in_msg_body my_balance sender_address fwd_fee content item_code last_fill_up_time index collection_address max_bid_amount domain query_id max_bid_address balance_without_msg balance_without_msg _121 + SUB // msg_value op in_msg_body my_balance sender_address fwd_fee content item_code last_fill_up_time index collection_address max_bid_amount domain query_id max_bid_address balance_without_msg _122 + s5 s(-1) PUXC // msg_value op in_msg_body my_balance sender_address fwd_fee content item_code last_fill_up_time index collection_address max_bid_amount domain query_id max_bid_address balance_without_msg max_bid_amount _122 + GREATER // msg_value op in_msg_body my_balance sender_address fwd_fee content item_code last_fill_up_time index collection_address max_bid_amount domain query_id max_bid_address balance_without_msg _123 + IF:<{ // msg_value op in_msg_body my_balance sender_address fwd_fee content item_code last_fill_up_time index collection_address max_bid_amount domain query_id max_bid_address balance_without_msg + s4 POP // msg_value op in_msg_body my_balance sender_address fwd_fee content item_code last_fill_up_time index collection_address balance_without_msg domain query_id max_bid_address + 1000000000 PUSHINT // msg_value op in_msg_body my_balance sender_address fwd_fee content item_code last_fill_up_time index collection_address balance_without_msg domain query_id max_bid_address _125 + s1 s4 XCHG // msg_value op in_msg_body my_balance sender_address fwd_fee content item_code last_fill_up_time index collection_address max_bid_address domain query_id balance_without_msg _125 + SUB // msg_value op in_msg_body my_balance sender_address fwd_fee content item_code last_fill_up_time index collection_address max_bid_address domain query_id _124 + }>ELSE<{ // msg_value op in_msg_body my_balance sender_address fwd_fee content item_code last_fill_up_time index collection_address max_bid_amount domain query_id max_bid_address balance_without_msg + DROP // msg_value op in_msg_body my_balance sender_address fwd_fee content item_code last_fill_up_time index collection_address _124 domain query_id max_bid_address + s0 s3 XCHG // msg_value op in_msg_body my_balance sender_address fwd_fee content item_code last_fill_up_time index collection_address max_bid_address domain query_id _124 + }> // msg_value op in_msg_body my_balance sender_address fwd_fee content item_code last_fill_up_time index collection_address max_bid_address domain query_id amount_to_send + DUP // msg_value op in_msg_body my_balance sender_address fwd_fee content item_code last_fill_up_time index collection_address max_bid_address domain query_id amount_to_send amount_to_send + 0 GTINT // msg_value op in_msg_body my_balance sender_address fwd_fee content item_code last_fill_up_time index collection_address max_bid_address domain query_id amount_to_send _128 + IF:<{ // msg_value op in_msg_body my_balance sender_address fwd_fee content item_code last_fill_up_time index collection_address max_bid_address domain query_id amount_to_send + 923790417 PUSHINT // msg_value op in_msg_body my_balance sender_address fwd_fee content item_code last_fill_up_time index collection_address max_bid_address domain query_id amount_to_send _129=923790417 + PUSHNULL // msg_value op in_msg_body my_balance sender_address fwd_fee content item_code last_fill_up_time index collection_address max_bid_address domain query_id amount_to_send _129=923790417 _130 + 2 PUSHINT // msg_value op in_msg_body my_balance sender_address fwd_fee content item_code last_fill_up_time index collection_address max_bid_address domain query_id amount_to_send _129=923790417 _130 _131=2 + s7 PUSH + s3 s4 XCPU + s6 s3 s2 PUXC2 // msg_value op in_msg_body my_balance sender_address fwd_fee content item_code last_fill_up_time index collection_address max_bid_address domain query_id amount_to_send collection_address amount_to_send _129=923790417 query_id _130 _131=2 + send_msg INLINECALLDICT + s1 s11 XCHG // msg_value op in_msg_body query_id sender_address fwd_fee content item_code last_fill_up_time index collection_address max_bid_address domain my_balance amount_to_send + SUB // msg_value op in_msg_body query_id sender_address fwd_fee content item_code last_fill_up_time index collection_address max_bid_address domain my_balance + s0 s10 XCHG // msg_value op in_msg_body my_balance sender_address fwd_fee content item_code last_fill_up_time index collection_address max_bid_address domain query_id + }>ELSE<{ + DROP // msg_value op in_msg_body my_balance sender_address fwd_fee content item_code last_fill_up_time index collection_address max_bid_address domain query_id + }> // msg_value op in_msg_body my_balance sender_address fwd_fee content item_code last_fill_up_time index collection_address owner_address domain query_id + s7 s6 s4 PUSH3 + s6 s5 s4 PUSH3 + PUSHNULL + s0 s12 PUXC // msg_value op in_msg_body my_balance sender_address fwd_fee content item_code auction index collection_address owner_address domain query_id content item_code index collection_address owner_address domain auction last_fill_up_time + store_data CALLDICT + s0 s5 XCHG // msg_value op in_msg_body my_balance sender_address fwd_fee content item_code query_id index collection_address owner_address domain auction + }>ELSE<{ + s8 POP + 2DROP // msg_value op in_msg_body my_balance sender_address fwd_fee content item_code query_id index collection_address owner_address domain auction + }> + 0x437dc408 PUSHINT // msg_value op in_msg_body my_balance sender_address fwd_fee content item_code query_id index collection_address owner_address domain auction _136 + s13 s(-1) PUXC // msg_value op in_msg_body my_balance sender_address fwd_fee content item_code query_id index collection_address owner_address domain auction op _136 + EQUAL // msg_value op in_msg_body my_balance sender_address fwd_fee content item_code query_id index collection_address owner_address domain auction _137 + IFJMP:<{ // msg_value op in_msg_body my_balance sender_address fwd_fee content item_code query_id index collection_address owner_address domain auction + 14 BLKDROP // + }> // msg_value op in_msg_body my_balance sender_address fwd_fee content item_code query_id index collection_address owner_address domain auction + 0x16c7d435 PUSHINT // msg_value op in_msg_body my_balance sender_address fwd_fee content item_code query_id index collection_address owner_address domain auction _138 + s13 s(-1) PUXC // msg_value op in_msg_body my_balance sender_address fwd_fee content item_code query_id index collection_address owner_address domain auction op _138 + EQUAL // msg_value op in_msg_body my_balance sender_address fwd_fee content item_code query_id index collection_address owner_address domain auction _139 + IFJMP:<{ // msg_value op in_msg_body my_balance sender_address fwd_fee content item_code query_id index collection_address owner_address domain auction + s6 s8 XCHG + 8 BLKDROP + s2 POP + s3 POP // msg_value sender_address in_msg_body item_code + SWAP + 9 PUSHPOW2 // msg_value sender_address item_code in_msg_body _142=512 + LDSLICEX // msg_value sender_address item_code signature in_msg_body + 256 LDU // msg_value sender_address item_code signature amount in_msg_body + MYADDR // msg_value sender_address item_code signature amount in_msg_body issued_collection_addr + SWAP // msg_value sender_address item_code signature amount issued_collection_addr in_msg_body + LDREF // msg_value sender_address item_code signature amount issued_collection_addr _249 _248 + DROP // msg_value sender_address item_code signature amount issued_collection_addr new_domain + get_public_key CALLDICT // msg_value sender_address item_code signature amount issued_collection_addr new_domain public_key + NEWC // msg_value sender_address item_code signature amount issued_collection_addr new_domain public_key _156 + s7 PUSH // msg_value sender_address item_code signature amount issued_collection_addr new_domain public_key _156 sender_address + STSLICER // msg_value sender_address item_code signature amount issued_collection_addr new_domain public_key _157 + s0 s3 XCHG2 // msg_value sender_address item_code signature amount public_key new_domain _157 issued_collection_addr + STSLICER // msg_value sender_address item_code signature amount public_key new_domain _158 + s3 s(-1) PUXC // msg_value sender_address item_code signature amount public_key new_domain amount _158 + 256 STU // msg_value sender_address item_code signature amount public_key new_domain _160 + s1 s(-1) PUXC // msg_value sender_address item_code signature amount public_key new_domain new_domain _160 + STREF // msg_value sender_address item_code signature amount public_key new_domain _161 + ENDC // msg_value sender_address item_code signature amount public_key new_domain signed_data + HASHCU // msg_value sender_address item_code signature amount public_key new_domain hash + DUMPSTK + s4 s2 XCHG2 // msg_value sender_address item_code new_domain amount hash signature public_key + CHKSIGNU // msg_value sender_address item_code new_domain amount success? + 413 THROWIFNOT + s4 s0 PUSH2 // msg_value sender_address item_code new_domain amount msg_value amount + GEQ // msg_value sender_address item_code new_domain amount _171 + NIP + s4 POP // _171 sender_address item_code new_domain + s0 s3 XCHG // new_domain sender_address item_code _171 + 414 THROWIFNOT + s2 PUSH // new_domain sender_address item_code new_domain + HASHCU // new_domain sender_address item_code new_item_index + s2 s3 XCHG2 // new_item_index item_code sender_address new_domain + deploy_bought_item CALLDICT + }> // msg_value op in_msg_body my_balance sender_address fwd_fee content item_code query_id index collection_address owner_address domain auction + s13 POP // auction op in_msg_body my_balance sender_address fwd_fee content item_code query_id index collection_address owner_address domain + 0x1a039a51 PUSHINT // auction op in_msg_body my_balance sender_address fwd_fee content item_code query_id index collection_address owner_address domain _178 + s12 s(-1) PUXC // auction op in_msg_body my_balance sender_address fwd_fee content item_code query_id index collection_address owner_address domain op _178 + EQUAL // auction op in_msg_body my_balance sender_address fwd_fee content item_code query_id index collection_address owner_address domain _179 + IFJMP:<{ // auction op in_msg_body my_balance sender_address fwd_fee content item_code query_id index collection_address owner_address domain + s1 s7 XCHG + 7 BLKDROP + 4 2 BLKDROP2 // sender_address owner_address + SDEQ // _181 + 401 THROWIFNOT + }> // auction op in_msg_body my_balance sender_address fwd_fee content item_code query_id index collection_address owner_address domain + 0x5fcc3d14 PUSHINT // auction op in_msg_body my_balance sender_address fwd_fee content item_code query_id index collection_address owner_address domain _183 + s12 s(-1) PUXC // auction op in_msg_body my_balance sender_address fwd_fee content item_code query_id index collection_address owner_address domain op _183 + EQUAL // auction op in_msg_body my_balance sender_address fwd_fee content item_code query_id index collection_address owner_address domain _184 + IFJMP:<{ // auction op in_msg_body my_balance sender_address fwd_fee content item_code query_id index collection_address owner_address domain + s11 POP // auction domain in_msg_body my_balance sender_address fwd_fee content item_code query_id index collection_address owner_address + s7 s0 PUSH2 // auction domain in_msg_body my_balance sender_address fwd_fee content item_code query_id index collection_address owner_address sender_address owner_address + SDEQ // auction domain in_msg_body my_balance sender_address fwd_fee content item_code query_id index collection_address owner_address _186 + 401 THROWIFNOT + s8 s11 XCHG + s5 s10 XCHG + s4 s9 XCHG + s8 s7 s6 XCHG3 + s1 s5 XCHG + s3 s4 XCHG + s0 s2 XCHG // my_balance content item_code index collection_address owner_address sender_address query_id in_msg_body fwd_fee domain auction + transfer_ownership INLINECALLDICT + }> // auction op in_msg_body my_balance sender_address fwd_fee content item_code query_id index collection_address owner_address domain + s6 POP + s6 POP + s7 POP // auction op in_msg_body collection_address sender_address owner_address domain item_code query_id index + 0x1a0b9d51 PUSHINT // auction op in_msg_body collection_address sender_address owner_address domain item_code query_id index _189 + s9 s(-1) PUXC // auction op in_msg_body collection_address sender_address owner_address domain item_code query_id index op _189 + EQUAL // auction op in_msg_body collection_address sender_address owner_address domain item_code query_id index _190 + IFJMP:<{ // auction op in_msg_body collection_address sender_address owner_address domain item_code query_id index + NIP + s7 POP // auction index in_msg_body collection_address sender_address owner_address domain item_code + s3 s2 XCPU // auction index in_msg_body collection_address item_code owner_address domain sender_address owner_address + SDEQ // auction index in_msg_body collection_address item_code owner_address domain _192 + 410 THROWIFNOT + s0 s4 XCHG // auction index domain collection_address item_code owner_address in_msg_body + LDREF // auction index domain collection_address item_code owner_address _251 _250 + DROP // auction index domain collection_address item_code owner_address _194 + s1 s5 s6 XCHG3 + s1 s4 XCHG + NOW // _194 item_code index collection_address owner_address domain auction _196 + store_data CALLDICT + }> // auction op in_msg_body collection_address sender_address owner_address domain item_code query_id index + s7 s9 XCHG2 + 5 BLKDROP // index op query_id collection_address sender_address + 0x2fcb26a2 PUSHINT // index op query_id collection_address sender_address _198 + s1 s4 XCHG // index sender_address query_id collection_address op _198 + EQUAL // index sender_address query_id collection_address _199 + IFJMP:<{ // index sender_address query_id collection_address + 0 PUSHINT // index sender_address query_id collection_address _200=0 + 0x8b771735 PUSHINT // index sender_address query_id collection_address _200=0 _201 + s0 s5 XCHG + NEWC // _201 sender_address query_id collection_address _200=0 index _202 + 256 STU // _201 sender_address query_id collection_address _200=0 _204 + ROT // _201 sender_address query_id _200=0 _204 collection_address + STSLICER // _201 sender_address query_id _200=0 _205 + s1 s3 XCHG + s4 s4 s0 XCHG3 + 64 PUSHINT // sender_address _200=0 _201 query_id _205 _206=64 + send_msg INLINECALLDICT + }> // index sender_address query_id collection_address + 4 BLKDROP // + 16 PUSHPOW2DEC // _208=65535 + THROWANY + }> + get_nft_data PROC:<{ + // + load_data CALLDICT // _10 _11 _12 _13 _14 _15 _16 _17 _18 + 3 BLKDROP + s4 POP // content owner_address init? index collection_address + s0 s3 s4 XCHG3 // init? index collection_address owner_address content + }> + get_editor PROC:<{ + // + load_data CALLDICT // _10 _11 _12 _13 _14 _15 _16 _17 _18 + s3 s8 XCHG + 8 BLKDROP // owner_address + }> + get_domain PROC:<{ + // + load_data CALLDICT // _11 _12 _13 _14 _15 _16 _17 _18 _19 + s2 s8 XCHG + 8 BLKDROP // domain + CTOS // _10 + }> + get_last_fill_up_time PROC:<{ + // + load_data CALLDICT // _10 _11 _12 _13 _14 _15 _16 _17 _18 + 8 1 BLKDROP2 // last_fill_up_time + }> + get_collection_data PROC:<{ + // + load_data CALLDICT // _12 _13 _14 _15 _16 _17 _18 _19 _20 + 8 BLKDROP // content + -1 PUSHINT // content _10=-1 + zero_address CALLDICT // content _10=-1 _11 + s1 s2 XCHG // _10=-1 content _11 + }> + get_nft_address_by_index PROC:<{ + // index + DROP // + load_data CALLDICT // _15 _16 _17 _18 _19 _20 _21 _22 _23 + s5 s6 XCHG + 6 BLKDROP + s2 POP // index nft_item_code + calculate_nft_item_state_init CALLDICT // state_init + 0 PUSHINT // state_init _13 + SWAP // _13 state_init + calculate_nft_item_address CALLDICT // _14 + }> + get_nft_content PROC:<{ + // index individual_nft_content + NIP // individual_nft_content + }> + dnsresolve PROC:<{ + // subdomain category + OVER // subdomain category subdomain + SBITS // subdomain category subdomain_bits + 8 PUSHINT // subdomain category subdomain_bits _5=8 + MOD // subdomain category _6 + 0 EQINT // subdomain category _8 + 70 THROWIFNOT + load_data CALLDICT // subdomain category _71 _72 _73 _74 _75 _76 _77 _78 _79 + 8 BLKDROP // subdomain category content + CTOS // subdomain category cs + 8 LDU // subdomain category _23 cs + SWAP // subdomain category cs _23 + 0 EQINT // subdomain category cs _27 + 412 THROWIFNOT + LDDICT // subdomain category _83 _82 + DROP // subdomain category keyvalue_map + s2 PUSH // subdomain category keyvalue_map subdomain + 8 PLDI // subdomain category keyvalue_map _34 + 0 EQINT // subdomain category keyvalue_map starts_with_zero_byte + s3 PUSH // subdomain category keyvalue_map starts_with_zero_byte subdomain + SBITS // subdomain category keyvalue_map starts_with_zero_byte _37 + 8 EQINT // subdomain category keyvalue_map starts_with_zero_byte _39 + s1 s(-1) PUXC // subdomain category keyvalue_map starts_with_zero_byte starts_with_zero_byte _39 + AND // subdomain category keyvalue_map starts_with_zero_byte _40 + IFJMP:<{ // subdomain category keyvalue_map starts_with_zero_byte + DROP + s2 POP // keyvalue_map category + DUP // keyvalue_map category category + 0 EQINT // keyvalue_map category _42 + IFJMP:<{ // keyvalue_map category + DROP // keyvalue_map + 8 PUSHINT // keyvalue_map _43=8 + SWAP // _43=8 keyvalue_map + }> // keyvalue_map category + SWAP + 8 PUSHPOW2 // category keyvalue_map _46=256 + DICTUGETREF // _84 _85 + DROP // value + 8 PUSHINT // value _48=8 + SWAP // _48=8 value + }> // subdomain category keyvalue_map starts_with_zero_byte + 2 1 BLKDROP2 // subdomain starts_with_zero_byte + DUP // subdomain starts_with_zero_byte starts_with_zero_byte + IF:<{ // subdomain starts_with_zero_byte + SWAP // starts_with_zero_byte subdomain + 8 LDU // starts_with_zero_byte _87 _86 + NIP // starts_with_zero_byte subdomain + SWAP // subdomain starts_with_zero_byte + }> // subdomain starts_with_zero_byte + OVER // subdomain starts_with_zero_byte subdomain + get_top_domain_bits CALLDICT // subdomain starts_with_zero_byte top_subdomain_bits + s2 s2 XCPU // top_subdomain_bits starts_with_zero_byte subdomain top_subdomain_bits + LDSLICEX // top_subdomain_bits starts_with_zero_byte _89 _88 + DROP // top_subdomain_bits starts_with_zero_byte top_subdomain + HASHSU // top_subdomain_bits starts_with_zero_byte item_index + 47763 PUSHINT // top_subdomain_bits starts_with_zero_byte item_index _60=47763 + NEWC // top_subdomain_bits starts_with_zero_byte item_index _60=47763 _61 + 16 STU // top_subdomain_bits starts_with_zero_byte item_index _63 + SWAP // top_subdomain_bits starts_with_zero_byte _63 item_index + get_nft_address_by_index CALLDICT // top_subdomain_bits starts_with_zero_byte _63 _64 + STSLICER // top_subdomain_bits starts_with_zero_byte _65 + ENDC // top_subdomain_bits starts_with_zero_byte result + SWAP // top_subdomain_bits result starts_with_zero_byte + IF:<{ // top_subdomain_bits result + 8 PUSHINT // top_subdomain_bits result _67=8 + }>ELSE<{ // top_subdomain_bits result + 0 PUSHINT // top_subdomain_bits result _67=0 + }> + s1 s2 XCHG // result top_subdomain_bits _67 + ADD // result _70 + SWAP // _70 result + }> +}END>c diff --git a/build/nft-collection.compiled.json b/build/nft-collection.compiled.json new file mode 100644 index 0000000..9660e95 --- /dev/null +++ b/build/nft-collection.compiled.json @@ -0,0 +1 @@ +{"hex":"b5ee9c72c1022b010004b600000d00120017001c006d0072008a00a100a600c100c600da00e000e500ea010401090128012d013d01820187018c01a501aa0200024c02510256025b02d902df031e03600365036a039403b003b503be043b048804b60114ff00f4a413f4bcf2c80b010201620d0202012008030201200504009dba30c3020d74978a908c000f2e04620d70a07c00021d749c0085210b0935b786de0209501d3073101de21f0025122d71830f9018200ba93c8cb0f01820167a3ed43d8cf16c90191789170e212a001802012007060129b5347da89a1a9a9a9a7fff481a860206abe0bb67902a0029b60b7da89a1a9a9a9a7fff481a860be0affe0022500201200a090031ba7a3ed44d0d4d4d4d3fffa40d43010455f05f00f7001f01180201200c0b0023b4c7b91f0519e2c039e2c039e2d93a1f20300007b56ba6300202cb150e020148100f002fd38647c14678b2801e78b2801e78b6580e4e87c80acfc88402012012110039559f00f7021f011778018c8cb0558cf1670fa02cb6bccccc98040fb0080201201413001b3e401d3232c084b281f2fff274200085343500740075007435007400750c341c7232c1c933c58973c59633c5b272140133c58933c58073c5b24075007432140173c5940133c5b240f50c00b2333304b33332600201201b160201201817002df00e465fffc14678b64b81064658089fa007a00658064c0201481a1900a7200648f000e4cc20193788f00124cc200cb788f00164cc20067788f001a4cc20053788f001e4cc2003f788f002248c1eb780f082249d4cf79480ea1e9400e869c644a81eaa4120840ee6b2802a006a200caa41200093083001258c2040fa201938083001658c20407d200cb8083001a58c204064200a38083001e58c20404b2007b8083002258c204032200538083002650c20191eb83002a4e00c9d781e9c60020120221c020120211d020120201e01f50835d25c32086480ace39b88b000082ce3994134c1dc08b09008f056ec250c0069afe38d48b09808f05eec250c0069ae638988b08bc8f04eac250c0069812385c8b00b650c0c600fa740b017e4cc600fe53cb0410078b8b8b8b88129be083080251410b2c1669e14d02a4228514c33c07880a9819000c13780ba201f00086c31c9d000791c0875d272238b14c86e882ce3890c00f4c1c8700ec12982092ce5940972c1d411244cb888ecd4c8efac24fcb040f7941100f7b9b27400a844b5c60c20007f57021d7498e355cba20b38e2e3002d30721c02d23c200b024a6f85240b9b022c22f23c13ab0b122c26003c17b13b012b1b320b39402a60802de13dee66c12ba802012026230201202524004f3223880875d244b5c61673c58875d2883000082ce6c070007cb83280b50c3400a44c78b98c72742000331c27c074c1c07000082ce500a98200b784b98c4830003cb432600201202827000d1c3232c072742002f10831c0252103fcbc37807434c0c05c6c2497c0f80074c7fb513435353534fffe90350c0d49b00023b00c0d40fc00fc01948576cf05efbcb833097e40417e900c0930c02700fc01d518dcc1bc053cb833648cccf894903c0432140173c5b2721633c5b304f33244bc04f81b144860840dc3fb146ea497c138202a29009682102a0c8a2012ba8e3a01fa403021c705f2e19382102a0c8a2012706d71708010c8cb055007cf165005fa0215cb6a12cb1fcb3f226eb39458cf17019132e201c901fb00e05f03840ff2f0005821d74920c218f2e0c8208103f0bbf2e0c92078a908c000f2e0ca02f005f2e0cbd0d307d3033002ab0202f0091e3c893b"} \ No newline at end of file diff --git a/build/nft-collection.fif b/build/nft-collection.fif new file mode 100644 index 0000000..a9011a8 --- /dev/null +++ b/build/nft-collection.fif @@ -0,0 +1,845 @@ +"Asm.fif" include +// automatically generated from `contracts/nft-collection.fc` incl:`contracts/imports/dns-utils.fc` incl:`contracts/imports/stdlib.fc` incl:`contracts/imports/op-codes.fc` incl:`contracts/imports/params.fc` +PROGRAM{ + DECLPROC zero_address + DECLPROC get_top_domain_bits + DECLPROC read_comment + DECLPROC read_domain_from_comment + DECLPROC check_domain_string + DECLPROC split_by_semicolon + DECLPROC decode_asciicode + DECLPROC get_min_price_config + DECLPROC price_function + DECLPROC get_min_price + DECLPROC force_chain + DECLPROC load_data + DECLPROC save_data + DECLPROC calcprice + DECLPROC calculate_nft_item_state_init + DECLPROC get_attachment + DECLPROC calculate_nft_item_address + DECLPROC send_msg + DECLPROC deploy_nft_item + DECLPROC verify_signature + DECLPROC recv_internal + 102491 DECLMETHOD get_collection_data + 92067 DECLMETHOD get_nft_address_by_index + 68445 DECLMETHOD get_nft_content + 108963 DECLMETHOD get_price + 75325 DECLMETHOD signature_data + 123660 DECLMETHOD dnsresolve + zero_address PROC:<{ + // + 0 PUSHINT // _0=0 + NEWC // _0=0 _1 + 2 STU // _3 + ENDC // _4 + CTOS // _5 + }> + get_top_domain_bits PROC:<{ + // domain + 0 PUSHINT // domain i=0 + UNTIL:<{ + SWAP // i domain + 8 LDU // i char domain + SWAP // i domain char + 0 EQINT // i domain need_break + DUP // i domain need_break need_break + NOT // i domain need_break _11 + IF:<{ // i domain need_break + s0 s2 XCHG // need_break domain i + 8 ADDCONST // need_break domain i + s0 s2 XCHG // i domain need_break + }> // i domain need_break + s1 s2 XCHG // domain i need_break + }> // domain i + NIP // i + DUP // i i + 0 EQINT // i _16 + 201 THROWIF + }> + read_comment PROC:<{ + // in_msg_body + NEWC // in_msg_body result + UNTIL:<{ + OVER // in_msg_body result in_msg_body + SBITS // in_msg_body result _6 + s1 s2 XCHG // result in_msg_body _6 + LDSLICEX // result _5 in_msg_body + -ROT // in_msg_body result _5 + STSLICER // in_msg_body result + OVER // in_msg_body result in_msg_body + SREFS // in_msg_body result refs_len + DUP // in_msg_body result refs_len refs_len + 0 EQINT // in_msg_body result refs_len need_break + DUP // in_msg_body result refs_len need_break need_break + NOT // in_msg_body result refs_len need_break _13 + IF:<{ // in_msg_body result refs_len need_break + SWAP // in_msg_body result need_break refs_len + 1 EQINT // in_msg_body result need_break _16 + 202 THROWIFNOT + s0 s2 XCHG // need_break result in_msg_body + LDREF // need_break result _26 _25 + DROP // need_break result _18 + CTOS // need_break result in_msg_body + s0 s2 XCHG // in_msg_body result need_break + }>ELSE<{ + NIP // in_msg_body result need_break + }> + }> // in_msg_body result + NIP // result + ENDC // _21 + CTOS // _22 + }> + read_domain_from_comment PROC:<{ + // in_msg_body + read_comment CALLDICT // _1 + }> + check_domain_string PROC:<{ + // domain + 0 PUSHINT // domain i=0 + OVER // domain i=0 domain + SBITS // domain i=0 len + UNTIL:<{ + 2DUP // domain i len i len + EQUAL // domain i len need_break + DUP // domain i len need_break need_break + NOT // domain i len need_break _8 + IF:<{ // domain i len need_break + DROP // domain i len + s0 s2 XCHG // len i domain + 8 LDU // len i char domain + OVER // len i char domain char + 45 EQINT // len i char domain is_hyphen + s3 PUSH // len i char domain is_hyphen i + 0 GTINT // len i char domain is_hyphen _18 + AND // len i char domain _19 + s4 PUSH // len i char domain _19 len + -8 ADDCONST // len i char domain _19 _21 + s4 s(-1) PUXC // len i char domain _19 i _21 + LESS // len i char domain _19 _22 + AND // len i char domain _23 + s2 PUSH // len i char domain _23 char + 47 GTINT // len i char domain _23 _25 + s3 PUSH // len i char domain _23 _25 char + 58 LESSINT // len i char domain _23 _25 _27 + AND // len i char domain _23 _28 + OR // len i char domain _29 + s2 PUSH // len i char domain _29 char + 96 GTINT // len i char domain _29 _31 + s0 s3 XCHG // len i _31 domain _29 char + 123 LESSINT // len i _31 domain _29 _33 + s1 s3 XCHG // len i _29 domain _31 _33 + AND // len i _29 domain _34 + s1 s2 XCHG // len i domain _29 _34 + OR // len i domain valid_char + NOT // len i domain need_break + DUP // len i domain need_break need_break + NOT // len i domain need_break _37 + IF:<{ // len i domain need_break + s0 s2 XCHG // len need_break domain i + 8 ADDCONST // len need_break domain i + s0 s2 XCHG // len i domain need_break + }> // len i domain need_break + s1 s3 XCHG // domain i len need_break + }> // domain i len need_break + }> // domain i len + 1 2 BLKDROP2 // i len + EQUAL // _40 + }> + split_by_semicolon PROC:<{ + // str + 0 PUSHINT // str i=0 + OVER // str i=0 str + SBITS // str i=0 len + NEWC // str i=0 len result1 + UNTIL:<{ + s2 s1 PUSH2 // str i len result1 i len + EQUAL // str i len result1 need_break + DUP // str i len result1 need_break need_break + NOT // str i len result1 need_break _10 + IF:<{ // str i len result1 need_break + DROP // str i len result1 + s0 s3 XCHG // result1 i len str + 8 LDU // result1 i len char str + OVER // result1 i len char str char + 59 EQINT // result1 i len char str need_break + s0 s4 XCHG // result1 need_break len char str i + 8 ADDCONST // result1 need_break len char str i + s4 PUSH // result1 need_break len char str i need_break + NOT // result1 need_break len char str i _19 + IF:<{ // result1 need_break len char str i + s2 s5 XCHG2 // i need_break len str char result1 + 8 STU // i need_break len str result1 + s4 s4 XCHG2 // result1 need_break len i str + }>ELSE<{ + s2 POP // result1 need_break len i str + }> + s3 PUSH // result1 need_break len i str need_break + NOT // result1 need_break len i str _23 + s2 s3 PUSH2 // result1 need_break len i str _23 i len + GEQ // result1 need_break len i str _23 _24 + AND // result1 need_break len i str _25 + IF:<{ // result1 need_break len i str + 259 THROW + }> // result1 need_break len i str + s4 s4 XCHG2 + s0 s3 XCHG // str i len result1 need_break + }> // str i len result1 need_break + }> // str i len result1 + ENDC // str i len _28 + CTOS // str i len _29 + s0 s2 XCHG // str _29 len i + SUB // str _29 _31 + s1 s2 XCHG // _29 str _31 + LDSLICEX // _29 _36 _35 + DROP // _29 _30 + }> + decode_asciicode PROC:<{ + // str + DUP // str str + SBITS // str len + 0 PUSHINT // str len need_break=0 + NEWC // str len need_break=0 result + OVER // str len need_break=0 result res_len=0 + WHILE:<{ + s0 s2 XCHG // str len res_len result need_break + NOT // str len res_len result _9 + }>DO<{ // str len res_len result + s2 PUSH // str len res_len result len + 0 EQINT // str len res_len result need_break + DUP // str len res_len result need_break need_break + NOT // str len res_len result need_break _12 + IF:<{ // str len res_len result need_break + s0 s4 XCHG // need_break len res_len result str + 8 LDU // need_break len res_len result char str + 0 PUSHINT // need_break len res_len result char str byte=0 + s2 PUSH // need_break len res_len result char str byte=0 char + 64 GTINT // need_break len res_len result char str byte=0 _20 + s3 PUSH // need_break len res_len result char str byte=0 _20 char + 91 LESSINT // need_break len res_len result char str byte=0 _20 _22 + AND // need_break len res_len result char str byte=0 _23 + IF:<{ // need_break len res_len result char str byte=0 + DROP // need_break len res_len result char str + SWAP // need_break len res_len result str char + -65 ADDCONST // need_break len res_len result str byte + }>ELSE<{ // need_break len res_len result char str byte=0 + s2 PUSH // need_break len res_len result char str byte=0 char + 96 GTINT // need_break len res_len result char str byte=0 _27 + s3 PUSH // need_break len res_len result char str byte=0 _27 char + 123 LESSINT // need_break len res_len result char str byte=0 _27 _29 + AND // need_break len res_len result char str byte=0 _30 + IF:<{ // need_break len res_len result char str byte=0 + DROP // need_break len res_len result char str + SWAP // need_break len res_len result str char + -71 ADDCONST // need_break len res_len result str byte + }>ELSE<{ // need_break len res_len result char str byte=0 + s2 PUSH // need_break len res_len result char str byte=0 char + 47 GTINT // need_break len res_len result char str byte=0 _34 + s3 PUSH // need_break len res_len result char str byte=0 _34 char + 58 LESSINT // need_break len res_len result char str byte=0 _34 _36 + AND // need_break len res_len result char str byte=0 _37 + IF:<{ // need_break len res_len result char str byte=0 + DROP // need_break len res_len result char str + SWAP // need_break len res_len result str char + 4 ADDCONST // need_break len res_len result str byte + }>ELSE<{ // need_break len res_len result char str byte=0 + s2 PUSH // need_break len res_len result char str byte=0 char + 45 EQINT // need_break len res_len result char str byte=0 _41 + IF:<{ // need_break len res_len result char str byte=0 + DROP + NIP // need_break len res_len result str + 62 PUSHINT // need_break len res_len result str byte=62 + }>ELSE<{ // need_break len res_len result char str byte=0 + s0 s2 XCHG // need_break len res_len result byte=0 str char + 95 EQINT // need_break len res_len result byte=0 str _44 + IF:<{ // need_break len res_len result byte=0 str + NIP // need_break len res_len result str + 63 PUSHINT // need_break len res_len result str byte=63 + }>ELSE<{ // need_break len res_len result byte=0 str + 260 THROW + SWAP // need_break len res_len result str byte + }> + }> + }> + }> + }> + s0 s4 XCHG // need_break byte res_len result str len + -8 ADDCONST // need_break byte res_len result str len + DUP // need_break byte res_len result str len len + 0 GTINT // need_break byte res_len result str len _51 + IF:<{ // need_break byte res_len result str len + s4 s2 XCHG2 // need_break str res_len len byte result + 6 STU // need_break str res_len len result + }>ELSE<{ // need_break byte res_len result str len + 8 PUSHINT // need_break byte res_len result str len _56=8 + s4 s0 PUSH2 // need_break byte res_len result str len _56=8 res_len _57=8 + MOD // need_break byte res_len result str len _56=8 _58 + SUB // need_break byte res_len result str len _59 + s5 s3 s0 XCHG3 // need_break str res_len len byte result _59 + STUX // need_break str res_len len result + }> + s0 s2 XCHG // need_break str result len res_len + 6 ADDCONST // need_break str result len res_len + s0 s0 s3 XCHG3 + s0 s4 XCHG // str len res_len result need_break + }> // str len res_len result need_break + s0 s2 XCHG // str len need_break result res_len + }> // str len res_len result + 3 1 BLKDROP2 // result + ENDC // _63 + CTOS // _64 + }> + get_min_price_config PROC:<{ + // domain_char_count + DUP // domain_char_count domain_char_count + 4 EQINT // domain_char_count _2 + IFJMP:<{ // domain_char_count + DROP // + 1000 PUSHINT // _3=1000 + 100 PUSHINT // _3=1000 _4=100 + }> // domain_char_count + DUP // domain_char_count domain_char_count + 5 EQINT // domain_char_count _6 + IFJMP:<{ // domain_char_count + DROP // + 500 PUSHINT // _7=500 + 50 PUSHINT // _7=500 _8=50 + }> // domain_char_count + DUP // domain_char_count domain_char_count + 6 EQINT // domain_char_count _10 + IFJMP:<{ // domain_char_count + DROP // + 400 PUSHINT // _11=400 + 40 PUSHINT // _11=400 _12=40 + }> // domain_char_count + DUP // domain_char_count domain_char_count + 7 EQINT // domain_char_count _14 + IFJMP:<{ // domain_char_count + DROP // + 300 PUSHINT // _15=300 + 30 PUSHINT // _15=300 _16=30 + }> // domain_char_count + DUP // domain_char_count domain_char_count + 8 EQINT // domain_char_count _18 + IFJMP:<{ // domain_char_count + DROP // + 200 PUSHINT // _19=200 + 20 PUSHINT // _19=200 _20=20 + }> // domain_char_count + DUP // domain_char_count domain_char_count + 9 EQINT // domain_char_count _22 + IFJMP:<{ // domain_char_count + DROP // + 100 PUSHINT // _23=100 + 10 PUSHINT // _23=100 _24=10 + }> // domain_char_count + 10 EQINT // _26 + IFJMP:<{ // + 50 PUSHINT // _27=50 + 5 PUSHINT // _27=50 _28=5 + }> // + 10 PUSHINT // _29=10 + 1 PUSHINT // _29=10 _30=1 + }> + price_function PROC:<{ + // length multiplierx50 steepness + 25 PUSHINT // length multiplierx50 steepness price=25 + s3 PUSH // length multiplierx50 steepness price=25 length + 3 EQINT // length multiplierx50 steepness price=25 _6 + IF:<{ // length multiplierx50 steepness price=25 + DROP // length multiplierx50 steepness + 100 PUSHINT // length multiplierx50 steepness price=100 + }> // length multiplierx50 steepness price + s3 PUSH // length multiplierx50 steepness price length + 4 EQINT // length multiplierx50 steepness price _9 + IF:<{ // length multiplierx50 steepness price + DROP // length multiplierx50 steepness + 50 PUSHINT // length multiplierx50 steepness price=50 + }> // length multiplierx50 steepness price + s3 PUSH // length multiplierx50 steepness price length + 5 EQINT // length multiplierx50 steepness price _12 + IF:<{ // length multiplierx50 steepness price + DROP // length multiplierx50 steepness + 25 PUSHINT // length multiplierx50 steepness price=25 + }> // length multiplierx50 steepness price + s3 PUSH // length multiplierx50 steepness price length + 6 EQINT // length multiplierx50 steepness price _15 + IF:<{ // length multiplierx50 steepness price + DROP // length multiplierx50 steepness + 20 PUSHINT // length multiplierx50 steepness price=20 + }> // length multiplierx50 steepness price + s3 PUSH // length multiplierx50 steepness price length + 7 EQINT // length multiplierx50 steepness price _18 + IF:<{ // length multiplierx50 steepness price + DROP // length multiplierx50 steepness + 15 PUSHINT // length multiplierx50 steepness price=15 + }> // length multiplierx50 steepness price + s3 PUSH // length multiplierx50 steepness price length + 8 EQINT // length multiplierx50 steepness price _21 + IF:<{ // length multiplierx50 steepness price + DROP // length multiplierx50 steepness + 10 PUSHINT // length multiplierx50 steepness price=10 + }> // length multiplierx50 steepness price + s0 s3 XCHG // price multiplierx50 steepness length + 8 GTINT // price multiplierx50 steepness _24 + IF:<{ // price multiplierx50 steepness + 5 PUSHINT + s3 POP // price=5 multiplierx50 steepness + }> // price multiplierx50 steepness + s0 s2 PUXC // steepness multiplierx50 steepness price + MUL // steepness multiplierx50 _26 + 10 PUSHINT // steepness multiplierx50 _26 _27=10 + s0 s3 XCHG2 // _26 multiplierx50 _27=10 steepness + SUB // _26 multiplierx50 _28 + 25 MULCONST // _26 multiplierx50 _30 + s1 s2 XCHG // multiplierx50 _26 _30 + ADD // multiplierx50 _31 + 10 PUSHINT // multiplierx50 _31 _32=10 + DIV // multiplierx50 price + 1000000000 PUSHINT // multiplierx50 price _34=1000000000 + MUL // multiplierx50 _35 + SWAP // _35 multiplierx50 + MUL // _36 + 50 PUSHINT // _36 _37=50 + DIV // _38 + }> + get_min_price PROC:<{ + // domain_bits_length now_time + SWAP // now_time domain_bits_length + 3 RSHIFT# // now_time _5 + get_min_price_config CALLDICT // now_time start_min_price end_min_price + SWAP + 1000000000 PUSHINT // now_time end_min_price start_min_price _7=1000000000 + MUL // now_time end_min_price start_min_price + SWAP + 1000000000 PUSHINT // now_time start_min_price end_min_price _9=1000000000 + MUL // now_time start_min_price end_min_price + s0 s2 XCHG + 1659171600 PUSHINT // end_min_price start_min_price now_time _12=1659171600 + SUB // end_min_price start_min_price seconds + 2592000 PUSHINT // end_min_price start_min_price seconds _15=2592000 + DIV // end_min_price start_min_price months + DUP // end_min_price start_min_price months months + 21 GTINT // end_min_price start_min_price months _18 + IFJMP:<{ // end_min_price start_min_price months + 2DROP // end_min_price + }> // end_min_price start_min_price months + 1 2 BLKDROP2 // start_min_price months + REPEAT:<{ // start_min_price + 90 MULCONST // _20 + 100 PUSHINT // _20 _21=100 + DIV // start_min_price + }> + }> + force_chain PROC:<{ + // addr + REWRITESTDADDR // _8 _9 + DROP // wc + 0 PUSHINT // wc _5 + EQUAL // _6 + 333 THROWIFNOT + }> + load_data PROCINLINE:<{ + // + c4 PUSH // _1 + CTOS // ds + LDREF // _3 ds + LDREF // _3 _5 ds + LDREF // _3 _5 _7 ds + 256 LDU // _3 _5 _7 _9 ds + LDMSGADDR // _3 _5 _7 _9 _12 ds + LDREF // _3 _5 _7 _9 _12 _27 _26 + DROP // _3 _5 _7 _9 _12 _14 + }> + save_data PROCINLINE:<{ + // content nft_item_code pricing owner_key owner_addr data_scheme + s0 s5 XCHG + NEWC // data_scheme nft_item_code pricing owner_key owner_addr content _6 + STREF // data_scheme nft_item_code pricing owner_key owner_addr _7 + s1 s4 XCHG // data_scheme owner_addr pricing owner_key nft_item_code _7 + STREF // data_scheme owner_addr pricing owner_key _8 + s1 s2 XCHG // data_scheme owner_addr owner_key pricing _8 + STREF // data_scheme owner_addr owner_key _9 + 256 STU // data_scheme owner_addr _11 + SWAP // data_scheme _11 owner_addr + STSLICER // data_scheme _12 + STREF // _13 + ENDC // _14 + c4 POP + }> + calcprice PROCREF:<{ + // domain pricing + OVER // domain pricing domain + SBITS // domain pricing len + DUP // domain pricing len len + 24 GTINT // domain pricing len _8 + 200 THROWIFNOT + DUP + 1008 PUSHINT // domain pricing len len _13 + LEQ // domain pricing len _14 + 201 THROWIFNOT + DUP + 8 PUSHINT // domain pricing len len _17=8 + MOD // domain pricing len _18 + 0 EQINT // domain pricing len _20 + 202 THROWIFNOT + s0 s2 XCHG // len pricing domain + check_domain_string CALLDICT // len pricing _23 + 203 THROWIFNOT + CTOS // len pr + 8 LDU // len multiplier pr + 4 LDU // len multiplier _41 _40 + DROP // len multiplier steepness + s0 s2 XCHG // steepness multiplier len + 3 RSHIFT# // steepness multiplier _36 + s0 s2 XCHG // _36 multiplier steepness + price_function CALLDICT // _37 + }> + calculate_nft_item_state_init PROC:<{ + // item_index nft_item_code + SWAP + NEWC // nft_item_code item_index _3 + 256 STU // nft_item_code _5 + MYADDR // nft_item_code _5 _6 + STSLICER // nft_item_code _7 + ENDC // nft_item_code data + 0 PUSHINT // nft_item_code data _9=0 + DUP // nft_item_code data _9=0 _10=0 + NEWC // nft_item_code data _9=0 _10=0 _11 + 2 STU // nft_item_code data _9=0 _13 + s1 s3 XCHG // _9=0 data nft_item_code _13 + STDICT // _9=0 data _14 + STDICT // _9=0 _15 + 1 STU // _17 + ENDC // _18 + }> + get_attachment PROC:<{ + // domain data_scheme + CTOS // domain cs + LDREF // domain _5 cs + SWAP // domain cs _5 + CTOS // domain cs prefix + SWAP // domain prefix cs + LDREF // domain prefix _9 cs + SWAP // domain prefix cs _9 + CTOS // domain prefix cs postfixes + LDREF // domain prefix cs _13 postfixes + SWAP // domain prefix cs postfixes _13 + CTOS // domain prefix cs postfixes postfix + SWAP // domain prefix cs postfix postfixes + LDREF // domain prefix cs postfix _61 _60 + DROP // domain prefix cs postfix _17 + CTOS // domain prefix cs postfix image_postfix + 1 PUSHINT // domain prefix cs postfix image_postfix _21=1 + NEWC // domain prefix cs postfix image_postfix _21=1 _22 + 8 STU // domain prefix cs postfix image_postfix _24 + s4 PUSH // domain prefix cs postfix image_postfix _24 prefix + STSLICER // domain prefix cs postfix image_postfix _25 + s5 PUSH // domain prefix cs postfix image_postfix _25 domain + STSLICER // domain prefix cs postfix image_postfix _26 + ROT // domain prefix cs image_postfix _26 postfix + STSLICER // domain prefix cs image_postfix _27 + ENDC // domain prefix cs image_postfix uri_cell + NEWC // domain prefix cs image_postfix uri_cell _30 + s0 s4 XCHG2 // domain uri_cell cs image_postfix _30 prefix + STSLICER // domain uri_cell cs image_postfix _31 + s4 PUSH // domain uri_cell cs image_postfix _31 domain + STSLICER // domain uri_cell cs image_postfix _32 + SWAP // domain uri_cell cs _32 image_postfix + STSLICER // domain uri_cell cs _33 + ENDC // domain uri_cell cs image_uri_cell + SWAP // domain uri_cell image_uri_cell cs + LDREF // domain uri_cell image_uri_cell _36 cs + SWAP // domain uri_cell image_uri_cell cs _36 + CTOS // domain uri_cell image_uri_cell cs zone + NEWC // domain uri_cell image_uri_cell cs zone _40 + s0 s5 XCHG2 // zone uri_cell image_uri_cell cs _40 domain + STSLICER // zone uri_cell image_uri_cell cs _41 + s0 s4 XCHG2 // cs uri_cell image_uri_cell _41 zone + STSLICER // cs uri_cell image_uri_cell _42 + ENDC // cs uri_cell image_uri_cell name_cell + s0 s3 XCHG // name_cell uri_cell image_uri_cell cs + LDREF // name_cell uri_cell image_uri_cell _65 _64 + DROP // name_cell uri_cell image_uri_cell desc_cell + s0 s2 XCHG + NEWC // name_cell desc_cell image_uri_cell uri_cell _48 + STREF // name_cell desc_cell image_uri_cell _49 + STREF // name_cell desc_cell _50 + s1 s2 XCHG // desc_cell name_cell _50 + STREF // desc_cell _51 + STREF // _52 + ENDC // full_cell + }> + calculate_nft_item_address PROC:<{ + // wc state_init + HASHCU // wc _2 + 4 PUSHINT // wc _2 _3=4 + NEWC // wc _2 _3=4 _4 + 3 STU // wc _2 _6 + s1 s2 XCHG // _2 wc _6 + 8 STI // _2 _8 + 256 STU // _10 + ENDC // _11 + CTOS // _12 + }> + send_msg PROCINLINE:<{ + // to_address amount op query_id payload send_mode + 0 PUSHINT // to_address amount op query_id payload send_mode _7=0 + 16 PUSHINT // to_address amount op query_id payload send_mode _7=0 _8=16 + NEWC // to_address amount op query_id payload send_mode _7=0 _8=16 _9 + 6 STU // to_address amount op query_id payload send_mode _7=0 _11 + s0 s7 XCHG2 // _7=0 amount op query_id payload send_mode _11 to_address + STSLICER // _7=0 amount op query_id payload send_mode _12 + s0 s5 XCHG2 // _7=0 send_mode op query_id payload _12 amount + STVARUINT16 // _7=0 send_mode op query_id payload _13 + s1 s5 XCHG // payload send_mode op query_id _7=0 _13 + 107 STU // payload send_mode op query_id _27 + s1 s2 XCHG // payload send_mode query_id op _27 + 32 STU // payload send_mode query_id _29 + 64 STU // payload send_mode msg + s2 PUSH // payload send_mode msg payload + ISNULL // payload send_mode msg _32 + NOT // payload send_mode msg _33 + IF:<{ // payload send_mode msg + ROT // send_mode msg payload + STBR // send_mode msg + SWAP // msg send_mode + }>ELSE<{ + s2 POP // msg send_mode + }> + SWAP // send_mode msg + ENDC // send_mode _35 + SWAP // _35 send_mode + SENDRAWMSG + }> + deploy_nft_item PROC:<{ + // item_index nft_item_code nft_payload + -ROT // nft_payload item_index nft_item_code + calculate_nft_item_state_init CALLDICT // nft_payload state_init + 0 PUSHINT // nft_payload state_init _6 + OVER // nft_payload state_init _6 state_init + calculate_nft_item_address CALLDICT // nft_payload state_init nft_address + 7 PUSHINT // nft_payload state_init nft_address _13 + 24 PUSHINT // nft_payload state_init nft_address _13 _14=24 + NEWC // nft_payload state_init nft_address _13 _14=24 _15 + 6 STU // nft_payload state_init nft_address _13 _17 + ROT // nft_payload state_init _13 _17 nft_address + STSLICER // nft_payload state_init _13 _18 + 0 PUSHINT // nft_payload state_init _13 _18 _19=0 + STVARUINT16 // nft_payload state_init _13 _20 + 108 STU // nft_payload state_init _36 + STREF // nft_payload _37 + STREF // msg + ENDC // _39 + 64 PUSHINT // _39 _40=64 + SENDRAWMSG + }> + verify_signature PROC:<{ + // signature sender_address domain owner_key + 0 PUSHINT // signature sender_address domain owner_key _5=0 + NEWC // signature sender_address domain owner_key _5=0 _6 + MYADDR // signature sender_address domain owner_key _5=0 _6 _7 + STSLICER // signature sender_address domain owner_key _5=0 _8 + s0 s3 XCHG2 // signature sender_address _5=0 owner_key _8 domain + STSLICER // signature sender_address _5=0 owner_key _9 + s0 s3 XCHG2 // signature owner_key _5=0 _9 sender_address + STSLICER // signature owner_key _5=0 _10 + 2 STU // signature owner_key _12 + ENDC // signature owner_key option_data + CTOS // signature owner_key _14 + HASHSU // signature owner_key _15 + -ROT // _15 signature owner_key + CHKSIGNU // _16 + }> + recv_internal PROC:<{ + // msg_value in_msg_full in_msg_body + DUP // msg_value in_msg_full in_msg_body in_msg_body + SEMPTY // msg_value in_msg_full in_msg_body _3 + IF:<{ // msg_value in_msg_full in_msg_body + 16 PUSHPOW2DEC // msg_value in_msg_full in_msg_body _4=65535 + THROWANY + }> // msg_value in_msg_full in_msg_body + SWAP // msg_value in_msg_body in_msg_full + CTOS // msg_value in_msg_body cs + 4 LDU // msg_value in_msg_body flags cs + SWAP + 1 PUSHINT // msg_value in_msg_body cs flags _12=1 + AND // msg_value in_msg_body cs _13 + IFJMP:<{ // msg_value in_msg_body cs + 3 BLKDROP // + }> // msg_value in_msg_body cs + SWAP // msg_value cs in_msg_body + 32 LDU // msg_value cs op in_msg_body + load_data INLINECALLDICT // msg_value cs op in_msg_body _85 _86 _87 _88 _89 _90 + s5 POP // msg_value cs op in_msg_body data_scheme nft_item_code pricing key addr + s6 PUSH // msg_value cs op in_msg_body data_scheme nft_item_code pricing key addr op + 0 EQINT // msg_value cs op in_msg_body data_scheme nft_item_code pricing key addr _26 + IFJMP:<{ // msg_value cs op in_msg_body data_scheme nft_item_code pricing key addr + DROP + s5 POP // msg_value cs key in_msg_body data_scheme nft_item_code pricing + s0 s3 XCHG // msg_value cs key pricing data_scheme nft_item_code in_msg_body + read_comment CALLDICT // msg_value cs key pricing data_scheme nft_item_code body + split_by_semicolon CALLDICT // msg_value cs key pricing data_scheme nft_item_code domain signature_encoded + s1 s4 PUXC // msg_value cs key signature_encoded data_scheme nft_item_code domain domain pricing + calcprice INLINECALLDICT // msg_value cs key signature_encoded data_scheme nft_item_code domain price + s1 s7 XCHG // domain cs key signature_encoded data_scheme nft_item_code msg_value price + GEQ // domain cs key signature_encoded data_scheme nft_item_code _39 + 204 THROWIFNOT + s5 PUSH // domain cs key signature_encoded data_scheme nft_item_code domain + HASHSU // domain cs key signature_encoded data_scheme nft_item_code item_index + s0 s5 XCHG // domain item_index key signature_encoded data_scheme nft_item_code cs + LDMSGADDR // domain item_index key signature_encoded data_scheme nft_item_code _94 _93 + DROP // domain item_index key signature_encoded data_scheme nft_item_code sender_address + s4 PUSH // domain item_index key signature_encoded data_scheme nft_item_code sender_address key + 0 NEQINT // domain item_index key signature_encoded data_scheme nft_item_code sender_address _47 + IF:<{ // domain item_index key signature_encoded data_scheme nft_item_code sender_address + s0 s3 XCHG // domain item_index key sender_address data_scheme nft_item_code signature_encoded + decode_asciicode CALLDICT // domain item_index key sender_address data_scheme nft_item_code signature + s3 s6 s1 PU2XC + s0 s6 XCHG // domain item_index nft_item_code sender_address data_scheme signature sender_address domain key + verify_signature CALLDICT // domain item_index nft_item_code sender_address data_scheme _51 + 205 THROWIFNOT + }>ELSE<{ + s3 POP + s3 POP // domain item_index nft_item_code sender_address data_scheme + }> + s4 s(-1) PUXC // domain item_index nft_item_code sender_address domain data_scheme + get_attachment CALLDICT // domain item_index nft_item_code sender_address _54 + NEWC // domain item_index nft_item_code sender_address _54 _55 + s0 s5 XCHG2 // _54 item_index nft_item_code sender_address _55 domain + STSLICER // _54 item_index nft_item_code sender_address _56 + ENDC // _54 item_index nft_item_code sender_address _57 + NEWC + ROT // _54 item_index nft_item_code _57 _58 sender_address + STSLICER // _54 item_index nft_item_code _57 _59 + STREF // _54 item_index nft_item_code _60 + s1 s3 XCHG // nft_item_code item_index _54 _60 + STREF // nft_item_code item_index _61 + ENDC // nft_item_code item_index nft_content + s1 s2 XCHG // item_index nft_item_code nft_content + deploy_nft_item CALLDICT + }> // msg_value cs op in_msg_body data_scheme nft_item_code pricing key addr + 5 1 BLKDROP2 // msg_value cs op addr + OVER + 923790417 PUSHINT // msg_value cs op addr op _64=923790417 + EQUAL // msg_value cs op addr _65 + IFJMP:<{ // msg_value cs op addr + 4 BLKDROP // + }> // msg_value cs op addr + 0x2a0c8a20 PUSHINT // msg_value cs op addr _66 + s1 s2 XCHG // msg_value cs addr op _66 + EQUAL // msg_value cs addr _67 + IFJMP:<{ // msg_value cs addr + SWAP // msg_value addr cs + LDMSGADDR // msg_value addr _96 _95 + DROP // msg_value addr sender_address + OVER // msg_value addr sender_address addr + SDEQ // msg_value addr _72 + 403 THROWIFNOT + 0x2a0c8a20 PUSHINT // msg_value addr _74 + s1 s2 XCHG + 0 PUSHINT + PUSHNULL + 1 PUSHINT // addr msg_value _74 _75=0 _76 _77=1 + send_msg INLINECALLDICT + }> // msg_value cs addr + 3 BLKDROP // + 16 PUSHPOW2DEC // _79=65535 + THROWANY + }> + get_collection_data PROC:<{ + // + load_data INLINECALLDICT // _9 _10 _11 _12 _13 _14 + 5 BLKDROP // content + -1 PUSHINT // content _7=-1 + zero_address CALLDICT // content _7=-1 _8 + s1 s2 XCHG // _7=-1 content _8 + }> + get_nft_address_by_index PROC:<{ + // index + load_data INLINECALLDICT // index _12 _13 _14 _15 _16 _17 + s4 s5 XCHG + 5 BLKDROP // index nft_item_code + calculate_nft_item_state_init CALLDICT // state_init + 0 PUSHINT // state_init _10 + SWAP // _10 state_init + calculate_nft_item_address CALLDICT // _11 + }> + get_nft_content PROC:<{ + // index individual_nft_content + NIP // individual_nft_content + }> + get_price PROC:<{ + // domain + load_data INLINECALLDICT // domain _9 _10 _11 _12 _13 _14 + s3 s5 XCHG + 5 BLKDROP // domain pricing + calcprice INLINECALLDICT // _8 + }> + signature_data PROC:<{ + // sender_address domain + NEWC // sender_address domain _3 + MYADDR // sender_address domain _3 _4 + STSLICER // sender_address domain _5 + SWAP // sender_address _5 domain + STSLICER // sender_address _6 + SWAP // _6 sender_address + STSLICER // _7 + ENDC // option_data + CTOS // _9 + HASHSU // _10 + }> + dnsresolve PROC:<{ + // subdomain category + DROP // subdomain + DUP // subdomain subdomain + SBITS // subdomain _3 + 8 PUSHINT // subdomain _3 _4=8 + MOD // subdomain _5 + 0 EQINT // subdomain _7 + 70 THROWIFNOT + DUP // subdomain subdomain + 8 PLDI // subdomain _11 + 0 EQINT // subdomain starts_with_zero_byte + OVER // subdomain starts_with_zero_byte subdomain + SBITS // subdomain starts_with_zero_byte _14 + 8 EQINT // subdomain starts_with_zero_byte _16 + s1 s(-1) PUXC // subdomain starts_with_zero_byte starts_with_zero_byte _16 + AND // subdomain starts_with_zero_byte _17 + IFJMP:<{ // subdomain starts_with_zero_byte + 2DROP // + 8 PUSHINT // _18=8 + PUSHNULL // _18=8 _19 + }> // subdomain starts_with_zero_byte + DUP // subdomain starts_with_zero_byte starts_with_zero_byte + IF:<{ // subdomain starts_with_zero_byte + SWAP // starts_with_zero_byte subdomain + 8 LDU // starts_with_zero_byte _43 _42 + NIP // starts_with_zero_byte subdomain + SWAP // subdomain starts_with_zero_byte + }> // subdomain starts_with_zero_byte + OVER // subdomain starts_with_zero_byte subdomain + get_top_domain_bits CALLDICT // subdomain starts_with_zero_byte top_subdomain_bits + s2 s2 XCPU // top_subdomain_bits starts_with_zero_byte subdomain top_subdomain_bits + LDSLICEX // top_subdomain_bits starts_with_zero_byte _45 _44 + DROP // top_subdomain_bits starts_with_zero_byte top_subdomain + HASHSU // top_subdomain_bits starts_with_zero_byte item_index + 47763 PUSHINT // top_subdomain_bits starts_with_zero_byte item_index _31=47763 + NEWC // top_subdomain_bits starts_with_zero_byte item_index _31=47763 _32 + 16 STU // top_subdomain_bits starts_with_zero_byte item_index _34 + SWAP // top_subdomain_bits starts_with_zero_byte _34 item_index + get_nft_address_by_index CALLDICT // top_subdomain_bits starts_with_zero_byte _34 _35 + STSLICER // top_subdomain_bits starts_with_zero_byte _36 + ENDC // top_subdomain_bits starts_with_zero_byte result + SWAP // top_subdomain_bits result starts_with_zero_byte + IF:<{ // top_subdomain_bits result + 8 PUSHINT // top_subdomain_bits result _38=8 + }>ELSE<{ // top_subdomain_bits result + 0 PUSHINT // top_subdomain_bits result _38=0 + }> + s1 s2 XCHG // result top_subdomain_bits _38 + ADD // result _41 + SWAP // _41 result + }> +}END>c diff --git a/build/nft-item.compiled.json b/build/nft-item.compiled.json new file mode 100644 index 0000000..0f7a7f7 --- /dev/null +++ b/build/nft-item.compiled.json @@ -0,0 +1 @@ +{"hex":"b5ee9c72c1021f0100053000000d00120017001c002100850090009b00a100a900b300b800bd00c200d9010301080113015f0164018e020d027802bc0339037f03fa043f044c04b605300114ff00f4a413f4bcf2c80b010201620b0202012008030201200704020120060500c3b461843ae9240f152118001e5c08de018206ebe0fa1a60e038001e5c339e8086007ae140f8001e5c33b84111c466105e033e04883dcb11fb64ddc4964ad1ba06b879240dc23572f37cc5caaab143a2fffbc4180012660f003c003060fe81e60f00300011b64a5e0182ebe0fa100011b8fcff00c10235f03802037b200a09000ca959f00c6c710010a874f00c10475f070202cc130c020120100d0201480f0e002901b232ffd40173c59400f3c5b3333332cff27b5520004f3b513434fffe900835d27080279fc07e9035353534cfcc0415c415b80c1c1b5b5b5b490415c415a0020120121100115fa443070baf2e14d80093420c00496308103e88064e020c00596308101f48032e020c00696308101908028e020c007963081012c801ee020c00896308100c88014e020c009943080647ae0c00a93803275e07a7180201481514004f5c88e2021d74912d71859cf1621d74a20c00020b39b01c001f2e0ca02d430d0029131e2e631c9d0803f34f8276f1002d0d3030171b0925f04e0fa40fa4031fa003171d721fa0031fa0030f00c3026b3e3023b5337c70516b08e3410795f09fa40307020f8256d8040708010c8cb055007cf165005fa0215cb6a12cb1fcb3f226eb39458cf17019132e201c901fb00e027c70091709507d31f5088e220c000e30208d33f81d1c1604ca82105fcc3d1452a0ba8e95395372c705f2e191109a104910384760441302db3ce082101a0b9d5152a0ba8e16365b3435355121c705f2e19a01d4d4305504f823f00de02982104eb1f0f9bae3023028821044beae41bae302355b33353582102fcb26a213ba1a19181700848e397082108b77173504c8cbff5003cf165e218040708010c8cb055007cf165005fa0215cb6a12cb1fcb3f226eb39458cf17019132e201c901fb00e05f04840ff2f001f4388050f833d0f4043052408307f40e6fa1f2e19fd30721c00022c001b1f2e1a021c0008e9324109b10680710461035514a104c030ddb3c129630103a395f07e201c0018e32708210370fec51586d8100a0708010c8cb055007cf165005fa0215cb6a12cb1fcb3f226eb39458cf17019132e201c901fb00915be21a0088313637375146c705f2e19b02d3ff20d74ac20006d0d30701c000f2e19cf404300698d43040158307f417983050048307f45b30e270c8cb07f400c94014503305f823f00d01f03401fa4021f00bfa40d20031fa0082101dcd65001da121945314a0a1de22d70b01c300209205a19135e220c2fff2e192218e3e821005138d91c8500bcf16500dcf1671244b145447c0708010c8cb055007cf165005fa0215cb6a12cb1fcb3f226eb39458cf17019132e201c901fb00106994102c395be2011b00868e3528f00b8210d53276db103946066d71708010c8cb055007cf165005fa0215cb6a12cb1fcb3f226eb39458cf17019132e201c901fb00941028355be25504f823f00d001630353535355504f823f00d01ce5f0432355203c705f2e19502fa40d4d430d0d4d4d4d4306d1382f06105d6cc76af400325e94d588ce511be5bfdbb73b437dc51eca43917d7a43e3d018307f41782f082a3537ff0dbce7eec35d69edc3a189ee6f17d82f353a553f9aa96cb0be3ce89018307f4171e00f082f0c9046f7a37ad0ea7cee73355984fa5428982f8b37c8f7bcec91f7ac71a7cd104018307f41770c8cb07f400c9241057045023f823f00d12a182101dcd6500a120c2008e2f8210d53276db706d71708010c8cb055007cf165005fa0215cb6a12cb1fcb3f226eb39458cf17019132e201c901fb00915be2185ba0cd"} \ No newline at end of file diff --git a/build/nft-item.fif b/build/nft-item.fif new file mode 100644 index 0000000..1736812 --- /dev/null +++ b/build/nft-item.fif @@ -0,0 +1,944 @@ +"Asm.fif" include +// automatically generated from `contracts/nft-item.fc` incl:`contracts/imports/dns-utils.fc` incl:`contracts/imports/stdlib.fc` incl:`contracts/imports/op-codes.fc` incl:`contracts/imports/params.fc` +PROGRAM{ + DECLPROC zero_address + DECLPROC get_top_domain_bits + DECLPROC read_comment + DECLPROC read_domain_from_comment + DECLPROC check_domain_string + DECLPROC split_by_semicolon + DECLPROC decode_asciicode + DECLPROC get_min_price_config + DECLPROC price_function + DECLPROC get_min_price + DECLPROC force_chain + DECLPROC load_data + DECLPROC store_data + DECLPROC send_msg + DECLPROC transfer_ownership + DECLPROC recv_internal + 102351 DECLMETHOD get_nft_data + 90228 DECLMETHOD get_editor + 119378 DECLMETHOD get_domain + 91481 DECLMETHOD get_last_fill_up_time + 123660 DECLMETHOD dnsresolve + zero_address PROC:<{ + // + 0 PUSHINT // _0=0 + NEWC // _0=0 _1 + 2 STU // _3 + ENDC // _4 + CTOS // _5 + }> + get_top_domain_bits PROC:<{ + // domain + 0 PUSHINT // domain i=0 + UNTIL:<{ + SWAP // i domain + 8 LDU // i char domain + SWAP // i domain char + 0 EQINT // i domain need_break + DUP // i domain need_break need_break + NOT // i domain need_break _11 + IF:<{ // i domain need_break + s0 s2 XCHG // need_break domain i + 8 ADDCONST // need_break domain i + s0 s2 XCHG // i domain need_break + }> // i domain need_break + s1 s2 XCHG // domain i need_break + }> // domain i + NIP // i + DUP // i i + 0 EQINT // i _16 + 201 THROWIF + }> + read_comment PROC:<{ + // in_msg_body + NEWC // in_msg_body result + UNTIL:<{ + OVER // in_msg_body result in_msg_body + SBITS // in_msg_body result _6 + s1 s2 XCHG // result in_msg_body _6 + LDSLICEX // result _5 in_msg_body + -ROT // in_msg_body result _5 + STSLICER // in_msg_body result + OVER // in_msg_body result in_msg_body + SREFS // in_msg_body result refs_len + DUP // in_msg_body result refs_len refs_len + 0 EQINT // in_msg_body result refs_len need_break + DUP // in_msg_body result refs_len need_break need_break + NOT // in_msg_body result refs_len need_break _13 + IF:<{ // in_msg_body result refs_len need_break + SWAP // in_msg_body result need_break refs_len + 1 EQINT // in_msg_body result need_break _16 + 202 THROWIFNOT + s0 s2 XCHG // need_break result in_msg_body + LDREF // need_break result _26 _25 + DROP // need_break result _18 + CTOS // need_break result in_msg_body + s0 s2 XCHG // in_msg_body result need_break + }>ELSE<{ + NIP // in_msg_body result need_break + }> + }> // in_msg_body result + NIP // result + ENDC // _21 + CTOS // _22 + }> + read_domain_from_comment PROC:<{ + // in_msg_body + read_comment CALLDICT // _1 + }> + check_domain_string PROC:<{ + // domain + 0 PUSHINT // domain i=0 + OVER // domain i=0 domain + SBITS // domain i=0 len + UNTIL:<{ + 2DUP // domain i len i len + EQUAL // domain i len need_break + DUP // domain i len need_break need_break + NOT // domain i len need_break _8 + IF:<{ // domain i len need_break + DROP // domain i len + s0 s2 XCHG // len i domain + 8 LDU // len i char domain + OVER // len i char domain char + 45 EQINT // len i char domain is_hyphen + s3 PUSH // len i char domain is_hyphen i + 0 GTINT // len i char domain is_hyphen _18 + AND // len i char domain _19 + s4 PUSH // len i char domain _19 len + -8 ADDCONST // len i char domain _19 _21 + s4 s(-1) PUXC // len i char domain _19 i _21 + LESS // len i char domain _19 _22 + AND // len i char domain _23 + s2 PUSH // len i char domain _23 char + 47 GTINT // len i char domain _23 _25 + s3 PUSH // len i char domain _23 _25 char + 58 LESSINT // len i char domain _23 _25 _27 + AND // len i char domain _23 _28 + OR // len i char domain _29 + s2 PUSH // len i char domain _29 char + 96 GTINT // len i char domain _29 _31 + s0 s3 XCHG // len i _31 domain _29 char + 123 LESSINT // len i _31 domain _29 _33 + s1 s3 XCHG // len i _29 domain _31 _33 + AND // len i _29 domain _34 + s1 s2 XCHG // len i domain _29 _34 + OR // len i domain valid_char + NOT // len i domain need_break + DUP // len i domain need_break need_break + NOT // len i domain need_break _37 + IF:<{ // len i domain need_break + s0 s2 XCHG // len need_break domain i + 8 ADDCONST // len need_break domain i + s0 s2 XCHG // len i domain need_break + }> // len i domain need_break + s1 s3 XCHG // domain i len need_break + }> // domain i len need_break + }> // domain i len + 1 2 BLKDROP2 // i len + EQUAL // _40 + }> + split_by_semicolon PROC:<{ + // str + 0 PUSHINT // str i=0 + OVER // str i=0 str + SBITS // str i=0 len + NEWC // str i=0 len result1 + UNTIL:<{ + s2 s1 PUSH2 // str i len result1 i len + EQUAL // str i len result1 need_break + DUP // str i len result1 need_break need_break + NOT // str i len result1 need_break _10 + IF:<{ // str i len result1 need_break + DROP // str i len result1 + s0 s3 XCHG // result1 i len str + 8 LDU // result1 i len char str + OVER // result1 i len char str char + 59 EQINT // result1 i len char str need_break + s0 s4 XCHG // result1 need_break len char str i + 8 ADDCONST // result1 need_break len char str i + s4 PUSH // result1 need_break len char str i need_break + NOT // result1 need_break len char str i _19 + IF:<{ // result1 need_break len char str i + s2 s5 XCHG2 // i need_break len str char result1 + 8 STU // i need_break len str result1 + s4 s4 XCHG2 // result1 need_break len i str + }>ELSE<{ + s2 POP // result1 need_break len i str + }> + s3 PUSH // result1 need_break len i str need_break + NOT // result1 need_break len i str _23 + s2 s3 PUSH2 // result1 need_break len i str _23 i len + GEQ // result1 need_break len i str _23 _24 + AND // result1 need_break len i str _25 + IF:<{ // result1 need_break len i str + 259 THROW + }> // result1 need_break len i str + s4 s4 XCHG2 + s0 s3 XCHG // str i len result1 need_break + }> // str i len result1 need_break + }> // str i len result1 + ENDC // str i len _28 + CTOS // str i len _29 + s0 s2 XCHG // str _29 len i + SUB // str _29 _31 + s1 s2 XCHG // _29 str _31 + LDSLICEX // _29 _36 _35 + DROP // _29 _30 + }> + decode_asciicode PROC:<{ + // str + DUP // str str + SBITS // str len + 0 PUSHINT // str len need_break=0 + NEWC // str len need_break=0 result + OVER // str len need_break=0 result res_len=0 + WHILE:<{ + s0 s2 XCHG // str len res_len result need_break + NOT // str len res_len result _9 + }>DO<{ // str len res_len result + s2 PUSH // str len res_len result len + 0 EQINT // str len res_len result need_break + DUP // str len res_len result need_break need_break + NOT // str len res_len result need_break _12 + IF:<{ // str len res_len result need_break + s0 s4 XCHG // need_break len res_len result str + 8 LDU // need_break len res_len result char str + 0 PUSHINT // need_break len res_len result char str byte=0 + s2 PUSH // need_break len res_len result char str byte=0 char + 64 GTINT // need_break len res_len result char str byte=0 _20 + s3 PUSH // need_break len res_len result char str byte=0 _20 char + 91 LESSINT // need_break len res_len result char str byte=0 _20 _22 + AND // need_break len res_len result char str byte=0 _23 + IF:<{ // need_break len res_len result char str byte=0 + DROP // need_break len res_len result char str + SWAP // need_break len res_len result str char + -65 ADDCONST // need_break len res_len result str byte + }>ELSE<{ // need_break len res_len result char str byte=0 + s2 PUSH // need_break len res_len result char str byte=0 char + 96 GTINT // need_break len res_len result char str byte=0 _27 + s3 PUSH // need_break len res_len result char str byte=0 _27 char + 123 LESSINT // need_break len res_len result char str byte=0 _27 _29 + AND // need_break len res_len result char str byte=0 _30 + IF:<{ // need_break len res_len result char str byte=0 + DROP // need_break len res_len result char str + SWAP // need_break len res_len result str char + -71 ADDCONST // need_break len res_len result str byte + }>ELSE<{ // need_break len res_len result char str byte=0 + s2 PUSH // need_break len res_len result char str byte=0 char + 47 GTINT // need_break len res_len result char str byte=0 _34 + s3 PUSH // need_break len res_len result char str byte=0 _34 char + 58 LESSINT // need_break len res_len result char str byte=0 _34 _36 + AND // need_break len res_len result char str byte=0 _37 + IF:<{ // need_break len res_len result char str byte=0 + DROP // need_break len res_len result char str + SWAP // need_break len res_len result str char + 4 ADDCONST // need_break len res_len result str byte + }>ELSE<{ // need_break len res_len result char str byte=0 + s2 PUSH // need_break len res_len result char str byte=0 char + 45 EQINT // need_break len res_len result char str byte=0 _41 + IF:<{ // need_break len res_len result char str byte=0 + DROP + NIP // need_break len res_len result str + 62 PUSHINT // need_break len res_len result str byte=62 + }>ELSE<{ // need_break len res_len result char str byte=0 + s0 s2 XCHG // need_break len res_len result byte=0 str char + 95 EQINT // need_break len res_len result byte=0 str _44 + IF:<{ // need_break len res_len result byte=0 str + NIP // need_break len res_len result str + 63 PUSHINT // need_break len res_len result str byte=63 + }>ELSE<{ // need_break len res_len result byte=0 str + 260 THROW + SWAP // need_break len res_len result str byte + }> + }> + }> + }> + }> + s0 s4 XCHG // need_break byte res_len result str len + -8 ADDCONST // need_break byte res_len result str len + DUP // need_break byte res_len result str len len + 0 GTINT // need_break byte res_len result str len _51 + IF:<{ // need_break byte res_len result str len + s4 s2 XCHG2 // need_break str res_len len byte result + 6 STU // need_break str res_len len result + }>ELSE<{ // need_break byte res_len result str len + 8 PUSHINT // need_break byte res_len result str len _56=8 + s4 s0 PUSH2 // need_break byte res_len result str len _56=8 res_len _57=8 + MOD // need_break byte res_len result str len _56=8 _58 + SUB // need_break byte res_len result str len _59 + s5 s3 s0 XCHG3 // need_break str res_len len byte result _59 + STUX // need_break str res_len len result + }> + s0 s2 XCHG // need_break str result len res_len + 6 ADDCONST // need_break str result len res_len + s0 s0 s3 XCHG3 + s0 s4 XCHG // str len res_len result need_break + }> // str len res_len result need_break + s0 s2 XCHG // str len need_break result res_len + }> // str len res_len result + 3 1 BLKDROP2 // result + ENDC // _63 + CTOS // _64 + }> + get_min_price_config PROC:<{ + // domain_char_count + DUP // domain_char_count domain_char_count + 4 EQINT // domain_char_count _2 + IFJMP:<{ // domain_char_count + DROP // + 1000 PUSHINT // _3=1000 + 100 PUSHINT // _3=1000 _4=100 + }> // domain_char_count + DUP // domain_char_count domain_char_count + 5 EQINT // domain_char_count _6 + IFJMP:<{ // domain_char_count + DROP // + 500 PUSHINT // _7=500 + 50 PUSHINT // _7=500 _8=50 + }> // domain_char_count + DUP // domain_char_count domain_char_count + 6 EQINT // domain_char_count _10 + IFJMP:<{ // domain_char_count + DROP // + 400 PUSHINT // _11=400 + 40 PUSHINT // _11=400 _12=40 + }> // domain_char_count + DUP // domain_char_count domain_char_count + 7 EQINT // domain_char_count _14 + IFJMP:<{ // domain_char_count + DROP // + 300 PUSHINT // _15=300 + 30 PUSHINT // _15=300 _16=30 + }> // domain_char_count + DUP // domain_char_count domain_char_count + 8 EQINT // domain_char_count _18 + IFJMP:<{ // domain_char_count + DROP // + 200 PUSHINT // _19=200 + 20 PUSHINT // _19=200 _20=20 + }> // domain_char_count + DUP // domain_char_count domain_char_count + 9 EQINT // domain_char_count _22 + IFJMP:<{ // domain_char_count + DROP // + 100 PUSHINT // _23=100 + 10 PUSHINT // _23=100 _24=10 + }> // domain_char_count + 10 EQINT // _26 + IFJMP:<{ // + 50 PUSHINT // _27=50 + 5 PUSHINT // _27=50 _28=5 + }> // + 10 PUSHINT // _29=10 + 1 PUSHINT // _29=10 _30=1 + }> + price_function PROC:<{ + // length multiplierx50 steepness + 25 PUSHINT // length multiplierx50 steepness price=25 + s3 PUSH // length multiplierx50 steepness price=25 length + 3 EQINT // length multiplierx50 steepness price=25 _6 + IF:<{ // length multiplierx50 steepness price=25 + DROP // length multiplierx50 steepness + 100 PUSHINT // length multiplierx50 steepness price=100 + }> // length multiplierx50 steepness price + s3 PUSH // length multiplierx50 steepness price length + 4 EQINT // length multiplierx50 steepness price _9 + IF:<{ // length multiplierx50 steepness price + DROP // length multiplierx50 steepness + 50 PUSHINT // length multiplierx50 steepness price=50 + }> // length multiplierx50 steepness price + s3 PUSH // length multiplierx50 steepness price length + 5 EQINT // length multiplierx50 steepness price _12 + IF:<{ // length multiplierx50 steepness price + DROP // length multiplierx50 steepness + 25 PUSHINT // length multiplierx50 steepness price=25 + }> // length multiplierx50 steepness price + s3 PUSH // length multiplierx50 steepness price length + 6 EQINT // length multiplierx50 steepness price _15 + IF:<{ // length multiplierx50 steepness price + DROP // length multiplierx50 steepness + 20 PUSHINT // length multiplierx50 steepness price=20 + }> // length multiplierx50 steepness price + s3 PUSH // length multiplierx50 steepness price length + 7 EQINT // length multiplierx50 steepness price _18 + IF:<{ // length multiplierx50 steepness price + DROP // length multiplierx50 steepness + 15 PUSHINT // length multiplierx50 steepness price=15 + }> // length multiplierx50 steepness price + s3 PUSH // length multiplierx50 steepness price length + 8 EQINT // length multiplierx50 steepness price _21 + IF:<{ // length multiplierx50 steepness price + DROP // length multiplierx50 steepness + 10 PUSHINT // length multiplierx50 steepness price=10 + }> // length multiplierx50 steepness price + s0 s3 XCHG // price multiplierx50 steepness length + 8 GTINT // price multiplierx50 steepness _24 + IF:<{ // price multiplierx50 steepness + 5 PUSHINT + s3 POP // price=5 multiplierx50 steepness + }> // price multiplierx50 steepness + s0 s2 PUXC // steepness multiplierx50 steepness price + MUL // steepness multiplierx50 _26 + 10 PUSHINT // steepness multiplierx50 _26 _27=10 + s0 s3 XCHG2 // _26 multiplierx50 _27=10 steepness + SUB // _26 multiplierx50 _28 + 25 MULCONST // _26 multiplierx50 _30 + s1 s2 XCHG // multiplierx50 _26 _30 + ADD // multiplierx50 _31 + 10 PUSHINT // multiplierx50 _31 _32=10 + DIV // multiplierx50 price + 1000000000 PUSHINT // multiplierx50 price _34=1000000000 + MUL // multiplierx50 _35 + SWAP // _35 multiplierx50 + MUL // _36 + 50 PUSHINT // _36 _37=50 + DIV // _38 + }> + get_min_price PROC:<{ + // domain_bits_length now_time + SWAP // now_time domain_bits_length + 3 RSHIFT# // now_time _5 + get_min_price_config CALLDICT // now_time start_min_price end_min_price + SWAP + 1000000000 PUSHINT // now_time end_min_price start_min_price _7=1000000000 + MUL // now_time end_min_price start_min_price + SWAP + 1000000000 PUSHINT // now_time start_min_price end_min_price _9=1000000000 + MUL // now_time start_min_price end_min_price + s0 s2 XCHG + 1659171600 PUSHINT // end_min_price start_min_price now_time _12=1659171600 + SUB // end_min_price start_min_price seconds + 2592000 PUSHINT // end_min_price start_min_price seconds _15=2592000 + DIV // end_min_price start_min_price months + DUP // end_min_price start_min_price months months + 21 GTINT // end_min_price start_min_price months _18 + IFJMP:<{ // end_min_price start_min_price months + 2DROP // end_min_price + }> // end_min_price start_min_price months + 1 2 BLKDROP2 // start_min_price months + REPEAT:<{ // start_min_price + 90 MULCONST // _20 + 100 PUSHINT // _20 _21=100 + DIV // start_min_price + }> + }> + force_chain PROC:<{ + // addr + REWRITESTDADDR // _8 _9 + DROP // wc + 0 PUSHINT // wc _5 + EQUAL // _6 + 333 THROWIFNOT + }> + load_data PROC:<{ + // + c4 PUSH // _1 + CTOS // ds + 256 LDU // _5 ds + LDMSGADDR // index collection_address ds + DUP // index collection_address ds ds + SBITS // index collection_address ds _10 + 0 GTINT // index collection_address ds _12 + IFJMP:<{ // index collection_address ds + -1 PUSHINT // index collection_address ds _13=-1 + SWAP // index collection_address _13=-1 ds + LDMSGADDR // index collection_address _13=-1 _14 ds + LDREF // index collection_address _13=-1 _14 _16 ds + LDREF // index collection_address _13=-1 _14 _16 _18 ds + LDREF // index collection_address _13=-1 _14 _16 _18 _20 ds + 64 LDU // index collection_address _13=-1 _14 _16 _18 _20 _44 _43 + DROP // index collection_address _13=-1 _14 _16 _18 _20 _22 + s5 s7 XCHG + s5 s6 XCHG // _13=-1 index collection_address _14 _16 _18 _20 _22 + }> // index collection_address ds + DROP // index collection_address + 0 PUSHINT // index collection_address _25=0 + PUSHNULL // index collection_address _25=0 _26 + PUSHNULL // index collection_address _25=0 _26 _27 + PUSHNULL // index collection_address _25=0 _26 _27 _28 + PUSHNULL // index collection_address _25=0 _26 _27 _28 _29 + s4 PUSH // index collection_address _25=0 _26 _27 _28 _29 _30=0 + s5 s7 XCHG + s5 s6 XCHG // _25=0 index collection_address _26 _27 _28 _29 _30=0 + }> + store_data PROC:<{ + // index collection_address owner_address content uri domain last_fill_up_time + s0 s6 XCHG + NEWC // last_fill_up_time collection_address owner_address content uri domain index _7 + 256 STU // last_fill_up_time collection_address owner_address content uri domain _9 + s0 s5 XCHG2 // last_fill_up_time domain owner_address content uri _9 collection_address + STSLICER // last_fill_up_time domain owner_address content uri _10 + s0 s3 XCHG2 // last_fill_up_time domain uri content _10 owner_address + STSLICER // last_fill_up_time domain uri content _11 + STREF // last_fill_up_time domain uri _12 + STREF // last_fill_up_time domain _13 + STREF // last_fill_up_time _14 + 64 STU // _16 + ENDC // _17 + c4 POP + }> + send_msg PROCINLINE:<{ + // to_address amount op query_id payload send_mode + 0 PUSHINT // to_address amount op query_id payload send_mode _7=0 + 16 PUSHINT // to_address amount op query_id payload send_mode _7=0 _8=16 + NEWC // to_address amount op query_id payload send_mode _7=0 _8=16 _9 + 6 STU // to_address amount op query_id payload send_mode _7=0 _11 + s0 s7 XCHG2 // _7=0 amount op query_id payload send_mode _11 to_address + STSLICER // _7=0 amount op query_id payload send_mode _12 + s0 s5 XCHG2 // _7=0 send_mode op query_id payload _12 amount + STVARUINT16 // _7=0 send_mode op query_id payload _13 + s1 s5 XCHG // payload send_mode op query_id _7=0 _13 + 107 STU // payload send_mode op query_id _27 + s1 s2 XCHG // payload send_mode query_id op _27 + 32 STU // payload send_mode query_id _29 + 64 STU // payload send_mode msg + s2 PUSH // payload send_mode msg payload + ISNULL // payload send_mode msg _32 + NOT // payload send_mode msg _33 + IF:<{ // payload send_mode msg + ROT // send_mode msg payload + STBR // send_mode msg + SWAP // msg send_mode + }>ELSE<{ + s2 POP // msg send_mode + }> + SWAP // send_mode msg + ENDC // send_mode _35 + SWAP // _35 send_mode + SENDRAWMSG + }> + transfer_ownership PROCINLINE:<{ + // my_balance index collection_address owner_address content uri sender_address query_id in_msg_body fwd_fees domain + s4 POP // my_balance index collection_address owner_address content uri domain query_id in_msg_body fwd_fees + SWAP // my_balance index collection_address owner_address content uri domain query_id fwd_fees in_msg_body + LDMSGADDR // my_balance index collection_address owner_address content uri domain query_id fwd_fees new_owner_address in_msg_body + OVER // my_balance index collection_address owner_address content uri domain query_id fwd_fees new_owner_address in_msg_body new_owner_address + force_chain CALLDICT + LDMSGADDR // my_balance index collection_address owner_address content uri domain query_id fwd_fees new_owner_address response_destination in_msg_body + 1 LDI // my_balance index collection_address owner_address content uri domain query_id fwd_fees new_owner_address response_destination _57 _56 + NIP // my_balance index collection_address owner_address content uri domain query_id fwd_fees new_owner_address response_destination in_msg_body + LDVARUINT16 // my_balance index collection_address owner_address content uri domain query_id fwd_fees new_owner_address response_destination forward_amount in_msg_body + 500000000 PUSHINT // my_balance index collection_address owner_address content uri domain query_id fwd_fees new_owner_address response_destination forward_amount in_msg_body _25 + s1 s13 XCHG // in_msg_body index collection_address owner_address content uri domain query_id fwd_fees new_owner_address response_destination forward_amount my_balance _25 + SUB // in_msg_body index collection_address owner_address content uri domain query_id fwd_fees new_owner_address response_destination forward_amount rest_amount + OVER // in_msg_body index collection_address owner_address content uri domain query_id fwd_fees new_owner_address response_destination forward_amount rest_amount forward_amount + IF:<{ // in_msg_body index collection_address owner_address content uri domain query_id fwd_fees new_owner_address response_destination forward_amount rest_amount + s1 s4 PUSH2 // in_msg_body index collection_address owner_address content uri domain query_id fwd_fees new_owner_address response_destination forward_amount rest_amount forward_amount fwd_fees + ADD // in_msg_body index collection_address owner_address content uri domain query_id fwd_fees new_owner_address response_destination forward_amount rest_amount _27 + SUB // in_msg_body index collection_address owner_address content uri domain query_id fwd_fees new_owner_address response_destination forward_amount rest_amount + }> // in_msg_body index collection_address owner_address content uri domain query_id fwd_fees new_owner_address response_destination forward_amount rest_amount + s2 PUSH // in_msg_body index collection_address owner_address content uri domain query_id fwd_fees new_owner_address response_destination forward_amount rest_amount response_destination + 2 PLDU // in_msg_body index collection_address owner_address content uri domain query_id fwd_fees new_owner_address response_destination forward_amount rest_amount _31 + 0 NEQINT // in_msg_body index collection_address owner_address content uri domain query_id fwd_fees new_owner_address response_destination forward_amount rest_amount need_response + DUP // in_msg_body index collection_address owner_address content uri domain query_id fwd_fees new_owner_address response_destination forward_amount rest_amount need_response need_response + IF:<{ // in_msg_body index collection_address owner_address content uri domain query_id fwd_fees new_owner_address response_destination forward_amount rest_amount need_response + s0 s5 XCHG // in_msg_body index collection_address owner_address content uri domain query_id need_response new_owner_address response_destination forward_amount rest_amount fwd_fees + SUB // in_msg_body index collection_address owner_address content uri domain query_id need_response new_owner_address response_destination forward_amount rest_amount + }>ELSE<{ + s5 POP // in_msg_body index collection_address owner_address content uri domain query_id need_response new_owner_address response_destination forward_amount rest_amount + }> + DUP // in_msg_body index collection_address owner_address content uri domain query_id need_response new_owner_address response_destination forward_amount rest_amount rest_amount + -1 GTINT // in_msg_body index collection_address owner_address content uri domain query_id need_response new_owner_address response_destination forward_amount rest_amount _37 + 402 THROWIFNOT + OVER // in_msg_body index collection_address owner_address content uri domain query_id need_response new_owner_address response_destination forward_amount rest_amount forward_amount + IF:<{ // in_msg_body index collection_address owner_address content uri domain query_id need_response new_owner_address response_destination forward_amount rest_amount + 0x05138d91 PUSHINT // in_msg_body index collection_address owner_address content uri domain query_id need_response new_owner_address response_destination forward_amount rest_amount _39 + NEWC // in_msg_body index collection_address owner_address content uri domain query_id need_response new_owner_address response_destination forward_amount rest_amount _39 _40 + s0 s11 XCHG2 // in_msg_body index collection_address _39 content uri domain query_id need_response new_owner_address response_destination forward_amount rest_amount _40 owner_address + STSLICER // in_msg_body index collection_address _39 content uri domain query_id need_response new_owner_address response_destination forward_amount rest_amount _41 + s0 s13 XCHG2 // rest_amount index collection_address _39 content uri domain query_id need_response new_owner_address response_destination forward_amount _41 in_msg_body + STSLICER // rest_amount index collection_address _39 content uri domain query_id need_response new_owner_address response_destination forward_amount _42 + 1 PUSHINT // rest_amount index collection_address _39 content uri domain query_id need_response new_owner_address response_destination forward_amount _42 _43=1 + s4 PUSH + s11 s1 s4 XCHG3 + s7 s11 s(-1) PUXC2 // rest_amount index collection_address response_destination content uri domain query_id need_response new_owner_address new_owner_address forward_amount _39 query_id _42 _43=1 + send_msg INLINECALLDICT + s6 s9 XCHG // response_destination index collection_address rest_amount content uri domain query_id need_response new_owner_address + }>ELSE<{ + s2 s12 XCHG + s9 POP + 2DROP // response_destination index collection_address rest_amount content uri domain query_id need_response new_owner_address + }> + SWAP // response_destination index collection_address rest_amount content uri domain query_id new_owner_address need_response + IF:<{ // response_destination index collection_address rest_amount content uri domain query_id new_owner_address + s8 PUSH // response_destination index collection_address rest_amount content uri domain query_id new_owner_address response_destination + force_chain CALLDICT + 0xd53276db PUSHINT // response_destination index collection_address rest_amount content uri domain query_id new_owner_address _46 + s3 s9 XCHG + s6 s0 s6 XCHG3 + PUSHNULL + 1 PUSHINT // domain index collection_address new_owner_address content uri response_destination rest_amount _46 query_id _47 _48=1 + send_msg INLINECALLDICT + }>ELSE<{ + s2 s8 XCHG + s5 POP + 2DROP // domain index collection_address new_owner_address content uri + }> + 5 ROLL + NOW // index collection_address new_owner_address content uri domain _50 + store_data CALLDICT + }> + recv_internal PROC:<{ + // msg_value in_msg_full in_msg_body + BALANCE // msg_value in_msg_full in_msg_body _4 + FIRST // msg_value in_msg_full in_msg_body my_balance + s0 s2 XCHG // msg_value my_balance in_msg_body in_msg_full + CTOS // msg_value my_balance in_msg_body cs + 4 LDU // msg_value my_balance in_msg_body flags cs + SWAP + 1 PUSHINT // msg_value my_balance in_msg_body cs flags _12=1 + AND // msg_value my_balance in_msg_body cs _13 + IFJMP:<{ // msg_value my_balance in_msg_body cs + 4 BLKDROP // + }> // msg_value my_balance in_msg_body cs + LDMSGADDR // msg_value my_balance in_msg_body sender_address cs + LDMSGADDR // msg_value my_balance in_msg_body sender_address _238 _237 + NIP // msg_value my_balance in_msg_body sender_address cs + LDVARUINT16 // msg_value my_balance in_msg_body sender_address _240 _239 + NIP // msg_value my_balance in_msg_body sender_address cs + 1 PUSHINT // msg_value my_balance in_msg_body sender_address cs _22=1 + SDSKIPFIRST // msg_value my_balance in_msg_body sender_address cs + LDVARUINT16 // msg_value my_balance in_msg_body sender_address _242 _241 + NIP // msg_value my_balance in_msg_body sender_address cs + LDVARUINT16 // msg_value my_balance in_msg_body sender_address _244 _243 + DROP // msg_value my_balance in_msg_body sender_address fwd_fee + load_data CALLDICT // msg_value my_balance in_msg_body sender_address fwd_fee _245 _246 _247 _248 _249 _250 _251 _252 + DROP // msg_value my_balance in_msg_body sender_address fwd_fee init? index collection_address owner_address content uri domain + s6 PUSH // msg_value my_balance in_msg_body sender_address fwd_fee init? index collection_address owner_address content uri domain init? + NOT // msg_value my_balance in_msg_body sender_address fwd_fee init? index collection_address owner_address content uri domain _38 + IFJMP:<{ // msg_value my_balance in_msg_body sender_address fwd_fee init? index collection_address owner_address content uri domain + 4 BLKDROP + s2 POP + s5 POP // msg_value index in_msg_body sender_address fwd_fee collection_address + s0 s2 PUXC // msg_value index in_msg_body collection_address fwd_fee collection_address sender_address + SDEQ // msg_value index in_msg_body collection_address fwd_fee _40 + 405 THROWIFNOT + s0 s2 XCHG // msg_value index fwd_fee collection_address in_msg_body + LDMSGADDR // msg_value index fwd_fee collection_address from_address in_msg_body + LDREF // msg_value index fwd_fee collection_address from_address domain in_msg_body + LDREF // msg_value index fwd_fee collection_address from_address domain _258 _257 + DROP // msg_value index fwd_fee collection_address from_address domain _49 + CTOS // msg_value index fwd_fee collection_address from_address domain attachment + LDREF // msg_value index fwd_fee collection_address from_address domain uri attachment + LDREF // msg_value index fwd_fee collection_address from_address domain uri img_uri attachment + LDREF // msg_value index fwd_fee collection_address from_address domain uri img_uri name attachment + LDREF // msg_value index fwd_fee collection_address from_address domain uri img_uri name _266 _265 + DROP // msg_value index fwd_fee collection_address from_address domain uri img_uri name description + NEWDICT // msg_value index fwd_fee collection_address from_address domain uri img_uri name description content_dict + s1 s3 XCHG + 43884663033947008978309661017057008345326326811558777475113826163084742639165 PUSHINT + SWAP + 8 PUSHPOW2 // msg_value index fwd_fee collection_address from_address domain uri description name img_uri _67=43884663033947008978309661017057008345326326811558777475113826163084742639165 content_dict _68=256 + DICTUSETREF // msg_value index fwd_fee collection_address from_address domain uri description name content_dict + 59089242681608890680090686026688704441792375738894456860693970539822503415433 PUSHINT // msg_value index fwd_fee collection_address from_address domain uri description name content_dict _71=59089242681608890680090686026688704441792375738894456860693970539822503415433 + SWAP + 8 PUSHPOW2 // msg_value index fwd_fee collection_address from_address domain uri description name _71=59089242681608890680090686026688704441792375738894456860693970539822503415433 content_dict _72=256 + DICTUSETREF // msg_value index fwd_fee collection_address from_address domain uri description content_dict + 90922719342317012409671596374183159143637506542604000676488204638996496437508 PUSHINT // msg_value index fwd_fee collection_address from_address domain uri description content_dict _75=90922719342317012409671596374183159143637506542604000676488204638996496437508 + SWAP + 8 PUSHPOW2 // msg_value index fwd_fee collection_address from_address domain uri description _75=90922719342317012409671596374183159143637506542604000676488204638996496437508 content_dict _76=256 + DICTUSETREF // msg_value index fwd_fee collection_address from_address domain uri content_dict + 0 PUSHINT // msg_value index fwd_fee collection_address from_address domain uri content_dict _79=0 + NEWC // msg_value index fwd_fee collection_address from_address domain uri content_dict _79=0 _80 + 8 STU // msg_value index fwd_fee collection_address from_address domain uri content_dict _82 + STDICT // msg_value index fwd_fee collection_address from_address domain uri _83 + ENDC // msg_value index fwd_fee collection_address from_address domain uri content + s4 PUSH + s5 s7 XCHG + s0 s4 XCHG + s2 s3 XCHG2 + NOW // msg_value collection_address fwd_fee index collection_address from_address content uri domain _85 + store_data CALLDICT + s1 s2 XCHG // collection_address msg_value fwd_fee + SUB // collection_address _88 + 500000000 PUSHINT // collection_address _88 _89 + SUB // collection_address rest_amount + DUP // collection_address rest_amount rest_amount + 0 GTINT // collection_address rest_amount _92 + IF:<{ // collection_address rest_amount + 0xd53276db PUSHINT // collection_address rest_amount _93 + 0 PUSHINT // collection_address rest_amount _93 _94=0 + PUSHNULL // collection_address rest_amount _93 _94=0 _95 + 1 PUSHINT // collection_address rest_amount _93 _94=0 _95 _96=1 + send_msg INLINECALLDICT + }>ELSE<{ + 2DROP // + }> + }> // msg_value my_balance in_msg_body sender_address fwd_fee init? index collection_address owner_address content uri domain + s11 POP // domain my_balance in_msg_body sender_address fwd_fee init? index collection_address owner_address content uri + s3 s7 PUSH2 // domain my_balance in_msg_body sender_address fwd_fee init? index collection_address owner_address content uri collection_address sender_address + SDEQ // domain my_balance in_msg_body sender_address fwd_fee init? index collection_address owner_address content uri _98 + s1 s6 XCHG // domain my_balance in_msg_body sender_address fwd_fee uri index collection_address owner_address content init? _98 + AND // domain my_balance in_msg_body sender_address fwd_fee uri index collection_address owner_address content _99 + IFJMP:<{ // domain my_balance in_msg_body sender_address fwd_fee uri index collection_address owner_address content + s7 s9 XCHG + 9 BLKDROP // in_msg_body + LDMSGADDR // _268 _267 + DROP // from_address + 0 PUSHINT // from_address _103=0 + DUP // from_address _103=0 _104=0 + LTIME // from_address _103=0 _104=0 _105 + PUSHNULL // from_address _103=0 _104=0 _105 _106 + 64 PUSHINT // from_address _103=0 _104=0 _105 _106 _107=64 + send_msg INLINECALLDICT + }> // domain my_balance in_msg_body sender_address fwd_fee uri index collection_address owner_address content + s7 PUSH // domain my_balance in_msg_body sender_address fwd_fee uri index collection_address owner_address content in_msg_body + SEMPTY // domain my_balance in_msg_body sender_address fwd_fee uri index collection_address owner_address content _110 + IF:<{ // domain my_balance in_msg_body sender_address fwd_fee uri index collection_address owner_address content + 0 PUSHINT // domain my_balance in_msg_body sender_address fwd_fee uri index collection_address owner_address content _111=0 + }>ELSE<{ // domain my_balance in_msg_body sender_address fwd_fee uri index collection_address owner_address content + s0 s7 XCHG // domain my_balance content sender_address fwd_fee uri index collection_address owner_address in_msg_body + 32 LDU // domain my_balance content sender_address fwd_fee uri index collection_address owner_address _111 in_msg_body + s8 s8 XCHG2 // domain my_balance in_msg_body sender_address fwd_fee uri index collection_address owner_address content _111 + }> // domain my_balance in_msg_body sender_address fwd_fee uri index collection_address owner_address content op + DUP // domain my_balance in_msg_body sender_address fwd_fee uri index collection_address owner_address content op op + 0 EQINT // domain my_balance in_msg_body sender_address fwd_fee uri index collection_address owner_address content op _117 + IFJMP:<{ // domain my_balance in_msg_body sender_address fwd_fee uri index collection_address owner_address content op + DROP + s5 POP + s5 POP + s5 POP + s5 POP // domain index collection_address owner_address content uri + 5 ROLL + NOW // index collection_address owner_address content uri domain _118 + store_data CALLDICT + }> // domain my_balance in_msg_body sender_address fwd_fee uri index collection_address owner_address content op + s0 s8 XCHG // domain my_balance op sender_address fwd_fee uri index collection_address owner_address content in_msg_body + 64 LDU // domain my_balance op sender_address fwd_fee uri index collection_address owner_address content query_id in_msg_body + 0x5fcc3d14 PUSHINT // domain my_balance op sender_address fwd_fee uri index collection_address owner_address content query_id in_msg_body _124 + s10 s(-1) PUXC // domain my_balance op sender_address fwd_fee uri index collection_address owner_address content query_id in_msg_body op _124 + EQUAL // domain my_balance op sender_address fwd_fee uri index collection_address owner_address content query_id in_msg_body _125 + IFJMP:<{ // domain my_balance op sender_address fwd_fee uri index collection_address owner_address content query_id in_msg_body + s9 POP // domain my_balance in_msg_body sender_address fwd_fee uri index collection_address owner_address content query_id + s7 s2 PUSH2 // domain my_balance in_msg_body sender_address fwd_fee uri index collection_address owner_address content query_id sender_address owner_address + SDEQ // domain my_balance in_msg_body sender_address fwd_fee uri index collection_address owner_address content query_id _127 + 401 THROWIFNOT + s9 s10 XCHG + s4 s9 XCHG + s3 s8 XCHG + s7 s6 s0 XCHG3 + s4 s1 s3 XCHG3 + s0 s2 XCHG // my_balance index collection_address owner_address content uri sender_address query_id in_msg_body fwd_fee domain + transfer_ownership INLINECALLDICT + }> // domain my_balance op sender_address fwd_fee uri index collection_address owner_address content query_id in_msg_body + 0x1a0b9d51 PUSHINT // domain my_balance op sender_address fwd_fee uri index collection_address owner_address content query_id in_msg_body _130 + s10 s(-1) PUXC // domain my_balance op sender_address fwd_fee uri index collection_address owner_address content query_id in_msg_body op _130 + EQUAL // domain my_balance op sender_address fwd_fee uri index collection_address owner_address content query_id in_msg_body _131 + IFJMP:<{ // domain my_balance op sender_address fwd_fee uri index collection_address owner_address content query_id in_msg_body + s6 POP + 2DROP + s4 POP + s5 POP + s5 POP // domain index collection_address sender_address owner_address in_msg_body + s2 s1 XCPU // domain index collection_address in_msg_body owner_address sender_address owner_address + SDEQ // domain index collection_address in_msg_body owner_address _133 + 410 THROWIFNOT + SWAP // domain index collection_address owner_address in_msg_body + LDREF // domain index collection_address owner_address _135 in_msg_body + LDREF // domain index collection_address owner_address _135 _276 _275 + DROP // domain index collection_address owner_address _135 _137 + 5 ROLL + NOW // index collection_address owner_address _135 _137 domain _139 + store_data CALLDICT + }> // domain my_balance op sender_address fwd_fee uri index collection_address owner_address content query_id in_msg_body + s9 PUSH + 1320284409 PUSHINT // domain my_balance op sender_address fwd_fee uri index collection_address owner_address content query_id in_msg_body op _141=1320284409 + EQUAL // domain my_balance op sender_address fwd_fee uri index collection_address owner_address content query_id in_msg_body _142 + IFJMP:<{ // domain my_balance op sender_address fwd_fee uri index collection_address owner_address content query_id in_msg_body + NIP + s6 POP + s7 POP + s7 POP // domain owner_address content sender_address in_msg_body uri index collection_address + s4 s6 XCPU // domain owner_address content collection_address in_msg_body uri index sender_address owner_address + SDEQ // domain owner_address content collection_address in_msg_body uri index _144 + 411 THROWIFNOT + s0 s2 XCHG // domain owner_address content collection_address index uri in_msg_body + 256 LDU // domain owner_address content collection_address index uri key in_msg_body + DUP // domain owner_address content collection_address index uri key in_msg_body in_msg_body + SREFS // domain owner_address content collection_address index uri key in_msg_body _151 + 0 GTINT // domain owner_address content collection_address index uri key in_msg_body has_value + s0 s6 XCHG // domain owner_address has_value collection_address index uri key in_msg_body content + CTOS // domain owner_address has_value collection_address index uri key in_msg_body cs + 8 LDU // domain owner_address has_value collection_address index uri key in_msg_body _157 cs + SWAP // domain owner_address has_value collection_address index uri key in_msg_body cs _157 + 0 EQINT // domain owner_address has_value collection_address index uri key in_msg_body cs _161 + 412 THROWIFNOT + LDDICT // domain owner_address has_value collection_address index uri key in_msg_body _282 _281 + DROP // domain owner_address has_value collection_address index uri key in_msg_body keyvalue_map + s0 s6 XCHG // domain owner_address keyvalue_map collection_address index uri key in_msg_body has_value + IF:<{ // domain owner_address keyvalue_map collection_address index uri key in_msg_body + LDREF // domain owner_address keyvalue_map collection_address index uri key _284 _283 + DROP // domain owner_address keyvalue_map collection_address index uri key value + s0 s1 s5 XCHG3 + 8 PUSHPOW2 // domain owner_address uri collection_address index value key keyvalue_map _170=256 + DICTUSETREF // domain owner_address uri collection_address index keyvalue_map + }>ELSE<{ // domain owner_address keyvalue_map collection_address index uri key in_msg_body + DROP // domain owner_address keyvalue_map collection_address index uri key + s0 s4 XCHG2 + 8 PUSHPOW2 // domain owner_address uri collection_address index key keyvalue_map _173=256 + DICTUDEL // domain owner_address uri collection_address index _285 _286 + DROP // domain owner_address uri collection_address index keyvalue_map + }> + 0 PUSHINT // domain owner_address uri collection_address index keyvalue_map _175=0 + NEWC // domain owner_address uri collection_address index keyvalue_map _175=0 _176 + 8 STU // domain owner_address uri collection_address index keyvalue_map _178 + STDICT // domain owner_address uri collection_address index _179 + ENDC // domain owner_address uri collection_address index content + s0 s1 s4 XCHG3 + s3 s3 XCHG2 + s0 s5 XCHG + NOW // index collection_address owner_address content uri domain _181 + store_data CALLDICT + }> // domain my_balance op sender_address fwd_fee uri index collection_address owner_address content query_id in_msg_body + DROP // domain my_balance op sender_address fwd_fee uri index collection_address owner_address content query_id + s8 PUSH + 1153347137 PUSHINT // domain my_balance op sender_address fwd_fee uri index collection_address owner_address content query_id op _183=1153347137 + EQUAL // domain my_balance op sender_address fwd_fee uri index collection_address owner_address content query_id _184 + IFJMP:<{ // domain my_balance op sender_address fwd_fee uri index collection_address owner_address content query_id + s8 POP // domain my_balance query_id sender_address fwd_fee uri index collection_address owner_address content + 80 PUSHINT // domain my_balance query_id sender_address fwd_fee uri index collection_address owner_address content _186=80 + CONFIGOPTPARAM // domain my_balance query_id sender_address fwd_fee uri index collection_address owner_address content _187 + CTOS // domain my_balance query_id sender_address fwd_fee uri index collection_address owner_address content cs + LDDICT // domain my_balance query_id sender_address fwd_fee uri index collection_address owner_address content _288 _287 + DROP // domain my_balance query_id sender_address fwd_fee uri index collection_address owner_address content config + s4 s(-1) PUXC + 8 PUSHPOW2 // domain my_balance query_id sender_address fwd_fee uri index collection_address owner_address content index config _194=256 + DICTUGET + NULLSWAPIFNOT // domain my_balance query_id sender_address fwd_fee uri index collection_address owner_address content config_value found + 415 THROWIFNOT + 8 LDU // domain my_balance query_id sender_address fwd_fee uri index collection_address owner_address content config_op config_value + OVER // domain my_balance query_id sender_address fwd_fee uri index collection_address owner_address content config_op config_value config_op + 0 EQINT // domain my_balance query_id sender_address fwd_fee uri index collection_address owner_address content config_op config_value _204 + s2 PUSH // domain my_balance query_id sender_address fwd_fee uri index collection_address owner_address content config_op config_value _204 config_op + 1 EQINT // domain my_balance query_id sender_address fwd_fee uri index collection_address owner_address content config_op config_value _204 _206 + OR // domain my_balance query_id sender_address fwd_fee uri index collection_address owner_address content config_op config_value _207 + 416 THROWIFNOT + OVER // domain my_balance query_id sender_address fwd_fee uri index collection_address owner_address content config_op config_value config_op + 0 EQINT // domain my_balance query_id sender_address fwd_fee uri index collection_address owner_address content config_op config_value _210 + IF:<{ // domain my_balance query_id sender_address fwd_fee uri index collection_address owner_address content config_op config_value + s4 PUSH + s9 s11 XCHG + s6 s8 XCHG + s0 s7 XCHG + s4 s6 XCHG + s3 s5 XCHG + s4 s10 XCPU + s4 s12 XCHG + s0 s3 XCHG + s0 s13 XCHG // config_op collection_address query_id my_balance index collection_address owner_address content uri sender_address query_id config_value fwd_fee domain + transfer_ownership INLINECALLDICT + s1 s2 XCHG // collection_address config_op query_id + }>ELSE<{ + DROP + s3 s10 XCHG + s9 POP + 7 BLKDROP // collection_address config_op query_id + }> + SWAP // collection_address query_id config_op + 1 EQINT // collection_address query_id _213 + IF:<{ // collection_address query_id + 0 PUSHINT // collection_address query_id _214=0 + 923790417 PUSHINT + ROT + PUSHNULL + 160 PUSHINT // collection_address _214=0 _215=923790417 query_id _216 _219 + send_msg INLINECALLDICT + }>ELSE<{ + 2DROP // + }> + }> // domain my_balance op sender_address fwd_fee uri index collection_address owner_address content query_id + s5 POP + 2DROP + s3 POP + s5 POP + s5 POP // query_id index op sender_address collection_address + 0x2fcb26a2 PUSHINT // query_id index op sender_address collection_address _221 + s1 s3 XCHG // query_id index collection_address sender_address op _221 + EQUAL // query_id index collection_address sender_address _222 + IFJMP:<{ // query_id index collection_address sender_address + 0 PUSHINT // query_id index collection_address sender_address _223=0 + 0x8b771735 PUSHINT // query_id index collection_address sender_address _223=0 _224 + s0 s4 XCHG + NEWC // query_id _224 collection_address sender_address _223=0 index _225 + 256 STU // query_id _224 collection_address sender_address _223=0 _227 + s0 s3 XCHG2 // query_id _224 _223=0 sender_address _227 collection_address + STSLICER // query_id _224 _223=0 sender_address _228 + 4 1 REVERSE + 64 PUSHINT // sender_address _223=0 _224 query_id _228 _229=64 + send_msg INLINECALLDICT + }> // query_id index collection_address sender_address + 4 BLKDROP // + 16 PUSHPOW2DEC // _231=65535 + THROWANY + }> + get_nft_data PROC:<{ + // + load_data CALLDICT // _9 _10 _11 _12 _13 _14 _15 _16 + s2 s3 XCHG + 3 BLKDROP // init? index collection_address owner_address uri + }> + get_editor PROC:<{ + // + load_data CALLDICT // _9 _10 _11 _12 _13 _14 _15 _16 + s4 s7 XCHG + 7 BLKDROP // owner_address + }> + get_domain PROC:<{ + // + load_data CALLDICT // _10 _11 _12 _13 _14 _15 _16 _17 + s1 s7 XCHG + 7 BLKDROP // domain + CTOS // _9 + }> + get_last_fill_up_time PROC:<{ + // + load_data CALLDICT // _9 _10 _11 _12 _13 _14 _15 _16 + 7 1 BLKDROP2 // last_fill_up_time + }> + dnsresolve PROC:<{ + // subdomain category + OVER // subdomain category subdomain + SBITS // subdomain category subdomain_bits + DUP + 8 PUSHINT // subdomain category subdomain_bits subdomain_bits _5=8 + MOD // subdomain category subdomain_bits _6 + 0 EQINT // subdomain category subdomain_bits _8 + 70 THROWIFNOT + load_data CALLDICT // subdomain category subdomain_bits _49 _50 _51 _52 _53 _54 _55 _56 + s3 s7 XCHG + 7 BLKDROP // subdomain category subdomain_bits content + CTOS // subdomain category subdomain_bits cs + 8 LDU // subdomain category subdomain_bits _22 cs + SWAP // subdomain category subdomain_bits cs _22 + 0 EQINT // subdomain category subdomain_bits cs _26 + 412 THROWIFNOT + LDDICT // subdomain category subdomain_bits _60 _59 + DROP // subdomain category subdomain_bits keyvalue_map + s0 s3 XCHG // keyvalue_map category subdomain_bits subdomain + 8 PLDI // keyvalue_map category subdomain_bits _33 + 0 EQINT // keyvalue_map category subdomain_bits starts_with_zero_byte + 413 THROWIFNOT + 8 GTINT // keyvalue_map category _39 + IF:<{ // keyvalue_map category + DROP // keyvalue_map + 11732114750494247458678882651681748623800183221773167493832867265755123357695 PUSHINT // keyvalue_map category=11732114750494247458678882651681748623800183221773167493832867265755123357695 + }> // keyvalue_map category + DUP // keyvalue_map category category + 0 EQINT // keyvalue_map category _42 + IFJMP:<{ // keyvalue_map category + DROP // keyvalue_map + 8 PUSHINT // keyvalue_map _43=8 + SWAP // _43=8 keyvalue_map + }> // keyvalue_map category + SWAP + 8 PUSHPOW2 // category keyvalue_map _46=256 + DICTUGETREF // _61 _62 + DROP // value + 8 PUSHINT // value _48=8 + SWAP // _48=8 value + }> +}END>c diff --git a/build/wrapper.compiled.json b/build/wrapper.compiled.json new file mode 100644 index 0000000..d5f3cee --- /dev/null +++ b/build/wrapper.compiled.json @@ -0,0 +1 @@ +{"hex":"b5ee9c72c10107010086000d12161b207a860114ff00f4a413f4bcf2c80b0102012003020004f23002014805040005a0734b01aed0edfb6c2220c70094840ff2f0ded31f3001d0d3030171b0915be0fa4030db3c3031c7058e2e82105fcc3d145210ba82101c04412a5220bab19330db31e08210140aec515210ba9330db31e082104eb110a9ba309130e2060014ed44d0fa40fa40fa403007143f6e"} \ No newline at end of file diff --git a/build/wrapper.fif b/build/wrapper.fif new file mode 100644 index 0000000..2ede566 --- /dev/null +++ b/build/wrapper.fif @@ -0,0 +1,136 @@ +"Asm.fif" include +// automatically generated from `contracts/wrapper.fc` incl:`contracts/imports/stdlib.fc` incl:`contracts/imports/constants.fc` incl:`contracts/imports/utils.fc` incl:`contracts/imports/op-codes.fc` +PROGRAM{ + DECLPROC send_grams + DECLPROC load_data + DECLPROC store_data + DECLPROC recv_internal + DECLPROC send_msg + DECLPROC recv_external + 80293 DECLMETHOD get_owner + send_grams PROC:<{ + // address amount + 0 PUSHINT // address amount _3=0 + 24 PUSHINT // address amount _3=0 _4=24 + NEWC // address amount _3=0 _4=24 _5 + 6 STU // address amount _3=0 _7 + s0 s3 XCHG2 // _3=0 amount _7 address + STSLICER // _3=0 amount _8 + SWAP // _3=0 _8 amount + STGRAMS // _3=0 _9 + 107 STU // _11 + ENDC // msg + 3 PUSHINT // msg _13=3 + SENDRAWMSG + }> + load_data PROCREF:<{ + // + c4 PUSH // _1 + CTOS // ds + LDMSGADDR // target ds + LDMSGADDR // target owner ds + LDMSGADDR // target owner _17 _16 + DROP // target owner agorata + }> + store_data PROCREF:<{ + // target owner agorata + NEWC // target owner agorata _3 + s0 s3 XCHG2 // agorata owner _3 target + STSLICER // agorata owner _4 + SWAP // agorata _4 owner + STSLICER // agorata _5 + SWAP // _5 agorata + STSLICER // _6 + ENDC // _7 + c4 POP + }> + recv_internal PROC:<{ + SAMEALTSAVE // my_balance msg_value in_msg_full in_msg_body + 2 2 BLKDROP2 // in_msg_full in_msg_body + DUP // in_msg_full in_msg_body in_msg_body + SEMPTY // in_msg_full in_msg_body _4 + IF:<{ // in_msg_full in_msg_body + 16 PUSHPOW2DEC // in_msg_full in_msg_body _5=65535 + THROWANY + }> // in_msg_full in_msg_body + 32 LDU // in_msg_full _37 _36 + DROP // in_msg_full op + SWAP // op in_msg_full + CTOS // op cs + 4 LDU // op flags cs + SWAP + 1 PUSHINT // op cs flags _17=1 + AND // op cs _18 + IFJMP:<{ // op cs + 2DROP // + }> // op cs + LDMSGADDR // op _41 _40 + DROP // op sender_address + load_data INLINECALLDICT // op sender_address _42 _43 _44 + DROP + NIP // op sender_address owner + SDEQ // op _26 + IF:<{ // op + 0x5fcc3d14 PUSHINT // op _27 + s1 s(-1) PUXC // op op _27 + EQUAL // op _28 + 0x1c04412a PUSHINT // op _28 _29 + s2 s(-1) PUXC // op _28 op _29 + EQUAL // op _28 _30 + OR // op _31 + IFJMP:<{ // op + DROP // + RETALT + }> // op + 0x140aec51 PUSHINT // op _32 + s1 s(-1) PUXC // op op _32 + EQUAL // op _33 + IFJMP:<{ // op + DROP // + RETALT + }> // op + 0x4eb110a9 PUSHINT // op _34 + EQUAL // _35 + DROP // + }>ELSE<{ + DROP // + }> + }> + send_msg PROCINLINE:<{ + // to_address amount op query_id payload send_mode + 0 PUSHINT // to_address amount op query_id payload send_mode _7=0 + 16 PUSHINT // to_address amount op query_id payload send_mode _7=0 _8=16 + NEWC // to_address amount op query_id payload send_mode _7=0 _8=16 _9 + 6 STU // to_address amount op query_id payload send_mode _7=0 _11 + s0 s7 XCHG2 // _7=0 amount op query_id payload send_mode _11 to_address + STSLICER // _7=0 amount op query_id payload send_mode _12 + s0 s5 XCHG2 // _7=0 send_mode op query_id payload _12 amount + STVARUINT16 // _7=0 send_mode op query_id payload _13 + s1 s5 XCHG // payload send_mode op query_id _7=0 _13 + 107 STU // payload send_mode op query_id _27 + s1 s2 XCHG // payload send_mode query_id op _27 + 32 STU // payload send_mode query_id _29 + 64 STU // payload send_mode msg + s2 PUSH // payload send_mode msg payload + ISNULL // payload send_mode msg _32 + NOT // payload send_mode msg _33 + IF:<{ // payload send_mode msg + ROT // send_mode msg payload + STBR // send_mode msg + SWAP // msg send_mode + }>ELSE<{ + s2 POP // msg send_mode + }> + SWAP // send_mode msg + ENDC // send_mode _35 + SWAP // _35 send_mode + SENDRAWMSG + }> + recv_external PROC:<{ + // in_msg_body + DROP // + }> + get_owner PROC:<{ + // + }> +}END>c