Settings

Blockchain
Network
Unit
Language
Theme
Sound New Block

Transaction

4302af41e8ff8b86ecca2e6189bf3f4fef35d9dff0311ffc4214dbccad210c93
Timestamp (utc)
2020-10-07 19:57:47
Fee Paid
0.00002618 BSV
(
0.00049112 BSV
-
0.00046494 BSV
)
Fee Rate
500.1 sat/KB
Version
1
Confirmations
339,835
Size Stats
5,234 B

3 Outputs

Total Output:
0.00046494 BSV
  • jrun b1b605103eMp{"in":0,"ref":["native://Jig","f745bdb3909cdf39e3e8c961b9d37dbc9cd07a1ac8d7c37c696d5a8ff1ffb648_o2"],"out":["a54d81b6a537d13b901e80b813eefc92ac6d4c80a7abecaa0c8960b787b5a1ad"],"del":[],"cre":["mr9zdspVwjQBCsRQ464ct8M2wJgaL7CcaQ"],"exec":[{"op":"DEPLOY","data":["class RevokerContract extends Jig {\n init() {\n this.classname = \"RevokerContract: \"; //\n\n this.is_frozen = false;\n this.is_revoked = false;\n this.is_backedup = false;\n this.revoked_state = \"\";\n this.revoke_count = null;\n this.new_token_contract = null;\n } // if we add the send then we must absolutely send it immediately after creation\n // otherwise a hacker of the token contract would be able to send it to himself and take full control\n\n\n send(to, timestamp) {\n const function_id = this.classname + \"send(): \"; //\n\n if (!timestamp) throw function_id + \"timestamp missing: \" + timestamp;\n\n this._checkTimestamp(timestamp); //\n\n\n this.owner = to; // there is already internal run's checks on bitcoin addresses for owner\n }\n\n backup(new_token_contract, timestamp) {\n const function_id = this.classname + \"backup(): \"; //\n\n this._checkContractState();\n\n this._checkNewTokenContract(new_token_contract);\n\n if (!timestamp) throw function_id + \"timestamp missing: \" + timestamp;\n\n this._checkTimestamp(timestamp);\n\n this.timestamp = timestamp;\n this.new_token_contract = new_token_contract;\n this.is_backedup = true;\n this.revoked_state = \"backed-up\";\n }\n\n freeze(timestamp) {\n const function_id = this.classname + \"freeze(): \"; //\n\n this._checkContractState();\n\n if (this.is_frozen) throw function_id + \"contract is already frozen\";\n if (!timestamp) throw function_id + \"timestamp missing: \" + timestamp;\n\n this._checkTimestamp(timestamp); // 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\n this.timestamp = timestamp;\n this.is_frozen = true;\n this.revoked_state = \"frozen\";\n }\n\n revoke(revoke_count, new_token_contract, timestamp) {\n const function_id = this.classname + \"revoke(): \"; //\n\n this._checkContractState();\n\n this._checkRevokeCount(revoke_count);\n\n this._checkNewTokenContract(new_token_contract);\n\n if (!timestamp) throw function_id + \"timestamp missing: \" + timestamp;\n\n this._checkTimestamp(timestamp);\n\n this.timestamp = timestamp;\n this.revoke_count = revoke_count;\n this.new_token_contract = new_token_contract;\n this.is_revoked = true;\n this.revoked_state = \"revoked\";\n }\n /*\r\n isUnused(){ // fast way to make sure the revoke contract was never used yet\r\n if(this.is_frozen == false && this.is_revoked == false && this.is_backedup == false) return true\r\n else return false\r\n }\r\n */\n\n\n _checkContractState() {\n const function_id = this.classname + \"_checkContractState(): \";\n if (this.is_revoked) throw function_id + \"contract is already revoked\";\n if (this.is_backedup) throw function_id + \"contract is already backed up\"; //if(this.is_frozen) throw function_id+\"contract is already frozen\" // don't check freeze so we can backup or revoke after freeze!\n }\n\n _checkRevokeCount(revoke_count) {\n // check positive integer\n const function_id = this.classname + \": _checkRevokeCount(): \";\n if (typeof revoke_count !== 'number') throw function_id + 'revoke_count is not a number : ' + revoke_count; // throw gives better error trace than expect()\n\n if (!(revoke_count > 0)) throw new Error(function_id + 'revoke_count must be positive : ' + revoke_count);\n if (revoke_count > Number.MAX_SAFE_INTEGER) throw new Error(function_id + 'revoke_count too large : ' + revoke_count);\n if (!Number.isInteger(revoke_count)) throw function_id + 'revoke_count must be an integer : ' + revoke_count;\n }\n\n _checkNewTokenContract(new_token_contract) {\n const function_id = this.classname + \": _checkNewTokenContract(): \";\n expect(new_token_contract).toBeObject(function_id + ': bad new_token_contract type, should be Object, is ' + typeof new_token_contract);\n expect(new_token_contract).toBeInstanceOf(Jig, function_id + ': bad new_token_contract type, should be instance of Jig');\n }\n\n _checkTimestamp(timestamp) {\n const function_id = this.classname + \": _checkTimestamp(): \";\n if (!timestamp) throw function_id + \"timestamp missing: \" + timestamp;\n\n try {\n this._checkRevokeCount(timestamp); // applies as well to timestamp: positive integer\n\n } catch (e) {\n throw function_id + e;\n }\n\n if (!(timestamp > 1600939295117)) throw function_id + ': timestamp must be older than 1600939295117 : ' + timestamp; // make sure the timestamp here is in ms!!\n }\n\n}",{"deps":{"Jig":{"$jig":0},"expect":{"$jig":1}},"sealed":true}]}]}
    https://whatsonchain.com/tx/4302af41e8ff8b86ecca2e6189bf3f4fef35d9dff0311ffc4214dbccad210c93