Transaction

a858c42e6451d15dcec1126a42c071feaf3a2d7150b6d9c4d0c1291228b31ad9
Timestamp (utc)
2025-02-04 16:38:13
Fee Paid
0.00000003 BSV
(
0.00022932 BSV
-
0.00022929 BSV
)
Fee Rate
1.234 sat/KB
Version
1
Confirmations
38,403
Size Stats
2,430 B

42 Inputs

Total Input:
0.00022932 BSV
  • jM†%3c21444f43545950452068746d6c3e0d0a3c68746d6c206c616e673d22656e223e0d0a3c686561643e0a202020203c6d65746120687474702d65717569763d22436f6e74656e742d53656375726974792d506f6c6963792220636f6e74656e743d227363726970742d737263202773656c66272027756e736166652d696e6c696e65272027756e736166652d6576616c273b223e0d0a202020203c6d65746120636861727365743d225554462d38223e0d0a202020203c6d657461206e616d653d2276696577706f72742220636f6e74656e743d2277696474683d6465766963652d77696474682c20696e697469616c2d7363616c653d312e30223e0d0a202020203c7469746c653e466f6c64657220456e636f6465723c2f7469746c653e0d0a202020203c7374796c653e0d0a2020202020202020626f6479207b0d0a202020202020202020202020666f6e742d66616d696c793a20417269616c2c2073616e732d73657269663b0d0a2020202020202020202020206d61782d77696474683a2038303070783b0d0a2020202020202020202020206d617267696e3a2030206175746f3b0d0a20202020202020202020202070616464696e673a20323070783b0d0a20202020202020207d0d0a20202020202020202364726f705a6f6e65207b0d0a202020202020202020202020626f726465723a203270782064617368656420236363633b0d0a202020202020202020202020626f726465722d7261646975733a20323070783b0d0a20202020202020202020202077696474683a20313030253b0d0a2020202020202020202020206d617267696e3a203230707820303b0d0a20202020202020202020202070616464696e673a20323070783b0d0a202020202020202020202020746578742d616c69676e3a2063656e7465723b0d0a20202020202020207d0d0a20202020202020202366696c654c6973742c20236a736f6e4f7574707574207b0d0a2020202020202020202020206d617267696e2d746f703a20323070783b0d0a20202020202020207d0d0a20202020202020202e736d616c6c207b0d0a202020202020202020202020666f6e742d73697a653a20302e38656d3b0d0a202020202020202020202020636f6c6f723a20233636363b0d0a20202020202020207d0d0a2020202020202020627574746f6e207b0d0a2020202020202020202020206261636b67726f756e642d636f6c6f723a20233443414635303b0d0a202020202020202020202020626f726465723a206e6f6e653b0d0a202020202020202020202020636f6c6f723a2077686974653b0d0a20202020202020202020202070616464696e673a203135707820333270783b0d0a202020202020202020202020746578742d616c69676e3a2063656e7465723b0d0a202020202020202020202020746578742d6465636f726174696f6e3a206e6f6e653b0d0a202020202020202020202020646973706c61793a20696e6c696e652d626c6f636b3b0d0a202020202020202020202020666f6e742d73697a653a20313670783b0d0a2020202020202020202020206d617267696e3a20347078203270783b0d0a202020202020202020202020637572736f723a20706f696e7465723b0d0a20202020202020207d0d0a202020203c2f7374796c653e0d0a3c2f686561643e0d0a3c626f64793e0d0a202020203c68313e466f6c64657220456e636f6465723c2f68313e0d0a0d0a202020203c6469762069643d2264726f705a6f6e65223e0d0a202020202020202044726f7020796f75722066696c65732068657265206f7220636c69636b20746f2073656c6563742066696c653c62723e0d0a20202020202020203c7370616e20636c6173733d22736d616c6c223e596f752063616e20616c736f20636f707920616e20656e7469726520666f6c64657220686572653c2f7370616e3e0d0a202020203c2f6469763e0d0a0d0a202020203c6469762069643d2266696c654c697374223e3c2f6469763e0d0a0d0a202020203c6469762069643d226a736f6e4f7574707574223e3c2f6469763e0d0a0d0a202020203c627574746f6e206f6e636c69636b3d22656e636f646546696c65732829223e456e636f64652046696c657320746f204a534f4e3c2f627574746f6e3e0d0a202020203c627574746f6e206f6e636c69636b3d22736176654a736f6e46696c652829223e53617665204a534f4e2046696c653c2f627574746f6e3e0d0a0d0a202020203c7363726970743e0d0a20202020202020206c65742066696c6573203d205b5d3b0d0a0d0a202020202020202066756e6374696f6e2068616e646c6544726f70286529207b0d0a202020202020202020202020652e70726576656e7444656661756c7428293b0d0a202020202020202020202020652e73746f7050726f7061676174696f6e28293b0d0a0d0a202020202020202020202020636f6e7374206974656d73203d20652e646174615472616e736665722e6974656d733b0d0a202020202020202020202020666f7220286c65742069203d20303b2069203c206974656d732e6c656e6774683b20692b2b29207b0d0a20202020202020202020202020202020636f6e7374206974656d203d206974656d735b695d2e7765626b69744765744173456e74727928293b0d0a20202020202020202020202020202020696620286974656d29207b0d0a2020202020202020202020202020202020202020747261766572736546696c6554726565286974656d293b0d0a202020202020202020202020202020207d0d0a2020202020202020202020207d0d0a20202020202020207d0d0a0d0a202020202020202066756e6374696f6e20747261766572736546696c6554726565286974656d2c2070617468203d20222229207b0d0a202020202020202020202020696620286974656d2e697346696c6529207b0d0a202020202020202020202020202020206974656d2e66696c652866696c65203d3e207b0d0a202020202020202020202020202020202020202066696c65732e707573682866696c65293b0d0a202020202020202020202020202020202020202075706461746546696c654c69737428293b0d0a202020202020202020202020202020207d293b0d0a2020202020202020202020207d20656c736520696620286974656d2e69734469726563746f727929207b0d0a202020202020202020202020202020206c657420646972526561646572203d206974656d2e63726561746552656164657228293b0d0a202020202020202020202020202020206469725265616465722e72656164456e747269657328656e7472696573203d3e207b0d0a2020202020202020202020202020202020202020666f7220286c657420656e747279206f6620656e747269657329207b0d0a202020202020202020202020202020202020202020202020747261766572736546696c655472656528656e7472792c2070617468202b206974656d2e6e616d65202b20222f22293b0d0a20202020202020202020202020202020202020207d0d0a202020202020202020202020202020207d293b0d0a2020202020202020202020207d0d0a20202020202020207d0d0a0d0a202020202020202066756e6374696f6e2075706461746546696c654c6973742829207b0d0a202020202020202020202020636f6e73742066696c654c697374203d20646f63756d656e742e676574456c656d656e7442794964282766696c654c69737427293b0d0a20202020202020202020202066696c654c6973742e696e6e657248544d4c203d20273c68333e53656c65637465642046696c65733a3c2f68333e273b0d0a20202020202020202020202066696c65732e666f72456163682866696c65203d3e207b0d0a2020202020202020202020202020202066696c654c6973742e696e6e657248544d4c202b3d20603c703e247b66696c652e6e616d657d3c2f703e603b0d0a2020202020202020202020207d293b0d0a20202020202020207d0d0a0d0a202020202020202066756e6374696f6e20656e636f646546696c65732829207b0d0a202020202020202020202020636f6e7374206a736f6e4f7574707574203d20646f63756d656e742e676574456c656d656e744279496428276a736f6e4f757470757427293b0d0a2020202020202020202020206a736f6e4f75747075742e696e6e657248544d4c203d20273c68333e456e636f646564204a534f4e3a3c2f68333e273b0d0a2020202020202020202020200d0a202020202020202020202020636f6e73742066696c6550726f6d69736573203d2066696c65732e6d61702866696c65203d3e206e65772050726f6d69736528287265736f6c76652c2072656a65637429203d3e207b0d0a20202020202020202020202020202020636f6e737420726561646572203d206e65772046696c6552656164657228293b0d0a202020202020202020202020202020207265616465722e6f6e6c6f6164203d2065203d3e207265736f6c7665287b6e616d653a2066696c652e6e616d652c20636f6e74656e743a20652e7461726765742e726573756c747d293b0d0a202020202020202020202020202020207265616465722e6f6e6572726f72203d2072656a6563743b0d0a202020202020202020202020202020207265616465722e7265616441734461746155524c2866696c65293b0d0a2020202020202020202020207d29293b0d0a0d0a20202020202020202020202050726f6d6973652e616c6c2866696c6550726f6d69736573292e7468656e28656e636f64656446696c6573203d3e207b0d0a20202020202020202020202020202020636f6e7374206a736f6e203d204a534f4e2e737472696e6769667928656e636f64656446696c65732c206e756c6c2c2032293b0d0a202020202020202020202020202020206a736f6e4f75747075742e696e6e657248544d4c202b3d20603c7072653e247b6a736f6e7d3c2f7072653e603b0d0a2020202020202020202020207d293b0d0a20202020202020207d0d0a0d0a202020202020202066756e6374696f6e20736176654a736f6e46696c652829207b0d0a202020202020202020202020636f6e7374206a736f6e436f6e74656e74203d20646f63756d656e742e717565727953656c6563746f722827236a736f6e4f75747075742070726527293f2e74657874436f6e74656e743b0d0a202020202020202020202020696620286a736f6e436f6e74656e7429207b0d0a20202020202020202020202020202020636f6e737420626c6f62203d206e657720426c6f62285b6a736f6e436f6e74656e745d2c207b747970653a20276170706c69636174696f6e2f6a736f6e277d293b0d0a20202020202020202020202020202020636f6e73742061203d20646f63756d656e742e637265617465456c656d656e7428276127293b0d0a20202020202020202020202020202020612e68726566203d2055524c2e6372656174654f626a65637455524c28626c6f62293b0d0a20202020202020202020202020202020612e646f776e6c6f6164203d2027656e636f6465645f66696c65732e6a736f6e273b0d0a20202020202020202020202020202020612e636c69636b28293b0d0a2020202020202020202020207d20656c7365207b0d0a20202020202020202020202020202020616c6572742827506c6561736520656e636f64652066696c65732066697273742e27293b0d0a2020202020202020202020207d0d0a20202020202020207d0d0a0d0a2020202020202020636f6e73742064726f705a6f6e65203d20646f63756d656e742e676574456c656d656e7442794964282764726f705a6f6e6527293b0d0a202020202020202064726f705a6f6e652e6164644576656e744c697374656e65722827647261676f766572272c2065203d3e20652e70726576656e7444656661756c742829293b0d0a202020202020202064726f705a6f6e652e6164644576656e744c697374656e6572282764726f70272c2068616e646c6544726f70293b0d0a202020202020202064726f705a6f6e652e6164644576656e744c697374656e65722827636c69636b272c202829203d3e207b0d0a202020202020202020202020636f6e737420696e707574203d20646f63756d656e742e637265617465456c656d656e742827696e70757427293b0d0a202020202020202020202020696e7075742e74797065203d202766696c65273b0d0a202020202020202020202020696e7075742e7765626b69746469726563746f7279203d20747275653b0d0a202020202020202020202020696e7075742e6164644576656e744c697374656e657228276368616e6765272c2065203d3e207b0d0a2020202020202020202020202020202066696c6573203d2041727261792e66726f6d28652e7461726765742e66696c6573293b0d0a2020202020202020202020202020202075706461746546696c654c69737428293b0d0a2020202020202020202020207d293b0d0a202020202020202020202020696e7075742e636c69636b28293b0d0a20202020202020207d293b0d0a202020203c2f7363726970743e0d0a3c2f626f64793e0d0a3c2f68746d6c3e
    https://whatsonchain.com/tx/undefined
  • jMr{"name":"EncodedFiles","files":[{"name":"createwallet.html","size":1348,"type":"text/html","content":"YXN5bmMgZnVuY3Rpb24gY3JlYXRlV2FsbGV0KCkgew0KICAgIC8vIENoZWNrIGlmIHdhbGxldCBhbHJlYWR5IGV4aXN0cyBpbiBsb2NhbFN0b3JhZ2UNCiAgICBjb25zdCBleGlzdGluZ1dhbGxldCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd3YWxsZXQnKTsNCiAgICBpZiAoZXhpc3RpbmdXYWxsZXQpIHsNCiAgICAgICAgY29uc3Qgd2FsbGV0ID0gSlNPTi5wYXJzZShleGlzdGluZ1dhbGxldCk7DQogICAgICAgIGFsZXJ0KGBXYWxsZXQgYWxyZWFkeSBleGlzdHMhIEFkZHJlc3M6ICR7d2FsbGV0LmFkZHJlc3N9YCk7DQogICAgICAgIHJldHVybjsNCiAgICB9DQoNCiAgICB0cnkgew0KICAgICAgICAvLyBHZW5lcmF0ZSBhIG5ldyB3YWxsZXQNCiAgICAgICAgY29uc3QgcHJpdmF0ZUtleSA9IG5ldyBic3YuUHJpdmF0ZUtleSgpOyAgLy8gR2VuZXJhdGUgYSBuZXcgcHJpdmF0ZSBrZXkNCiAgICAgICAgY29uc3QgYWRkcmVzcyA9IHByaXZhdGVLZXkudG9BZGRyZXNzKCk7ICAvLyBHZXQgdGhlIGNvcnJlc3BvbmRpbmcgd2FsbGV0IGFkZHJlc3MNCiAgICAgICAgY29uc3QgdXVpZCA9IGNyeXB0by5yYW5kb21VVUlEKCk7ICAgICAgICAvLyBHZW5lcmF0ZSBhIHVuaXF1ZSBpZGVudGlmaWVyIChVVUlEKQ0KDQogICAgICAgIC8vIENyZWF0ZSB3YWxsZXQgb2JqZWN0DQogICAgICAgIGNvbnN0IHdhbGxldCA9IHsNCiAgICAgICAgICAgIHV1aWQ6IHV1aWQsDQogICAgICAgICAgICBhZGRyZXNzOiBhZGRyZXNzLnRvU3RyaW5nKCksDQogICAgICAgICAgICBwcml2YXRlS2V5OiBwcml2YXRlS2V5LnRvV0lGKCkgLy8gV2FsbGV0IEltcG9ydCBGb3JtYXQgZm9yIHByaXZhdGUga2V5DQogICAgICAgIH07DQoNCiAgICAgICAgLy8gU3RvcmUgd2FsbGV0IGluIGxvY2FsU3RvcmFnZQ0KICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnd2FsbGV0JywgSlNPTi5zdHJpbmdpZnkod2FsbGV0KSk7DQoNCiAgICAgICAgLy8gRGlzcGxheSBzdWNjZXNzIG1lc3NhZ2UNCiAgICAgICAgYWxlcnQoYFdhbGxldCBjcmVhdGVkIHN1Y2Nlc3NmdWxseSEgQWRkcmVzczogJHt3YWxsZXQuYWRkcmVzc31gKTsNCg0KICAgICAgICAvLyBPcHRpb25hbDogTG9nIHdhbGxldCBkZXRhaWxzIHRvIGNvbnNvbGUgKHJlbW92ZSBpbiBwcm9kdWN0aW9uKQ0KICAgICAgICBjb25zb2xlLmxvZygnV2FsbGV0IGNyZWF0ZWQ6Jywgd2FsbGV0KTsNCiAgICB9IGNhdGNoIChlcnJvcikgew0KICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBjcmVhdGluZyB3YWxsZXQ6JywgZXJyb3IpOw0KICAgICAgICBhbGVydCgnRmFpbGVkIHRvIGNyZWF0ZSB3YWxsZXQuIFBsZWFzZSB0cnkgYWdhaW4uJyk7DQogICAgfQ0KfQ=="}]}
    https://whatsonchain.com/tx/undefined
  • jMÛ {"name":"EncodedFiles","files":[{"name":"link_click to earn.json","size":1802,"type":"application/json","content":"eyJ0eXBlIjoiTGluayIsIkFsdCI6ImNsaWNrIHRvIGVhcm4iLCJjb250ZW50IjoiZXlKaWJHOWphMk5vWVdsdUlqcDdJbFZWYVdRaU9pSnNhVzVyWHpFM016YzBNak15TkRJeU5ESmZPR2d6TTJWNWVXUnNJaXdpZEhsd1pTSTZJa3hwYm1zaUxDSnpkRzl5WVdkbElqb2laR2x6YXlJc0ltUmhkR1ZEY21WaGRHVmtJam9pTWpBeU5TMHdNUzB5TVZRd01Ub3pORG93TWk0eU5ESmFJaXdpWkdWd2JHOTVaV1JFWVhSbElqb2lJaXdpY0hWaWJHbHphR1ZrUkdGMFpTSTZJaUlzSW5ScGRHeGxJam9pWTJ4cFkyc2dkRzhnWldGeWJpSXNJbU52Ym5SbGJuUWlPaUowYUdWaVlYUjBaWEo1WTJ4cGJtbGpMbU52YlNJc0ltTnZiblJsYm5SZmRHbDBiR1VpT2lKMGFHVmlZWFIwWlhKNVkyeHBibWxqTG1OdmJTSXNJblJoWjNNaU9pSmxZWEp1SUdadmNpQmpiR2xqYTNNZ2NHRjVJR1p2Y2lCMmFXVjNjeUlzSWtGc2RDSTZJbU5zYVdOcklIUnZJR1ZoY200aUxDSldhV1YzWDFWU1RDSTZJbU5zYVdOcklIUnZJR1ZoY200aUxDSnNiMjVuVlZKTUlqb2lkR2hsWW1GMGRHVnllV05zYVc1cFl5NWpiMjBpTENKU1pXTnZjbVJmZEhocFpDSTZJaUlzSW5CaGVXMWxiblJVZUVsa0lqcHVkV3hzTENKd2NtVjJhVzkxYzE5MGVHbGtJam9pSWl3aWJtWjBTV1FpT2lJaUxDSkRjbVZoZEc5eVgxZGhiR3hsZENJNmJuVnNiQ3dpVDNkdVpYSmZWMkZzYkdWMElqb2lNVGRXTTFGeWFUUm9SVzlUTkhZeldEWk1iV3BFZEUweWEzaEJPV3R2Vm5GYVNDSXNJbGRoYkd4bGRGOUNZV3hoYm1ObElqb3dMakF5TVN3aWNISnBkbUYwWlY5clpYa2lPaUlpTENKMFlXY2lPaUlpTENKcGJuUmxjbTVsZEY5cGJtUnBZMkYwYjNJaU9pSlZJaXdpYVc1MFpYSnVaWFJmZEhsd1pTSTZJbFZTVENCVGFHOXlkR1Z1WlhJaUxDSmpiMjUwWlc1MFgzUjVjR1VpT2lKQ0lpd2lZMjl1ZEdWdWRGOWtaWE5qY21sd2RHbHZiaUk2SWxWdWEyNXZkMjRpTENKd2NtOWtkV04wWDNSNWNHVWlPaUpFSWl3aWNISnZaSFZqZEY5allYUmxaMjl5ZVNJNklrUnBaMmwwWVd3aUxDSmpiM04wWDNSNWNHVWlPaUpGSWl3aWNISnBZMmx1WjE5dGIyUmxiQ0k2SWtWaGNtNHRkRzh0Vm1sbGR5SXNJbXhoYm1kMVlXZGxJam9pUlNJc0lteGhibWQxWVdkbFgyWjFiR3dpT2lKRmJtZHNhWE5vSWl3aWNISnBZMlVpT2kwd0xqQXdNREVzSW5acFpYZEVkWEpoZEdsdmJpSTZNekFzSW5OMFlYUjFjeUk2SWtFaUxDSmtaWE5qY21sd2RHbHZiaUk2SWtScFoybDBZV3dnTFNCMWJtUmxabWx1WldRc0lFVmhjbTR0ZEc4dFZtbGxkeXdnUlc1bmJHbHphQ0lzSW14aGMzUmZkWEJrWVhSbFpDSTZJakl3TWpVdE1ERXRNakZVTURFNk16UTZNREl1TWpReVdpSjlMQ0p3YjNOMFozSmxjeUk2ZXlKMGVHbGtJam9pSWl3aWQyRnNiR1YwSWpvaU1UZFdNMUZ5YVRSb1JXOVROSFl6V0RaTWJXcEVkRTB5YTNoQk9XdHZWbkZhU0NJc0ltbHVkR1Z5Ym1WMFgybHVaR2xqWVhSdmNpSTZJbFVpTENKamIyNTBaVzUwWDNSNWNHVWlPaUpDSWl3aWNISnZaSFZqZEY5MGVYQmxJam9pUkNJc0ltTnZjM1JmZEhsd1pTSTZJa1VpTENKc1lXNW5kV0ZuWlNJNklrVWlMQ0oyYVdWM1gzVnliQ0k2SW1Oc2FXTnJJSFJ2SUdWaGNtNGlMQ0pqYjI1MFpXNTBYM1JwZEd4bElqb2lkR2hsWW1GMGRHVnllV05zYVc1cFl5NWpiMjBpTENKelpXRnlZMmhmZEdGbmN5STZJamRXYWxWVU9GVmlXbEZpTWpOV1NFaFpTM2cyVFhOYWEwVk5PbTlGYVVJNk1DNHdNREF4T2t3NkxUTTNMalk1TURFNk1UYzJMakUyTnpraUxDSnpkR0Z5ZEY5a1lYUmxJam9pTWpBeU5TMHdNUzB5TVNJc0luQnlhV05sSWpvd0xDSnpkR0YwZFhNaU9pSkJJbjE5In0="}]}
    https://whatsonchain.com/tx/undefined
  • jMæ[<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>ChainDisk</title> <style> body { font-family: Arial, sans-serif; max-width: 800px; margin: 0 auto; padding: 20px; } nav { margin-bottom: 20px; } nav a { margin-right: 20px; font-size: 1.2em; text-decoration: none; color: #3498db; cursor: pointer; } nav a:hover { text-decoration: underline; } section { display: none; } .active { display: block; } #dropZone { border: 2px dashed #ccc; border-radius: 20px; width: 100%; margin: 20px 0; padding: 20px; text-align: center; } #fileList, #message, #transactionData, #loading, #error, #virtualFolder, #txidHistory { margin-top: 20px; } .small { font-size: 0.8em; color: #666; } .large-message { font-size: 2em; color: #333; } button { background-color: #4CAF50; border: none; color: white; padding: 15px 32px; text-align: center; text-decoration: none; display: inline-block; font-size: 16px; margin: 4px 2px; cursor: pointer; } button:disabled { background-color: #cccccc; color: #666666; cursor: not-allowed; } .file-item { display: flex; justify-content: space-between; align-items: center; margin-bottom: 10px; } .file-item button { background-color: #f44336; margin-left: 10px; } .connect-button { background-color: red; border: none; color: white; padding: 15px 32px; text-align: center; text-decoration: none; display: inline-block; font-size: 16px; margin: 4px 2px; cursor: pointer; } .connect-button:disabled { background-color: #cccccc; color: #666666; cursor: not-allowed; } #txidHistoryDialog { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.5); display: flex; justify-content: center; align-items: center; } #txidHistoryDialog > div { background-color: white; padding: 20px; border-radius: 5px; width: 80%; max-width: 500px; } </style> </head> <body> <h1>ChainDisk - Your Blockchain Thumb Drive</h1> <nav> <a id="uploadLink">Upload Files</a> <a id="downloadLink">Download Files</a> <a id="txidHistoryLink">TXID History</a> </nav> <section id="uploadSection" class="active"> <h2>Upload Files</h2> <div id="dropZone"> Select File click open or Select Folder then click Upload<br> <span class="small">Total size of files encoded will be uploaded</span> <input type="file" id="fileInput" style="display: none;" multiple> </div> <button id="fileSelectButton">Select File</button> <button id="folderSelectButton">Select Folder</button> <div id="message" class="large-message"></div> <div id="fileList"></div> <button id="saveButton" onclick="saveJsonFile()" disabled>Save JSON File</button> <button id="deployButton" class="connect-button" onclick="deployFiles()">Connect to Chain Disk Server To Deploy</button> <div id="deployStatus"></div> </section> <section id="downloadSection"> <h2>Download Files</h2> <input type="text" id="txidInput" placeholder="Enter transaction ID"> <button onclick="fetchAndDisplayFiles()">Fetch and Display Files</button> <div id="loading">Enter Transaction Id And Hit Fetch</div> <div id="error"></div> <div id="virtualFolder"></div> <button id="downloadZipButton" style="display:none;" onclick="downloadZip()">Download Selected Files as Zip</button> </section> <div id="txidHistoryDialog" style="display: none;"> <div> <h2>TXID History</h2> <div id="txidHistoryContent"></div> <button onclick="closeTxidHistory()">Close</button> </div> </div> <script src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.6.0/jszip.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script> <script> const uploadSection = document.getElementById('uploadSection'); const downloadSection = document.getElementById('downloadSection'); const txidHistorySection = document.getElementById('txidHistoryDialog'); const uploadLink = document.getElementById('uploadLink'); const downloadLink = document.getElementById('downloadLink'); const txidHistoryLink = document.getElementById('txidHistoryLink'); const sections = [uploadSection, downloadSection, txidHistorySection]; uploadLink.addEventListener('click', () => { sections.forEach(section => section.classList.remove('active')); uploadSection.classList.add('active'); }); downloadLink.addEventListener('click', () => { sections.forEach(section => section.classList.remove('active')); downloadSection.classList.add('active'); }); txidHistoryLink.addEventListener('click', showTxidHistory); // Set default section to show uploadSection.classList.add('active'); // Upload functionality let encodedFiles = []; const saveButton = document.getElementById('saveButton'); const fileSelectButton = document.getElementById('fileSelectButton'); const folderSelectButton = document.getElementById('folderSelectButton'); const messageDiv = document.getElementById('message'); const deployButton = document.getElementById('deployButton'); const deployStatus = document.getElementById('deployStatus'); function handleDrop(e) { e.preventDefault(); e.stopPropagation(); const items = e.dataTransfer.items; for (let i = 0; i < items.length; i++) { const item = items[i].webkitGetAsEntry(); if (item) { traverseFileTree(item); } } } function traverseFileTree(item, path = "") { if (item.isFile) { item.file(file => { encodeFile(file); }); } else if (item.isDirectory) { let dirReader = item.createReader(); dirReader.readEntries(entries => { for (let entry of entries) { traverseFileTree(entry, path + item.name + "/"); } }); } } function encodeFile(file) { const reader = new FileReader(); reader.onload = e => { encodedFiles.push({ name: file.name, size: file.size, type: file.type, content: e.target.result.split(',')[1] // Base64 content }); updateFileList(); updateTotalSize(); deployButton.disabled = false; deployButton.classList.add('active'); // Make the button active }; reader.onerror = error => console.error("Error reading file:", error); reader.readAsDataURL(file); } function updateFileList() { const fileList = document.getElementById('fileList'); fileList.innerHTML = '<h3>Encoded Files:</h3>'; encodedFiles.forEach((file, index) => { fileList.innerHTML += ` <div class="file-item"> <span>${file.name} (${formatBytes(file.size)})</span> <button onclick="removeFile(${index})">Remove</button> </div> `; }); saveButton.disabled = encodedFiles.length === 0; } function updateTotalSize() { const totalSize = encodedFiles.reduce((sum, file) => sum + file.size, 0); messageDiv.innerHTML = `Total Size: ${formatBytes(totalSize)}`; } function formatBytes(bytes, decimals = 2) { if (bytes === 0) return '0 Bytes'; const k = 1024; const dm = decimals < 0 ? 0 : decimals; const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB']; const i = Math.floor(Math.log(bytes) / Math.log(k)); return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i]; } function removeFile(index) { encodedFiles.splice(index, 1); updateFileList(); updateTotalSize(); deployButton.disabled = encodedFiles.length === 0; if (encodedFiles.length === 0) { deployButton.classList.remove('active'); // Make the button inactive } } function saveJsonFile() { if (encodedFiles.length === 0) { alert('No files have been encoded yet.'); return; } const encoded = { name: "EncodedFiles", files: encodedFiles }; const jsonString = JSON.stringify(encoded, null, 2); const blob = new Blob([jsonString], { type: 'application/json' }); const a = document.createElement('a'); a.href = URL.createObjectURL(blob); a.download = 'encoded_files.json'; a.click(); } const dropZone = document.getElementById('dropZone'); const fileInput = document.getElementById('fileInput'); dropZone.ondragover = (e) => { e.preventDefault(); dropZone.classList.add('dragover'); }; dropZone.ondragleave = () => { dropZone.classList.remove('dragover'); }; dropZone.ondrop = handleDrop; dropZone.onclick = () => fileInput.click(); fileInput.onchange = (e) => { for (let file of e.target.files) { encodeFile(file); } }; fileSelectButton.addEventListener('click', () => { const input = document.createElement('input'); input.type = 'file'; input.multiple = true; input.addEventListener('change', e => { Array.from(e.target.files).forEach(encodeFile); updateTotalSize(); }); input.click(); }); folderSelectButton.addEventListener('click', () => { const input = document.createElement('input'); input.type = 'file'; input.webkitdirectory = true; input.addEventListener('change', e => { Array.from(e.target.files).forEach(encodeFile); updateTotalSize(); }); input.click(); }); // Download functionality let globalJsonData = null; async function fetchAndDisplayFiles() { const txid = document.getElementById('txidInput').value.trim(); const errorDiv = document.getElementById('error'); const loadingDiv = document.getElementById('loading'); const virtualFolder = document.getElementById('virtualFolder'); errorDiv.textContent = ''; virtualFolder.innerHTML = ''; loadingDiv.style.display = 'block'; if (!txid) { errorDiv.textContent = 'Please enter a valid transaction ID'; loadingDiv.style.display = 'none'; return; } try { const response = await fetch(`https://api.whatsonchain.com/v1/bsv/main/tx/${txid}/hex`); if (!response.ok) { throw new Error('Failed to fetch data from WhatsOnChain API'); } const rawData = await response.text(); processRawData(rawData); } catch (error) { errorDiv.textContent = 'Error: ' + error.message; } finally { loadingDiv.style.display = 'none'; } } function processRawData(content) { const errorDiv = document.getElementById('error'); const virtualFolder = document.getElementById('virtualFolder'); errorDiv.textContent = ''; try { const opReturnIndex = content.indexOf('6a4e'); if (opReturnIndex === -1) throw new Error('OP_RETURN marker not found'); const hexData = content.substring(opReturnIndex + 4); const asciiData = hexToAscii(hexData); const jsonStartIndex = asciiData.indexOf('{'); const jsonEndIndex = asciiData.lastIndexOf('}') + 1; if (jsonStartIndex === -1 || jsonEndIndex === 0) { throw new Error('No valid JSON found in the decoded data'); } const jsonString = asciiData.substring(jsonStartIndex, jsonEndIndex); globalJsonData = JSON.parse(jsonString); createVirtualFolder(globalJsonData); } catch (err) { errorDiv.textContent = `Error extracting JSON: ${err.message}`; } } function hexToAscii(hex) { let ascii = ''; for (let i = 0; i < hex.length; i += 2) { ascii += String.fromCharCode(parseInt(hex.substr(i, 2), 16)); } return ascii; } function createVirtualFolder(data) { const virtualFolder = document.getElementById('virtualFolder'); const downloadZipButton = document.getElementById('downloadZipButton'); virtualFolder.innerHTML = `<h2>Virtual Folder: ${data.name}</h2>`; if (data.files && Array.isArray(data.files)) { data.files.forEach((file, index) => { const fileItem = document.createElement('div'); fileItem.className = 'file-item'; fileItem.innerHTML = ` <input type="checkbox" id="file-${index}" value="${index}"> <label for="file-${index}">${file.name} (${file.type}, ${file.size} bytes)</label> <button onclick="downloadFile(${index})">Download</button> ${file.type.startsWith('image/') || file.type.startsWith('video/') || file.type.startsWith('audio/') ? `<button onclick="toggleDisplayFile(${index})">Display</button>` : ''} <div id="display-${index}" style="display: none;"></div> `; virtualFolder.appendChild(fileItem); }); downloadZipButton.style.display = 'block'; } else { downloadZipButton.style.display = 'none'; } } function toggleDisplayFile(index) { const file = globalJsonData.files[index]; const displayDiv = document.getElementById(`display-${index}`); if (displayDiv.style.display === 'none') { displayDiv.innerHTML = ''; if (file.type.startsWith('image/')) { const img = document.createElement('img'); if (/^[0-9A-Fa-f]+$/.test(file.content)) { const byteArray = new Uint8Array(file.content.match(/.{1,2}/g).map(byte => parseInt(byte, 16))); const blob = new Blob([byteArray], { type: file.type }); img.src = URL.createObjectURL(blob); } else { img.src = `data:${file.type};base64,${file.content}`; } displayDiv.appendChild(img); } else if (file.type.startsWith('video/')) { const video = document.createElement('video'); video.controls = true; if (/^[0-9A-Fa-f]+$/.test(file.content)) { const byteArray = new Uint8Array(file.content.match(/.{1,2}/g).map(byte => parseInt(byte, 16))); const blob = new Blob([byteArray], { type: file.type }); video.src = URL.createObjectURL(blob); } else { video.src = `data:${file.type};base64,${file.content}`; } displayDiv.appendChild(video); } else if (file.type.startsWith('audio/')) { const audio = document.createElement('audio'); audio.controls = true; if (/^[0-9A-Fa-f]+$/.test(file.content)) { const byteArray = new Uint8Array(file.content.match(/.{1,2}/g).map(byte => parseInt(byte, 16))); const blob = new Blob([byteArray], { type: file.type }); audio.src = URL.createObjectURL(blob); } else { audio.src = `data:${file.type};base64,${file.content}`; } displayDiv.appendChild(audio); } displayDiv.style.display = 'block'; } else { displayDiv.style.display = 'none'; } } function downloadFile(index) { const file = globalJsonData.files[index]; let content; if (/^[0-9A-Fa-f]+$/.test(file.content)) { content = new Uint8Array(file.content.match(/.{1,2}/g).map(byte => parseInt(byte, 16))); } else { content = atob(file.content); } const blob = new Blob([content], { type: file.type }); const a = document.createElement('a'); a.href = URL.createObjectURL(blob); a.download = file.name; a.click(); } async function downloadZip() { try { const zip = new JSZip(); const checkboxes = document.querySelectorAll('input[type="checkbox"]:checked'); for (const checkbox of checkboxes) { const index = parseInt(checkbox.value); const file = globalJsonData.files[index]; let content; if (/^[0-9A-Fa-f]+$/.test(file.content)) { content = new Uint8Array(file.content.match(/.{1,2}/g).map(byte => parseInt(byte, 16))); } else { content = atob(file.content); } zip.file(file.name, content, { binary: true }); } const zipBlob = await zip.generateAsync({ type: 'blob' }); const a = document.createElement('a'); a.href = URL.createObjectURL(zipBlob); a.download = 'OnChainFiles.zip'; a.click(); } catch (error) { console.error('Error creating or downloading zip file:', error); alert('Error creating or downloading zip file.'); } } // Fetch and deploy files async function deployFiles() { // Fetch the ChainDrivePay program from the blockchain const txid = '50f6420fc5affd68714f3ae74a861b672d9a3f348bfe9a21e706a24b4e7ac269'; try { const response = await fetch(`https://api.whatsonchain.com/v1/bsv/main/tx/${txid}/hex`); if (!response.ok) { throw new Error('Failed to fetch transaction data from WhatsOnChain API'); } const rawData = await response.text(); const scriptHex = rawData.slice(rawData.indexOf('6a') + 4); const htmlContent = hexToUtf8(scriptHex); injectChainDrivePay(htmlContent); } catch (error) { console.error('Error fetching ChainDrivePay:', error); deployStatus.innerHTML = 'Error fetching ChainDrivePay'; return; } } function hexToUtf8(hex) { const bytes = []; for (let c = 0; c < hex.length; c += 2) { bytes.push(parseInt(hex.substr(c, 2), 16)); } return new TextDecoder().decode(new Uint8Array(bytes)); } function injectChainDrivePay(htmlContent) { const container = document.createElement('div'); container.innerHTML = htmlContent; document.body.appendChild(container); // Execute scripts in the fetched content const scripts = container.getElementsByTagName('script'); for (let script of scripts) { const newScript = document.createElement('script'); newScript.textContent = script.textContent; document.body.appendChild(newScript); } deployStatus.innerHTML = 'ChainDrivePay loaded successfully.'; } function saveTxidToHistory(txid, date) { const history = JSON.parse(localStorage.getItem('txidHistory')) || []; history.push({ txid, date }); localStorage.setItem('txidHistory', JSON.stringify(history)); } function loadTxidHistory() { const history = JSON.parse(localStorage.getItem('txidHistory')) || []; return history; } function showTxidHistory() { const history = loadTxidHistory(); const historyContent = history.map(item => `<p>${item.date}: ${item.txid}</p>`).join(''); document.getElementById('txidHistoryContent').innerHTML = historyContent; document.getElementById('txidHistoryDialog').style.display = 'block'; } function closeTxidHistory() { document.getElementById('txidHistoryDialog').style.display = 'none'; } </script> </body> </html>
    https://whatsonchain.com/tx/undefined
  • jMœÓ{"name":"EncodedFiles","files":[{"name":"Screenshot 1.webp","size":40548,"type":"image/webp","content":"UklGRlyeAABXRUJQVlA4WAoAAAAgAAAAfwcAcwMASUNDUMgBAAAAAAHIAAAAAAQwAABtbnRyUkdCIFhZWiAH4AABAAEAAAAAAABhY3NwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA9tYAAQAAAADTLQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlkZXNjAAAA8AAAACRyWFlaAAABFAAAABRnWFlaAAABKAAAABRiWFlaAAABPAAAABR3dHB0AAABUAAAABRyVFJDAAABZAAAAChnVFJDAAABZAAAAChiVFJDAAABZAAAAChjcHJ0AAABjAAAADxtbHVjAAAAAAAAAAEAAAAM
    https://whatsonchain.com/tx/undefined
    Partial data displayed. To get full data click on 'Raw Tx' button above.
  • j{"test": "data"}
    https://whatsonchain.com/tx/undefined
  • jM>B<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Golf Scorecard with Signatures</title> <style> body { font-family: Arial, sans-serif; margin: 0; padding: 0; display: flex; justify-content: center; background-color: #f4f4f4; height: 100vh; overflow-y: auto; }
    https://whatsonchain.com/tx/undefined
    Partial data displayed. To get full data click on 'Raw Tx' button above.
  • jNŸÕdata:image/webp;base64,UklGRhzgAgBXRUJQVlA4WAoAAAAgAAAA/wMA/wMASUNDUMgBAAAAAAHIAAAAAAQwAABtbnRyUkdCIFhZWiAH4AABAAEAAAAAAABhY3NwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA9tYAAQAAAADTLQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlkZXNjAAAA8AAAACRyWFlaAAABFAAAABRnWFlaAAABKAAAABRiWFlaAAABPAAAABR3dHB0AAABUAAAABRyVFJDAAABZAAAAChnVFJDAAABZAAAAChiVFJDAAABZAAAAChjcHJ0AAABjAAAADxtbHVjAAAAAAAAAAEAAAAMZW5VUwAAAAgAAAAcAHMAUgBHAEJYWVogAAAAAAAAb6IAADj1AAADkFhZWiAAAAAAAABimQAAt4UAABj
    https://whatsonchain.com/tx/undefined
    Partial data displayed. To get full data click on 'Raw Tx' button above.
  • jM>õ<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Screenshot 2024-06-24 165803.png</title> <style> body { margin: 0; padding: 0; display: flex; justify-content: center; align-items: center; min-height: 100vh; background: #fff; } img { max-width: 100%; heigh
    https://whatsonchain.com/tx/undefined
    Partial data displayed. To get full data click on 'Raw Tx' button above.
  • jMí{"name":"EncodedFiles","files":[{"name":"reactcomponents.html","size":5854,"type":"text/html","content":"Ly8gUVIgQ29kZSBDb21wb25lbnQKY29uc3QgUVJDb2RlRGlzcGxheSA9ICh7IGRhdGEsIHNpemUgPSAyMDAgfSkgPT4gewogICAgY29uc3QgcXJSZWYgPSBSZWFjdC51c2VSZWYoKTsKCiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4gewogICAgICAgIGlmIChxclJlZi5jdXJyZW50KSB7CiAgICAgICAgICAgIHFyUmVmLmN1cnJlbnQuaW5uZXJIVE1MID0gJyc7CiAgICAgICAgICAgIG5ldyBRUkNvZGUocXJSZWYuY3VycmVudCwgewogICAgICAgICAgICAgICAgdGV4dDogZGF0YSwKICAgICAgICAgICAgICAgIHdpZHR
    https://whatsonchain.com/tx/undefined
    Partial data displayed. To get full data click on 'Raw Tx' button above.
Total Output:
0.00022932 BSV

2 Outputs

Total Output:
0.00022929 BSV