Transaction Details
SMART CONTRACT
Transaction Hash
a3f78a31aca006d8f538178095d2257a81dbbb3644cb8a43e764b0c19c42b6e1
Block Status
Smart Contract State
SCID Reserves
| SCID | Amount (Atomic Units) |
|---|---|
| 0000000000000000000000000000000000000000000000000000000000000000 | 0 |
String Variables
| Key | Value |
|---|---|
| C | 2f2f2020436f7079726967687420323032342e20436976696c776172652e20416c6c207269676874732072657365727665642e0a2f2f202054454c4120446563656e7472616c697a65642057656220446f63756d656e74202854454c412d444f432d31290a46756e6374696f6e20496e697469616c697a655072697661746528292055696e7436340a313020494620696e69742829203d3d2030205448454e20474f544f2033300a32302052455455524e20310a33302053544f524528226e616d65486472222c20226d61696e2e6a7322290a33312053544f524528226465736372486472222c20224d61696e204a532066696c6522290a33322053544f5245282269636f6e55524c486472222c202222290a33332053544f524528226455524c222c20226d61696e2e6a7322290a33342053544f52452822646f6354797065222c202254454c412d4a532d3122290a33352053544f52452822737562446972222c202222290a33362053544f5245282266696c65436865636b43222c20223232336636356466356235663963326531623630366265623030363134336265366534363333363837393432656232666537363330386264303836333538363722290a33372053544f5245282266696c65436865636b53222c20223131646436313966663964663637316530653935373930343533346632663436616532383930623165663437616636333131326162306234373465646433626622290a3130302052455455524e20300a456e642046756e6374696f6e0a0a46756e6374696f6e20696e697428292055696e7436340a31302049462045584953545328226f776e65722229203d3d2030205448454e20474f544f2033300a32302052455455524e20310a33302053544f524528226f776e6572222c20616464726573732829290a35302053544f52452822646f6356657273696f6e222c2022312e302e3022290a36302053544f5245282268617368222c204845582854584944282929290a37302053544f524528226c696b6573222c2030290a38302053544f524528226469736c696b6573222c2030290a3130302052455455524e20300a456e642046756e6374696f6e0a0a46756e6374696f6e2061646472657373282920537472696e670a31302044494d207320617320537472696e670a3230204c45542073203d205349474e455228290a33302049462049535f414444524553535f56414c4944287329205448454e20474f544f2035300a34302052455455524e2022616e6f6e220a35302052455455524e20414444524553535f535452494e472873290a456e642046756e6374696f6e0a0a46756e6374696f6e205261746528722055696e743634292055696e7436340a31302044494d206164647220617320537472696e670a3135204c45542061646472203d206164647265737328290a31362049462072203c2031303020262620455849535453286164647229203d3d2030202626206164647220213d2022616e6f6e22205448454e20474f544f2033300a32302052455455524e20310a33302053544f524528616464722c2022222b722b225f222b424c4f434b5f4845494748542829290a34302049462072203c203530205448454e20474f544f2037300a35302053544f524528226c696b6573222c204c4f414428226c696b657322292b31290a36302052455455524e20300a37302053544f524528226469736c696b6573222c204c4f414428226469736c696b657322292b31290a3130302052455455524e20300a456e642046756e6374696f6e0a0a2f2a0a2f2f2d2d2d2d2d2d2d2d2d2d0a2f2f2052656e646572696e670a0a66756e6374696f6e2072656e646572287429207b0a092f2f20646570746820736f72740a09636f6e7374206c6976696e67203d205b67616d652e706c617965722c202e2e2e67616d652e656e656d6965732e66696c7465722865203d3e2021652e64656164295d3b0a0a09666f722028636f6e73742065206f66206c6976696e672920652e6465707468203d20652e79202b20652e6865696768743b0a096c6976696e672e736f72742828612c206229203d3e20612e6465707468202d20622e6465707468293b0a0a092f2f2072656f7264657220444f4d2067726f7570730a09636f6e7374206c61796572203d20646f63756d656e742e676574456c656d656e74427949642822706c617965727322293b0a09666f722028636f6e73742065206f66206c6976696e6729207b0a090920636f6e73742067203d20646f63756d656e742e676574456c656d656e744279496428652e696429207c7c2063726561746553564747726f757028652e6964293b0a096c617965722e617070656e644368696c642867293b202f2f20617070656e64206d6f76657320697420746f20636f72726563742064657074680a097d0a0a092f2f206e6f772072656e64657220626f6e65730a0972656e646572536b656c65746f6e2867616d652e706c61796572293b0a09666f722028636f6e737420656e656d79206f662067616d652e656e656d69657329207b0a090972656e646572536b656c65746f6e28656e656d79293b0a09096465617468416e696d6174696f6e28656e656d79293b0a097d0a0972656e646572486174732874290a7d0a0a0a66756e6374696f6e207472616e73666f726d506f696e742870782c2070792c206f782c206f792c20726f7429207b0a09636f6e737420636f73203d204d6174682e636f7328726f74293b0a09636f6e73742073696e203d204d6174682e73696e28726f74293b0a0a0972657475726e207b0a0909783a206f78202b207078202a20636f73202d207079202a2073696e2c0a0909793a206f79202b207078202a2073696e202b207079202a20636f730a097d3b0a7d0a0a66756e6374696f6e206d6972726f72506f6c7928706f6c7929207b0a0972657475726e20706f6c792e6d61702870203d3e20287b20783a202d702e782c20793a20702e79207d29293b0a7d0a0a0a66756e6374696f6e2064726177426f6e6528656e746974792c20626f6e652c20626f6e654e616d652c20706172656e74582c20706172656e74592c20706172656e74526f7429207b0a09636f6e7374205b70782c2070795d203d20626f6e652e7069766f743b0a09636f6e7374205b63782c2063795d203d20626f6e652e6368696c644f726967696e3b0a0a09636f6e7374207069766f74576f726c64203d207472616e73666f726d506f696e742870782c2070792c20706172656e74582c20706172656e74592c20706172656e74526f74293b0a0a096c657420726f74203d20300a09696628656e746974792e666163696e67203c203029207b0a0909726f74203d20706172656e74526f74202d2028626f6e652e726f746174696f6e207c7c2030290a0909696628626f6e654e616d65203d3d3d202268617422297b0a090909626f6e652e666c697058203d20747275653b0a09097d0a097d656c7365207b0a0909726f74203d20706172656e74526f74202b2028626f6e652e726f746174696f6e207c7c2030290a09090a0909626f6e652e666c697058203d2066616c73653b0a09090a097d0a096c65742072656e646572506f6c79203d207b7d0a0969662028626f6e652e666c697058297b0a090972656e646572506f6c79203d206d6972726f72506f6c7928626f6e652e706f6c79293b0a097d656c73657b0a090972656e646572506f6c79203d20626f6e652e706f6c793b0a097d0a092f2f2053544f524520574f524c44205452414e53464f524d20464f5220434f4c4c4953494f4e20444554454354494f4e0a09626f6e652e776f726c6458203d207069766f74576f726c642e783b0a09626f6e652e776f726c6459203d207069766f74576f726c642e793b0a09626f6e652e776f726c64526f74203d20726f743b0a0a09636f6e737420707473203d2072656e646572506f6c792e6d61702870203d3e207b0a0909636f6e7374207770203d207472616e73666f726d506f696e7428702e782c20702e792c207069766f74576f726c642e782c207069766f74576f726c642e792c20726f74293b0a090972657475726e2060247b77702e787d2c247b77702e797d603b0a097d292e6a6f696e28222022293b0a0a09626f6e65732e70757368287b0a09096e616d653a20626f6e654e616d652c0a0909776f726c6458203a7069766f74576f726c642e782c0a0909776f726c6459203a7069766f74576f726c642e792c0a09097a3a20626f6e652e7a2c0a0909706f696e74733a207074732c0a0909776f726c64526f743a20726f742c0a0a097d293b0a0a09636f6e7374206368696c64576f726c64203d207472616e73666f726d506f696e742863782c2063792c207069766f74576f726c642e782c207069766f74576f726c642e792c20726f74293b0a0a09666f7220286c6574206e616d6520696e20626f6e652e6368696c6472656e29207b0a090964726177426f6e6528656e746974792c20626f6e652e6368696c6472656e5b6e616d655d2c206e616d652c206368696c64576f726c642e782c206368696c64576f726c642e792c20726f74293b0a097d0a7d0a0a0a0a66756e6374696f6e206170706c795a4d617028626f6e652c20626f6e654e616d6529207b0a09696620287a4d61705b626f6e654e616d655d20213d3d20756e646566696e656429207b0a0909626f6e652e7a203d207a4d61705b626f6e654e616d655d3b0a097d0a0a09666f722028636f6e7374206368696c644e616d6520696e20626f6e652e6368696c6472656e29207b0a09096170706c795a4d617028626f6e652e6368696c6472656e5b6368696c644e616d655d2c206368696c644e616d65293b0a097d0a7d0a0a6c657420626f6e6573203d205b5d3b0a66756e6374696f6e2072656e646572536b656c65746f6e28656e7469747929207b200a09636f6e73742067203d20646f63756d656e742e676574456c656d656e744279496428656e746974792e6964293b0a09672e696e6e657248544d4c203d2022223b0a09636f6e73742070203d20656e746974793b0a09636f6e737420746f72736f203d20702e736b656c65746f6e2e746f72736f3b0a0a0969662028702e666163696e67203e203029207b0a09097a4d61702e686174203d20373b200a09097a4d61702e68656164203d20363b202f2f2066726f6e740a09097a4d61702e746f72736f203d20353b202f2f206261636b0a097d20656c7365207b0a09097a4d61702e686174203d20353b200a09097a4d61702e68656164203d20363b202f2f2066726f6e740a09097a4d61702e746f72736f203d20373b202f2f206261636b0a097d0a092f2f204170706c79207a2d6d6170204245464f524520636f6c6c656374696e6720626f6e65730a096170706c795a4d617028746f72736f2c2022746f72736f22293b0a0964726177426f6e6528656e746974792c20746f72736f2c2022746f72736f222c20702e782c20702e79202b20702e736b656c65746f6e4f6666736574592c2030293b0a0a0a092f2f20536f7274206279207a2028666163696e672d6177617265290a0969662028702e666163696e67203e203029207b0a0909626f6e65732e736f72742828612c206229203d3e20612e7a202d20622e7a293b0a097d20656c7365207b0a0909626f6e65732e736f72742828612c206229203d3e20622e7a202d20612e7a293b0a097d0a0a092f2f2052656e6465720a09666f7220286c65742069203d20303b2069203c20626f6e65732e6c656e6774683b20692b2b29207b0a0909636f6e737420706f6c79203d20646f63756d656e742e637265617465456c656d656e744e532822687474703a2f2f7777772e77332e6f72672f323030302f737667222c2022706f6c79676f6e22293b0a0909706f6c792e7365744174747269627574652822706f696e7473222c20626f6e65735b695d2e706f696e7473293b0a0909706f6c792e736574417474726962757465282266696c6c222c20676574426f6e6546696c6c28656e746974792c626f6e65735b695d29293b0a0909706f6c792e73657441747472696275746528227374726f6b65222c20226772657922293b0a0909706f6c792e73657441747472696275746528227374726f6b652d7769647468222c20222e323522293b0a0909672e617070656e644368696c6428706f6c79293b0a097d0a0a09626f6e6573203d205b5d3b0a7d0a66756e6374696f6e20676574426f6e6546696c6c28656e746974792c626f6e65297b0a09696628656e746974792e6964203d3d3d22706c6179657222297b0a0909696628626f6e652e6e616d65203d3d3d2022746f72736f22297b0a09090972657475726e2072656e6465724772616469656e7428626f6e652c22706c617965725f746f72736f5f6772616422290a09097d0a0909696628626f6e652e6e616d65203d3d3d2022757070657241726d4c22207c7c20626f6e652e6e616d65203d3d3d2022757070657241726d52227c7c626f6e652e6e616d65203d3d3d20226c6f77657241726d4c22207c7c20626f6e652e6e616d65203d3d3d20226c6f77657241726d5222297b0a09090972657475726e202223636366223b0a09097d0a0909696628626f6e652e6e616d65203d3d3d20226865616422297b0a09090972657475726e202223666666223b0a09097d0a090972657475726e202223353466220a097d656c736520696628656e746974792e7479706520213d3d2022626f737322297b0a0909696628626f6e652e6e616d65203d3d3d2022746f72736f22297b09090909090a09090972657475726e2072656e6465724772616469656e7428626f6e652c60247b656e746974792e69647d5f746f72736f5f6772616460293b0a09097d0a0909696628626f6e652e6e616d65203d3d3d2022757070657241726d4c22207c7c20626f6e652e6e616d65203d3d3d2022757070657241726d52227c7c626f6e652e6e616d65203d3d3d20226c6f77657241726d4c22207c7c20626f6e652e6e616d65203d3d3d20226c6f77657241726d5222297b0a09090972657475726e202223643263353961223b0a09097d0a0909696628626f6e652e6e616d65203d3d3d20226865616422297b0a09090972657475726e202223666666223b0a09097d0a090972657475726e202223623861383738220a097d656c73657b0a0909696628626f6e652e6e616d65203d3d3d20226865616422297b0a09090972657475726e202223666666223b0a09097d0a090972657475726e202223303030220a097d0a7d0a0a0a66756e6374696f6e2072656e6465724772616469656e7428626f6e652c67726164496429207b0a09636f6e73742067726164203d20646f63756d656e742e676574456c656d656e744279496428677261644964293b0a09636f6e737420646567203d20626f6e652e776f726c64526f74202a2028313830202f204d6174682e5049293b0a09677261642e73657441747472696275746528226772616469656e74556e697473222c20227573657253706163654f6e55736522293b0a09677261642e73657441747472696275746528227831222c20626f6e652e776f726c6458293b0a09677261642e73657441747472696275746528227931222c20626f6e652e776f726c6459202d203430293b0a09677261642e73657441747472696275746528227832222c20626f6e652e776f726c6458293b0a09677261642e73657441747472696275746528227932222c20626f6e652e776f726c6459202b203430293b0a09677261642e73657441747472696275746528226772616469656e745472616e73666f726d222c2060726f7461746528247b6465677d2c20247b626f6e652e776f726c64587d2c20247b626f6e652e776f726c64597d2960293b0a0972657475726e202275726c2823222b6772616449642b2229220a7d0a0a66756e6374696f6e2072656e646572486174732874297b0a09666f722028636f6e73742068206f662067616d652e6861747329207b0a0a09092f2f20706879736963730a0909682e78202b3d20682e76783b0a0909682e79202b3d20682e76793b0a0909682e7679202b3d2067616d652e67726176697479202a2074202a20333b0a0909682e726f746174696f6e202b3d20682e726f746174696f6e5370656564202a20323b0a0a0909682e6c696665202d3d20743b0a090969662028682e6c696665203c3d203029207b0a090909682e672e72656d6f766528293b0a09090964656c65746520680a090909636f6e74696e75653b0a09097d0a0a09092f2f20757064617465207472616e73666f726d0a0909682e672e73657441747472696275746528227472616e73666f726d222c0a090909607472616e736c61746528247b682e787d2c247b682e797d2920726f7461746528247b682e726f746174696f6e7d29600a0909293b0a0a09092f2f2075706461746520706f6c79676f6e20706f696e747320286c6f63616c20636f6f726473290a0909682e6e6f64652e736574417474726962757465280a09090922706f696e7473222c0a090909682e706f6c792e6d61702870203d3e2060247b702e787d2c247b702e797d60292e6a6f696e28222022290a0909293b0a097d0a7d0a2f2f706879736963730a66756e6374696f6e206170706c7953657061726174696f6e2829207b0a09636f6e737420616c6c203d205b67616d652e706c617965722c202e2e2e67616d652e656e656d6965735d3b0a0a09666f7220286c65742069203d20303b2069203c20616c6c2e6c656e6774683b20692b2b29207b0a0909666f7220286c6574206a203d2069202b20313b206a203c20616c6c2e6c656e6774683b206a2b2b29207b0a0a090909636f6e73742061203d20616c6c5b695d3b0a090909636f6e73742062203d20616c6c5b6a5d3b0a0a090909636f6e7374206478203d20622e78202d20612e783b0a090909636f6e7374206479203d20622e79202d20612e793b0a090909636f6e73742064697374203d204d6174682e6879706f742864782c206479293b0a0a090909636f6e7374206d696e44697374203d2028612e726164697573207c7c20313829202b2028622e726164697573207c7c203138293b0a0a0909096966202864697374203c206d696e446973742026262064697374203e20302e30303129207b0a09090909636f6e7374206f7665726c6170203d206d696e44697374202d20646973743b0a0a09090909636f6e7374206e78203d206478202f20646973743b0a09090909636f6e7374206e79203d206479202f20646973743b0a0a09090909636f6e73742070757368203d206f7665726c6170202a20302e353b0a090909090a0909090a09090909612e78202d3d206e78202a20707573683b202020202020202020202020200a09090909612e79202d3d206e79202a20707573683b200a0a09090909622e78202b3d206e78202a20707573683b2020202020202020202020202020200a09090909622e79202b3d206e79202a20707573683b200a0909097d0a09097d0a097d0a7d0a0a0a66756e6374696f6e207570646174655068797369637328702c20647429207b0a0a09636f6e737420746f6c6572616e6365203d2033303b0a09702e6f6e47726f756e64203d2066616c73653b0a092f2f20312e2053617665206c61737420706f736974696f6e0a09636f6e7374206f6c6458203d20702e783b0a09636f6e7374206865616459203d20702e79202d20702e686569676874202a202e353b0a09636f6e7374206665657459203d20702e79202b20702e686569676874202a202e353b0a0a09666f7220286c657420706c6174206f662067616d652e706c6174666f726d7329207b0a0909666f7220286c657420736567206f6620706c61742e7365676d656e747329207b0a0909090a090909696620287365672e697357616c6c2920636f6e74696e75653b0a090909636f6e7374206478203d207365672e7832202d207365672e78313b0a090909636f6e7374206479203d207365672e7932202d207365672e79313b0a090909636f6e737420616e676c65203d207365672e616e676c653b0909090a0a0909092f2f20686f72697a6f6e74616c202b20766572746963616c20626f756e64696e6720626f7820636865636b0a090909696620280a09090909702e78203e3d207365672e783120262620702e78203c3d207365672e78322026260a090909097365672e6d617859203e3d206665657459202d20746f6c6572616e63652026260a090909097365672e6d696e59203c3d206665657459202b20746f6c6572616e63650a09090929207b0a090909092f2f20736c6f706520696e746572706f6c6174696f6e0a09090909636f6e73742074203d2028702e78202d207365672e783129202f20287365672e7832202d207365672e7831293b0a09090909636f6e737420706c617459203d207365672e7931202b20287365672e7932202d207365672e793129202a20743b0a090909090a09090909636f6e7374207432203d20286665657459202d207365672e793129202f20287365672e7932202d207365672e7931293b0a09090909636f6e737420706c61745866656574203d207365672e7831202b20287365672e7832202d207365672e783129202a2074323b0a0a0a09090909696620286665657459203c20706c6174592920636f6e74696e75653b0a090909090a090909092f2f20544f4f2053544545502077616c6c202b20736c6964650a09090909696620284d6174682e61627328616e676c6529203e206d6178436c696d62416e676c652029207b090a09090a09090909096c657420736c6964696e67203d2066616c73653b0a090909090969662028702e782d35203c3d20706c6174586665657420202626206479203c203029207b0909090909090a090909090909736c6964696e67203d20747275653b0a09090909097d20656c736520696628702e782b35203e3d20706c6174586665657420202626206479203e2030297b0a090909090909736c6964696e67203d20747275653b0a09090909097d0a0909090909696628736c6964696e67297b0a090909090909702e7678203d20303b0a090909090909636f6e737420736c6964655370656564203d204d6174682e616273284d6174682e73696e28616e676c652929202a20302e353b0a090909090909702e7678202b3d204d6174682e7369676e28616e676c6529202a20736c69646553706565643b0a09090909097d09090909090a090909097d0a0a090909092f2f204e4f524d414c204c414e44494e470a0909090969662028702e7679203e3d203020262620702e79203c20706c61745929207b0a0909090909696620286665657459203e3d20706c617459202d20746f6c6572616e636529207b0a090909090909702e79203d20706c617459202d20702e686569676874202a202e353b0a090909090909702e7679203d20303b0a090909090909702e696e416972203d2066616c73653b0a090909090909702e6f6e47726f756e64203d20747275653b0a09090909097d0a090909097d0a0909097d0a09097d0a097d0a0a092f2f20677261766974790a09702e7679202b3d2067616d652e67726176697479202a2064743b0a0a09636f6e7374206d617846616c6c5370656564203d20312e323b0a0969662028702e7679203e206d617846616c6c53706565642920702e7679203d206d617846616c6c53706565643b0a0a092f2f206672696374696f6e0a096966202821702e696e41697220262620702e6d6f7665496e707574203d3d3d203029207b0a0909702e7678202a3d20302e383b0a0909696620284d6174682e61627328702e767829203c20302e30312920702e7678203d20303b0a097d0a7d0a0a66756e6374696f6e2075706461746557616c6c5068797369637328702c20647429207b0a092f2f20312e2053617665206c61737420706f736974696f6e0a09636f6e7374206f6c6458203d20702e783b0a09636f6e7374206b6e656559203d20702e79202b20702e686569676874202a202e32353b0a09636f6e7374206665657459203d20702e79202b20702e686569676874202a202e353b0a0a09666f7220286c657420706c6174206f662067616d652e706c6174666f726d7329207b0a0909666f7220286c657420736567206f6620706c61742e7365676d656e747329207b0a090909696620287365672e697357616c6c29207b0a090909090a0909090969662028206665657459202d31203c3d207365672e6d696e59207c7c206b6e6565592b31203e3d207365672e6d6178592920636f6e74696e75653b2f2f2068656164592b31203e3d207365672e6d6178590a0a09090909636f6e7374206c65667420203d20702e78202d20702e77696474682f323b0a09090909636f6e7374207269676874203d20702e78202b20702e77696474682f323b0a090909090a090909092f2f206869742066726f6d206c6566740a09090909696620287269676874203e207365672e783120262620702e78203c3d207365672e783120262620287365672e6f6e65576179203d3d3d20226c65667422207c7c20217365672e6f6e65576179292029207b0a0909090909702e78203d206f6c64583b2020202f2f20726f6c6c6261636b20580a0909090909702e7678203d202d287269676874202d207365672e783129202a202e313b0a0909090909627265616b3b0a090909097d0a0a090909092f2f206869742066726f6d2072696768740a09090909696620286c656674203c207365672e783120262620702e78203e3d207365672e783120262620287365672e6f6e65576179203d3d3d2022726967687422207c7c20217365672e6f6e655761792929207b0a0909090909702e78203d206f6c64583b202020202f2f20726f6c6c6261636b20580a0909090909702e7678203d20287365672e7831202d206c65667429202a202e313b0a0909090909627265616b3b0a090909097d0a0909097d0a09097d0a097d0a09702e78202b3d20702e7678202a2064743b0a09702e79202b3d20702e7679202a2064743b0a7d0a0a0a0a0a0a0a66756e6374696f6e2064697374616e636528612c62297b0a09636f6e7374206478203d20612e78202d20622e783b0a09636f6e7374206479203d20612e79202d20622e793b0a0972657475726e204d6174682e6879706f742864782c206479293b20090a7d0a0a66756e6374696f6e20757064617465457869742865786974446f6f72297b0a096966282165786974446f6f722972657475726e3b0a096966202865786974446f6f722e636c6f736564202626202165786974446f6f722e6c6f636b656429207b0a09092f2f20747265617420646f6f7220617320612077616c6c207365676d656e740a09096966202864697374616e63652867616d652e706c617965722c2065786974446f6f7229203c2031303029207b0a0909096f70656e446f6f722865786974446f6f72293b0a09097d0a090972657475726e3b0a097d656c7365206966282165786974446f6f722e6c6f636b6564202626202165786974446f6f722e636c6f736564202626202867616d652e706c617965722e766572746963616c496e707574203d3d3d2031207c7c2067616d652e706c617965722e77616e744a756d70292026262064697374616e63652867616d652e706c617965722c2065786974446f6f7229203c20313030297b0a09096c6f61644c6576656c282b2b63757272656e744c6576656c290a090967616d652e73636f7265202b3530300a09097265737061776e506c6179657228290a097d0a0969662865786974446f6f722e6e6f6465203d3d3d206e756c6c2972657475726e3b0a09696620284d6174682e6162732865786974446f6f722e7461726765745363616c6558202d2065786974446f6f722e7363616c655829203c20302e3129207b0a090972657475726e200a097d0a090a09636f6e7374206474536563203d206474202a20302e3030313b0a0965786974446f6f722e7363616c6558202b3d202865786974446f6f722e7461726765745363616c6558202d2065786974446f6f722e7363616c655829202a206474536563202a2065786974446f6f722e73706565643b0a0965786974446f6f722e6e6f64652e736574417474726962757465280a0909227472616e73666f726d222c0a090960207363616c6528247b65786974446f6f722e7363616c65587d2c203129600a09293b0a7d0a0a66756e6374696f6e20757064617465446f6f727328647429207b0a09636f6e737420646f6f7273203d2067616d652e646f6f72733b0a09757064617465457869742867616d652e646f6f72732e66696e642864203d3e20642e74797065203d3d3d2022657869742229293b0a7d0a0a66756e6374696f6e206f70656e446f6f7228646f6f7229207b0a09646f6f722e7363616c6558203d20313b0a09646f6f722e636c6f736564203d2066616c73653b0a7d0a0a66756e6374696f6e20636c6f7365446f6f722829207b0a09646f6f722e7461726765745363616c6558203d20302e30353b0a09646f6f722e636c6f736564203d20747275653b0a7d0a0a66756e6374696f6e2075706461746548756428706c6179657229207b0a09636f6e737420687054657874203d20646f63756d656e742e676574456c656d656e7442794964282268705465787422293b0a09636f6e73742073636f726554657874203d20646f63756d656e742e676574456c656d656e7442794964282273636f72655465787422293b0a09636f6e73742074696d6554657874203d20646f63756d656e742e676574456c656d656e7442794964282274696d655465787422293b0a0a096870546578742e74657874436f6e74656e74203d20706c617965722e686974506f696e74733b0a096870546578742e736574417474726962757465282266696c6c222c206765744865616c7468436f6c6f7228706c617965722e686974506f696e74732c20706c617965722e6d6178506f696e747329293b090a0a0973636f7265546578742e74657874436f6e74656e74203d206053636f72653a20247b67616d652e73636f72657d603b090a0a0974696d65546578742e74657874436f6e74656e74203d206054696d653a20247b666f726d617454696d652867616d652e74696d65297d603b0a7d0a0a66756e6374696f6e206765744865616c7468436f6c6f722868702c206d6178487029207b0a09636f6e737420706374203d206870202f206d617848703b0a0a0969662028706374203e20302e37292072657475726e202223303066663030223b2020202f2f20677265656e0a0969662028706374203e20302e34292072657475726e202223666666663030223b2020202f2f2079656c6c6f770a0969662028706374203e20302e32292072657475726e202223666638383030223b2020202f2f206f72616e67650a0972657475726e202223666630303030223b2020202020202020202020202020202020202f2f207265640a7d0a66756e6374696f6e20666f726d617454696d65287429207b0a09636f6e7374206d203d204d6174682e666c6f6f722874202f203630293b0a09636f6e73742073203d204d6174682e666c6f6f7228742025203630293b0a0972657475726e2060247b6d7d3a247b732e746f537472696e6728292e706164537461727428322c20223022297d603b0a7d0a0a66756e6374696f6e2073686f7757696e54616c6c792867616d6529207b0a09636f6e7374206d6f64616c203d20646f63756d656e742e676574456c656d656e744279496428226d6f64616c22293b0a09636f6e73742074696d65203d20666f726d617454696d652867616d652e74696d65293b0a09636f6e7374206b696c6c73203d2067616d652e746f74616c4b696c6c733b0a09636f6e737420646561746873203d2067616d652e6465617468733b0a09636f6e73742073636f7265203d2067616d652e73636f72653b0a09646f63756d656e742e676574456c656d656e744279496428226d6f64616c5465787422292e696e6e657248544d4c203d20600a093c7465787420783d223530252220793d223230252220746578742d616e63686f723d226d6964646c652220666f6e742d73697a653d223432222066696c6c3d227768697465223e454e454d4945532044454645415445443c2f746578743e0a093c7465787420783d223530252220793d223335252220746578742d616e63686f723d226d6964646c652220666f6e742d73697a653d223238222066696c6c3d227768697465223e54696d653a20247b74696d657d3c2f746578743e0a093c7465787420783d223530252220793d223432252220746578742d616e63686f723d226d6964646c652220666f6e742d73697a653d223238222066696c6c3d227768697465223e4b696c6c733a20247b6b696c6c737d3c2f746578743e0a093c7465787420783d223530252220793d223439252220746578742d616e63686f723d226d6964646c652220666f6e742d73697a653d223238222066696c6c3d227768697465223e4465617468733a20247b6465617468737d3c2f746578743e0a093c7465787420783d223530252220793d223536252220746578742d616e63686f723d226d6964646c652220666f6e742d73697a653d223238222066696c6c3d227768697465223e53636f72653a20247b73636f72657d3c2f746578743e0a093c7465787420783d223530252220793d223633252220746578742d616e63686f723d226d6964646c652220666f6e742d73697a653d223238222066696c6c3d227768697465223e5072657373205374617274206f722045736361706520746f20526573746172743c2f746578743e0a603b0a096d6f64616c2e7374796c652e6f706163697479203d20313b0a7d0a0a66756e6374696f6e206d656e75287374617274507265737365642c6d6f7665297b09090a092f2f2050415553450a096966202873746172745072657373656420262620217072657653746172745072657373656429207b0a09096966202867616d652e7374617465203d3d3d2053544154452e504155534544297b0a09090967616d652e7374617465203d2053544154452e504c4159494e473b0a090909646f63756d656e742e676574456c656d656e744279496428226d6f64616c22292e7374796c652e6f706163697479203d20303b0909090a09097d656c73652069662867616d652e7374617465203d3d3d2053544154452e504c4159494e47297b0a09090967616d652e7374617465203d2053544154452e5041555345443b0a090909646f63756d656e742e676574456c656d656e744279496428226d6f64616c22292e7374796c652e6f706163697479203d20313b0a09097d090a097d090a0969662867616d652e7374617465203d3d3d2053544154452e504c4159494e472972657475726e3b0a092f2f205354415453202f205245534152540a0969662867616d652e7374617465203d3d3d2053544154452e57494e20262620737461727450726573736564202626202170726576537461727450726573736564297b0a09097265736574537461747328293b0a090963757272656e744c6576656c203d20313b09090a09096c6f61644c6576656c2863757272656e744c6576656c293b09090a0909646f63756d656e742e676574456c656d656e744279496428226d6f64616c22292e7374796c652e6f706163697479203d20303b0a090967616d652e7374617465203d2053544154452e504c4159494e473b0a097d656c73652069662867616d652e7374617465203d3d3d2053544154452e57494e292072657475726e3b090a092f2f20564f4c554d450a096966286d6f7665203d3d3d202d3129766f6c756d65202d3d20302e30323b0a096966286d6f7665203d3d3d203129766f6c756d65202b3d20302e30323b0a09766f6c756d65203d204d6174682e6d617828302c204d6174682e6d696e28312c20766f6c756d6529293b0a09646f63756d656e742e676574456c656d656e744279496428226d6f64616c5465787422292e696e6e657248544d4c203d20600a093c7465787420783d223530252220793d223330252220746578742d616e63686f723d226d6964646c652220666f6e742d73697a653d223432222066696c6c3d227768697465223e5041555345443c2f746578743e0a093c7465787420783d223530252220793d223430252220746578742d616e63686f723d226d6964646c652220666f6e742d73697a653d223238222066696c6c3d227768697465223e564f4c554d453a20247b28766f6c756d65202a20313030297c307d253c2f746578743e0a093c7465787420783d223530252220793d223435252220746578742d616e63686f723d226d6964646c652220666f6e742d73697a653d223238222066696c6c3d227768697465223e434f4e54524f4c533a203c2f746578743e0a093c7465787420783d223530252220793d223532252220746578742d616e63686f723d226d6964646c652220666f6e742d73697a653d223234222066696c6c3d227768697465223e4d6f7665204c656674202261222c204d6f7665205269676874202264222c204a756d702022537061636562617222203c2f746578743e0a093c7465787420783d223530252220793d223537252220746578742d616e63686f723d226d6964646c652220666f6e742d73697a653d223234222066696c6c3d227768697465223e43726f7563682f41747461636b204c6f77202273222c2041747461636b2048696768202277223c2f746578743e0a093c7465787420783d223530252220793d223632252220746578742d616e63686f723d226d6964646c652220666f6e742d73697a653d223234222066696c6c3d227768697465223e50756e636820226c222c204b69636b20223b22203c2f746578743e0a09603b0a7d0a0a0a66756e6374696f6e20757064617465506c61796572417564696f28297b0a096966282867616d652e706c617965722e77616e744b69636b207c7c2067616d652e706c617965722e77616e7450756e6368292026262067616d652e706c617965722e70726576416374696f6e20213d3d2067616d652e706c617965722e616374696f6e5374617465297b0a09096966282867616d652e706c617965722e70726576416374696f6e203d3d3d202277616c6b50756e6368222026262067616d652e706c617965722e616374696f6e5374617465203d3d3d202270756e63682229207c7c2867616d652e706c617965722e70726576416374696f6e203d3d3d202270756e6368222026262067616d652e706c617965722e616374696f6e5374617465203d3d3d202277616c6b50756e63682220292972657475726e3b0a09096966282867616d652e706c617965722e70726576416374696f6e203d3d3d202277616c6b4869676850756e6368222026262067616d652e706c617965722e616374696f6e5374617465203d3d3d20226869676850756e63682229207c7c2867616d652e706c617965722e70726576416374696f6e203d3d3d20226869676850756e6368222026262067616d652e706c617965722e616374696f6e5374617465203d3d3d202277616c6b4869676850756e63682220292972657475726e3b0a090973667848756828293b0a0909666f722028636f6e737420656e656d79206f662067616d652e656e656d69657329207b0a090909656e656d792e70726576486974203d2066616c73653b09090a09097d0a097d0a7d0a0a0a66756e6374696f6e2067616d655374617475732829207b0a09636f6e73742070203d2067616d652e706c617965723b0a092f2f20436c65616e75703a2072656d6f7665206465616420656e656d6965730a2020202067616d652e656e656d696573203d2067616d652e656e656d6965732e66696c7465722865203d3e207b0a090969662028652e7374617465203d3d3d2022646561642229207b0a09090967616d652e6b696c6c732b2b3b0a09090967616d652e746f74616c4b696c6c732b2b3b0a09090972657475726e2066616c73653b0a09097d0a090972657475726e20747275653b0a097d293b0a0a090a092f2f20506c6179657220646561746820636865636b0a0969662028702e79203e2034303030207c7c20702e686974506f696e7473203c3d203029207b0a090967616d652e73636f7265203d204d6174682e6d61782867616d652e73636f7265202d3530302c30293b0a090967616d652e6465617468732b2b3b0a09097265737061776e506c6179657228293b0a097d0a090a092f2f20456e656d7920646561746820636865636b0a09666f722028636f6e737420656e656d79206f662067616d652e656e656d69657329207b0a090969662028656e656d792e686974506f696e7473203c3d203020262620656e656d792e737461746520213d3d20226479696e672229207b0a09090967616d652e73636f7265202b3d2032303b0a202020202020202020202020656e656d792e7374617465203d20226479696e67223b0a090909656e656d792e616374696f6e5374617465203d20226e6f6e65220a090909656e656d792e6d6f76655374617465203d20226479696e67223b0a0909090a09097d656c736520696628656e656d792e79203e2034303030297b0a090909656e656d792e7374617465203d202264656164223b0a09097d0a202020207d0a090a096966202867616d652e6b696c6c73203e3d2067616d652e6f626a6563746976652e636f756e7429207b0a0909636f6e73742065786974203d2067616d652e646f6f72732e66696e642864203d3e20642e74797065203d3d3d20226578697422293b0a090969662865786974297b0a090909657869742e6c6f636b6564203d2066616c73653b0a09097d656c73657b0a09090967616d652e7374617465203d2053544154452e57494e3b0a09090973686f7757696e54616c6c792867616d65293b0a09097d0a097d202020200a7d0a0a2f2f204d61696e206c6f6f700a6c617374203d20706572666f726d616e63652e6e6f7728293b0a616363203d20303b0a636f6e7374206474203d2031363b0a0a66756e6374696f6e206c6f6f70286e6f7729207b0a0a096c65742064656c7461203d206e6f77202d206c6173743b0a0a096966202864656c7461203e20323030292064656c7461203d203230303b0a0a09616363202b3d2064656c74613b0a096c617374203d206e6f773b0a0a097768696c652028616363203e3d20647429207b0a0a09092f2f20312e20494e5055540a0909676174686572496e707574286474293b0a0a09096966202867616d652e7374617465203d3d3d2053544154452e504c4159494e4729207b0a09090967616d652e74696d6520202b3d206474202f20313030303b0a090909757064617465537061776e286474293b0909090a0909092f2f20322e204150504c5920494e54454e5420286d6f76656d656e7420696e707574202076656c6f63697479290a0909096170706c79496e74656e742867616d652e706c617965722c6474293b0a0a0909092f2f20332e2050485953494353202876656c6f636974792020706f736974696f6e2c20636f6c6c6973696f6e732c206f6e47726f756e64290a090909757064617465506879736963732867616d652e706c617965722c6474293b0a0909097570646174655265636f696c2867616d652e706c617965722c206474293b0a090909666f722028636f6e737420656e656d79206f662067616d652e656e656d69657329207b0a090909096170706c79496e74656e7428656e656d792c6474293b0a09090909757064617465456e656d79414928656e656d79290a090909097570646174655068797369637328656e656d792c206474293b0a090909097570646174655265636f696c28656e656d792c206474293b0a0909097d0a0a0909096170706c7953657061726174696f6e28293b0a0909092f2f20342e204d4f56454d454e54205354415445202869646c652f77616c6b2f6a756d702f66616c6c290a0909097570646174654d6f76656d656e7453746174652867616d652e706c61796572293b0a0909092f2f20352e20414354494f4e205354415445202870756e63682f6b69636b2f6a756d7050756e63682f6a756d704b69636b290a09090967616d652e706c617965722e70726576416374696f6e203d2067616d652e706c617965722e616374696f6e53746174653b0a090909757064617465416374696f6e53746174652867616d652e706c61796572293b0a090909757064617465506c61796572417564696f28293b0909090a0a0909092f2f20362e20414e494d4154494f4e2053544154452028636f6d62696e65206d6f76656d656e74202b20616374696f6e290a09090973656c656374416e696d6174696f6e53746174652867616d652e706c61796572293b090a090909757064617465416e696d6174696f6e2867616d652e706c617965722c6474293b0a0a090909736d6f6f7468426f6e65526f746174696f6e732867616d652e706c617965722c6474293b0a0a090909666f722028636f6e737420656e656d79206f662067616d652e656e656d69657329207b0a090909097570646174654d6f76656d656e74537461746528656e656d79293b090909090a09090909757064617465416374696f6e537461746528656e656d79293b0a0909090973656c656374416e696d6174696f6e537461746528656e656d79293b09090a09090909757064617465416e696d6174696f6e28656e656d792c6474293b0a09090909736d6f6f7468426f6e65526f746174696f6e7328656e656d792c6474293b0a0909097d0a0a090909706c61796572456e656d79436f6c6c6973696f6e28293b0a09090975706461746557616c6c506879736963732867616d652e706c617965722c6474293b0a090909666f722028636f6e737420656e656d79206f662067616d652e656e656d69657329207b0a0909090975706461746557616c6c5068797369637328656e656d792c206474293b0a0909097d0a090909200a0a0909097570646174654875642867616d652e706c61796572290a090909757064617465446f6f7273286474293b0a09090975706461746543616d657261286474293b0a09090975706461746556696577426f7828293b0a0a09090967616d6553746174757328293b0a09097d0a0a0909616363202d3d2064743b0a097d0a0a092f2f20382e2052454e4445520a0972656e646572286474293b0a0a0972657175657374416e696d6174696f6e4672616d65286c6f6f70293b0a7d0a0a72657175657374416e696d6174696f6e4672616d65286c6f6f70293b0a0a2a2f |
| dURL | 6d61696e2e6a73 |
| descrHdr | 4d61696e204a532066696c65 |
| dislikes | 0 |
| docType | 54454c412d4a532d31 |
| docVersion | 312e302e30 |
| fileCheckC | 32323366363564663562356639633265316236303662656230303631343362653665343633333638373934326562326665373633303862643038363335383637 |
| fileCheckS | 31316464363139666639646636373165306539353739303435333466326634366165323839306231656634376166363331313261623062343734656464336266 |
| hash | 61336637386133316163613030366438663533383137383039356432323537613831646262623336343463623861343365373634623063313963343262366531 |
| iconURLHdr | |
| likes | 0 |
| nameHdr | 6d61696e2e6a73 |
| owner | 6465726f317179347966376335373777717a767a7134347833306c7967686135776a7a377772687736646e76356e337071346634643761716c75717133306d37616b |
| subDir |
Transaction Information
Root Hash
Built Height
7241621
Block
Timestamp
1782424397195
Timestamp (UTC)
2026-06-25 21:53:17
Block Age
1h 13m ago
Fee
0.25614
TX Size
18.274 kB
Version
1
Confirmations
239
Signature Type
DERO_HOMOMORPHIC
DERO Asset
2
Ring Size
0.25614
Fees
0.00000
Deposited
Sender
dero1qy4yf7c577wqzvzq44x30lygha5wjz7wrhw6dnv5n3pq4f4d7aqluqq30m7ak
Ring Members (2)
Smart Contract Details
SC Balance
0.00000 DERO
Smart Contract Code
Smart Contract Arguments
| Name | Type | Value |
|---|---|---|
| SC_ACTION | uint64 | 1 |
| SC_CODE | string | "// Copyright 2024. Civilware. All rights reserved. // TELA Decentralized Web Document (TELA-DOC-1) Function InitializePrivate() Uint64 10 IF init() == 0 THEN GOTO 30 20 RETURN 1 30 STORE("nameHdr", "main.js") 31 STORE("descrHdr", "Main JS file") 32 STORE("iconURLHdr", "") 33 STORE("dURL", "main.js") 34 STORE("docType", "TELA-JS-1") 35 STORE("subDir", "") 36 STORE("fileCheckC", "223f65df5b5f9c2e1b606beb006143be6e4633687942eb2fe76308bd08635867") 37 STORE("fileCheckS", "11dd619ff9df671e0e957904534f2f46ae2890b1ef47af63112ab0b474edd3bf") 100 RETURN 0 End Function Function init() Uint64 10 IF EXISTS("owner") == 0 THEN GOTO 30 20 RETURN 1 30 STORE("owner", address()) 50 STORE("docVersion", "1.0.0") 60 STORE("hash", HEX(TXID())) 70 STORE("likes", 0) 80 STORE("dislikes", 0) 100 RETURN 0 End Function Function address() String 10 DIM s as String 20 LET s = SIGNER() 30 IF IS_ADDRESS_VALID(s) THEN GOTO 50 40 RETURN "anon" 50 RETURN ADDRESS_STRING(s) End Function Function Rate(r Uint64) Uint64 10 DIM addr as String 15 LET addr = address() 16 IF r < 100 && EXISTS(addr) == 0 && addr != "anon" THEN GOTO 30 20 RETURN 1 30 STORE(addr, ""+r+"_"+BLOCK_HEIGHT()) 40 IF r < 50 THEN GOTO 70 50 STORE("likes", LOAD("likes")+1) 60 RETURN 0 70 STORE("dislikes", LOAD("dislikes")+1) 100 RETURN 0 End Function /* //---------- // Rendering function render(t) { // depth sort const living = [game.player, ...game.enemies.filter(e => !e.dead)]; for (const e of living) e.depth = e.y + e.height; living.sort((a, b) => a.depth - b.depth); // reorder DOM groups const layer = document.getElementById("players"); for (const e of living) { const g = document.getElementById(e.id) || createSVGGroup(e.id); layer.appendChild(g); // append moves it to correct depth } // now render bones renderSkeleton(game.player); for (const enemy of game.enemies) { renderSkeleton(enemy); deathAnimation(enemy); } renderHats(t) } function transformPoint(px, py, ox, oy, rot) { const cos = Math.cos(rot); const sin = Math.sin(rot); return { x: ox + px * cos - py * sin, y: oy + px * sin + py * cos }; } function mirrorPoly(poly) { return poly.map(p => ({ x: -p.x, y: p.y })); } function drawBone(entity, bone, boneName, parentX, parentY, parentRot) { const [px, py] = bone.pivot; const [cx, cy] = bone.childOrigin; const pivotWorld = transformPoint(px, py, parentX, parentY, parentRot); let rot = 0 if(entity.facing < 0) { rot = parentRot - (bone.rotation || 0) if(boneName === "hat"){ bone.flipX = true; } }else { rot = parentRot + (bone.rotation || 0) bone.flipX = false; } let renderPoly = {} if (bone.flipX){ renderPoly = mirrorPoly(bone.poly); }else{ renderPoly = bone.poly; } // STORE WORLD TRANSFORM FOR COLLISION DETECTION bone.worldX = pivotWorld.x; bone.worldY = pivotWorld.y; bone.worldRot = rot; const pts = renderPoly.map(p => { const wp = transformPoint(p.x, p.y, pivotWorld.x, pivotWorld.y, rot); return `${wp.x},${wp.y}`; }).join(" "); bones.push({ name: boneName, worldX :pivotWorld.x, worldY :pivotWorld.y, z: bone.z, points: pts, worldRot: rot, }); const childWorld = transformPoint(cx, cy, pivotWorld.x, pivotWorld.y, rot); for (let name in bone.children) { drawBone(entity, bone.children[name], name, childWorld.x, childWorld.y, rot); } } function applyZMap(bone, boneName) { if (zMap[boneName] !== undefined) { bone.z = zMap[boneName]; } for (const childName in bone.children) { applyZMap(bone.children[childName], childName); } } let bones = []; function renderSkeleton(entity) { const g = document.getElementById(entity.id); g.innerHTML = ""; const p = entity; const torso = p.skeleton.torso; if (p.facing > 0) { zMap.hat = 7; zMap.head = 6; // front zMap.torso = 5; // back } else { zMap.hat = 5; zMap.head = 6; // front zMap.torso = 7; // back } // Apply z-map BEFORE collecting bones applyZMap(torso, "torso"); drawBone(entity, torso, "torso", p.x, p.y + p.skeletonOffsetY, 0); // Sort by z (facing-aware) if (p.facing > 0) { bones.sort((a, b) => a.z - b.z); } else { bones.sort((a, b) => b.z - a.z); } // Render for (let i = 0; i < bones.length; i++) { const poly = document.createElementNS("http://www.w3.org/2000/svg", "polygon"); poly.setAttribute("points", bones[i].points); poly.setAttribute("fill", getBoneFill(entity,bones[i])); poly.setAttribute("stroke", "grey"); poly.setAttribute("stroke-width", ".25"); g.appendChild(poly); } bones = []; } function getBoneFill(entity,bone){ if(entity.id ==="player"){ if(bone.name === "torso"){ return renderGradient(bone,"player_torso_grad") } if(bone.name === "upperArmL" || bone.name === "upperArmR"||bone.name === "lowerArmL" || bone.name === "lowerArmR"){ return "#ccf"; } if(bone.name === "head"){ return "#fff"; } return "#54f" }else if(entity.type !== "boss"){ if(bone.name === "torso"){ return renderGradient(bone,`${entity.id}_torso_grad`); } if(bone.name === "upperArmL" || bone.name === "upperArmR"||bone.name === "lowerArmL" || bone.name === "lowerArmR"){ return "#d2c59a"; } if(bone.name === "head"){ return "#fff"; } return "#b8a878" }else{ if(bone.name === "head"){ return "#fff"; } return "#000" } } function renderGradient(bone,gradId) { const grad = document.getElementById(gradId); const deg = bone.worldRot * (180 / Math.PI); grad.setAttribute("gradientUnits", "userSpaceOnUse"); grad.setAttribute("x1", bone.worldX); grad.setAttribute("y1", bone.worldY - 40); grad.setAttribute("x2", bone.worldX); grad.setAttribute("y2", bone.worldY + 40); grad.setAttribute("gradientTransform", `rotate(${deg}, ${bone.worldX}, ${bone.worldY})`); return "url(#"+gradId+")" } function renderHats(t){ for (const h of game.hats) { // physics h.x += h.vx; h.y += h.vy; h.vy += game.gravity * t * 3; h.rotation += h.rotationSpeed * 2; h.life -= t; if (h.life <= 0) { h.g.remove(); delete h continue; } // update transform h.g.setAttribute("transform", `translate(${h.x},${h.y}) rotate(${h.rotation})` ); // update polygon points (local coords) h.node.setAttribute( "points", h.poly.map(p => `${p.x},${p.y}`).join(" ") ); } } //physics function applySeparation() { const all = [game.player, ...game.enemies]; for (let i = 0; i < all.length; i++) { for (let j = i + 1; j < all.length; j++) { const a = all[i]; const b = all[j]; const dx = b.x - a.x; const dy = b.y - a.y; const dist = Math.hypot(dx, dy); const minDist = (a.radius || 18) + (b.radius || 18); if (dist < minDist && dist > 0.001) { const overlap = minDist - dist; const nx = dx / dist; const ny = dy / dist; const push = overlap * 0.5; a.x -= nx * push; a.y -= ny * push; b.x += nx * push; b.y += ny * push; } } } } function updatePhysics(p, dt) { const tolerance = 30; p.onGround = false; // 1. Save last position const oldX = p.x; const headY = p.y - p.height * .5; const feetY = p.y + p.height * .5; for (let plat of game.platforms) { for (let seg of plat.segments) { if (seg.isWall) continue; const dx = seg.x2 - seg.x1; const dy = seg.y2 - seg.y1; const angle = seg.angle; // horizontal + vertical bounding box check if ( p.x >= seg.x1 && p.x <= seg.x2 && seg.maxY >= feetY - tolerance && seg.minY <= feetY + tolerance ) { // slope interpolation const t = (p.x - seg.x1) / (seg.x2 - seg.x1); const platY = seg.y1 + (seg.y2 - seg.y1) * t; const t2 = (feetY - seg.y1) / (seg.y2 - seg.y1); const platXfeet = seg.x1 + (seg.x2 - seg.x1) * t2; if (feetY < platY) continue; // TOO STEEP wall + slide if (Math.abs(angle) > maxClimbAngle ) { let sliding = false; if (p.x-5 <= platXfeet && dy < 0) { sliding = true; } else if(p.x+5 >= platXfeet && dy > 0){ sliding = true; } if(sliding){ p.vx = 0; const slideSpeed = Math.abs(Math.sin(angle)) * 0.5; p.vx += Math.sign(angle) * slideSpeed; } } // NORMAL LANDING if (p.vy >= 0 && p.y < platY) { if (feetY >= platY - tolerance) { p.y = platY - p.height * .5; p.vy = 0; p.inAir = false; p.onGround = true; } } } } } // gravity p.vy += game.gravity * dt; const maxFallSpeed = 1.2; if (p.vy > maxFallSpeed) p.vy = maxFallSpeed; // friction if (!p.inAir && p.moveInput === 0) { p.vx *= 0.8; if (Math.abs(p.vx) < 0.01) p.vx = 0; } } function updateWallPhysics(p, dt) { // 1. Save last position const oldX = p.x; const kneeY = p.y + p.height * .25; const feetY = p.y + p.height * .5; for (let plat of game.platforms) { for (let seg of plat.segments) { if (seg.isWall) { if ( feetY -1 <= seg.minY || kneeY+1 >= seg.maxY) continue;// headY+1 >= seg.maxY const left = p.x - p.width/2; const right = p.x + p.width/2; // hit from left if (right > seg.x1 && p.x <= seg.x1 && (seg.oneWay === "left" || !seg.oneWay) ) { p.x = oldX; // rollback X p.vx = -(right - seg.x1) * .1; break; } // hit from right if (left < seg.x1 && p.x >= seg.x1 && (seg.oneWay === "right" || !seg.oneWay)) { p.x = oldX; // rollback X p.vx = (seg.x1 - left) * .1; break; } } } } p.x += p.vx * dt; p.y += p.vy * dt; } function distance(a,b){ const dx = a.x - b.x; const dy = a.y - b.y; return Math.hypot(dx, dy); } function updateExit(exitDoor){ if(!exitDoor)return; if (exitDoor.closed && !exitDoor.locked) { // treat door as a wall segment if (distance(game.player, exitDoor) < 100) { openDoor(exitDoor); } return; }else if(!exitDoor.locked && !exitDoor.closed && (game.player.verticalInput === 1 || game.player.wantJump) && distance(game.player, exitDoor) < 100){ loadLevel(++currentLevel) game.score +500 respawnPlayer() } if(exitDoor.node === null)return; if (Math.abs(exitDoor.targetScaleX - exitDoor.scaleX) < 0.1) { return } const dtSec = dt * 0.001; exitDoor.scaleX += (exitDoor.targetScaleX - exitDoor.scaleX) * dtSec * exitDoor.speed; exitDoor.node.setAttribute( "transform", ` scale(${exitDoor.scaleX}, 1)` ); } function updateDoors(dt) { const doors = game.doors; updateExit(game.doors.find(d => d.type === "exit")); } function openDoor(door) { door.scaleX = 1; door.closed = false; } function closeDoor() { door.targetScaleX = 0.05; door.closed = true; } function updateHud(player) { const hpText = document.getElementById("hpText"); const scoreText = document.getElementById("scoreText"); const timeText = document.getElementById("timeText"); hpText.textContent = player.hitPoints; hpText.setAttribute("fill", getHealthColor(player.hitPoints, player.maxPoints)); scoreText.textContent = `Score: ${game.score}`; timeText.textContent = `Time: ${formatTime(game.time)}`; } function getHealthColor(hp, maxHp) { const pct = hp / maxHp; if (pct > 0.7) return "#00ff00"; // green if (pct > 0.4) return "#ffff00"; // yellow if (pct > 0.2) return "#ff8800"; // orange return "#ff0000"; // red } function formatTime(t) { const m = Math.floor(t / 60); const s = Math.floor(t % 60); return `${m}:${s.toString().padStart(2, "0")}`; } function showWinTally(game) { const modal = document.getElementById("modal"); const time = formatTime(game.time); const kills = game.totalKills; const deaths = game.deaths; const score = game.score; document.getElementById("modalText").innerHTML = ` <text x="50%" y="20%" text-anchor="middle" font-size="42" fill="white">ENEMIES DEFEATED</text> <text x="50%" y="35%" text-anchor="middle" font-size="28" fill="white">Time: ${time}</text> <text x="50%" y="42%" text-anchor="middle" font-size="28" fill="white">Kills: ${kills}</text> <text x="50%" y="49%" text-anchor="middle" font-size="28" fill="white">Deaths: ${deaths}</text> <text x="50%" y="56%" text-anchor="middle" font-size="28" fill="white">Score: ${score}</text> <text x="50%" y="63%" text-anchor="middle" font-size="28" fill="white">Press Start or Escape to Restart</text> `; modal.style.opacity = 1; } function menu(startPressed,move){ // PAUSE if (startPressed && !prevStartPressed) { if (game.state === STATE.PAUSED){ game.state = STATE.PLAYING; document.getElementById("modal").style.opacity = 0; }else if(game.state === STATE.PLAYING){ game.state = STATE.PAUSED; document.getElementById("modal").style.opacity = 1; } } if(game.state === STATE.PLAYING)return; // STATS / RESART if(game.state === STATE.WIN && startPressed && !prevStartPressed){ resetStats(); currentLevel = 1; loadLevel(currentLevel); document.getElementById("modal").style.opacity = 0; game.state = STATE.PLAYING; }else if(game.state === STATE.WIN) return; // VOLUME if(move === -1)volume -= 0.02; if(move === 1)volume += 0.02; volume = Math.max(0, Math.min(1, volume)); document.getElementById("modalText").innerHTML = ` <text x="50%" y="30%" text-anchor="middle" font-size="42" fill="white">PAUSED</text> <text x="50%" y="40%" text-anchor="middle" font-size="28" fill="white">VOLUME: ${(volume * 100)|0}%</text> <text x="50%" y="45%" text-anchor="middle" font-size="28" fill="white">CONTROLS: </text> <text x="50%" y="52%" text-anchor="middle" font-size="24" fill="white">Move Left "a", Move Right "d", Jump "Spacebar" </text> <text x="50%" y="57%" text-anchor="middle" font-size="24" fill="white">Crouch/Attack Low "s", Attack High "w"</text> <text x="50%" y="62%" text-anchor="middle" font-size="24" fill="white">Punch "l", Kick ";" </text> `; } function updatePlayerAudio(){ if((game.player.wantKick || game.player.wantPunch) && game.player.prevAction !== game.player.actionState){ if((game.player.prevAction === "walkPunch" && game.player.actionState === "punch") ||(game.player.prevAction === "punch" && game.player.actionState === "walkPunch" ))return; if((game.player.prevAction === "walkHighPunch" && game.player.actionState === "highPunch") ||(game.player.prevAction === "highPunch" && game.player.actionState === "walkHighPunch" ))return; sfxHuh(); for (const enemy of game.enemies) { enemy.prevHit = false; } } } function gameStatus() { const p = game.player; // Cleanup: remove dead enemies game.enemies = game.enemies.filter(e => { if (e.state === "dead") { game.kills++; game.totalKills++; return false; } return true; }); // Player death check if (p.y > 4000 || p.hitPoints <= 0) { game.score = Math.max(game.score -500,0); game.deaths++; respawnPlayer(); } // Enemy death check for (const enemy of game.enemies) { if (enemy.hitPoints <= 0 && enemy.state !== "dying") { game.score += 20; enemy.state = "dying"; enemy.actionState = "none" enemy.moveState = "dying"; }else if(enemy.y > 4000){ enemy.state = "dead"; } } if (game.kills >= game.objective.count) { const exit = game.doors.find(d => d.type === "exit"); if(exit){ exit.locked = false; }else{ game.state = STATE.WIN; showWinTally(game); } } } // Main loop last = performance.now(); acc = 0; const dt = 16; function loop(now) { let delta = now - last; if (delta > 200) delta = 200; acc += delta; last = now; while (acc >= dt) { // 1. INPUT gatherInput(dt); if (game.state === STATE.PLAYING) { game.time += dt / 1000; updateSpawn(dt); // 2. APPLY INTENT (movement input velocity) applyIntent(game.player,dt); // 3. PHYSICS (velocity position, collisions, onGround) updatePhysics(game.player,dt); updateRecoil(game.player, dt); for (const enemy of game.enemies) { applyIntent(enemy,dt); updateEnemyAI(enemy) updatePhysics(enemy, dt); updateRecoil(enemy, dt); } applySeparation(); // 4. MOVEMENT STATE (idle/walk/jump/fall) updateMovementState(game.player); // 5. ACTION STATE (punch/kick/jumpPunch/jumpKick) game.player.prevAction = game.player.actionState; updateActionState(game.player); updatePlayerAudio(); // 6. ANIMATION STATE (combine movement + action) selectAnimationState(game.player); updateAnimation(game.player,dt); smoothBoneRotations(game.player,dt); for (const enemy of game.enemies) { updateMovementState(enemy); updateActionState(enemy); selectAnimationState(enemy); updateAnimation(enemy,dt); smoothBoneRotations(enemy,dt); } playerEnemyCollision(); updateWallPhysics(game.player,dt); for (const enemy of game.enemies) { updateWallPhysics(enemy, dt); } updateHud(game.player) updateDoors(dt); updateCamera(dt); updateViewBox(); gameStatus(); } acc -= dt; } // 8. RENDER render(dt); requestAnimationFrame(loop); } requestAnimationFrame(loop); */" |
Prove Transaction
Prove that you sent DERO in this transaction. Obtain proof using the dero-wallet-cli command or from your wallet statement.
Note: The proof is sent to the server for verification calculations.
Payload proofs are user-provided display proofs; for the strongest verification, confirm with the receiving wallet.