Settings

Blockchain
Network
Unit
Language
Theme
Sound New Block

Transaction

120e9f3d0d4592eb80fa63d4cdb573a095d16210db4b1133d574d9c9da38ef7b
Timestamp (utc)
2021-03-11 05:50:22
Fee Paid
0.00002480 BSV
(
0.02984542 BSV
-
0.02982062 BSV
)
Fee Rate
500.1 sat/KB
Version
1
Confirmations
312,486
Size Stats
4,959 B

4 Outputs

Total Output:
0.02982062 BSV
  • jrunMD{"in":0,"ref":["native://Jig","f97d4ac2a3d6f5ed09fad4a4f341619dc5a3773d9844ff95c99c5d4f8388de2f_o1","5435ae2760dc35f4329501c61c42e24f6a744861c22f8e0f04735637c20ce987_o1?berry=5de5ca0a3a67ffa2ce87a6cf242df668a6137be63426ea655793cd934a39f659&hash=13d37fd8738e4e89c2c3c081e51d0b079ef0c21273b5b09a95354ba7d204076c&version=5"],"out":["5fd0091f47a2981d8fbc07d2324c4391f59cdd41166c8524e1f4270cabe72430","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(Item[key]).toBeDefined());\n\t\t}\n\n\t\tvalidateRequired(props, ItemRequired);\n\n\t\tentriesLoop(props, ([key, val]) => {\n\t\t\texpect(val)[Item[key]]?.();\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);\n\t\t\t\t} else {\n\t\t\t\t\texpect(val)[Media[key]]();\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(m, ItemContentRequired);\n\t\t\t\t\t\texpect(val)[ItemContent[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":{"batchItemNumber":"toBeNumber","batchNumber":"toBeNumber","content":"toBeArray","creationDate":"toBeString","description":"toBeString","itemNumber":"toBeNumber","key":"toBeString","meta":"toBeObject","thumb":"toBeObject","title":"toBeString","type":"toBeString","validationMsg":"toBeString"},"ItemContent":{"description":"toBeString","title":"toBeString"},"ItemContentRequired":["title","description"],"ItemRequired":["itemNumber","batchNumber","batchItemNumber","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/120e9f3d0d4592eb80fa63d4cdb573a095d16210db4b1133d574d9c9da38ef7b