Settings

Blockchain
Network
Unit
Language
Theme
Sound New Block

Transaction

d13cb526c5057a1ca282719bc4152c67d299cb69a9fb9932d7ceb556ed4c654a
Timestamp (utc)
2021-06-07 07:01:17
Fee Paid
0.00003532 BSV
(
0.02998019 BSV
-
0.02994487 BSV
)
Fee Rate
500 sat/KB
Version
1
Confirmations
301,462
Size Stats
7,062 B

7 Outputs

Total Output:
0.02994487 BSV
  • jrunM{"in":0,"ref":["native://Jig","f97d4ac2a3d6f5ed09fad4a4f341619dc5a3773d9844ff95c99c5d4f8388de2f_o1"],"out":["b46aff4f4eb2dbe97d84375c1e9e0160ffe6c38a55b5a808f370416ce7d02cbd","262bc163c33838cb68988885f6698fb6413434cc9b7019275fabd1a145991df2","fe8b342b07f16e3da2fbaf466e7936d14f6c3efdda6305159d77a5e8887fd7af","af954d43e6e9f42d0b099f0922bca761cf5eb94b9ca8b80491536ff723fe749d","c909862be69d2f0721b2bff73c353fa3b1bb22f8a388067b508d6f041aec5f6e"],"del":[],"cre":["mj2YgoqMRu4d1amVJcS7wLMU12MqAVDfnr","mj2YgoqMRu4d1amVJcS7wLMU12MqAVDfnr","mj2YgoqMRu4d1amVJcS7wLMU12MqAVDfnr","mj2YgoqMRu4d1amVJcS7wLMU12MqAVDfnr","mj2YgoqMRu4d1amVJcS7wLMU12MqAVDfnr"],"exec":[{"op":"DEPLOY","data":["class InvitationRequest extends Jig {\n init(player, game) {\n this.player = player;\n this.owner = SERVER_OWNER;\n this.game = game;\n this.used = false;\n }\n\n sendJoystick() {\n if (!this.used) {\n const joystick = new Joystick(this.game, this.game.getAndSwapNextTeam());\n this.game.add(joystick);\n joystick.send(this.player);\n this.used = true;\n return joystick;\n }\n }\n}",{"deps":{"Game":{"$jig":3},"Jig":{"$jig":0},"Joystick":{"$jig":4},"SERVER_OWNER":"mkfcabkTXk7ovyt1ggnuajoAAvyPFhM2Ss","expect":{"$jig":1}},"metadata":{"emoji":"📨"}},"class Game extends Jig {\n init() {\n expect(caller).toBe(Game)\n this.reset()\n }\n\n static removeFinishedGames() {\n this.all = this.all.filter(g => g.isFinished())\n }\n\n static removeAllGames() {\n this.all = [];\n }\n\n static createGame() {\n const newGame = new Game();\n this.all.push(newGame);\n return newGame;\n }\n\n isFinished() {\n return this.status !== RUNNING_STATUS;\n }\n\n reset() {\n this.players = [];\n this.joysticks = [];\n this.pawns = [];\n this.nextTeam = 'UP';\n }\n\n begin(gameName, numberOfPlayers) {\n expect(gameName).toBeString();\n expect(numberOfPlayers).toBeNumber();\n this.gameName = gameName;\n this.numberOfPlayers = numberOfPlayers;\n this.status = RUNNING_STATUS;\n this.winner = null;\n this.currentTurn = new Turn();\n }\n\n add(joystick) {\n expect(joystick).toBeInstanceOf(Joystick);\n this.joysticks.push(joystick);\n }\n\n getAndSwapNextTeam() {\n const team = this.nextTeam;\n if (team === 'UP') {\n this.nextTeam = 'DOWN';\n } else {\n this.nextTeam = 'UP';\n }\n return team;\n }\n\n nextTurn() {\n this.currentTurn = new Turn();\n }\n\n tick() {\n if (this.status !== RUNNING_STATUS) {\n return\n }\n this.joysticks.forEach(j => {\n j.commands.filter(command => command.turn === this.currentTurn).forEach(command => {\n this.pawns.push(new Pawn(j.team, command.column, command.hero));\n });\n });\n\n const goingUp = this.pawns.filter(p => p.goingUp());\n const goingDown = this.pawns.filter(p => !p.goingUp());\n let attacksOn = {};\n goingUp.forEach(pUp => {\n const enemiesNear = goingDown.filter(pDw => pUp.isNearTo(pDw));\n attacksOn[pUp] = enemiesNear.map(x => x.getAttack());\n })\n goingDown.forEach(pDw => {\n const enemiesNear = goingUp.filter(pUp => pDw.isNearTo(pUp));\n attacksOn[pDw] = enemiesNear.map(x => x.getAttack());\n })\n this.pawns.forEach(p => p.tick(attacksOn[p]));\n this.pawns = this.pawns.filter(p => p.health > 0);\n\n const champions = this.pawns.filter(p => p.won())\n if (champions.length > 0) {\n const upChampions = champions.filter(p => p.direction === 'UP');\n const downChampions = champions.filter(p => p.direction === 'DOWN');\n\n if (upChampions.length > downChampions.length) {\n this.winner = 'UP'\n this.endGame()\n return\n }\n if (upChampions.length < downChampions.length) {\n this.winner = 'DOWN'\n this.endGame()\n return\n }\n }\n\n this.nextTurn();\n }\n\n endGame() {\n this.status = END_STATUS;\n }\n}",{"all":[],"deps":{"END_STATUS":"END","Jig":{"$dup":["1","deps","Jig"]},"Joystick":{"$dup":["1","deps","Joystick"]},"MAP_LENGTH":20,"Pawn":{"$jig":5},"RUNNING_STATUS":"RUNNING","Turn":{"$jig":6},"expect":{"$dup":["1","deps","expect"]}},"metadata":{"emoji":"👾"}},"class Joystick extends Jig {\n init(game, team) {\n this.commands = [];\n this.game = game;\n this.team = team;\n }\n\n send(player) {\n expect(player).toBeString();\n this.owner = player;\n }\n\n deployHero(hero, column) {\n this.commands.push({hero, column, turn: this.game.currentTurn})\n }\n}",{"deps":{"Jig":{"$dup":["1","deps","Jig"]},"expect":{"$dup":["1","deps","expect"]}},"metadata":{"emoji":"🕹️"}},"class Pawn extends Jig {\n init(direction, column, hero) {\n this.direction = direction\n this.position = {x: column, y: this.goingUp() ? MAP_LENGTH : 0}\n this.health = hero.health\n this.originalHero = hero\n }\n\n send(gameOwner) {\n this.owner = gameOwner;\n }\n\n goingUp() {\n return this.direction === \"UP\"\n }\n\n tick(attacksOnSelf) {\n let notAttacked = !(attacksOnSelf.length === 0);\n if (notAttacked) {\n if (this.goingUp()) {\n this.position.y = this.position.y - 1;\n } else {\n this.position.y = this.position.y + 1;\n }\n } else {\n attacksOnSelf.forEach(damage => {\n this.health = this.health - damage;\n })\n }\n }\n\n won() {\n return (this.goingUp() && this.position.y === 0) || (!this.goingUp() && this.position.y === MAP_LENGTH);\n }\n\n isNearTo(opponent) {\n return this.position.x === opponent.position.x && this._abs(this.position.y - opponent.position.y) <= 1;\n }\n\n getAttack() {\n return this.originalHero.offensivePower()\n }\n\n _abs(x) {\n expect(x).toBeNumber();\n return (x < 0) ? (-x) : x\n }\n}",{"deps":{"Jig":{"$dup":["1","deps","Jig"]},"MAP_LENGTH":20,"expect":{"$dup":["1","deps","expect"]}},"metadata":{"emoji":"️♟️"}},"class Turn extends Jig {\n}",{"deps":{"Jig":{"$dup":["1","deps","Jig"]}},"metadata":{"emoji":"⌛"}}]}]}
    https://whatsonchain.com/tx/d13cb526c5057a1ca282719bc4152c67d299cb69a9fb9932d7ceb556ed4c654a
Total Output:
0.02994487 BSV