Settings

Blockchain
Network
Unit
Language
Theme
Sound New Block

Transaction

612bd961c6aef8be8bca7e56cecc9e46daa541f460a0f8f86129a320c73b48fa
Timestamp (utc)
2022-02-04 08:41:15
Fee Paid
0.00004731 BSV
(
20.97873501 BSV
-
20.978687700000002 BSV
)
Fee Rate
499.9 sat/KB
Version
1
Confirmations
256,302
Size Stats
9,461 B

9 Outputs

Total Output:
20.978687700000002 BSV
  • jrunLoUM-#{"in":0,"ref":["native://Jig","f97d4ac2a3d6f5ed09fad4a4f341619dc5a3773d9844ff95c99c5d4f8388de2f_o1","63e0e1268d8ab021d1c578afb8eaa0828ccbba431ffffd9309d04b78ebeb6e56_o1"],"out":["a51ba487877d8fdafcc4114a13eb6d9a06cba6a9df7a9384266dc6042ce7e98c","c5dd8980485962521bf3fb86f62a48be0216a7a0dbba6da80c3dc683ea590501","b5a000b97c6685b48c12da4d185e4fa91b260f28f57b77988801154a81b47e68","2bdaa97853ec630cee5c66f666fb615fd44e85759cf8e69ed1e4ec300650fcc5","10bb26b13c13036a9f3b608806c41e5a3830b5edbf0545cc1dc6dcfe7f94a6d6","e0ac7973cd61e577ef936ad8839342e4d3a3ffd1cef074a167cfc6c91537c065","32cb48928379c0a06fd8d8d8d4938c3629fea6ae7b549458d31ec5ace83278a5"],"del":[],"cre":["n1V6mVgHLLoZMkzsqgpeAv5SatrA5BGM4G","n1V6mVgHLLoZMkzsqgpeAv5SatrA5BGM4G","n1V6mVgHLLoZMkzsqgpeAv5SatrA5BGM4G","n1V6mVgHLLoZMkzsqgpeAv5SatrA5BGM4G","n1V6mVgHLLoZMkzsqgpeAv5SatrA5BGM4G","n1V6mVgHLLoZMkzsqgpeAv5SatrA5BGM4G","n1V6mVgHLLoZMkzsqgpeAv5SatrA5BGM4G"],"exec":[{"op":"DEPLOY","data":["class CardJig extends Jig {\n init(owner, cardId) {\n expect(caller).toBe(CardJigCode);\n this.owner = owner;\n this.cardId = cardId;\n }\n static print(owner, cardId) {\n // only code owner can call this\n return new CardJigCode(owner, cardId);\n }\n}",{"deps":{"CardJigCode":{"$jig":3},"Jig":{"$jig":0},"expect":{"$jig":1}},"metadata":{"emoji":"🃏"}}]},{"op":"DEPLOY","data":["class PlayerJig extends Jig {\n init(owner, playerName) {\n this.owner = owner;\n this.playerName = playerName;\n }\n}",{"deps":{"Jig":{"$jig":0}},"metadata":{"emoji":"👨‍💻️"}}]},{"op":"DEPLOY","data":["class GamePlayerJig extends Jig {\n init(player, startingLife, deck) {\n expect(deck).toBeInstanceOf(GameDeckJig);\n function isRealPlayer(obj) {\n return obj && \"owner\" in obj;\n }\n if (isRealPlayer(player)) {\n this.owner = player.owner;\n this.playerName = player.playerName;\n }\n else {\n this.owner = player.address;\n this.playerName = \"Computer\";\n this.isAI = true;\n this.aiPrivKeyEncr = player.privKeyEncrypted;\n }\n this.maxPermTreasuresPlayedPerTurn = 1;\n this.permTreasuresPlayedThisTurn = 0;\n this.life = startingLife;\n this.maxHandSize = 5;\n this._prevMaxHandSize = 5;\n this.isDead = false;\n this.floatingMana = {\n Yellow: 0,\n Black: 0,\n Red: 0,\n Blue: 0,\n Green: 0,\n Colorless: 0\n };\n // init(owner: string, initialDefinitionSig: string, initialZone: Zone)\n this.cardStates = deck.locationSigs.deck\n .map(x => new GameCardStateJig(this.owner, x, GZone.Deck))\n .concat(deck.locationSigs.sideboard.map(x => new GameCardStateJig(this.owner, x, GZone.Sideboard)));\n this.startingDeck = deck;\n }\n resetTreasuresPlayed() {\n this.permTreasuresPlayedThisTurn = 0;\n }\n setMaxHandSize(size) {\n this._prevMaxHandSize = this.maxHandSize;\n this.maxHandSize = size;\n }\n revertMaxHandSize(size) {\n this.maxHandSize = this._prevMaxHandSize;\n }\n setMana(floating) {\n this.floatingMana = floating;\n }\n addMana(color, amount) {\n this.floatingMana[color] += amount;\n }\n incrPermTreasuresPlayed() {\n this.permTreasuresPlayedThisTurn++;\n }\n setMaxPermTreasures(value) {\n this.maxPermTreasuresPlayedPerTurn = value;\n }\n setDeckCards(newDeck) {\n // remove old deck cards and concat new ones\n this.cardStates = this.cardStates.filter(x => x.zone !== GZone.Deck).concat(newDeck);\n }\n}",{"deps":{"GZone":{"Battlefield":"Battlefield","Deck":"Deck","Discard":"Discard","Hand":"Hand","Sideboard":"Sideboard","Stack":"Stack","Trash":"Trash"},"GameCardStateJig":{"$jig":6},"GameDeckJig":{"$jig":7},"Jig":{"$jig":0},"PlayerJig":{"$jig":4},"expect":{"$jig":1}},"metadata":{"emoji":"🧙"}},"class GameCardStateJig extends Jig {\n init(owner, initialDefinitionSig, initialZone) {\n this.owner = owner;\n this.defSig = initialDefinitionSig;\n this.zone = initialZone;\n this.controllingPlayerId = owner;\n this.LVL1_ZONES = [GZone.Battlefield, GZone.Stack, GZone.Discard, GZone.Trash];\n this.LVL2_ZONES = [GZone.Hand, GZone.Sideboard];\n this.LVL3_ZONES = [GZone.Deck];\n }\n _validateZoneDefSig(zone, defSig) {\n if (this.LVL1_ZONES.includes(zone) && !/^[A-Z]/.test(defSig)) {\n throw new Error(`Card defSig not level one for public zone ${zone}. ${defSig}`);\n }\n if (this.LVL2_ZONES.includes(zone) && !defSig.startsWith(\"2\")) {\n throw new Error(`Card defSig not level two for zone ${zone}. ${defSig}`);\n }\n if (this.LVL3_ZONES.includes(zone) && !defSig.startsWith(\"3\")) {\n throw new Error(`Card defSig not level three for zone ${zone}. ${defSig}`);\n }\n }\n setZone(zone, defSig) {\n if (zone === GZone.Stack) {\n throw new Error(\"Call addStack to add to stack\");\n }\n this.zone = zone;\n this.stackOrder = null;\n if (defSig) {\n this.defSig = defSig;\n }\n this._validateZoneDefSig(zone, this.defSig);\n }\n addToStack(defSig, game) {\n this._validateZoneDefSig(GZone.Stack, defSig);\n this.zone = GZone.Stack;\n this.defSig = defSig;\n this.stackOrder = game.players.flatMap(x => x.cardStates).filter(x => x.zone === GZone.Stack).length;\n }\n setDefSig(sig) {\n this._validateZoneDefSig(this.zone, sig);\n this.defSig = sig;\n }\n setTapped(isTapped) {\n this.isTapped = isTapped;\n }\n resetWithSig(sig, zone, isTapped) {\n if (zone === GZone.Stack) {\n throw new Error(\"Call addStack to add to stack\");\n }\n this._validateZoneDefSig(zone, sig);\n this.defSig = sig;\n this.zone = zone;\n this.isTapped = isTapped;\n this.controllingPlayerId = this.owner;\n this.stackOrder = null;\n }\n}",{"deps":{"GZone":{"Battlefield":"Battlefield","Deck":"Deck","Discard":"Discard","Hand":"Hand","Sideboard":"Sideboard","Stack":"Stack","Trash":"Trash"},"Jig":{"$dup":["1","deps","Jig"]}},"metadata":{"emoji":"🎴"}},"class GameDeckJig extends Jig {\n init(owner, locationSigs, cardHashes) {\n expect(locationSigs).toBeObject();\n expect(cardHashes).toBeArray();\n this.owner = owner;\n this.locationSigs = locationSigs;\n this.cardHashes = cardHashes;\n }\n}",{"deps":{"Jig":{"$dup":["1","deps","Jig"]},"expect":{"$dup":["1","deps","expect"]}},"metadata":{"emoji":"🎴"}}]},{"op":"DEPLOY","data":["class DeckDefinitionJig extends Jig {\n init(owner, deckName, startingDeck, sideboard) {\n this.owner = owner;\n this.deckName = deckName;\n this.startingDeck = startingDeck;\n this.sideboard = sideboard;\n }\n cards() {\n return this.startingDeck.concat(this.sideboard);\n }\n}",{"deps":{"CardJig":{"$jig":3},"Jig":{"$jig":0}},"metadata":{"emoji":"🎲"}}]},{"op":"DEPLOY","data":["class GameJig extends Jig {\n init(owner, gameId, players) {\n this.owner = owner;\n for (const p of players) {\n expect(p).toBeInstanceOf(GamePlayerJig);\n }\n this.players = players;\n this.turnOrder = players.map(x => x.owner);\n this.gameId = gameId;\n this.activeEffects = [];\n }\n pushCardStack(ability) {\n this.state.stack.push(ability);\n }\n popCardStack() {\n const rtn = this.state.stack.pop();\n return rtn;\n }\n setGameState(state) {\n this.state = state;\n }\n addEffects(effects) {\n this.activeEffects.push(...effects);\n }\n removeEffect(ownerPlayerId, effectKey) {\n const ef = this.activeEffects.find(x => x.effectKey === effectKey && x.ownerPlayerId === ownerPlayerId);\n return this.activeEffects.remove(ef);\n }\n onTurnEnd() {\n const prev = this.state;\n const lastTurnPlayer = prev.turnQueue.shift();\n this.state = {\n ...prev,\n currentTurn: prev.currentTurn + 1,\n turnQueue: lastTurnPlayer.isUnorthodoxTurn\n ? // player had an additional turn, ignore queue shift\n prev.turnQueue.slice()\n : [...prev.turnQueue, lastTurnPlayer]\n };\n }\n}",{"deps":{"CardJig":{"$jig":3},"GZone":{"Battlefield":"Battlefield","Deck":"Deck","Discard":"Discard","Hand":"Hand","Sideboard":"Sideboard","Stack":"Stack","Trash":"Trash"},"GameCardStateJig":{"$jig":6},"GameDeckJig":{"$jig":7},"GamePlayerJig":{"$jig":5},"Group":{"$jig":2},"Jig":{"$jig":0},"PlayerJig":{"$jig":4},"expect":{"$jig":1}},"metadata":{"emoji":"🕹️"}}]}]}
    https://whatsonchain.com/tx/612bd961c6aef8be8bca7e56cecc9e46daa541f460a0f8f86129a320c73b48fa
Total Output:
20.978687700000002 BSV