Settings

Blockchain
Network
Unit
Language
Theme
Sound New Block

Transaction

04d89e8a1174fe4eca69e3a2fd237f5895b7d04459784a5fb04fbcd51a99327d
Timestamp (utc)
2021-11-18 20:46:04
Fee Paid
0.00003773 BSV
(
0.11383193 BSV
-
0.11379420 BSV
)
Fee Rate
500 sat/KB
Version
1
Confirmations
266,059
Size Stats
7,543 B

3 Outputs

Total Output:
0.11379420 BSV
  • jrunPOKM|{"in":0,"ref":["f6c36a3ffb0a876ea5ca92178eedec0530e537ee5f728d06b9708b5665bb70dc_o1","f97d4ac2a3d6f5ed09fad4a4f341619dc5a3773d9844ff95c99c5d4f8388de2f_o1"],"out":["1fdcb989268c598636bd63dbc56e3bdd1c8505af31f41902562fc67698a90898"],"del":[],"cre":["modopDhAN5GArLxEbBjWTPByqqzThLhL1C"],"exec":[{"op":"DEPLOY","data":["class PokNFT extends TokenPowNFT {\n\n init(author, metadata) {\n if (caller !== this.constructor) { // minting\n throw new Error('FYI: Must create using mint()')\n } else {\n super.init(undefined, author, metadata)\n }\n }\n\n\n /**\n * \n * @returns Number\n */\n getNumber() {\n return this.metadata.editionNo\n }\n\n\n /**\n * \n * @param {String} name \n */\n setName(name) {\n PokNFT.$validateText(name, 'name')\n this.name = name\n }\n\n\n /**\n * \n * @returns String\n */\n getName() {\n return this.name\n }\n\n\n /**\n * \n * @param {String} description \n */\n setDescription(description) {\n PokNFT.$validateText(description)\n this.metadata.description = description\n }\n\n\n /**\n * \n * @returns String\n */\n getDescription() {\n return this.metadata.description\n }\n\n\n /**\n * \n * @param {String} image // `b://${imageTxid}_o${imageBout}`\n */\n setImage(image) {\n PokNFT.$valdiateImage(image)\n this.metadata.image = image\n }\n\n\n /**\n * \n * @returns String\n */\n getImage() {\n return this.metadata.image\n }\n\n\n /**\n * \n * @param { \n * {\n * percentageFee: Number; // 0 - 10 %\n * payoutAddress: String;\n * }\n * } royalty \n */\n setRoyalty(royalty) {\n PokNFT.$validateRoyalty(royalty)\n this.metadata.percentage = royalty.percentageFee\n this.metadata.feeowneraddress = royalty.payoutAddress\n }\n\n\n /**\n * \n * @returns {\n * {\n * percentageFee: Number;\n * payoutAddress: String;\n * }\n * }\n */\n getRoyalty() {\n return {\n percentageFee: this.metadata.percentage,\n payoutAddress: this.metadata.feeowneraddress\n }\n }\n\n\n /**\n * \n * @param {\n * { \n * [key: String]: {\n * label: String;\n * type: Number | String | Boolean | Null | Undefined | Object | Array; \n * value: String;\n * hidden: Boolean;\n * } \n * }\n * } traits \n */\n setTraits(traits) {\n PokNFT.$validateTraits(traits)\n this.metadata.traits = traits\n }\n\n\n /**\n * \n * @returns Traits\n */\n getTraits() {\n return this.metadata.traits\n }\n\n\n /**\n * \n * @param {\n * {\n * name: String;\n * author: String;\n * description: String;\n * image: `b://${imageTxid}_o${imageBout}`;\n * royalty: {\n * percentageFee: Number; // 0 - 10 %\n * payoutAddress: String;\n * }\n * }\n * } props \n * @param {Traits} traits \n * @returns PokNFT\n */\n static mint(props = {}, traits = {}) {\n\n if (this.constructor === PokNFT) {\n throw new Error(\"FYI: Abstract method cannot be called\");\n }\n\n let { name, author, description, emoji, image, royalty } = props\n\n author = author || this.metadata.author\n description = description || this.metadata.description\n royalty = royalty || this.metadata.royalty\n\n this.$validateText(name)\n this.$validateText(author)\n this.$validateText(description)\n this.$validateImage(image)\n this.$validateRoyalty(royalty)\n\n this.total++\n\n const metadata = {\n editionNo: this.total,\n emoji: emoji || this.metadata.emoji\n }\n\n const nft = new this(name, author, metadata)\n\n nft.setName(name)\n nft.setDesription(description)\n nft.setImage(image)\n nft.setTraits(traits || this.metadata.traits)\n nft.setRoyalty(royalty)\n\n return nft\n }\n\n\n static $validateText(text, label) {\n try {\n expect(text).toBeString()\n expect(text.length > 0).toBe(true)\n } catch (error) {\n this.$transformErrorMessage(error, label)\n }\n }\n\n\n static $validateTraits(traits) {\n expect(traits).toBeObject()\n for (let trait of traits) {\n expect(trait.label).toBeString()\n expect(trait.label.length > 0).toBe(true)\n expect(trait.value).toBeString()\n expect(trait.hidden).toBeBoolean()\n expect([\n 'Number',\n 'String',\n 'Boolean',\n 'Null',\n 'Undefined',\n 'Object',\n 'Array'\n ].includes(trait.type)).toBe(true)\n }\n }\n\n\n static $validateImage(image) {\n const regex = /^b:\\/\\/[a-fA-F0-9]{64}_o[0-9]+/\n expect(image).toBeString()\n expect(regex.test(image)).toBe(true)\n }\n\n\n static $validateRoyalty(royalty) {\n try {\n expect(royalty).toBeObject()\n } catch (error) {\n this.$transformErrorMessage(error, 'royalty')\n }\n try {\n expect(royalty.percentage).toBeNumber()\n expect(royalty.percentage).toBeGreaterThanOrEqualTo(0)\n expect(royalty.percentage).toBeLessThanOrEqualTo(10)\n } catch (error) {\n this.$transformErrorMessage(error, 'royalty')\n }\n try {\n expect(royalty.payoutAddress).toBeString()\n } catch (error) {\n this.$transformErrorMessage(error, 'royalty')\n }\n\n\n }\n\n static $transformErrorMessage(error, label) {\n const message = error.message.replace(`expected value', 'expected value of ${label}`)\n throw new Error(message)\n }\n\n }",{"deps":{"TokenPowNFT":{"$jig":0},"expect":{"$jig":1}},"metadata":{"app":"POK","author":"POK","description":"POK NFT Standard","emoji":"🐟","name":"PokNFT","royalty":{"payoutAddress":"","percentageFee":0},"traits":{}},"sealed":false,"total":0}]}]}
    https://whatsonchain.com/tx/04d89e8a1174fe4eca69e3a2fd237f5895b7d04459784a5fb04fbcd51a99327d