Settings

Blockchain
Network
Unit
Language
Theme
Sound New Block

Transaction

893489d389f5175dd6b0ffe6d89fd31a893dea02ba92efd2cc1349937d002de0
Timestamp (utc)
2020-09-17 11:19:18
Fee Paid
0.00002655 BSV
(
0.00692842 BSV
-
0.00690187 BSV
)
Fee Rate
500.1 sat/KB
Version
1
Confirmations
345,965
Size Stats
5,308 B

5 Outputs

Total Output:
0.00690187 BSV
  • jrunM{"in":0,"ref":["native://Jig"],"out":["c7b0ac3d287f425d985de31f0bd5aad9d4ddc8f4884faaf02483a7dd668f27dc","0a802cfb75a77a1c37dc396a4f18be907bfcdd2567276284230e1f6036a28a0a","415843dfaa98e89d289da8776a2c6b62f876e4e53b07a387b25c4fa17959920e"],"del":[],"cre":["n2xP3gNfroNdffvaTGsrPyceahMaU8BkXh","n2xP3gNfroNdffvaTGsrPyceahMaU8BkXh","n2xP3gNfroNdffvaTGsrPyceahMaU8BkXh"],"exec":[{"op":"DEPLOY","data":["class Blacklist extends Jig {\n init() {\n this.list = [];\n this.list_action_numbers = [];\n this.classname = \"Blacklist: \"; //for freeze\n\n this.is_frozen = false;\n }\n\n linkAdminCounter(admincounter) {\n if (this.admincounter) throw this.classname + \": already an admincounter linked \" + this.admincounter;\n this.admincounter = admincounter;\n }\n\n add(address) {\n const function_id = this.classname + \"add(): \"; // checks\n\n expect(this.owner).toBe(this.constructor.owner, function_id + \" Only \" + this.classname + \"'s owner may manage blacklist\");\n expect(address).toBeString(function_id + ': address to blacklist must be a string');\n if (address == this.owner) throw function_id + \": you cannot blacklist your own administration address\";\n if (this.list.includes(address)) throw function_id + \": address is already in blacklist\";\n\n if (!this.admincounter) {\n this.action_count = 0;\n console.log(function_id + \" no admincounter contract found, will set action# to 0 by default\"); // TODO MAKE THIS A THROW ONCE IT WORKS\n } else {\n this.action_count = this.admincounter.get_count();\n }\n\n this.list_action_numbers.push(this.action_count); // doublon for practicality\n\n this.list.push(address);\n } // allowing remove introduces a security breach if an hacker can unblacklist his address and send some of his tokens to others\n //remove(address){\n // expect(address).toBeString(this.classname+': address to blacklist must be a string')\n // if(!this.list.has(address)) throw this.classname+\": address to remove is not in blacklist\" \n // this.list.delete(address)\n //}\n\n\n freeze() {\n if (this.is_frozen == true) throw this.classname + \"freeze(): contract already frozen\"; // freezes all coins but doesn't give a new contract to exchange to\n // useful to end the network and/or reissue tokens on a new protocol after freezing it\n\n this.is_frozen = true;\n }\n\n}",{"deps":{"expect":{"$jig":2},"Jig":{"$jig":0}}},"function expect(t){let e=!1;const n=t=>{if(\"object\"!=typeof t||!t)return t;try{return JSON.stringify(t)}catch(e){return t.toString()}};function r(r,o,i){if(e?r:!r)throw new Error(i||`expected value${e?\" not\":\"\"} to be ${o} but was ${n(t)}`)}function o(t,e){if(t===e)return!0;if(typeof t!=typeof e)return!1;if(\"object\"!=typeof t)return!1;if(null===t||null===e)return!1;if(Object.getPrototypeOf(t)!==Object.getPrototypeOf(e))return!1;if(Object.keys(t).length!==Object.keys(e).length)return!1;if(!Object.keys(t).every(n=>o(t[n],e[n])))return!1;if(t instanceof Set){if(t.size!==e.size)return!1;if(!o(Array.from(t.entries()),Array.from(e.entries())))return!1}if(t instanceof Map){if(t.size!==e.size)return!1;if(!o(Array.from(t.entries()),Array.from(e.entries())))return!1}return!0}function i(t,e){if(\"function\"!=typeof t)return!1;if(\"function\"!=typeof e)return!1;for(;t;)if((t=Object.getPrototypeOf(t))===e)return!0;return!1}return{get not(){return e=!e,this},toBe:(e,o)=>r(t===e,\"\"+n(e),o),toEqual:(e,i)=>r(o(t,e),\"equal to \"+n(e),i),toBeInstanceOf:(e,n)=>r(t&&t instanceof e,\"an instance of \"+(e&&e.name),n),toBeDefined:e=>r(void 0!==t,\"defined\",e),toBeNull:e=>r(null===t,\"null\",e),toBeNumber:e=>r(\"number\"==typeof t,\"a number\",e),toBeInteger:e=>r(Number.isInteger(t),\"an integer\",e),toBeLessThan:(e,n)=>r(t<e&&\"number\"==typeof t&&\"number\"==typeof e,\"less than \"+e,n),toBeLessThanOrEqualTo:(e,n)=>r(t<=e&&\"number\"==typeof t&&\"number\"==typeof e,\"less than or equal to \"+e,n),toBeGreaterThan:(e,n)=>r(t>e&&\"number\"==typeof t&&\"number\"==typeof e,\"greater than \"+e,n),toBeGreaterThanOrEqualTo:(e,n)=>r(t>=e&&\"number\"==typeof t&&\"number\"==typeof e,\"greater than or equal to \"+e,n),toBeBoolean:e=>r(\"boolean\"==typeof t,\"a boolean\",e),toBeString:e=>r(\"string\"==typeof t,\"a string\",e),toBeObject:e=>r(t&&\"object\"==typeof t,\"an object\",e),toBeArray:e=>r(Array.isArray(t),\"an array\",e),toBeSet:e=>r(t instanceof Set,\"a set\",e),toBeMap:e=>r(t instanceof Map,\"a map\",e),toBeUint8Array:e=>r(t instanceof Uint8Array,\"a uint8array\",e),toBeClass:e=>r(\"function\"==typeof t&&t.toString().startsWith(\"class\"),\"a class\",e),toBeFunction:e=>r(\"function\"==typeof t&&!t.toString().startsWith(\"class\"),\"a function\",e),toBeJigClass:e=>r(\"function\"==typeof t&&t.toString().startsWith(\"class\")&&i(t,Jig),\"a jig class\",e),toExtendFrom:(e,n)=>r(i(t,e),\"an extension of \"+(e&&e.name),n)}}",{"deps":{"Jig":{"$dup":["1","deps","Jig"]}}}]},{"op":"NEW","data":[{"$jig":1},[]]}]}
    https://whatsonchain.com/tx/893489d389f5175dd6b0ffe6d89fd31a893dea02ba92efd2cc1349937d002de0