Settings

Blockchain
Network
Unit
Language
Theme
Sound New Block

Transaction

b4e55c0ef05c956ddab2446d2aa7474066ed39b067f72d9237d7ce06f30f2fd2
Timestamp (utc)
2022-02-03 04:49:15
Fee Paid
0.00004138 BSV
(
20.98534802 BSV
-
20.98530664 BSV
)
Fee Rate
500.1 sat/KB
Version
1
Confirmations
252,571
Size Stats
8,274 B

8 Outputs

Total Output:
20.98530664 BSV
  • jrunLoUM{"in":1,"ref":["native://Jig","f97d4ac2a3d6f5ed09fad4a4f341619dc5a3773d9844ff95c99c5d4f8388de2f_o1","63e0e1268d8ab021d1c578afb8eaa0828ccbba431ffffd9309d04b78ebeb6e56_o1"],"out":["aac44e57ebebb6f1b15ed194e9013a98f115795c9edb6520a5b08c4479099035","fd7ba32e54d9dec4885e1652defaa60e39439c5ca96b9d62a2d557a2e1c2a8ea","4576babde940aac1037f8eccdd725f1514e9f1c4b7ead6818f1dd711256d4fcb","b87f2485f21a1cae42dd5c6f3d2295858b40db6c1b1e7af54bf9755291c94e01","37745ce44bbca06d53641544196a55fd5de4cedce35492006a0456963195bc3f","95c6b84f0db856c5c2bd82f52c1908db09a87b79d85c0db44767d4040fbffeb6"],"del":[],"cre":["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":4},"Jig":{"$jig":1},"expect":{"$jig":2}},"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\");\n }\n if (this.LVL2_ZONES.includes(zone) && !defSig.startsWith(\"2\")) {\n throw new Error(\"Card defSig not level two\");\n }\n if (this.LVL3_ZONES.includes(zone) && !defSig.startsWith(\"3\")) {\n throw new Error(\"Card defSig not level three\");\n }\n }\n setZone(zone, defSig) {\n if (zone === GZone.Stack) {\n throw new Error(\"Call addStack to add to stack\");\n }\n this._validateZoneDefSig(zone, defSig);\n this.zone = zone;\n this.stackOrder = null;\n if (defSig) {\n this.defSig = defSig;\n }\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) {\n this.owner = owner;\n this.locationSigs = locationSigs;\n }\n}",{"deps":{"Jig":{"$dup":["1","deps","Jig"]}},"metadata":{"emoji":"🎴"}},"class PlayerJig extends Jig {\n init(owner, playerName) {\n this.owner = owner;\n this.playerName = playerName;\n }\n}",{"deps":{"Jig":{"$dup":["1","deps","Jig"]}},"metadata":{"emoji":"👨‍💻️"}},"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 }\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 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":5},"GameDeckJig":{"$jig":6},"Jig":{"$dup":["1","deps","Jig"]},"PlayerJig":{"$jig":7},"expect":{"$dup":["1","deps","expect"]}},"metadata":{"emoji":"🧙"}}]},{"op":"UPGRADE","data":[{"$jig":0},"class GameJig extends Jig {\n init(owner, 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 }\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 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":4},"GZone":{"Battlefield":"Battlefield","Deck":"Deck","Discard":"Discard","Hand":"Hand","Sideboard":"Sideboard","Stack":"Stack","Trash":"Trash"},"GameCardStateJig":{"$jig":5},"GameDeckJig":{"$jig":6},"GamePlayerJig":{"$jig":8},"Group":{"$jig":3},"Jig":{"$jig":1},"PlayerJig":{"$jig":7},"expect":{"$jig":2}},"metadata":{"emoji":"🕹️"}}]}]}
    https://whatsonchain.com/tx/b4e55c0ef05c956ddab2446d2aa7474066ed39b067f72d9237d7ce06f30f2fd2
Total Output:
20.98530664 BSV