Settings

Blockchain
Network
Unit
Language
Theme
Sound New Block

Transaction

ecf86f8ea08b4a81c751d970733a12c0b2c9119b99f41d0574e4e27bf5c0c7f7
Timestamp (utc)
2021-05-20 06:00:01
Fee Paid
0.00003865 BSV
(
0.00031555 BSV
-
0.00027690 BSV
)
Fee Rate
500.1 sat/KB
Version
1
Confirmations
298,954
Size Stats
7,727 B

8 Outputs

Total Output:
0.00027690 BSV
  • jrunM{"in":0,"ref":["7d14c868fe39439edffe6982b669e7b4d3eb2729eee7c262ec2494ee3e310e99_o1","1f0abf8d94477b1cb57629d861376616f6e1d7b78aba23a19da3e6169caf489e_o1"],"out":["64ce1537ad2e0480a24de5163535f016fee869baa6d8caa821bc15505e197d7a","bf86819fc200a2c6345eb75c605541e0c7e341e649d577f4df929fafea4b13af","a755fb34a703aa9fe851f0c66fb0862a265cfd1faaaabfd80ca17f2b326bdcb5","8d67a11cce0015fc43bf66b73ff704516138438b82774b4d40b9f9ed66a97c03"],"del":[],"cre":["mjsxvTLNM5sQn8yj3qdmpbsa1W6PYoSu5v","mjsxvTLNM5sQn8yj3qdmpbsa1W6PYoSu5v","mjsxvTLNM5sQn8yj3qdmpbsa1W6PYoSu5v","mjsxvTLNM5sQn8yj3qdmpbsa1W6PYoSu5v"],"exec":[{"op":"DEPLOY","data":["class Lillypad extends Token {\n init(amount, satoshis, owner) {\n const extended = this.constructor !== Lillypad\n if (!extended) throw new Error('Lillypad must be extended')\n Lillypad.checkSats(satoshis);\n this.satoshis = satoshis;\n super.init(amount, owner);\n }\n\n static mint(hashes, satoshis) {\n if (Array.isArray(hashes) === false) throw new Error(\"hashes must be an array.\");\n Lillypad.checkSats(satoshis);\n\n if (this.totalSupply !== 0) {\n if ((this.supply + this.dropAmount) > this.totalSupply) throw new Error(\"Cannot exceed total supply.\");\n let left = this.totalSupply - (this.supply + (this.dropAmount * hashes.length));\n if (left < hashes.length) hashes = hashes.slice(left / this.dropAmount);\n }\n\n let tokens = [];\n for (let i = 0; i < hashes.length; i++) {\n this.supply += this.dropAmount\n let target = this.getTarget(\"21e8\", this.getDifficulty());\n tokens.push(new this(this.dropAmount, satoshis, new Lock21e8MS(hashes[i], target)));\n }\n return tokens;\n }\n\n back(satoshis) {\n Lillypad.checkSats(satoshis);\n this.satoshis = satoshis;\n }\n\n drop(amount, satoshis, sha256, target) {\n Lillypad.checkSats(satoshis);\n if (this.amount === amount) {\n if (this.owner instanceof Lock1404) this.satoshis = satoshis;\n this.owner = new Lock21e8MS(sha256, target);\n } else if (this.amount > amount) {\n this.amount -= amount;\n this.satoshis -= satoshis;\n return new this.constructor(amount, satoshis, new Lock21e8MS(sha256, target));\n } else {\n throw new Error('Not enough funds');\n }\n }\n\n send(to, amount = this.amount, satoshis = 0) {\n Lillypad.checkSats(satoshis);\n if (this.amount === amount) {\n this.satoshis = satoshis;\n this.owner = new Lock1404(to);\n } else if (this.amount > amount) {\n this.amount -= amount;\n this.satoshis -= satoshis;\n return new this.constructor(amount, satoshis, new Lock1404(to));\n } else {\n throw new Error('Not enough funds');\n }\n }\n\n static getDifficulty() {\n let count = this.supply / this.dropAmount;\n let diff = 0;\n if (count >= 1000 && count < 10000) {\n diff = 1;\n } else if (count >= 10000 && count < 100000) {\n diff = 2;\n } else if (count >= 100000 && count < 1000000) {\n diff = 3;\n } else if (count >= 1000000 && count < 10000000) {\n diff = 4;\n } else if (count >= 10000000) {\n diff = 5;\n }\n return diff;\n }\n\n static getTarget(magicnumber, diff) {\n for (let i = 0; i < diff; i++) {\n if (diff === 0)\n break;\n magicnumber = magicnumber.concat(\"00\");\n }\n return magicnumber;\n }\n\n static move(to) {\n this.owner = to;\n }\n\n static changeFeeReceiver(to) {\n let reHex = /^[0-9a-fA-F]+$/;\n if (reHex.test(to) !== true) throw new Error(\"Address must be in hex format.\");\n if (to.length === 42) to = to.slice(2);\n if (to.length !== 40) throw new Error('Invalid Address Length.');\n this.feeReceiver = to;\n }\n\n static changeIcon(o = { emoji: null }) {\n this.icon = o;\n }\n\n static changeSymbol(s = \"\") {\n this.symbol = s;\n }\n\n static checkSats(amount) {\n if (typeof amount !== 'number') throw new Error('amount is not a number')\n if (!Number.isInteger(amount)) throw new Error('amount must be an integer')\n if (amount < 0) throw new Error('amount must not be negative')\n if (amount > Number.MAX_SAFE_INTEGER) throw new Error('amount too large')\n }\n}",{"deps":{"Lock1404":{"$jig":3},"Lock21e8MS":{"$jig":5},"Token":{"$jig":0}},"dropAmount":0,"totalSupply":0,"version":5},"class Lock1404 {\n constructor(to) {\n let reHex = /^[0-9a-fA-F]+$/;\n if (reHex.test(to) !== true) throw new Error(\"Address must be in hex format.\");\n if (to.length === 42) to = to.slice(2);\n if (to.length !== 40) throw new Error('Invalid Address Length.');\n this.to = to;\n }\n\n script() {\n let script = `OP_DUP OP_HASH160 ${this.to} OP_EQUALVERIFY OP_${ms.required} OP_SWAP `;\n const pubkeys = ms.validators.map(a => a.pubkey);\n for (let i = 0; i < pubkeys.length; i++) {\n script += `${pubkeys[i]} `;\n }\n script += `OP_${pubkeys.length + 1} OP_CHECKMULTISIG`;\n return asm(script);\n }\n\n domain() {\n return 1 + 73 + 1 + 73 + 1 + 73 + 1 + 32;\n }\n}",{"deps":{"asm":{"$jig":1},"ms":{"$jig":4}}},"class ms { }",{"deps":{},"required":3,"validators":[{"pubkey":"02692bdd3fbc53a708384439f5dee0892c689ec1980745236282ca162d7c6c3d9b","url":"http://test.com/sign"},{"pubkey":"033da5ecc716be0d07bd856353141b3c343be577f7d9863c171d92e6336673614c","url":"http://test.com/sign"},{"pubkey":"02fedaf896f820325a3e85392e53d68b456607c427688aaf2275d5975fae08e75b","url":"http://test.com/sign"},{"pubkey":"022a2152dc979c454e71a2f9b218c2fea3def88441eb348ba3e53a020a762c80e9","url":"http://test.com/sign"},{"pubkey":"0221974dba34636753f21e8aa5c7532d556dc5021a35d6822b52c74ace5f804d99","url":"http://test.com/sign"}]},"class Lock21e8MS {\n constructor(sha256, target) {\n let reHex = /^[0-9a-fA-F]+$/;\n //check for length and verify it's hex.\n if (sha256.length !== 64) throw new Error('sha256 is invalid length');\n if (reHex.test(sha256) !== true) throw new Error('sha256 is not hex');\n if (target.length % 2 !== 0) throw new Error('target is invalid');\n if (reHex.test(target) !== true) throw new Error('target is not hex');\n this.sha256 = sha256;\n this.target = target;\n }\n\n script() {\n const pubkeys = ms.validators.map(a => a.pubkey);\n let script = `${this.sha256} ${this.target} OP_SIZE OP_6 OP_PICK OP_SHA256 OP_SWAP OP_SPLIT OP_DROP OP_EQUALVERIFY OP_DROP OP_${ms.required} OP_SWAP `;\n for (let i = 0; i < pubkeys.length; i++) {\n script += `${pubkeys[i]} `;\n }\n script += `OP_${pubkeys.length + 1} OP_CHECKMULTISIG`;\n return asm(script);\n }\n\n domain() {\n return 1 + 73 + 1 + 73 + 1 + 73 + 1 + 32;\n }\n}",{"deps":{"asm":{"$dup":["3","deps","asm"]},"ms":{"$dup":["3","deps","ms"]}}}]}]}
    https://whatsonchain.com/tx/ecf86f8ea08b4a81c751d970733a12c0b2c9119b99f41d0574e4e27bf5c0c7f7
Total Output:
0.00027690 BSV