Settings

Blockchain
Network
Unit
Language
Theme
Sound New Block

Transaction

7c25102f77238f1ad44b6ec19a1d9ee896b9743f8a4d63b7ddb02f9568d965d4
Timestamp (utc)
2021-03-11 06:01:19
Fee Paid
0.00002547 BSV
(
0.02969033 BSV
-
0.02966486 BSV
)
Fee Rate
500.1 sat/KB
Version
1
Confirmations
312,451
Size Stats
5,092 B

4 Outputs

Total Output:
0.02966486 BSV
  • jrunMÊ{"in":0,"ref":["native://Jig","f97d4ac2a3d6f5ed09fad4a4f341619dc5a3773d9844ff95c99c5d4f8388de2f_o1","5435ae2760dc35f4329501c61c42e24f6a744861c22f8e0f04735637c20ce987_o1?berry=5de5ca0a3a67ffa2ce87a6cf242df668a6137be63426ea655793cd934a39f659&hash=13d37fd8738e4e89c2c3c081e51d0b079ef0c21273b5b09a95354ba7d204076c&version=5"],"out":["2e4981f55f758ec9f1b586da7dac03362067e061f708e8da7fb573161165c431","7d90845a14924357c5c635976e97c37b761b1cd37f90441b7ebf26bb28403eb9"],"del":[],"cre":["msnxebmCeqyh7qxUvZhAuSZe8mowNZne23","msnxebmCeqyh7qxUvZhAuSZe8mowNZne23"],"exec":[{"op":"DEPLOY","data":["class MediaItem extends Jig {\n\tinit(props) {\n\t\texpect(caller instanceof MediaDispenser).toBe(true);\n\t\tMediaItem.validateProps(props);\n\t\tthis.data = props;\n\t}\n\n\tsend(to) {\n\t\tthis.owner = to;\n\t}\n\n\tstatic validateProps(props) {\n\t\tconst {\n\t\t\tItem,\n\t\t\tItemRequired,\n\t\t\tItemContent,\n\t\t\tItemContentRequired,\n\t\t\tMedia,\n\t\t\tMediaRequired,\n\t\t} = validation;\n\n\t\tfunction entriesLoop(obj, fn) {\n\t\t\tObject\n\t\t\t\t.entries(obj)\n\t\t\t\t.forEach(fn);\n\t\t}\n\n\t\tfunction validateRequired(obj, requiredList) {\n\t\t\treturn requiredList.every(key => expect(obj[key]).toBeDefined(`Missing required property \"${key}\". Obj: ${JSON.stringify(obj)}`));\n\t\t}\n\n\t\tvalidateRequired(props, ItemRequired);\n\n\t\tentriesLoop(props, ([key, val]) => {\n\t\t\texpect(val)[Item[key]]?.(`Item validation failed: Key \"${key}\" / Val: \"${val}\"`);\n\t\t});\n\n\t\tconst media = [\n\t\t\tprops.thumb,\n\t\t\t...props.content.map(c => c.media),\n\t\t];\n\n\t\tmedia.forEach(m => {\n\t\t\tvalidateRequired(m, MediaRequired);\n\n\t\t\tentriesLoop(m, ([key, val]) => {\n\t\t\t\tif(key === 'mimeType') {\n\t\t\t\t\texpect(MIME_TYPES.includes(val)).toBe(true, `Media mime type not recognized: ${val}`);\n\t\t\t\t} else {\n\t\t\t\t\texpect(val)[Media[key]](`Media item validation failed: Key \"${key}\" / Val: ${val}`);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\tprops\n\t\t\t.content\n\t\t\t.forEach(c => {\n\t\t\t\tentriesLoop(c, ([key, val]) => {\n\t\t\t\t\tif(key !== 'media') {\n\t\t\t\t\t\tvalidateRequired(c, ItemContentRequired);\n\t\t\t\t\t\texpect(val)[ItemContent[key]]('Content validation failed: ', key, val);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t}\n}",{"deps":{"Jig":{"$jig":0},"MIME_TYPES":["application/epub+zip","application/pdf","audio/aac","audio/mpeg","audio/ogg","audio/wav","audio/webm","image/bmp","image/gif","image/jpeg","image/png","image/webp","video/mpeg","video/ogg","video/webm"],"MediaDispenser":{"$jig":4},"expect":{"$jig":1},"validation":{"Item":{"content":"toBeArray","creationDate":"toBeString","description":"toBeString","key":"toBeString","meta":"toBeObject","thumb":"toBeObject","title":"toBeString","type":"toBeString","validationMsg":"toBeString"},"ItemContent":{"description":"toBeString","title":"toBeString"},"ItemContentRequired":["title","description"],"ItemRequired":["creationDate","title","type","description","thumb","content"],"ItemValidation":{"key":"toBeString","msg":"toBeString"},"Media":{"encrypted":"toBeBoolean","tx":"toBeString"},"MediaRequired":["tx"]}},"metadata":{"author":"DavidDoesStuff","description":"Media collection with public and private content.","emoji":"📖","image":{"$jig":2}}},"class MediaDispenser extends Jig {\n\tinit(props) {\n\t\tconst {\n\t\t\tmaxBatches = 0,\n\t\t\tmaxIssues = 0,\n\t\t\tmediaData,\n\t\t} = props;\n\n\t\texpect(maxBatches).toBeNumber();\n\t\texpect(maxIssues).toBeNumber();\n\n\t\tconst {\n\t\t\tcreationDate,\n\t\t\tcreatedBy,\n\t\t\tdescription,\n\t\t\ttitle,\n\t\t\tthumb,\n\t\t} = mediaData;\n\n\t\tMediaItem.validateProps(mediaData);\n\n\t\tObject.assign(this, {\n\t\t\tcreationDate,\n\t\t\tcreatedBy,\n\t\t\tdescription,\n\t\t\ttitle,\n\t\t\tthumb,\n\t\t\tmediaData,\n\t\t\tbatchRuns: [],\n\t\t});\n\t}\n\n\tsend(to) {\n\t\tthis.owner = to;\n\t}\n\n\tcreate(count) {\n\t\tif(this.maxBatches) {\n\t\t\texpect(this.batchRuns.length).toBeLessThan(this.maxBatches);\n\t\t}\n\n\t\tconst totalIssued = this.batchRuns.reduce((sum, issued) => sum + issued, 0);\n\n\t\tif(this.maxIssues) {\n\t\t\texpect(totalIssued + count).toBeLessThan(this.maxIssues);\n\t\t}\n\n\t\tconst newIssues = [];\n\n\t\tfor(let x = 0; x < count; x++) {\n\t\t\tnewIssues.push(new MediaItem({\n\t\t\t\t...this.mediaData,\n\t\t\t\tinstantiatedBy: this.location,\n\t\t\t\tbatchNumber: this.batches + 1,\n\t\t\t\titemNumber: this.issues + 1,\n\t\t\t\tbatchItemNumber: x + 1,\n\t\t\t}));\n\t\t}\n\n\t\tthis.batchRuns.push(count);\n\n\t\treturn newIssues;\n\t}\n}",{"deps":{"Jig":{"$dup":["1","deps","Jig"]},"MediaItem":{"$jig":3},"expect":{"$dup":["1","deps","expect"]}},"metadata":{"author":"DavidDoesStuff","description":"Creates and tracks media items.","emoji":"📖","image":{"$dup":["1","metadata","image"]}}}]}]}
    https://whatsonchain.com/tx/7c25102f77238f1ad44b6ec19a1d9ee896b9743f8a4d63b7ddb02f9568d965d4