English
  • 简体中文
Mainnet
BSV
  • BSV
  • mBSV
  • Bits
  • Sat

Transaction

45934f3ab36464f98f433bd1c2e4f146b90c1267fcfc141680a0a13afc0d192f
( - )
152,406
2021-05-01 08:19:00
1
38,272 B

7 Outputs

Total Output:
  • j"19HxigV4QyBv3tHpQVcUEQyq1pzZVdoAutM5&‰PNG  IHDR€€ ÍÉ#bKGDÿÿÿ ½§“ IDATxÚíÝw|ݽÿñONvÒ4£{Ð] e”½,­²· ¹àÅ}ñ^DñŠpT@((«b™*È(ÒRFK¡´¥ƒÒA:ә¤ivròû>~÷¡­mš¶9ç<ŸG(–QÞ4=¯|¿çûýf•žycG1&€@ €@ €@  €@ €@ €@  €@ €@ €@ @ €@ €@ €@ @ €@ €@ €@ €@ €@ €@ €@ €@ €@ €@ €@ €@ €@ €@ €@€@ €@ €@ €@€@ €@ €@ €€@ €@ €@ €€@ €@ €@  @šÈ1éªæÉk@JjoOF²£#’ÉŽHvtD{2mmÉhikÖöd´¶µGsk{46·FCsk46·Fcs[Ô56G]CKÔ56ǖúæØRß›ëšbs]ClÞÒ›¶4ÄÆ-Ñ֞42@º“ììDdïÆ~u]C¬«®õÕõ±vs]¬Ú¸%VoØ«6n‰•ëk㽪šhlió? 颼¤(ÊKŠbÿ!}¶ù׬«ÞË×VDzµÕ±xåÆX´rc¼³rcT®«‰d‡ Avú•÷ˆ~å=☱ûüŸïohj‰…+6ÄÛË×ÇÜeëbö’µ1oùºhmsZ i©¨ /ßwP¾ï |_sK[¼ýÞº˜µxM¼:e¼üöŠØPÛ`,èƲJϼÑÁ|Ғ‹@`ïY²zSL›[/Ì^Sç¼u-FnÄ@ºÜ¨A½bÔ ^qù©‡E[[{Ì|gu<5cq<5ãÝX¶¶Ú@°—9HÚrº§E+6Ä#ÓÄ#/-ƒ AB¦™ýÿù¹1yêü¨mh6@€)›[ãÉWÅ]O¾o-­2ìfÀ^W˜Ÿ}ð xñ¶Ëã©ÿ½4Î8fßÈ2 ì6. [9î€!qÜC⽪ê¸ëÉ×ã÷ϾåÉ$ÐÅ [Ö¿<n¾â¤˜óë«âsgy9^²@ú–÷ˆ|ö¤˜ý««âS'Ù '‡Aõî?ùÂiñÆ/>çc€dŠaýËã·×œOÜpqŒXa€dŠ ã†Ç+·&¾óñ£ /Û Èy¹9ñµ Ž‹™?¿2&6 ÈCú–Å#ßýXÜrÅI‘Ÿëh @2ÆgSo»<Þ× ÈûéS~ô©øÒ¹GG„§‚ #äåæÄ÷.›÷^sž D@IÎ?&ž½ù“1¨w‰1@)Ù?þöãËâèý ™¢oyxòû—ÄYÇîg €dŠü¼œø힝x 1€& SäädÇ]_9#.?åPc  c^ø‰¸õªSãêsŽ62É —Ot$™æ‡Wžg³¯!€)²³ñ믟ǎl  dŠÂüÜxè[Ä~ûô22EYIa<ø­ó£¤0Ï@È#öŠ»¾r¦!€IÎ8v?·‡A@¦ùÎ'NŒcƸ(#7';îþÆÙÑ£ ×@ȃû”Æ —O42É'O:$Ž?hˆ!€1/‰Dü싧EA^¶1€)†¨ˆo]2Á@È$Wœ~D íWjÒJVé™7v˜"":"‘•ˆìì¬ÈI$¢¨ 7 ór¢¤(?ÊK £¢¤0ô*‰A½{ƨ±ïà^1jPE$¾Ž‚t÷øô…ñ©[3i#Çð¯‡"ÙÑɶŽhd4¶´ýýûë¶ùwô,ʋ£Çì§=:Î?&ÊzšÒÐ9ãÇďψY‹×ƒôxÅsºFa^N|þ¬#ãë~ Š <OÒ͌…+ãäoÞg҂sWÐE[ÚâÖɯƑŸÿE¼4÷=ƒ@š9zÌ>ñ¡C‡ü³5›¶ÆÙß~(~ý—Yƀ4ó•óŽ5øגñŸ¿|6îî-c@9aÜ°7¢Ÿ!€À¶}鎧ãõE« éôy}Þ1F å¹v³ƒ‡÷¿Ýzydgûzkg•uS7ù™tDVdEVVDVVVd'²";‘ˆìDVäæfG^Nväf'"7'; ós#?7; òr¢¨ /Šós£¨ 7JŠò£¤0/J‹ ¢¬Çû%…Qѳ(z—EïžE~¤ˆ¶¶ö8䊟ǪuÆ e¹ ìfs—¯'^Yç?Ö©ûµrtDDÇßÿО숈äû?ÔÔÚ%ÿ†DVDß²âЫ$÷îƒû”Æðå1|@Yì;¨WìÓ·Ô='»Ë gNv\òáqqó¤éÆ@Û6yê|Èv%;"ªªë£ªº>f/©ú§ÏÏ͎±CûÄÁ#úÇáûŒ#÷c†ö1Ü^rщ @ °}/Í«Œöö¤S|tZsk{Ì^R³—TÅïž}ÿ⢊’ÂøСÃã”#GÇ©GvÿÉ=hÄÀŠ8jÿA1sÑjc ­®±%Þ[W#ö2]fs]cLž¶ &O[Eù9qƱûÅ¥ÇÅ ã†g¸øC @R–ð‡,¬Ühv›†æ¶xøÅùqÖ·Œã®þuÜ÷ì[ÑÒÚf˜Ýèœì‰,; íX±¾Æì *7ÄÕw<G~þ—ñð‹oG2™4ÊnP^RGì7È@`{Xkö¨ÊõµqÅ­OÆÄoÜó–¯3Èn0ñ°F@Û¶±¶Áì³—Tʼn_ým|ÿþ£­­Ý ]€‡ @ °›¶@öžödGüèáWâìo?몷¤‹:j@”çükµõÍF`¯{yþʘð•ßÄü÷Ö£ dg'⸆üku î¡ªº>Nû¯ûâµ+Ñ5À@à_ÛÚØbºÚ†æøèw'Å[KÖcÙÏ@à_knõæ{º—ú¦Ö8ïúI±dõ&cìRö7ØVº)/ÝÏæºÆø'ÇÖFoQè¬þ%Ñ·¬Ø@àŸµ¸ýÝÔâU›âËw<eˆ]°ÿ>½€þY2Ùaº­G^Z¾´À4¸OO# ÖÑ!éÞ®ùÕ³±Ùý*;ePoˆþéî6Ö6čL3D'8ˆ eÝûÌìX¾v³! €Lў숛'M7ÄNêã*` ©lò´±Þó‚wJQ~®€¤®¶ödÜóÌlCì„Bˆ ÕMzažv&órŒ€ µ-¯ª‰9ž¼ãè €tðä«ïaååd@ê›>¯Ò;È£€¤…7Þ] M-†ØÍ­mF@úÚړ1wÙ:C쀖VG€¤‰E+6aÔ;RŠ ],¨\o„°±¶Á@ÒÃÊ µFؑÜ"€¤‰ªÍ ·#69ˆ ]¬¯©7ÂX¹a‹€¤‡úF7ìˆek«€ =4¹¿ÝY.€¤‹æ÷·ÛK×n6€ô›ãeâßY½qKT×5@z(ÌË5¿1gi•€¤¢(€d”þ=Œðo¼þÎj# H*JŒ°-­mñڂ•†@>†ô+5Âv¼ùîÚhhv« iä áýŒ°ÓæV@z9pX_#lÇÓ3@ú(Êω1CûbVoܳ—¬5€ô1þ ¡‘—›cˆmxjÆâˆÈ2€ôñÁC†a;›¾Ð@ÒGVDœ}Üþ†Ø†åk7Ç+óW@úАØ»§!¶áÁ)óÂé_ iåã9ÄÛÐޞŒ‡^˜k éc@E8wüClÃÓ3ߍUë  }|þ¬##7'ÛÛpç3Œ€ } ¨èŸ9ípClÃìw×Ä« V@ú¸îÒ QTgˆm¸mò«F@>ŽÞP\ü¡ƒ ± s—Uœ¯.2€ô—“ˆ;¾tz$^¶å¾ný‚ mÜpùÄ=¸·!¶áÅ«ã©™ï@z8ÿ„±qåGb’Éd|óWÏ@z8ddÿøéO3Äv<<u~ÌZ¼Æ@Rß¾ƒ{Å#ß½(Š]õ»Mu Íqý½/@ê5°"ÿÞÅÑ«´ØÛñÝßý-ÖU×@j;lô€xææÇÀÞ=±ÓçUÆož~ä¥dŽs>°Üùå3œöý7šZâêÛÿnû‚ u³ÏN蟞èjßtíožåU5†@šÆè·éô8xDcì€Ç§/Œ{ŸyË@ROqAn|ócã㪳ŽŠœœlƒì€Êªê¿Ÿú@ ÉNdÅe§ßüØñѧÌU¾;ª¾©%.¹é‘¨kl1€ÔP——LWŸ{t ë_nL&㪟ü9Þ~o½1€tCû–Æ¥—rhôv_¿N¹å/ǯ,2€î«¼¤ N9rtüLJŠ8$ ·uí¬¦Ì‰<4-Üò@·’ÈŠ8pXß8þàaqêQ£ã˜1ƒ]ØÑžž¹8®þÙSâÀÞÖCú–ÆØ¡}ã áý☱ƒãÈýEÏâÓt¡W¬ŒOÝüX$;:Œ`÷KdEô.-Ž¡ýJcXÿòÖ¯,†õ/‹‘+bìÐ>boÄßùߝÍ­íÆ@ðϲ""+++²³³";‘‰¬¬ÈN$"7'; ò²£ /7 ór¢ ?' ór£Ga^”Diq~”DY÷?ú–G¿²Ñ·¼8ú”Gv¶÷íí ¯Ì_çwR44·ÐÝÔ<y­èRSç,‹¿ÿGñ‡4™à‘ióãÊÛþmíIc M@ºûù3ãÚß<®ö@škmkÿ¾û¹¸û©7Å@Ò݆šúøä͏Æ+óW éîÍÅkâã?x$Vo¬3@ÒY{{2n|FÜpߋўtƒg€¤µUjãs·ý)¦¿½Â Hw÷=ûV\÷Û)QÛÐl €¤³%«7ŗïx*^v¡@Ò[CSKüì±që_Ž–67v@ÚJ&“ñÇ©óã~ÿ·X³i«A@Î¦Ï«Œoß3%f/©2@ÒÙk VÆÿ>8-¦Î­4@Òٌ…+ãæIÓã…Ùˍ€tÕޞŒ§g¾·?öZÌX´Ú HWu Íñ‡ߎ;ŸË«j €t5wYUÜû×Ùñ‡ߎú¦Vƒ€ ÕÖ7Å//Šß=;;ÞX¼Ö HG-­mñü›Ëâáߎ§f,vóf€¤{üýòϳbòÔù1wÙºè0 ìuY¥gÞèsöš'¯5mSm}L›W›½<žs©§yÀ^â {L¯Òâ8wüØ8wü؈ˆx{ùºxvÖÒxv֒˜¹hU$’€=Â@؃„m«®kˆgf-'_^Sf/‹æÖv£€™bkcsLysY<ñò¢xzæ»ÑØÒfèBNÐíô(̏³?0&ÎþÀ˜ØÚØOÏ|7þ8u~LysY´;O €ôÁ &L806ÕÖÇ^œ¿ö­X´r£q “œ†=È)`è:¯/Z¿nN<üâÛÞ/ d’Í[âwϾw?õF¬ÞXgØ Ê*zÅWÏ?.æüꪸûëgÇþûô6 @2ANNvœ?á€xåöÏÄýÿýÑ8xx_£€ #^؉8ãØýâÅÛ.»¿~v í[j€dJž?ဘùó+ãÆË'F‚\£€ äçåÄÎ9:^¿ësñÑãÇ ™b@¯’øÍžOÜpqŒXn dŠ ã†ÇK?ùt|öôÃ#Ð€Š òâ‡Wž“¯ÿXô-+62Ň¯Þþ™8鈑Æ@@¦èUZ“®» ¾vþ±Æ@@Ƽ&ñO|0î½æÜ(ÌË12Å9ãÇij?üdô+÷¾@ dŒƒ†÷‹gnþD íç "@ÈÃú—Ç37"ÚÇ@Èý+Jâ/ÿ{i6z€1€)ÊzÆäë/Šý÷ém ҊK€îûâ{ÖMÝû+è¬÷¯ÍNdýýãý?ÏÍɎ¢üÜ(ÌύÂüœ(Ìύ‚¼œ(-Ώò…QÖ£ ÊK £üïߨ(‰þ=¢oYqäädûßÍTô,ŠÇo¸8Ný¯ûbyUA€™,Ù‘lOF[{×eŸ²âØ«$F¬øÇǨ1zp¯()Ê7ú^Ò¿¢$¿á?âäk~UÕõAÐuA¹®º>ÖU×Çì%UÿçDz"bÄÀò8ddÿ7²:z`¹ßÀ(ÈË5Ü2´_YLúö…qò7Í­íA°{uDÄÒ5Õ±tMu<òÒˆˆÈËIÄ1cö‰Æ ‹6"åb…ÝíQâÎ/ŸùñÆ@°çµ´%cڼʘ6¯2¾ÿÔÚ·4Î?&Î?&ƉÁÝæü ĂÊõqëäWAÊr0@š¨\_?}ôµ˜ðµ{âƒ_ûm<0eN46·f7¸îÒ 1ñ°†@Ð}Ì^R_øé_bÌe·Ç~9j뛌ҕ/ž‰DÜõå3¢wi‘1€t/5[›âû÷Oƒ?}gÜ2iz44µ¥‹ô-ï?ÿò†@Ð=Õ64ÇMN‹£®úe<>}¡AºÈIGŒŠ+N?Ü@º¯UëâS·<ç]ÿP¬Ù¸Å ]à>õ¡Þ¿Ì@º·f/c¿øë˜<u¾1vQa~nÜvÕ©†@ÐýÕ64Çg~üDü÷¯Ÿ‹¶676Þ'2<.<ñC H wýéõ8ïúIQ³µÑ»àÆË?eÅׇ EL›Wg}ëØTë9·Õ§¬8®½d‚!€¤Ž¹Ë×Çi×Þë«·£“>uò!1´_©!€¤ŽwVnŠ‹nx8êÝ/°SòrsâºKDbf/©ŠËny,ÚۓÆ脏?6Ö×@R˳³–Əþø²!:óšHÄ·.=Á@RÏͽÓçU¢N>bTŒTa ©%Ùñ¹Ûžô~Àμ¸&qõ¹Ç@êYµ±.n™4ݝpá‰DïÒ"C H=w<>#¯ÜhˆT—Ÿ=ýpC H=íɎ¸yÒK†è„K&Yf@Š}ia,¨\oˆ4¸OiœpðPC H=qÇc3 Ñ O<Ø@RÓ£ÓDM]£!vҙÇ@zšZÚcҋob'äÅ©G6€ÔôèK ŒÐ §)€¤¨×­ŽªÍu†ØI‰,×#HAñôÌw ±“ÊKŠâ˜±ƒ  5½üö #tÂÉGŒ2€Ôôڂ•Fè„cØÇ@RÓªu±fãCì¤q#úGnŽ—] )j‘gï´ü¼œ8ddC HÑ\!;ã¨ý]‚ E½»JvÆáû4€ÔTU½Õ°ïà^F@šÖUסF¬·ƒF’Ö;Ø)…ù¹1¤o©!€¤žúæV#tÒh§€¤¢æ–6#tÒðåF@‚ØÚn„Nê[Vl ©§£Ã@F)ÊÏ1Bg°\"HAù¹Fèl:ˆ æ9ØYe= Œ€ õôêYd„NÊÏÏ@RÐÀ^%Fè¤GO€¤¢A}z¡“DšØ[v>³€ õŒÚǝ”••e ©çàýŒÐIž£Œ Õô-+Žþ.étzŽ2€Tsø¾Œ° šDj&6Ò» ¡Ù@ ©€‡7Â.ð@ )exÿ²> Â» ¦¾É@RÇGOk„]´zÃ# HqÉăͰ‹Vm€@RÄq qú· ¬\_k ©áòS3BXå0€T0¼Yœóý ÑVnp@ øúÇENN¶!vQSKk¬p @w7´_i\x⁆èóß[íÉC èÞnþìI‘—›cˆ.ð֒*# èÞN>bdœrÔhCtU.€@€é²½©(?'n¾â$Cte.Yk Àöäd»è`oúá•'Ç°þå†è"Í-m± rƒ!€Û“›í·¨½å¼ñc⒏3Dš±p• @€ÿ6süµ7ŒP·^uŠ!ºØso,52M– vš+O÷¼²âüxø;FYBc@ °ËŸl ¸³ r½pOÊÉNÄ}מ£õ2F[µ¡6­Üh @þü<G÷دϬˆ_~õÌ8þ ¡ÆØ ¦¼¹Ì@ÈD.hØyEù¹Fز"⮯œ=ácì&ϼ¾Ä@ÈDŽfí¼B¸û_²"îøòéqÑ2Æn²yKC<ëýt3^‘`O`Ž÷³í¬…yF؝—÷\s®'}ìf“§-ˆ¶ö¤!€‰ŠÅÌNëY”o„ݤOiQ<ü ãÐэ±›=8e®€ fØQe= Œ°Œ?pHÜý³£E‰1v³•ë=ÿQQâ^t])‘ñŸk.Ù.JÚ#š2Ï@Èd½K‹Œ°“ú–÷0B7¢_üô‹§Å!£cihj‰œþEBfëÕSî¬Á½{a•çÇ5Wœ~Dä¸iºïù9±¹®Ñ@Èdûô-5ÂNÚw°'RtVqAn\uÖQñÅsŽÒbï¥ÜÓÚÚÚãŽÇf™nh¿2#ì¤Qƒ*¢yqTU×c éÛ3>}êáññŒ‹ G÷šG§/Œ•¶™n¿}za'%‰øìGÄ ÷M5Æv”æÅ)GŽóO>l¤ <ºŸ<òª€é órbä€rCtÂçÎ<2înN,¯ª1Æ?tÄØ¡}ãøƒ†Æ‡y¹~;ï.žž¹8Tn02ÝqñüN*.ȋ¿uAœuݱ¡¶!#7èY”‡Ž‡í;0=0Ž;8z—ûÅÑ µ¶µÇwîyÁ@ â¼ñcŒ° Æ í»õ²¸î·S≗EGþ7f'²bpïž1´_Y ë_ûîûéûéƒû¸€(UÜûÌìxwõfCÐíe•žyc‡`÷Ú¯4fÜyEäå£ l¨© WÅ¢•cźšX»yklÚÒµõMÑÐԍͭÑÜÚ-mí‘LvDGtDDÖnüuD"+ÙÙY‘ÈŠœD"òór¢0/' ós£0/'Š ó¢´¸ ÊzDiqA”—Fß²âèW^ý+zDß²1 ¢‡£Ä)®fkczå]Q]×d º=Ga7ûÁg?"þºPŸ²â8ãØýâŒc÷3Ýʏ~Yü‘2\*»Ñ×Î?6N=j_C@š[¶fsüâO³ „L÷™Ó‹ë.`HsÉd2¾|çSÑ֞4)Ã)`èbyÙqË'Ç'N:ĐîùëìxiÞ C !eEÄùˆë?q¢«6!CT®«‰oß3Å@ȨO ìD2²œtĨ¸ðÄbX7{†LrõÏþ Ím†@B*ˊˆD"+r²ÿ¸GÂ¼(ëñþ­;T”Ä€^%1b@yŒTc†öq…/d¨{þúfL›Wi t'5O^k`·XP¹>®½ûyC²\ ;¡¶¾).½é‘hlqêá ?ýs,[[m d‚Ÿ>òjüùµÅ†@@&xiî{ñ?¿ÿ›!€ ­ØÿÁ£‘ì°ÒÞª µqÞõEÍÖ&c…—ÑÏÞIDAT  ÝmÞÒç]?)ÖlÚj  ¤»ú¦–¸à{ˆÅ«6鮩¥5>ñƒGãÅkAZò$øÿlmlŽKoz$^œóž1€îjêã‚ïý!^g1€îÖWoó®Ÿo¿·Þ@Hw«6ÔÆÙß~0–®ñˆ7 ¤½7¯ŽKnœUÕõÆ@@º{`ʜøêOGK[Ò@HgmmíqÝ=Sâše  ¤»MµõqÙ-Ç´y•Æ@@º{iî{ñ¹Ÿü)Vo¬3ÒYSKkÜpßÔ¸ó‰‘e  Hgs—UÅ?~2­Ü(þ@ÎÚÚÚãŽ'fÆ÷ïŸmí®ò@Z{uÁÊøÆ]ù•Œ€t¶®zk|çžâ/Î §{AÆZÛÚã×™7=0-¶6µŠ?€¤³?¿úNÜpÿ‹ñÎÊMÆ@:ûëÌw㦦ÆÜå덀töÂìeñýû§Æ›ï®5@ÒU{{2ž™µ$~úÈ«1cÑjƒ€ ]m©oŠ¦Ì_ýyV,¯ª1@ÒÕ²5›ã—ž<?çïWõ€´ÓÜÒÏÌZ÷=7'žcit˜ é'™LÆë﬎ÉÓħΏš­MF@ºioOÆÌwVǓ//ŠÇ_^k7o5 @ÒMu]C¼0{y<3kI<;k©#} H7õM-ñڂ•1mneL›û^¼µ¤Ê{ú@NVm¨×ßY3®Š WŜ¥ë"Ù!ù@*×ÕļåëbΒªxkiU¼µdml¨m0 @RY[[{¬Ú¸%–®Ù‹WmŠ…•bAå†X¸bCÔ»/@RSÍÖÆX¹aKT®«‰ëjcÅúšx¯ª&–­­Žek«£­=i$€twÍ-m±¹®16ÔÖÇÆچØPóþ·ëª·ÆÚÍ[cí¦ºX³©.Önª‹Æ–6ƒ «%“ÉH&;¢#"’ÉŽHvtD{2mmÉhmOFk[ûûíÉhikæ–¶hli‹¦–¶hlnýÇ·[›ZckcKlmhŽºÆ–ØÚØ[š¢fëÿýuÀŽÈ*=óF—id„  €@ €@ €@@ €@ €@ €@@ €@ €@ €€@ €@ €@ €€@ €@ €@  €@ €@ €@  €@ €@ €@  €@ €@ €@ @ €@ €@ €@ @ €@ €@ €@ €@ €@ €@ €@ €@ €@ €@ €@€@&þ}a^]ÆtIEND®B`‚ image/pngbinary bplogo.png
    https://whatsonchain.com/tx/45934f3ab36464f98f433bd1c2e4f146b90c1267fcfc141680a0a13afc0d192f
  • j"19HxigV4QyBv3tHpQVcUEQyq1pzZVdoAutMx /** Copyright 2021. Matter Web Services Inc., Attila Aros. All Rights Reserved. This software code is protected under the laws of the United States and other International Treaty Provisions. This Agreement shall not be construed as transferring any rights other than those expressly permitted herein. Licensor reserves all copyrights. This software code "SuperAsset" and generated ASM code is the exclusive property of the Licensor. */ // The following ASM script template is als explictly covered by this copyright: // <PUSH 36 bytes> OP_DROP <PUSH 20 bytes> OP_DROP OP_NOP OP_5 OP_PICK OP_HASH256 OP_1 OP_SPLIT OP_SWAP OP_BIN2NUM OP_1ADD OP_SWAP OP_CAT 3044022079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f817980220 OP_SWAP OP_CAT c3 OP_CAT 02b405d7f0322a89d0f9f3a98e6f938fdc1c969a8d1382a2bf66a71ae74a1e83b0 OP_CHECKSIG OP_NOP OP_VERIFY OP_5 OP_PICK 68 OP_SPLIT OP_NIP 0 OP_PICK OP_3 OP_SPLIT OP_DROP OP_1 OP_SPLIT OP_NIP 00 OP_CAT OP_BIN2NUM OP_1 OP_PICK OP_3 OP_2 OP_PICK OP_ADD OP_SPLIT OP_DROP OP_3 OP_SPLIT OP_NIP 0 OP_PICK 3c OP_SPLIT OP_DROP 0 OP_SPLIT OP_NIP OP_7 OP_PICK OP_HASH160 OP_1 OP_PICK 3b OP_SPLIT OP_DROP 27 OP_SPLIT OP_NIP OP_EQUAL OP_VERIFY OP_8 OP_PICK OP_8 OP_PICK OP_CHECKSIG OP_VERIFY OP_9 OP_PICK OP_SIZE OP_NIP OP_10 OP_PICK OP_1 OP_PICK 2c OP_SUB OP_SPLIT OP_DROP OP_1 OP_PICK 34 OP_SUB OP_SPLIT OP_NIP OP_2 OP_PICK 25 OP_SPLIT OP_DROP OP_1 OP_SPLIT OP_NIP OP_8 OP_PICK OP_NOT OP_IF 0 OP_PICK 0 24 OP_NUM2BIN OP_EQUAL OP_IF OP_12 OP_PICK 68 OP_SPLIT OP_DROP 44 OP_SPLIT OP_NIP OP_1 OP_ROLL OP_DROP OP_ENDIF OP_1 OP_PICK fd OP_7 OP_PICK OP_2 OP_NUM2BIN OP_CAT 24 OP_CAT OP_2 OP_PICK OP_CAT 7514 OP_CAT OP_11 OP_PICK OP_CAT OP_6 OP_PICK 3b OP_SPLIT OP_NIP OP_CAT OP_CAT OP_2 OP_ROLL OP_DROP OP_1 OP_ROLL OP_1 OP_PICK OP_DROP OP_ELSE OP_7 OP_PICK OP_SIZE OP_NIP 28 OP_GREATERTHANOREQUAL OP_IF OP_7 OP_PICK 28 OP_SPLIT OP_DROP fd OP_7 OP_PICK OP_2 OP_NUM2BIN OP_CAT 24 OP_CAT OP_2 OP_PICK OP_CAT OP_EQUAL OP_NOT OP_VERIFY OP_ENDIF OP_1 OP_PICK OP_8 OP_PICK OP_CAT OP_2 OP_ROLL OP_DROP OP_1 OP_ROLL OP_1 OP_PICK OP_DROP OP_ENDIF OP_1 OP_PICK OP_HASH256 OP_13 OP_PICK OP_4 OP_PICK OP_8 OP_SUB OP_SPLIT OP_DROP OP_4 OP_PICK 28 OP_SUB OP_SPLIT OP_NIP OP_EQUAL OP_NIP OP_NIP OP_NIP OP_NIP OP_NIP OP_NIP OP_NIP OP_NIP OP_NIP OP_NIP OP_NIP OP_NIP OP_NIP contract SuperAssetNFT3 { public function transfer(SigHashPreimage txPreimage, Sig senderSig, PubKey unlockKey, Ripemd160 receiverAddress, bool isMelt, bytes changeOutput) { // Allow anyone to fund this operation, commit to all the outputs. // Signature.SIGHASH_ANYONECANPAY | Signature.SIGHASH_ALL | Signature.SIGHASH_FORKID; // Use the optimized version by setting the MSB require(Tx.checkPreimageOpt_(txPreimage)); // require(Util.checkPreimageSigHashType(txPreimage, SigHash.ANYONECANPAY | SigHash.ALL | SigHash.FORKID)); // Optimization: Get locking script directly instead of using Util.scriptCode bytes preimageSection = txPreimage[ 104 : ]; int scriptLen = unpack(preimageSection[ 1 : 3 ] + b'00'); // int dataStartLoc = scriptLen - 57; bytes lockingScript = preimageSection[ 3 : 3 + scriptLen]; bytes dataState = lockingScript[ 0 : 60 ]; // Validate and authorize the transaction, obtain the hash160 bytes from the locking script and compare against the hash160 of the unlockKey require(hash160(unlockKey) == dataState[ 39 : 59 ]); require(checkSig(senderSig, unlockKey)); int preimageLen = len(txPreimage); bytes buildingOutput = txPreimage[preimageLen - 52 : preimageLen - 44]; // Get input value directly; Conservation of Satoshi quantity. // Whether this asset is being melted to arbitrary changeOutput or instead it is a transfer update. bytes assetId = dataState[ 1 : 37 ]; if (!isMelt) { // This is a transfer update, enforce the assetId to be set for lifetime. // An NFT is only valid if it can be traced back to a coinbase minting event (36 zeroes at the beginning) if (assetId == num2bin(0, 36)) { // Then the assetId must be equal to the outpoint that this input is spending. assetId = txPreimage[ 68 : 104 ]; } // Hardcode the 'fd' instead of using Util.writeVarint buildingOutput += b'fd' + num2bin(scriptLen, 2) + b'24' + assetId + b'7514' + receiverAddress + lockingScript[ 59 : ]; } else { if (len(changeOutput) >= 40) { require(changeOutput[ : 40 ] != b'fd' + num2bin(scriptLen, 2) + b'24' + assetId); } // The first output, in the case of a melt, is just a p2pkh to recover the satoshis // Manually hardcode p2pkh to save space buildingOutput += changeOutput; } require(hash256(buildingOutput) == (txPreimage[preimageLen - 40 : preimageLen - 8])); } } text/plain; charset=utf-8UTF-8SuperAssetNFT3.scrypt.txt
    https://whatsonchain.com/tx/45934f3ab36464f98f433bd1c2e4f146b90c1267fcfc141680a0a13afc0d192f
  • j"19HxigV4QyBv3tHpQVcUEQyq1pzZVdoAutM /** Copyright 2021. Matter Web Services Inc., Attila Aros. All Rights Reserved. This software code is protected under the laws of the United States and other International Treaty Provisions. This Agreement shall not be construed as transferring any rights other than those expressly permitted herein. Licensor reserves all copyrights. This software code "SuperAsset" and generated ASM code is the exclusive property of the Licensor. */ // The following ASM script template is als explictly covered by this copyright: // <PUSH 36 bytes> OP_DROP <PUSH 20 bytes> OP_DROP OP_NOP OP_4 OP_PICK OP_HASH256 OP_1 OP_SPLIT OP_SWAP OP_BIN2NUM OP_1ADD OP_SWAP OP_CAT 3044022079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f817980220 OP_SWAP OP_CAT c3 OP_CAT 02b405d7f0322a89d0f9f3a98e6f938fdc1c969a8d1382a2bf66a71ae74a1e83b0 OP_CHECKSIG OP_NOP OP_VERIFY OP_4 OP_PICK 68 OP_SPLIT OP_NIP 0 OP_PICK OP_3 OP_SPLIT OP_DROP OP_1 OP_SPLIT OP_NIP 00 OP_CAT OP_BIN2NUM OP_1 OP_PICK OP_3 OP_2 OP_PICK OP_ADD OP_SPLIT OP_DROP OP_3 OP_SPLIT OP_NIP 0 OP_PICK 3c OP_SPLIT OP_DROP 0 OP_SPLIT OP_NIP OP_6 OP_PICK OP_HASH160 OP_1 OP_PICK 3b OP_SPLIT OP_DROP 27 OP_SPLIT OP_NIP OP_EQUAL OP_VERIFY OP_7 OP_PICK OP_7 OP_PICK OP_CHECKSIG OP_VERIFY OP_8 OP_PICK OP_SIZE OP_NIP OP_9 OP_PICK OP_1 OP_PICK 2c OP_SUB OP_SPLIT OP_DROP OP_1 OP_PICK 34 OP_SUB OP_SPLIT OP_NIP OP_6 OP_PICK OP_NOT OP_IF OP_2 OP_PICK 25 OP_SPLIT OP_DROP OP_1 OP_SPLIT OP_NIP 0 OP_PICK 0 24 OP_NUM2BIN OP_EQUAL OP_IF OP_11 OP_PICK 68 OP_SPLIT OP_DROP 44 OP_SPLIT OP_NIP OP_1 OP_ROLL OP_DROP OP_ENDIF OP_1 OP_PICK fd OP_7 OP_PICK OP_2 OP_NUM2BIN OP_CAT 24 OP_CAT OP_2 OP_PICK OP_CAT 7514 OP_CAT OP_10 OP_PICK OP_CAT OP_6 OP_PICK 3b OP_SPLIT OP_NIP OP_CAT OP_CAT OP_2 OP_ROLL OP_DROP OP_1 OP_ROLL OP_1 OP_PICK OP_DROP OP_DROP OP_ELSE 0 OP_PICK 1976a914 OP_9 OP_PICK OP_CAT 88ac OP_CAT OP_CAT OP_1 OP_ROLL OP_DROP 0 OP_PICK OP_DROP OP_ENDIF 0 OP_PICK OP_HASH256 OP_11 OP_PICK OP_3 OP_PICK OP_8 OP_SUB OP_SPLIT OP_DROP OP_3 OP_PICK 28 OP_SUB OP_SPLIT OP_NIP OP_EQUAL OP_NIP OP_NIP OP_NIP OP_NIP OP_NIP OP_NIP OP_NIP OP_NIP OP_NIP OP_NIP OP_NIP contract SuperAssetNFT2 { public function transfer(SigHashPreimage txPreimage, Sig senderSig, PubKey unlockKey, Ripemd160 receiverAddress, bool isMelt) { // Allow anyone to fund this operation, commit to all the outputs. // Signature.SIGHASH_ANYONECANPAY | Signature.SIGHASH_ALL | Signature.SIGHASH_FORKID; // Use the optimized version by setting the MSB require(Tx.checkPreimageOpt_(txPreimage)); // require(Util.checkPreimageSigHashType(txPreimage, SigHash.ANYONECANPAY | SigHash.ALL | SigHash.FORKID)); // Optimization: Get locking script directly instead of using Util.scriptCode bytes preimageSection = txPreimage[ 104 : ]; int scriptLen = unpack(preimageSection[ 1 : 3 ] + b'00'); // int dataStartLoc = scriptLen - 57; bytes lockingScript = preimageSection[ 3 : 3 + scriptLen]; bytes dataState = lockingScript[ 0 : 60 ]; // Validate and authorize the transaction, obtain the hash160 bytes from the locking script and compare against the hash160 of the unlockKey require(hash160(unlockKey) == dataState[ 39 : 59 ]); require(checkSig(senderSig, unlockKey)); int preimageLen = len(txPreimage); bytes buildingOutput = txPreimage[preimageLen - 52 : preimageLen - 44]; // Get input value directly; Conservation of Satoshi quantity. // Whether this asset is being melted back into P2PKH bitcoin or instead it is a transfer update. if (!isMelt) { bytes assetId = dataState[ 1 : 37 ]; // This is a transfer update, enforce the assetId to be set for lifetime. // An NFT is only valid if it can be traced back to a coinbase minting event (36 zeroes at the beginning) if (assetId == num2bin(0, 36)) { // Then the assetId must be equal to the outpoint that this input is spending. assetId = txPreimage[ 68 : 104 ]; } // Hardcode the 'fd' instead of using Util.writeVarint buildingOutput += b'fd' + num2bin(scriptLen, 2) + b'24' + assetId + b'7514' + receiverAddress + lockingScript[ 59 : ]; } else { // The first output, in the case of a melt, is just a p2pkh to recover the satoshis // Manually hardcode p2pkh to save space buildingOutput += b'1976a914' + receiverAddress + b'88ac'; } require(hash256(buildingOutput) == (txPreimage[preimageLen - 40 : preimageLen - 8])); } } text/plain; charset=utf-8UTF-8SuperAssetNFT2.scrypt.txt
    https://whatsonchain.com/tx/45934f3ab36464f98f433bd1c2e4f146b90c1267fcfc141680a0a13afc0d192f
  • j"19HxigV4QyBv3tHpQVcUEQyq1pzZVdoAutM®/** Copyright 2021. Matter Web Services Inc., Attila Aros. All Rights Reserved. This software code is protected under the laws of the United States and other International Treaty Provisions. This Agreement shall not be construed as transferring any rights other than those expressly permitted herein. Licensor reserves all copyrights. This software code "SuperAsset" and generated ASM code is the exclusive property of the Licensor. */ // The following ASM script template is als explictly covered by this copyright: // OP_NOP 4 OP_PICK OP_HASH256 1 OP_SPLIT OP_SWAP OP_BIN2NUM OP_1ADD OP_SWAP OP_CAT 3044022079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f817980220 OP_SWAP OP_CAT -67 OP_CAT 02b405d7f0322a89d0f9f3a98e6f938fdc1c969a8d1382a2bf66a71ae74a1e83b0 OP_CHECKSIG OP_NOP OP_VERIFY 4 OP_PICK 104 OP_SPLIT OP_NIP 0 OP_PICK 3 OP_SPLIT OP_DROP 1 OP_SPLIT OP_NIP 0 OP_CAT OP_BIN2NUM 0 OP_PICK 57 OP_SUB 2 OP_PICK 3 3 OP_PICK OP_ADD OP_SPLIT OP_DROP 3 OP_SPLIT OP_NIP 0 OP_PICK 2 OP_PICK OP_SPLIT OP_NIP 7 OP_PICK OP_HASH160 1 OP_PICK 57 OP_SPLIT OP_DROP 37 OP_SPLIT OP_NIP OP_EQUAL OP_VERIFY 8 OP_PICK 8 OP_PICK OP_CHECKSIG OP_VERIFY 9 OP_PICK OP_SIZE OP_NIP 10 OP_PICK 1 OP_PICK 44 OP_SUB OP_SPLIT OP_DROP 1 OP_PICK 52 OP_SUB OP_SPLIT OP_NIP 7 OP_PICK OP_NOT OP_IF 2 OP_PICK 36 OP_SPLIT OP_DROP 0 OP_PICK 0 36 OP_NUM2BIN OP_EQUAL OP_IF 12 OP_PICK 104 OP_SPLIT OP_DROP 68 OP_SPLIT OP_NIP 1 OP_ROLL OP_DROP OP_ENDIF 1 OP_PICK -125 8 OP_PICK 2 OP_NUM2BIN OP_CAT 6 OP_PICK 8 OP_PICK OP_SPLIT OP_DROP OP_CAT 2 OP_PICK OP_CAT 20 OP_CAT 11 OP_PICK OP_CAT OP_CAT 2 OP_ROLL OP_DROP 1 OP_ROLL 1 OP_PICK OP_DROP OP_DROP OP_ELSE 0 OP_PICK 346650137 10 OP_PICK OP_CAT -11400 OP_CAT OP_CAT 1 OP_ROLL OP_DROP 0 OP_PICK OP_DROP OP_ENDIF 0 OP_PICK OP_HASH256 12 OP_PICK 3 OP_PICK 8 OP_SUB OP_SPLIT OP_DROP 3 OP_PICK 40 OP_SUB OP_SPLIT OP_NIP OP_EQUAL OP_NIP OP_NIP OP_NIP OP_NIP OP_NIP OP_NIP OP_NIP OP_NIP OP_NIP OP_NIP OP_NIP OP_NIP OP_RETURN <PUSH 36b data> <PUSH 20b data> contract SuperAssetNFT0 { public function transfer(SigHashPreimage txPreimage, Sig senderSig, PubKey unlockKey, Ripemd160 receiverAddress, bool isMelt) { // Allow anyone to fund this operation, commit to all the outputs. // Signature.SIGHASH_ANYONECANPAY | Signature.SIGHASH_ALL | Signature.SIGHASH_FORKID; // Use the optimized version by setting the MSB require(Tx.checkPreimageOpt_(txPreimage)); // require(Util.checkPreimageSigHashType(txPreimage, SigHash.ANYONECANPAY | SigHash.ALL | SigHash.FORKID)); // Optimization: Get locking script directly instead of using Util.scriptCode bytes preimageSection = txPreimage[ 104 : ]; int scriptLen = unpack(preimageSection[ 1 : 3 ] + b'00'); int dataStartLoc = scriptLen - 57; bytes lockingScript = preimageSection[ 3 : 3 + scriptLen]; bytes dataState = lockingScript[ dataStartLoc : ]; // Validate and authorize the transaction, obtain the hash160 bytes from the locking script and compare against the hash160 of the unlockKey require(hash160(unlockKey) == dataState[ 37 : 57 ]); require(checkSig(senderSig, unlockKey)); int preimageLen = len(txPreimage); bytes buildingOutput = txPreimage[preimageLen - 52 : preimageLen - 44]; // Get input value directly; Conservation of Satoshi quantity. // Whether this asset is being melted back into P2PKH bitcoin or instead it is a transfer update. if (!isMelt) { bytes assetId = dataState[ : 36 ]; // This is a transfer update, enforce the assetId to be set for lifetime. // An NFT is only valid if it can be traced back to a coinbase minting event (36 zeroes at the beginning) if (assetId == num2bin(0, 36)) { // Then the assetId must be equal to the outpoint that this input is spending. assetId = txPreimage[ 68 : 104 ]; } // Hardcode the 'fd' instead of using Util.writeVarint buildingOutput += b'fd' + num2bin(scriptLen, 2) + lockingScript[ : dataStartLoc ] + assetId + b'14' + receiverAddress; } else { // The first output, in the case of a melt, is just a p2pkh to recover the satoshis // Manually hardcode p2pkh to save space buildingOutput += b'1976a914' + receiverAddress + b'88ac'; } require(hash256(buildingOutput) == (txPreimage[preimageLen - 40 : preimageLen - 8])); } } text/plain; charset=utf-8UTF-8SuperAssetNFT0.scrypt.txt
    https://whatsonchain.com/tx/45934f3ab36464f98f433bd1c2e4f146b90c1267fcfc141680a0a13afc0d192f
  • j"19HxigV4QyBv3tHpQVcUEQyq1pzZVdoAutM+/** Copyright 2021. Matter Web Services Inc., Attila Aros. All Rights Reserved. This software code is protected under the laws of the United States and other International Treaty Provisions. This Agreement shall not be construed as transferring any rights other than those expressly permitted herein. Licensor reserves all copyrights. This software code "SuperAsset" and generated ASM code is the exclusive property of the Licensor. */ // <PUSH 36 bytes> OP_DROP <PUSH 20 bytes> OP_DROP OP_NOP OP_5 OP_PICK OP_HASH256 OP_1 OP_SPLIT OP_SWAP OP_BIN2NUM OP_1ADD OP_SWAP OP_CAT 3044022079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f817980220 OP_SWAP OP_CAT c3 OP_CAT 02b405d7f0322a89d0f9f3a98e6f938fdc1c969a8d1382a2bf66a71ae74a1e83b0 OP_CHECKSIG OP_NOP OP_VERIFY OP_5 OP_PICK 68 OP_SPLIT OP_NIP 0 OP_PICK OP_3 OP_SPLIT OP_DROP OP_1 OP_SPLIT OP_NIP 00 OP_CAT OP_BIN2NUM OP_1 OP_PICK OP_3 OP_2 OP_PICK OP_ADD OP_SPLIT OP_DROP OP_3 OP_SPLIT OP_NIP 0 OP_PICK 3c OP_SPLIT OP_DROP 0 OP_SPLIT OP_NIP OP_7 OP_PICK OP_HASH160 OP_1 OP_PICK 3b OP_SPLIT OP_DROP 27 OP_SPLIT OP_NIP OP_EQUAL OP_VERIFY OP_8 OP_PICK OP_8 OP_PICK OP_CHECKSIG OP_VERIFY OP_9 OP_PICK OP_SIZE OP_NIP OP_10 OP_PICK OP_1 OP_PICK 2c OP_SUB OP_SPLIT OP_DROP OP_1 OP_PICK 34 OP_SUB OP_SPLIT OP_NIP OP_2 OP_PICK 25 OP_SPLIT OP_DROP OP_1 OP_SPLIT OP_NIP OP_8 OP_PICK OP_NOT OP_IF 0 OP_PICK 0 24 OP_NUM2BIN OP_EQUAL OP_IF OP_12 OP_PICK 68 OP_SPLIT OP_DROP 44 OP_SPLIT OP_NIP OP_1 OP_ROLL OP_DROP OP_ENDIF OP_1 OP_PICK fd OP_7 OP_PICK OP_2 OP_NUM2BIN OP_CAT 24 OP_CAT OP_2 OP_PICK OP_CAT 7514 OP_CAT OP_11 OP_PICK OP_CAT OP_6 OP_PICK 3b OP_SPLIT OP_NIP OP_CAT OP_CAT OP_2 OP_ROLL OP_DROP OP_1 OP_ROLL OP_1 OP_PICK OP_DROP OP_ELSE OP_7 OP_PICK OP_SIZE OP_NIP 28 OP_GREATERTHANOREQUAL OP_IF OP_7 OP_PICK 28 OP_SPLIT OP_DROP fd OP_7 OP_PICK OP_2 OP_NUM2BIN OP_CAT 24 OP_CAT OP_2 OP_PICK OP_CAT OP_EQUAL OP_NOT OP_VERIFY OP_ENDIF OP_1 OP_PICK OP_8 OP_PICK OP_CAT OP_2 OP_ROLL OP_DROP OP_1 OP_ROLL OP_1 OP_PICK OP_DROP OP_ENDIF OP_1 OP_PICK OP_HASH256 OP_13 OP_PICK OP_4 OP_PICK OP_8 OP_SUB OP_SPLIT OP_DROP OP_4 OP_PICK 28 OP_SUB OP_SPLIT OP_NIP OP_EQUAL OP_NIP OP_NIP OP_NIP OP_NIP OP_NIP OP_NIP OP_NIP OP_NIP OP_NIP OP_NIP OP_NIP OP_NIP OP_NIP contract SuperAssetNFT4 { public function transfer(SigHashPreimage txPreimage, Sig senderSig, PubKey unlockKey, bytes receiverAddress, bool isMelt, bytes changeOutput) { // Allow anyone to fund this operation, commit to all the outputs. // Signature.SIGHASH_ANYONECANPAY | Signature.SIGHASH_ALL | Signature.SIGHASH_FORKID; // Use the optimized version by setting the MSB require(Tx.checkPreimageOpt_(txPreimage)); // require(Util.checkPreimageSigHashType(txPreimage, SigHash.ANYONECANPAY | SigHash.ALL | SigHash.FORKID)); // Optimization: Get locking script directly instead of using Util.scriptCode bytes preimageSection = txPreimage[ 104 : ]; int scriptLen = unpack(preimageSection[ 1 : 3 ] + b'00'); // int dataStartLoc = scriptLen - 57; bytes lockingScript = preimageSection[ 3 : 3 + scriptLen]; bytes dataState = lockingScript[ 0 : 60 ]; // Validate and authorize the transaction, obtain the hash160 bytes from the locking script and compare against the hash160 of the unlockKey require(hash160(unlockKey) == dataState[ 39 : 59 ]); require(checkSig(senderSig, unlockKey)); int preimageLen = len(txPreimage); bytes buildingOutput = txPreimage[preimageLen - 52 : preimageLen - 44]; // Get input value directly; Conservation of Satoshi quantity. // Whether this asset is being melted to arbitrary changeOutput or instead it is a transfer update. bytes assetId = dataState[ 1 : 37 ]; if (!isMelt) { // This is a transfer update, enforce the assetId to be set for lifetime. // An NFT is only valid if it can be traced back to a coinbase minting event (36 zeroes at the beginning) if (assetId == num2bin(0, 36)) { // Then the assetId must be equal to the outpoint that this input is spending. assetId = txPreimage[ 68 : 104 ]; } // Hardcode the 'fd' instead of using Util.writeVarint buildingOutput += b'fd' + num2bin(scriptLen, 2) + b'24' + assetId + b'7514' + Ripemd160(receiverAddress) + lockingScript[ 59 : ]; } else { if (len(changeOutput) >= 40) { require(changeOutput[ : 40 ] != b'fd' + num2bin(scriptLen, 2) + b'24' + assetId); } // The first output, in the case of a melt, is just a p2pkh to recover the satoshis // Manually hardcode p2pkh to save space buildingOutput += changeOutput; } require(hash256(buildingOutput) == (txPreimage[preimageLen - 40 : preimageLen - 8])); } } text/plain; charset=utf-8UTF-8SuperAssetNFT4.scrypt.txt
    https://whatsonchain.com/tx/45934f3ab36464f98f433bd1c2e4f146b90c1267fcfc141680a0a13afc0d192f
  • j"19HxigV4QyBv3tHpQVcUEQyq1pzZVdoAutM®!/** Copyright 2021. Matter Web Services Inc., Attila Aros. All Rights Reserved. This software code is protected under the laws of the United States and other International Treaty Provisions. This Agreement shall not be construed as transferring any rights other than those expressly permitted herein. Licensor reserves all copyrights. This software code "SuperAsset" and generated ASM code is the exclusive property of the Licensor. */ // The following ASM script template is als explictly covered by this copyright: // <PUSH 36 bytes> OP_DROP <PUSH 20 bytes> OP_DROP OP_NOP OP_4 OP_PICK OP_HASH256 OP_1 OP_SPLIT OP_SWAP OP_BIN2NUM OP_1ADD OP_SWAP OP_CAT 3044022079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f817980220 OP_SWAP OP_CAT c3 OP_CAT 02b405d7f0322a89d0f9f3a98e6f938fdc1c969a8d1382a2bf66a71ae74a1e83b0 OP_CHECKSIG OP_NOP OP_VERIFY OP_4 OP_PICK 68 OP_SPLIT OP_NIP 0 OP_PICK OP_3 OP_SPLIT OP_DROP OP_1 OP_SPLIT OP_NIP 00 OP_CAT OP_BIN2NUM OP_1 OP_PICK OP_3 OP_2 OP_PICK OP_ADD OP_SPLIT OP_DROP OP_3 OP_SPLIT OP_NIP 0 OP_PICK 3c OP_SPLIT OP_DROP 0 OP_SPLIT OP_NIP OP_6 OP_PICK OP_HASH160 OP_1 OP_PICK 3b OP_SPLIT OP_DROP 27 OP_SPLIT OP_NIP OP_EQUAL OP_VERIFY OP_7 OP_PICK OP_7 OP_PICK OP_CHECKSIG OP_VERIFY OP_8 OP_PICK OP_SIZE OP_NIP OP_9 OP_PICK OP_1 OP_PICK 2c OP_SUB OP_SPLIT OP_DROP OP_1 OP_PICK 34 OP_SUB OP_SPLIT OP_NIP OP_7 OP_PICK OP_IF 0 OP_PICK OP_7 OP_PICK OP_CAT OP_1 OP_ROLL OP_DROP 0 OP_PICK OP_DROP OP_ELSE OP_2 OP_PICK 25 OP_SPLIT OP_DROP OP_1 OP_SPLIT OP_NIP 0 OP_PICK 0 24 OP_NUM2BIN OP_EQUAL OP_IF OP_11 OP_PICK 68 OP_SPLIT OP_DROP 44 OP_SPLIT OP_NIP OP_1 OP_ROLL OP_DROP OP_ENDIF OP_1 OP_PICK fd560124 OP_2 OP_PICK OP_CAT 7514 OP_CAT OP_9 OP_PICK OP_CAT OP_6 OP_PICK 3b OP_SPLIT OP_NIP OP_CAT OP_CAT OP_2 OP_ROLL OP_DROP OP_1 OP_ROLL OP_1 OP_PICK OP_DROP OP_DROP OP_ENDIF 0 OP_PICK OP_HASH256 OP_11 OP_PICK OP_3 OP_PICK OP_8 OP_SUB OP_SPLIT OP_DROP OP_3 OP_PICK 28 OP_SUB OP_SPLIT OP_NIP OP_EQUAL OP_NIP OP_NIP OP_NIP OP_NIP OP_NIP OP_NIP OP_NIP OP_NIP OP_NIP OP_NIP OP_NIP // ---------------------------------------------------------------------------------------------- // SuperAssetNFT (SA10 for short) (Alpha) // // Non-Fungible-Token (NFT) Smart Contract for Bitcoin. // ---------------------------------------------------------------------------------------------- // // Key Features of SuperAssetNFT: // - Mint, transfer, update, and transform(melt) tokens that retain their identity and satoshi balance until transformed(or melted). // - Supports seperate funding inputs and change outputs with ANYONECANPAY // - Store arbitrary data payloads (HTML, JSON, Protobuf, PDFs, images, XML, etc) // - Infuse satoshis to be locked into the digital asset for entire life cycle // - Replay protection with globally unique ID passed on as an 'identity baton' // - Can destroy the token via "transform(melt)" and retrieve the satoshis // - Identical trust guarantees as a regular UTXO // - Developers can easily verify authenticity and asset history by requesting it in it's entirety from the seller // - Wallets and indexers can proactively index these UTXO's via a blind pattern match for the minting pattern // - Simplfied Payment Verification (SPV) and 0-conf works as expected with all the properties afforded to the native satoshi // - Use of SIGHASH_SINGLE allows token to be composable with other smart contracts // - Polymorphism is made possible because the data state (assetID and ownerAddress) appears at the beginning of the contract layout // // Contract Code and State Layout: // ============================================================================ // // assetID(36B) OP_DROP ownerAddress(20B) OP_DROP | SuperAssetNFT STATIC CODE // // ============================================================================ // // Example transactions: // - Deploy: https://whatsonchain.com/tx/ae48146532577638bf196cf13c79af8fa4302db5c4dce49ed96fc20f41e436a1 // - Transfer (Update with payload): https://whatsonchain.com/tx/9c1064106e5049692507674a7340a29cfb9f86f4de454649ce609086d9e82105 // - Transfer (Update with empty payload): https://whatsonchain.com/tx/c0fe7f10346572766d8dbfb2067bb3fb44239817b0015dfd3521b644ffad3ec3 // - Transform(melt to p2pkh): https://whatsonchain.com/tx/a0184c03552dbe43eb80be098b139f6992b983073aa1c9989c37ce451f312e6f // // contract SuperAssetNFT { /** * * There is a single method 'transfer' that can be used to transition to token into any state. This is done for optimization reasons. * * To preserve the Satoshi quantity and token identity, set isTransform=false. To transform or melt the token set isTransform=true. * By being able to transform the token we have a new type of polymorphism and the token can change contract code and back to itself! * * @param txPreimage - Preimage used for reflection of the currrent transaction * @param senderSig - The signature of the previous owner to authorize this update * @param unlockKey - The public key that belonged to the previous owner that is beng used to unlock * @param isTransform - Whether to conserve the Satoshi quantity and identity or to transform into another token or melt out the Satoshis * @param receiverAddressOrTransformOutput - The bytes of the Ripemd160 address in the case of a transfer or the arbitary output script to transform to */ public function transfer(SigHashPreimage txPreimage, Sig senderSig, PubKey unlockKey, bool isTransform, bytes receiverAddressOrTransformOutput) { // Allow anyone to fund this operation, commit to SIGHASH_SINGLE // Signature.SIGHASH_ANYONECANPAY | Signature.SIGHASH_SINGLE | Signature.SIGHASH_FORKID; require(Tx.checkPreimageOpt_(txPreimage)); // Optimization: Get locking script directly bytes preimageSection = txPreimage[ 104 : ]; // Optimization: Get the scriptLen directly int scriptLen = unpack(preimageSection[ 1 : 3 ] + b'00'); // Optimization: Get the lockingScript directly bytes lockingScript = preimageSection[ 3 : 3 + scriptLen]; // Data appears at the beginning of the contract to allow polymorphism and predictable indexing bytes dataState = lockingScript[ 0 : 60 ]; // Validate and authorize the transaction, obtain the hash160 bytes from the locking script and compare against the hash160 of the unlockKey require(hash160(unlockKey) == dataState[ 39 : 59 ]); require(checkSig(senderSig, unlockKey)); int preimageLen = len(txPreimage); // The only output visible to this script is to have the same Satoshis as the input, the buildingOutput contains the resulting output script // Optimization: Get input value directly; Conserve Satoshi quantity from input to the output. bytes buildingOutput = txPreimage[preimageLen - 52 : preimageLen - 44]; // If this is intended to be transformed into another script or melted, then there is no need to check the assetId // The owner is free to transform into any script, the responsibility for correctness is up to them // Polymorphism has arrived! if (isTransform) { buildingOutput += receiverAddressOrTransformOutput; } else { // The assetId is maintained immutably as the first push data bytes assetId = dataState[ 1 : 37 ]; // This is a transfer update, enforce the assetId to be set for lifetime. // An NFT is only valid if it can be traced back to a coinbase minting event (36 zeroes at the beginning) if (assetId == num2bin(0, 36)) { // Then the assetId must be equal to the outpoint that this input is spending. assetId = txPreimage[ 68 : 104 ]; } // Optimization: Hardcode the 'fd' instead of using Util.writeVarint // buildingOutput += b'fd' + num2bin(scriptLen, 2) + b'24' + assetId + b'7514' + Ripemd160(receiverAddressOrTransformOutput) + lockingScript[ 59 : ]; // More Optimization(Optional): Further optimize by changing num2bin to the raw LE hex (requires pre-compile and then manually adding it in here) buildingOutput += b'fd560124' + assetId + b'7514' + Ripemd160(receiverAddressOrTransformOutput) + lockingScript[ 59 : ]; } require(hash256(buildingOutput) == (txPreimage[preimageLen - 40 : preimageLen - 8])); } } text/plain; charset=utf-8UTF-8SuperAssetNFT.scrypt.txt
    https://whatsonchain.com/tx/45934f3ab36464f98f433bd1c2e4f146b90c1267fcfc141680a0a13afc0d192f
Total Output: