From b6660f547213445a5c822c228cfd01849812a17c Mon Sep 17 00:00:00 2001 From: EehMauro Date: Mon, 11 Aug 2025 20:04:39 -0300 Subject: [PATCH 1/2] feat: implement params --- experiments/params.tx3 | 261 ++++++++++++++++++++++++++++++++++++ main.tx3 | 74 ++++------ package.json | 3 +- src/bindings/protocol.ts | 25 +--- src/txs/create-ship.ts | 19 ++- src/txs/example-transfer.ts | 69 ---------- 6 files changed, 310 insertions(+), 141 deletions(-) create mode 100644 experiments/params.tx3 delete mode 100644 src/txs/example-transfer.ts diff --git a/experiments/params.tx3 b/experiments/params.tx3 new file mode 100644 index 0000000..7714478 --- /dev/null +++ b/experiments/params.tx3 @@ -0,0 +1,261 @@ +party Admin; +party Player; + +env { + spacetime_policy_hash: Bytes, + spacetime_policy_ref: UtxoRef, + + asteria_policy_hash: Bytes, + asteria_policy_ref: UtxoRef, + + pellet_policy_hash: Bytes, + pellet_policy_ref: UtxoRef, + + admin_token_policy_hash: Bytes, + admin_token_name: Bytes, + + initial_fuel: Int, + ship_mint_lovelace_fee: Int, +} + +type AssetRecord { + policy_id: Bytes, + asset_name: Bytes, +} + +type MaxSpeedRecord { + distance: Int, + time: Int, +} + +type ShipDatum { + pos_x: Int, + pos_y: Int, + ship_token_name: Bytes, + pilot_token_name: Bytes, + last_move_latest_time: Int, +} + +type AsteriaDatum { + ship_counter: Int, + shipyard_policy: Bytes, +} + +type PelletDatum { + pos_x: Int, + pos_y: Int, + shipyard_policy: Bytes, +} + +type ShipActions { + MoveShip { + delta_x: Int, + delta_y: Int, + }, + GatherFuel { + gather_amount: Int, + }, +} + +tx create_ship( + p_pos_x: Int, // Ship Position X + p_pos_y: Int, // Ship Position Y + ship_name: Bytes, // Name of the ship + pilot_name: Bytes, // Name of the pilot + tip_slot: Int, // TODO: remove when tip_slot() implemented + last_move_timestamp: Int, +) { + validity { + until_slot: tip_slot, // tip_slot() + 300 + } + + reference SpacetimeRef { + ref: spacetime_policy_ref, + } + + reference AsteriaRef { + ref: asteria_policy_ref, + } + + reference PelletRef { + ref: pellet_policy_ref, + } + + input source { + from: Player, + min_amount: fees + Ada(ship_mint_lovelace_fee)+ min_utxo(ship), + } + + input asteria { + from: asteria_policy_hash, + min_amount: AnyAsset(admin_token_policy_hash, admin_token_name, 1), + datum_is: AsteriaDatum, + redeemer: (), + } + + mint { + amount: AnyAsset(spacetime_policy_hash, pilot_name, 1) + AnyAsset(spacetime_policy_hash, ship_name, 1), + redeemer: (), + } + + mint { + amount: AnyAsset(pellet_policy_hash, "FUEL", initial_fuel), + redeemer: (), + } + + output { + to: Player, + amount: source - fees - Ada(ship_mint_lovelace_fee) + AnyAsset(spacetime_policy_hash, pilot_name, 1) - min_utxo(ship), + } + + output { + to: asteria_policy_hash, + amount: asteria + Ada(ship_mint_lovelace_fee), + datum: AsteriaDatum { + ship_counter: asteria.ship_counter + 1, + shipyard_policy: asteria.shipyard_policy, + }, + } + + output ship { + to: spacetime_policy_hash, + amount: AnyAsset(spacetime_policy_hash, ship_name, 1) + AnyAsset(pellet_policy_hash, "FUEL", initial_fuel) + min_utxo(ship), + datum: ShipDatum { + pos_x: p_pos_x, + pos_y: p_pos_y, + ship_token_name: ship_name, + pilot_token_name: pilot_name, + last_move_latest_time: last_move_timestamp, + }, + } + + collateral { + from: Player, + min_amount: fees, + } +} + +tx move_ship( + p_delta_x: Int, + p_delta_y: Int, + ship_name: Bytes, + pilot_name: Bytes, + required_fuel: Int, + tip_slot: Int, // TODO: remove when tip_slot() implemented + last_move_timestamp: Int, +) { + validity { + until_slot: tip_slot, // tip_slot() + 300 + } + + reference SpacetimeRef { + ref: spacetime_policy_ref, + } + + reference PelletRef { + ref: pellet_policy_ref, + } + + input source { + from: Player, + min_amount: fees, + } + + input ship { + from: spacetime_policy_hash, + datum_is: ShipDatum, + min_amount: AnyAsset(spacetime_policy_hash, ship_name, 1), + redeemer: ShipActions::MoveShip { + delta_x: p_delta_x, + delta_y: p_delta_y, + }, + } + + input pilot { + from: Player, + min_amount: AnyAsset(spacetime_policy_hash, pilot_name, 1), + } + + burn { + amount: AnyAsset(pellet_policy_hash, "FUEL", required_fuel), + redeemer: (), + } + + output { + to: spacetime_policy_hash, + amount: ship - AnyAsset(pellet_policy_hash, "FUEL", required_fuel), + datum: ShipDatum { + pos_x: ship.pos_x + p_delta_x, + pos_y: ship.pos_y + p_delta_y, + last_move_latest_time: last_move_timestamp, + ...ship + }, + } + + output { + to: Player, + amount: source - fees + pilot, + } +} + +tx gather_fuel ( + p_gather_amount: Int, + ship_name: Bytes, + tip_slot: Int, // TODO: remove when tip_slot() implemented +) { + validity { + since_slot: tip_slot, // tip_slot() + 300 + } + + reference SpacetimeRef { + ref: spacetime_policy_ref, + } + + reference PelletRef { + ref: pellet_policy_ref, + } + + input source { + from: Player, + min_amount: fees, + } + + input ship { + from: spacetime_policy_hash, + datum_is: ShipDatum, + min_amount: AnyAsset(spacetime_policy_hash, ship_name, 1), + redeemer: ShipActions::GatherFuel { + gather_amount: p_gather_amount, + }, + } + + input pellet { + from: pellet_policy_hash, + datum_is: PelletDatum, + min_amount: AnyAsset(pellet_policy_hash, "FUEL", p_gather_amount), + redeemer: ShipActions::GatherFuel { + gather_amount: p_gather_amount, + }, + } + + output { + to: Player, + amount: source - fees, + } + + output { + to: spacetime_policy_hash, + amount: ship + AnyAsset(pellet_policy_hash, "FUEL", p_gather_amount), + datum: ShipDatum {...ship}, + } + + output { + to: pellet_policy_hash, + amount: pellet - AnyAsset(pellet_policy_hash, "FUEL", p_gather_amount), + datum: PelletDatum { + pos_x: pellet.pos_x, + pos_y: pellet.pos_y, + shipyard_policy: spacetime_policy_hash, + }, + } +} \ No newline at end of file diff --git a/main.tx3 b/main.tx3 index 2384fbc..36cae2a 100644 --- a/main.tx3 +++ b/main.tx3 @@ -2,22 +2,22 @@ party Admin; party Player; policy SpacetimePolicy { - hash: 0x0291ae7aebaf064b785542093c2b13169effb34462301e68d4b44f43, - ref: 0x3d308c0f3deb1eff764cbb765452c53d30704748681d7acd61c7775aeb8a8e46#1, + hash: 0xb6c5e14f31af0c92515ce156625afc4749e30ceef178cfae1f929fff, + ref: 0x81667fe89e20c352a8428f68efd0c9db1fef6cd15aa36ad4423797bb2c401431#1, } policy AsteriaPolicy { - hash: 0xd55e332cd46d2abfe24dfa0558c2dedd0114d00424352eb807aac137, - ref: 0x3d308c0f3deb1eff764cbb765452c53d30704748681d7acd61c7775aeb8a8e46#0, + hash: 0xb16a0775a5e045b482ab2a98e241c9347f8ffe265bb6acd10452a6cc, + ref: 0x81667fe89e20c352a8428f68efd0c9db1fef6cd15aa36ad4423797bb2c401431#0, } policy PelletPolicy { - hash: 0x3babcffc6102ec25ced40e1a24fba20371925c46f0299b2b9456360e, - ref: 0x3d308c0f3deb1eff764cbb765452c53d30704748681d7acd61c7775aeb8a8e46#2, + hash: 0x98b1c97b219c102dd0e9ba014481272d6ec069ec3ff47c63e291f1b7, + ref: 0x81667fe89e20c352a8428f68efd0c9db1fef6cd15aa36ad4423797bb2c401431#2, } -asset Fuel = 0x3babcffc6102ec25ced40e1a24fba20371925c46f0299b2b9456360e."FUEL"; -asset AdminToken = 0xdb0d968cda2cc636b28c0f377e66691a065b8004e57be5129aeef822."auth"; +asset Fuel = 0x98b1c97b219c102dd0e9ba014481272d6ec069ec3ff47c63e291f1b7."FUEL"; +asset AdminToken = 0x516238dd0a79bac4bebe041c44bad8bf880d74720733d2fc0d255d28."asteriaAdmin"; type AssetRecord { policy_id: Bytes, @@ -67,12 +67,12 @@ tx create_ship( last_move_timestamp: Int, ) { locals { - initial_fuel: 480, // Should be taken from spaceTime datum + initial_fuel: 5, // Should be taken from spaceTime datum ship_mint_lovelace_fee: 1000000, // Should be taken from asteria script datum - spacetime_policy_hash: 0x0291ae7aebaf064b785542093c2b13169effb34462301e68d4b44f43, - spacetime_policy_ref: 0x3d308c0f3deb1eff764cbb765452c53d30704748681d7acd61c7775aeb8a8e46#1, - asteria_policy_ref: 0x3d308c0f3deb1eff764cbb765452c53d30704748681d7acd61c7775aeb8a8e46#0, - pellet_policy_ref: 0x3d308c0f3deb1eff764cbb765452c53d30704748681d7acd61c7775aeb8a8e46#2, + spacetime_policy_hash: 0xb6c5e14f31af0c92515ce156625afc4749e30ceef178cfae1f929fff, + spacetime_policy_ref: 0x81667fe89e20c352a8428f68efd0c9db1fef6cd15aa36ad4423797bb2c401431#1, + asteria_policy_ref: 0x81667fe89e20c352a8428f68efd0c9db1fef6cd15aa36ad4423797bb2c401431#2, + pellet_policy_ref: 0x81667fe89e20c352a8428f68efd0c9db1fef6cd15aa36ad4423797bb2c401431#2, } validity { @@ -93,13 +93,14 @@ tx create_ship( input source { from: Player, - min_amount: fees + Ada(ship_mint_lovelace_fee), + min_amount: fees + Ada(ship_mint_lovelace_fee) + min_utxo(ship), } input asteria { from: AsteriaPolicy, min_amount: AdminToken(1), datum_is: AsteriaDatum, + redeemer: (), } mint { @@ -114,7 +115,7 @@ tx create_ship( output { to: Player, - amount: source - fees - Ada(ship_mint_lovelace_fee) + AnyAsset(spacetime_policy_hash, pilot_name, 1), + amount: source - fees - Ada(ship_mint_lovelace_fee) + AnyAsset(spacetime_policy_hash, pilot_name, 1) - min_utxo(ship), } output { @@ -126,9 +127,9 @@ tx create_ship( }, } - output { + output ship { to: SpacetimePolicy, - amount: AnyAsset(spacetime_policy_hash, ship_name, 1) + Fuel(initial_fuel), + amount: AnyAsset(spacetime_policy_hash, ship_name, 1) + Fuel(initial_fuel) + min_utxo(ship), datum: ShipDatum { pos_x: p_pos_x, pos_y: p_pos_y, @@ -137,6 +138,11 @@ tx create_ship( last_move_latest_time: last_move_timestamp, }, } + + collateral { + from: Player, + min_amount: fees, + } } tx move_ship( @@ -149,9 +155,9 @@ tx move_ship( last_move_timestamp: Int, ) { locals { - spacetime_policy_hash: 0x0291ae7aebaf064b785542093c2b13169effb34462301e68d4b44f43, - spacetime_policy_ref: 0x3d308c0f3deb1eff764cbb765452c53d30704748681d7acd61c7775aeb8a8e46#1, - pellet_policy_ref: 0x3d308c0f3deb1eff764cbb765452c53d30704748681d7acd61c7775aeb8a8e46#2, + spacetime_policy_hash: 0xb6c5e14f31af0c92515ce156625afc4749e30ceef178cfae1f929fff, + spacetime_policy_ref: 0x81667fe89e20c352a8428f68efd0c9db1fef6cd15aa36ad4423797bb2c401431#1, + pellet_policy_ref: 0x81667fe89e20c352a8428f68efd0c9db1fef6cd15aa36ad4423797bb2c401431#2, } validity { @@ -214,9 +220,9 @@ tx gather_fuel ( tip_slot: Int, // TODO: remove when tip_slot() implemented ) { locals { - spacetime_policy_hash: 0x0291ae7aebaf064b785542093c2b13169effb34462301e68d4b44f43, - spacetime_policy_ref: 0x3d308c0f3deb1eff764cbb765452c53d30704748681d7acd61c7775aeb8a8e46#1, - pellet_policy_ref: 0x3d308c0f3deb1eff764cbb765452c53d30704748681d7acd61c7775aeb8a8e46#2, + spacetime_policy_hash: 0xb6c5e14f31af0c92515ce156625afc4749e30ceef178cfae1f929fff, + spacetime_policy_ref: 0x81667fe89e20c352a8428f68efd0c9db1fef6cd15aa36ad4423797bb2c401431#1, + pellet_policy_ref: 0x81667fe89e20c352a8428f68efd0c9db1fef6cd15aa36ad4423797bb2c401431#2, } validity { @@ -274,26 +280,4 @@ tx gather_fuel ( shipyard_policy: spacetime_policy_hash, }, } -} - -party Sender; -party Receiver; - -tx transfer( - quantity: Int -) { - input source { - from: Sender, - min_amount: Ada(quantity), - } - - output { - to: Receiver, - amount: Ada(quantity), - } - - output { - to: Sender, - amount: source - Ada(quantity) - fees, - } } \ No newline at end of file diff --git a/package.json b/package.json index 49b5b99..b02bef5 100644 --- a/package.json +++ b/package.json @@ -5,8 +5,7 @@ "scripts": { "build": "tsc", "create-ship": "ts-node src/txs/create-ship.ts", - "move-ship": "ts-node src/txs/move-ship.ts", - "example-transfer": "ts-node src/txs/example-transfer.ts" + "move-ship": "ts-node src/txs/move-ship.ts" }, "dependencies": { "@noble/curves": "^1.9.6", diff --git a/src/bindings/protocol.ts b/src/bindings/protocol.ts index 8824a2e..67f622b 100644 --- a/src/bindings/protocol.ts +++ b/src/bindings/protocol.ts @@ -28,7 +28,7 @@ export type CreateShipParams = { } export const CREATE_SHIP_IR = { - bytecode: "0d03030a01203d308c0f3deb1eff764cbb765452c53d30704748681d7acd61c7775aeb8a8e46010a01203d308c0f3deb1eff764cbb765452c53d30704748681d7acd61c7775aeb8a8e46000a01203d308c0f3deb1eff764cbb765452c53d30704748681d7acd61c7775aeb8a8e46020206736f757263650d0206736f757263650d0106706c61796572050e010d030c01000005fc80841e000000000007617374657269610d0207617374657269610f00041cd55e332cd46d2abfe24dfa0558c2dedd0114d00424352eb807aac1370c01041cdb0d968cda2cc636b28c0f377e66691a065b8004e57be5129aeef822070461757468050200000000030d0106706c6179657205000e010e020e0210010d0206736f757263650d0106706c61796572050e010d030c01000005fc80841e000000000d030c01000005fc80841e000c01041c0291ae7aebaf064b785542093c2b13169effb34462301e68d4b44f430d010a70696c6f745f6e616d650405020f00041cd55e332cd46d2abfe24dfa0558c2dedd0114d00424352eb807aac1370300020e010e0510020d0207617374657269610f00041cd55e332cd46d2abfe24dfa0558c2dedd0114d00424352eb807aac1370c01041cdb0d968cda2cc636b28c0f377e66691a065b8004e57be5129aeef82207046175746805020000000005020e0510020d0207617374657269610f00041cd55e332cd46d2abfe24dfa0558c2dedd0114d00424352eb807aac1370c01041cdb0d968cda2cc636b28c0f377e66691a065b8004e57be5129aeef8220704617574680502000000010e0110010d0207617374657269610f00041cd55e332cd46d2abfe24dfa0558c2dedd0114d00424352eb807aac1370c01041cdb0d968cda2cc636b28c0f377e66691a065b8004e57be5129aeef82207046175746805020000000c01000005fc80841e000f00041c0291ae7aebaf064b785542093c2b13169effb34462301e68d4b44f430300050d0107705f706f735f78020d0107705f706f735f79020d0109736869705f6e616d65040d010a70696c6f745f6e616d65040d01136c6173745f6d6f76655f74696d657374616d70020e010c01041c0291ae7aebaf064b785542093c2b13169effb34462301e68d4b44f430d0109736869705f6e616d650405020c01041c3babcffc6102ec25ced40e1a24fba20371925c46f0299b2b9456360e07044655454c05fbc00301000d01087469705f736c6f7402020e010c01041c0291ae7aebaf064b785542093c2b13169effb34462301e68d4b44f430d010a70696c6f745f6e616d650405020c01041c0291ae7aebaf064b785542093c2b13169effb34462301e68d4b44f430d0109736869705f6e616d650405020300000c01041c3babcffc6102ec25ced40e1a24fba20371925c46f0299b2b9456360e07044655454c05fbc0030300000000000000", + bytecode: "0d03030a012081667fe89e20c352a8428f68efd0c9db1fef6cd15aa36ad4423797bb2c401431010a012081667fe89e20c352a8428f68efd0c9db1fef6cd15aa36ad4423797bb2c401431020a012081667fe89e20c352a8428f68efd0c9db1fef6cd15aa36ad4423797bb2c401431020206736f757263650d0206736f757263650d0106706c61796572050e010e010d030c01000005fc80841e000f0105040000000007617374657269610d0207617374657269610f00041cb16a0775a5e045b482ab2a98e241c9347f8ffe265bb6acd10452a6cc0c01041c516238dd0a79bac4bebe041c44bad8bf880d74720733d2fc0d255d28070c6173746572696141646d696e0502000000030000030d0106706c6179657205000e020e010e020e0210010d0206736f757263650d0106706c61796572050e010e010d030c01000005fc80841e000f0105040000000d030c01000005fc80841e000c01041cb6c5e14f31af0c92515ce156625afc4749e30ceef178cfae1f929fff0d010a70696c6f745f6e616d650405020f0105040f00041cb16a0775a5e045b482ab2a98e241c9347f8ffe265bb6acd10452a6cc0300020e010e0510020d0207617374657269610f00041cb16a0775a5e045b482ab2a98e241c9347f8ffe265bb6acd10452a6cc0c01041c516238dd0a79bac4bebe041c44bad8bf880d74720733d2fc0d255d28070c6173746572696141646d696e05020000000005020e0510020d0207617374657269610f00041cb16a0775a5e045b482ab2a98e241c9347f8ffe265bb6acd10452a6cc0c01041c516238dd0a79bac4bebe041c44bad8bf880d74720733d2fc0d255d28070c6173746572696141646d696e0502000000010e0110010d0207617374657269610f00041cb16a0775a5e045b482ab2a98e241c9347f8ffe265bb6acd10452a6cc0c01041c516238dd0a79bac4bebe041c44bad8bf880d74720733d2fc0d255d28070c6173746572696141646d696e05020000000c01000005fc80841e000f00041cb6c5e14f31af0c92515ce156625afc4749e30ceef178cfae1f929fff0300050d0107705f706f735f78020d0107705f706f735f79020d0109736869705f6e616d65040d010a70696c6f745f6e616d65040d01136c6173745f6d6f76655f74696d657374616d70020e010e010c01041cb6c5e14f31af0c92515ce156625afc4749e30ceef178cfae1f929fff0d0109736869705f6e616d650405020c01041c98b1c97b219c102dd0e9ba014481272d6ec069ec3ff47c63e291f1b707044655454c050a0f01050401000d01087469705f736c6f7402020e010c01041cb6c5e14f31af0c92515ce156625afc4749e30ceef178cfae1f929fff0d010a70696c6f745f6e616d650405020c01041cb6c5e14f31af0c92515ce156625afc4749e30ceef178cfae1f929fff0d0109736869705f6e616d650405020300000c01041c98b1c97b219c102dd0e9ba014481272d6ec069ec3ff47c63e291f1b707044655454c050a0300000000010d020a636f6c6c61746572616c0d0106706c61796572050d030000010000", encoding: "hex", version: "v1alpha8", }; @@ -45,7 +45,7 @@ export type MoveShipParams = { } export const MOVE_SHIP_IR = { - bytecode: "0d03020a01203d308c0f3deb1eff764cbb765452c53d30704748681d7acd61c7775aeb8a8e46010a01203d308c0f3deb1eff764cbb765452c53d30704748681d7acd61c7775aeb8a8e46020306736f757263650d0206736f757263650d0106706c61796572050d030000000004736869700d0204736869700f00041c0291ae7aebaf064b785542093c2b13169effb34462301e68d4b44f430c01041c0291ae7aebaf064b785542093c2b13169effb34462301e68d4b44f430d0109736869705f6e616d650405020000000300020d0109705f64656c74615f78020d0109705f64656c74615f79020570696c6f740d020570696c6f740d0106706c61796572050c01041c0291ae7aebaf064b785542093c2b13169effb34462301e68d4b44f430d010a70696c6f745f6e616d6504050200000000020f00041c0291ae7aebaf064b785542093c2b13169effb34462301e68d4b44f430300050e010e0510020d0204736869700f00041c0291ae7aebaf064b785542093c2b13169effb34462301e68d4b44f430c01041c0291ae7aebaf064b785542093c2b13169effb34462301e68d4b44f430d0109736869705f6e616d65040502000000000d0109705f64656c74615f78020e010e0510020d0204736869700f00041c0291ae7aebaf064b785542093c2b13169effb34462301e68d4b44f430c01041c0291ae7aebaf064b785542093c2b13169effb34462301e68d4b44f430d0109736869705f6e616d65040502000000010d0109705f64656c74615f79020e0510020d0204736869700f00041c0291ae7aebaf064b785542093c2b13169effb34462301e68d4b44f430c01041c0291ae7aebaf064b785542093c2b13169effb34462301e68d4b44f430d0109736869705f6e616d65040502000000020e0510020d0204736869700f00041c0291ae7aebaf064b785542093c2b13169effb34462301e68d4b44f430c01041c0291ae7aebaf064b785542093c2b13169effb34462301e68d4b44f430d0109736869705f6e616d65040502000000030d01136c6173745f6d6f76655f74696d657374616d70020e0210010d0204736869700f00041c0291ae7aebaf064b785542093c2b13169effb34462301e68d4b44f430c01041c0291ae7aebaf064b785542093c2b13169effb34462301e68d4b44f430d0109736869705f6e616d650405020000000c01041c3babcffc6102ec25ced40e1a24fba20371925c46f0299b2b9456360e07044655454c0d010d72657175697265645f6675656c020d0106706c6179657205000e010e0210010d0206736f757263650d0106706c61796572050d030000000d0310010d020570696c6f740d0106706c61796572050c01041c0291ae7aebaf064b785542093c2b13169effb34462301e68d4b44f430d010a70696c6f745f6e616d6504050200000001000d01087469705f736c6f740200010c01041c3babcffc6102ec25ced40e1a24fba20371925c46f0299b2b9456360e07044655454c0d010d72657175697265645f6675656c0203000000000000", + bytecode: "0d03020a012081667fe89e20c352a8428f68efd0c9db1fef6cd15aa36ad4423797bb2c401431010a012081667fe89e20c352a8428f68efd0c9db1fef6cd15aa36ad4423797bb2c401431020306736f757263650d0206736f757263650d0106706c61796572050d030000000004736869700d0204736869700f00041cb6c5e14f31af0c92515ce156625afc4749e30ceef178cfae1f929fff0c01041cb6c5e14f31af0c92515ce156625afc4749e30ceef178cfae1f929fff0d0109736869705f6e616d650405020000000300020d0109705f64656c74615f78020d0109705f64656c74615f79020570696c6f740d020570696c6f740d0106706c61796572050c01041cb6c5e14f31af0c92515ce156625afc4749e30ceef178cfae1f929fff0d010a70696c6f745f6e616d6504050200000000020f00041cb6c5e14f31af0c92515ce156625afc4749e30ceef178cfae1f929fff0300050e010e0510020d0204736869700f00041cb6c5e14f31af0c92515ce156625afc4749e30ceef178cfae1f929fff0c01041cb6c5e14f31af0c92515ce156625afc4749e30ceef178cfae1f929fff0d0109736869705f6e616d65040502000000000d0109705f64656c74615f78020e010e0510020d0204736869700f00041cb6c5e14f31af0c92515ce156625afc4749e30ceef178cfae1f929fff0c01041cb6c5e14f31af0c92515ce156625afc4749e30ceef178cfae1f929fff0d0109736869705f6e616d65040502000000010d0109705f64656c74615f79020e0510020d0204736869700f00041cb6c5e14f31af0c92515ce156625afc4749e30ceef178cfae1f929fff0c01041cb6c5e14f31af0c92515ce156625afc4749e30ceef178cfae1f929fff0d0109736869705f6e616d65040502000000020e0510020d0204736869700f00041cb6c5e14f31af0c92515ce156625afc4749e30ceef178cfae1f929fff0c01041cb6c5e14f31af0c92515ce156625afc4749e30ceef178cfae1f929fff0d0109736869705f6e616d65040502000000030d01136c6173745f6d6f76655f74696d657374616d70020e0210010d0204736869700f00041cb6c5e14f31af0c92515ce156625afc4749e30ceef178cfae1f929fff0c01041cb6c5e14f31af0c92515ce156625afc4749e30ceef178cfae1f929fff0d0109736869705f6e616d650405020000000c01041c98b1c97b219c102dd0e9ba014481272d6ec069ec3ff47c63e291f1b707044655454c0d010d72657175697265645f6675656c020d0106706c6179657205000e010e0210010d0206736f757263650d0106706c61796572050d030000000d0310010d020570696c6f740d0106706c61796572050c01041cb6c5e14f31af0c92515ce156625afc4749e30ceef178cfae1f929fff0d010a70696c6f745f6e616d6504050200000001000d01087469705f736c6f740200010c01041c98b1c97b219c102dd0e9ba014481272d6ec069ec3ff47c63e291f1b707044655454c0d010d72657175697265645f6675656c0203000000000000", encoding: "hex", version: "v1alpha8", }; @@ -58,19 +58,7 @@ export type GatherFuelParams = { } export const GATHER_FUEL_IR = { - bytecode: "0d03020a01203d308c0f3deb1eff764cbb765452c53d30704748681d7acd61c7775aeb8a8e46010a01203d308c0f3deb1eff764cbb765452c53d30704748681d7acd61c7775aeb8a8e46020306736f757263650d0206736f757263650d0106706c61796572050d030000000004736869700d0204736869700f00041c0291ae7aebaf064b785542093c2b13169effb34462301e68d4b44f430c01041c0291ae7aebaf064b785542093c2b13169effb34462301e68d4b44f430d0109736869705f6e616d650405020000000301010d010f705f6761746865725f616d6f756e74020670656c6c65740d020670656c6c65740f00041c3babcffc6102ec25ced40e1a24fba20371925c46f0299b2b9456360e0c01041c3babcffc6102ec25ced40e1a24fba20371925c46f0299b2b9456360e07044655454c0d010f705f6761746865725f616d6f756e74020000000301010d010f705f6761746865725f616d6f756e7402030d0106706c6179657205000e0210010d0206736f757263650d0106706c61796572050d030000000d030f00041c0291ae7aebaf064b785542093c2b13169effb34462301e68d4b44f430300050e0510020d0204736869700f00041c0291ae7aebaf064b785542093c2b13169effb34462301e68d4b44f430c01041c0291ae7aebaf064b785542093c2b13169effb34462301e68d4b44f430d0109736869705f6e616d65040502000000000e0510020d0204736869700f00041c0291ae7aebaf064b785542093c2b13169effb34462301e68d4b44f430c01041c0291ae7aebaf064b785542093c2b13169effb34462301e68d4b44f430d0109736869705f6e616d65040502000000010e0510020d0204736869700f00041c0291ae7aebaf064b785542093c2b13169effb34462301e68d4b44f430c01041c0291ae7aebaf064b785542093c2b13169effb34462301e68d4b44f430d0109736869705f6e616d65040502000000020e0510020d0204736869700f00041c0291ae7aebaf064b785542093c2b13169effb34462301e68d4b44f430c01041c0291ae7aebaf064b785542093c2b13169effb34462301e68d4b44f430d0109736869705f6e616d65040502000000030e0510020d0204736869700f00041c0291ae7aebaf064b785542093c2b13169effb34462301e68d4b44f430c01041c0291ae7aebaf064b785542093c2b13169effb34462301e68d4b44f430d0109736869705f6e616d65040502000000040e0110010d0204736869700f00041c0291ae7aebaf064b785542093c2b13169effb34462301e68d4b44f430c01041c0291ae7aebaf064b785542093c2b13169effb34462301e68d4b44f430d0109736869705f6e616d650405020000000c01041c3babcffc6102ec25ced40e1a24fba20371925c46f0299b2b9456360e07044655454c0d010f705f6761746865725f616d6f756e74020f00041c3babcffc6102ec25ced40e1a24fba20371925c46f0299b2b9456360e0300030e0510020d020670656c6c65740f00041c3babcffc6102ec25ced40e1a24fba20371925c46f0299b2b9456360e0c01041c3babcffc6102ec25ced40e1a24fba20371925c46f0299b2b9456360e07044655454c0d010f705f6761746865725f616d6f756e7402000000000e0510020d020670656c6c65740f00041c3babcffc6102ec25ced40e1a24fba20371925c46f0299b2b9456360e0c01041c3babcffc6102ec25ced40e1a24fba20371925c46f0299b2b9456360e07044655454c0d010f705f6761746865725f616d6f756e740200000001041c0291ae7aebaf064b785542093c2b13169effb34462301e68d4b44f430e0210010d020670656c6c65740f00041c3babcffc6102ec25ced40e1a24fba20371925c46f0299b2b9456360e0c01041c3babcffc6102ec25ced40e1a24fba20371925c46f0299b2b9456360e07044655454c0d010f705f6761746865725f616d6f756e74020000000c01041c3babcffc6102ec25ced40e1a24fba20371925c46f0299b2b9456360e07044655454c0d010f705f6761746865725f616d6f756e7402010d01087469705f736c6f740200000000000000", - encoding: "hex", - version: "v1alpha8", -}; - -export type TransferParams = { - quantity: ArgValue | bigint | number; // Int - receiver: ArgValue | string; // Address - sender: ArgValue | string; // Address -} - -export const TRANSFER_IR = { - bytecode: "0d03000106736f757263650d0206736f757263650d010673656e646572050c0100000d01087175616e746974790200000000020d0108726563656976657205000c0100000d01087175616e74697479020d010673656e64657205000e020e0210010d0206736f757263650d010673656e646572050c0100000d01087175616e74697479020000000c0100000d01087175616e74697479020d0300000000000000", + bytecode: "0d03020a012081667fe89e20c352a8428f68efd0c9db1fef6cd15aa36ad4423797bb2c401431010a012081667fe89e20c352a8428f68efd0c9db1fef6cd15aa36ad4423797bb2c401431020306736f757263650d0206736f757263650d0106706c61796572050d030000000004736869700d0204736869700f00041cb6c5e14f31af0c92515ce156625afc4749e30ceef178cfae1f929fff0c01041cb6c5e14f31af0c92515ce156625afc4749e30ceef178cfae1f929fff0d0109736869705f6e616d650405020000000301010d010f705f6761746865725f616d6f756e74020670656c6c65740d020670656c6c65740f00041c98b1c97b219c102dd0e9ba014481272d6ec069ec3ff47c63e291f1b70c01041c98b1c97b219c102dd0e9ba014481272d6ec069ec3ff47c63e291f1b707044655454c0d010f705f6761746865725f616d6f756e74020000000301010d010f705f6761746865725f616d6f756e7402030d0106706c6179657205000e0210010d0206736f757263650d0106706c61796572050d030000000d030f00041cb6c5e14f31af0c92515ce156625afc4749e30ceef178cfae1f929fff0300050e0510020d0204736869700f00041cb6c5e14f31af0c92515ce156625afc4749e30ceef178cfae1f929fff0c01041cb6c5e14f31af0c92515ce156625afc4749e30ceef178cfae1f929fff0d0109736869705f6e616d65040502000000000e0510020d0204736869700f00041cb6c5e14f31af0c92515ce156625afc4749e30ceef178cfae1f929fff0c01041cb6c5e14f31af0c92515ce156625afc4749e30ceef178cfae1f929fff0d0109736869705f6e616d65040502000000010e0510020d0204736869700f00041cb6c5e14f31af0c92515ce156625afc4749e30ceef178cfae1f929fff0c01041cb6c5e14f31af0c92515ce156625afc4749e30ceef178cfae1f929fff0d0109736869705f6e616d65040502000000020e0510020d0204736869700f00041cb6c5e14f31af0c92515ce156625afc4749e30ceef178cfae1f929fff0c01041cb6c5e14f31af0c92515ce156625afc4749e30ceef178cfae1f929fff0d0109736869705f6e616d65040502000000030e0510020d0204736869700f00041cb6c5e14f31af0c92515ce156625afc4749e30ceef178cfae1f929fff0c01041cb6c5e14f31af0c92515ce156625afc4749e30ceef178cfae1f929fff0d0109736869705f6e616d65040502000000040e0110010d0204736869700f00041cb6c5e14f31af0c92515ce156625afc4749e30ceef178cfae1f929fff0c01041cb6c5e14f31af0c92515ce156625afc4749e30ceef178cfae1f929fff0d0109736869705f6e616d650405020000000c01041c98b1c97b219c102dd0e9ba014481272d6ec069ec3ff47c63e291f1b707044655454c0d010f705f6761746865725f616d6f756e74020f00041c98b1c97b219c102dd0e9ba014481272d6ec069ec3ff47c63e291f1b70300030e0510020d020670656c6c65740f00041c98b1c97b219c102dd0e9ba014481272d6ec069ec3ff47c63e291f1b70c01041c98b1c97b219c102dd0e9ba014481272d6ec069ec3ff47c63e291f1b707044655454c0d010f705f6761746865725f616d6f756e7402000000000e0510020d020670656c6c65740f00041c98b1c97b219c102dd0e9ba014481272d6ec069ec3ff47c63e291f1b70c01041c98b1c97b219c102dd0e9ba014481272d6ec069ec3ff47c63e291f1b707044655454c0d010f705f6761746865725f616d6f756e740200000001041cb6c5e14f31af0c92515ce156625afc4749e30ceef178cfae1f929fff0e0210010d020670656c6c65740f00041c98b1c97b219c102dd0e9ba014481272d6ec069ec3ff47c63e291f1b70c01041c98b1c97b219c102dd0e9ba014481272d6ec069ec3ff47c63e291f1b707044655454c0d010f705f6761746865725f616d6f756e74020000000c01041c98b1c97b219c102dd0e9ba014481272d6ec069ec3ff47c63e291f1b707044655454c0d010f705f6761746865725f616d6f756e7402010d01087469705f736c6f740200000000000000", encoding: "hex", version: "v1alpha8", }; @@ -103,13 +91,6 @@ export class Client { }); } - async transferTx(args: TransferParams): Promise { - return await this.#client.resolve({ - tir: TRANSFER_IR, - args, - }); - } - async submit(params: SubmitParams): Promise { await this.#client.submit(params); } diff --git a/src/txs/create-ship.ts b/src/txs/create-ship.ts index 1516ee7..e0c7c66 100644 --- a/src/txs/create-ship.ts +++ b/src/txs/create-ship.ts @@ -3,6 +3,19 @@ import { ArgValue, SubmitParams, BytesEnvelope } from "tx3-sdk/trp"; import { protocol, CreateShipParams } from "../bindings/protocol"; import signTx from "../utils/sign-tx"; +const CHALLENGE = { + spacetimePolicyHash: new TextEncoder().encode('b6c5e14f31af0c92515ce156625afc4749e30ceef178cfae1f929fff'), + spacetimePolicyRef: '81667fe89e20c352a8428f68efd0c9db1fef6cd15aa36ad4423797bb2c401431#1', + pelletPolicyHash: new TextEncoder().encode('98b1c97b219c102dd0e9ba014481272d6ec069ec3ff47c63e291f1b7'), + pelletPolicyRef: '81667fe89e20c352a8428f68efd0c9db1fef6cd15aa36ad4423797bb2c401431#2', + asteriaPolicyHash: new TextEncoder().encode('b16a0775a5e045b482ab2a98e241c9347f8ffe265bb6acd10452a6cc'), + asteriaPolicyRef: '81667fe89e20c352a8428f68efd0c9db1fef6cd15aa36ad4423797bb2c401431#0', + adminTokenName: new TextEncoder().encode('asteriaAdmin'), + adminTokenPolicyHash: new TextEncoder().encode('516238dd0a79bac4bebe041c44bad8bf880d74720733d2fc0d255d28'), + initialFuel: 5, + shipMintLovelaceFee: 1_000_000, +} + export async function run() { dotenv.config(); @@ -18,9 +31,9 @@ export async function run() { const playerAddress = process.env.PLAYER_ADDRESS; const positionX = 20; const positionY = 20; - const shipName = "SHIP12"; // Replace with the next ship number - const pilotName = "PILOT12"; // Replace with the next ship number - const tipSlot = 87863190; // Replace with the latest block slot + const shipName = "SHIP0"; // Replace with the next ship number + const pilotName = "PILOT0"; // Replace with the next ship number + const tipSlot = 88297128; // Replace with the latest block slot const lastMoveTimestamp = Date.now(); console.log("-- PARAMS"); diff --git a/src/txs/example-transfer.ts b/src/txs/example-transfer.ts deleted file mode 100644 index 9a0a5f7..0000000 --- a/src/txs/example-transfer.ts +++ /dev/null @@ -1,69 +0,0 @@ -import dotenv from "dotenv"; -import { ArgValue, SubmitParams, BytesEnvelope } from "tx3-sdk/trp"; -import { protocol, TransferParams } from "../bindings/protocol"; -import signTx from "../utils/sign-tx"; - -export async function run() { - - dotenv.config(); - - if (!process.env.SENDER_PRIVATE_KEY) { - throw new Error("SENDER_PRIVATE_KEY environment variable is not set"); - } - - if (!process.env.SENDER_ADDRESS) { - throw new Error("SENDER_ADDRESS environment variable is not set"); - } - - if (!process.env.RECEIVER_ADDRESS) { - throw new Error("RECEIVER_ADDRESS environment variable is not set"); - } - - const sender = process.env.SENDER_ADDRESS; - const receiver = process.env.RECEIVER_ADDRESS; - const quantity = 1000000; - - console.log("-- PARAMS"); - console.log({ sender, receiver, quantity }); - - const args: TransferParams = { - sender: ArgValue.from(sender), - receiver: ArgValue.from(receiver), - quantity: ArgValue.from(quantity), - }; - - const response = await protocol.transferTx(args); - - console.log("-- RESOLVE"); - console.log(response); - - const witnesses = signTx(response.hash, process.env.SENDER_PRIVATE_KEY); - - console.log("-- SIGN TX"); - console.log(witnesses); - - const submitParams: SubmitParams = { - tx: { - content: response.tx, - encoding: 'hex' - } as BytesEnvelope, - witnesses - }; - - console.log("-- SUBMIT"); - console.log(submitParams); - - try { - await protocol.submit(submitParams); - console.log("-- DONE"); - } catch (error) { - console.error("-- SUBMIT ERROR"); - console.error("Failed to submit transaction:", error); - } -} - -run().catch((error) => { - console.error("-- ERROR"); - console.error("Error running transaction:", error); - process.exit(1); -}); \ No newline at end of file From b4b9fa227369b92a468a86fba5de717a1fc52aad Mon Sep 17 00:00:00 2001 From: EehMauro Date: Tue, 12 Aug 2025 13:17:40 -0300 Subject: [PATCH 2/2] feat: update --- README.md | 13 +++++++++++++ main.tx3 | 2 +- src/bindings/protocol.ts | 2 +- src/txs/create-ship.ts | 12 +++++++----- 4 files changed, 22 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index fb1dda1..97451c4 100644 --- a/README.md +++ b/README.md @@ -12,8 +12,21 @@ First you need to install the Node dependencies: npm install ``` +### Provide the required env vars + +You need to create a `.env` file with your wallet info: + +```env +PLAYER_PRIVATE_KEY="1234" +PLAYER_ADDRESS="addr..." +``` + ### Create Ship Tx +This is the first step in order to play the game. + + + ```bash npm run create-ship ``` diff --git a/main.tx3 b/main.tx3 index 36cae2a..0c314ae 100644 --- a/main.tx3 +++ b/main.tx3 @@ -71,7 +71,7 @@ tx create_ship( ship_mint_lovelace_fee: 1000000, // Should be taken from asteria script datum spacetime_policy_hash: 0xb6c5e14f31af0c92515ce156625afc4749e30ceef178cfae1f929fff, spacetime_policy_ref: 0x81667fe89e20c352a8428f68efd0c9db1fef6cd15aa36ad4423797bb2c401431#1, - asteria_policy_ref: 0x81667fe89e20c352a8428f68efd0c9db1fef6cd15aa36ad4423797bb2c401431#2, + asteria_policy_ref: 0x81667fe89e20c352a8428f68efd0c9db1fef6cd15aa36ad4423797bb2c401431#0, pellet_policy_ref: 0x81667fe89e20c352a8428f68efd0c9db1fef6cd15aa36ad4423797bb2c401431#2, } diff --git a/src/bindings/protocol.ts b/src/bindings/protocol.ts index 67f622b..add0e37 100644 --- a/src/bindings/protocol.ts +++ b/src/bindings/protocol.ts @@ -28,7 +28,7 @@ export type CreateShipParams = { } export const CREATE_SHIP_IR = { - bytecode: "0d03030a012081667fe89e20c352a8428f68efd0c9db1fef6cd15aa36ad4423797bb2c401431010a012081667fe89e20c352a8428f68efd0c9db1fef6cd15aa36ad4423797bb2c401431020a012081667fe89e20c352a8428f68efd0c9db1fef6cd15aa36ad4423797bb2c401431020206736f757263650d0206736f757263650d0106706c61796572050e010e010d030c01000005fc80841e000f0105040000000007617374657269610d0207617374657269610f00041cb16a0775a5e045b482ab2a98e241c9347f8ffe265bb6acd10452a6cc0c01041c516238dd0a79bac4bebe041c44bad8bf880d74720733d2fc0d255d28070c6173746572696141646d696e0502000000030000030d0106706c6179657205000e020e010e020e0210010d0206736f757263650d0106706c61796572050e010e010d030c01000005fc80841e000f0105040000000d030c01000005fc80841e000c01041cb6c5e14f31af0c92515ce156625afc4749e30ceef178cfae1f929fff0d010a70696c6f745f6e616d650405020f0105040f00041cb16a0775a5e045b482ab2a98e241c9347f8ffe265bb6acd10452a6cc0300020e010e0510020d0207617374657269610f00041cb16a0775a5e045b482ab2a98e241c9347f8ffe265bb6acd10452a6cc0c01041c516238dd0a79bac4bebe041c44bad8bf880d74720733d2fc0d255d28070c6173746572696141646d696e05020000000005020e0510020d0207617374657269610f00041cb16a0775a5e045b482ab2a98e241c9347f8ffe265bb6acd10452a6cc0c01041c516238dd0a79bac4bebe041c44bad8bf880d74720733d2fc0d255d28070c6173746572696141646d696e0502000000010e0110010d0207617374657269610f00041cb16a0775a5e045b482ab2a98e241c9347f8ffe265bb6acd10452a6cc0c01041c516238dd0a79bac4bebe041c44bad8bf880d74720733d2fc0d255d28070c6173746572696141646d696e05020000000c01000005fc80841e000f00041cb6c5e14f31af0c92515ce156625afc4749e30ceef178cfae1f929fff0300050d0107705f706f735f78020d0107705f706f735f79020d0109736869705f6e616d65040d010a70696c6f745f6e616d65040d01136c6173745f6d6f76655f74696d657374616d70020e010e010c01041cb6c5e14f31af0c92515ce156625afc4749e30ceef178cfae1f929fff0d0109736869705f6e616d650405020c01041c98b1c97b219c102dd0e9ba014481272d6ec069ec3ff47c63e291f1b707044655454c050a0f01050401000d01087469705f736c6f7402020e010c01041cb6c5e14f31af0c92515ce156625afc4749e30ceef178cfae1f929fff0d010a70696c6f745f6e616d650405020c01041cb6c5e14f31af0c92515ce156625afc4749e30ceef178cfae1f929fff0d0109736869705f6e616d650405020300000c01041c98b1c97b219c102dd0e9ba014481272d6ec069ec3ff47c63e291f1b707044655454c050a0300000000010d020a636f6c6c61746572616c0d0106706c61796572050d030000010000", + bytecode: "0d03030a012081667fe89e20c352a8428f68efd0c9db1fef6cd15aa36ad4423797bb2c401431010a012081667fe89e20c352a8428f68efd0c9db1fef6cd15aa36ad4423797bb2c401431000a012081667fe89e20c352a8428f68efd0c9db1fef6cd15aa36ad4423797bb2c401431020206736f757263650d0206736f757263650d0106706c61796572050e010e010d030c01000005fc80841e000f0105040000000007617374657269610d0207617374657269610f00041cb16a0775a5e045b482ab2a98e241c9347f8ffe265bb6acd10452a6cc0c01041c516238dd0a79bac4bebe041c44bad8bf880d74720733d2fc0d255d28070c6173746572696141646d696e0502000000030000030d0106706c6179657205000e020e010e020e0210010d0206736f757263650d0106706c61796572050e010e010d030c01000005fc80841e000f0105040000000d030c01000005fc80841e000c01041cb6c5e14f31af0c92515ce156625afc4749e30ceef178cfae1f929fff0d010a70696c6f745f6e616d650405020f0105040f00041cb16a0775a5e045b482ab2a98e241c9347f8ffe265bb6acd10452a6cc0300020e010e0510020d0207617374657269610f00041cb16a0775a5e045b482ab2a98e241c9347f8ffe265bb6acd10452a6cc0c01041c516238dd0a79bac4bebe041c44bad8bf880d74720733d2fc0d255d28070c6173746572696141646d696e05020000000005020e0510020d0207617374657269610f00041cb16a0775a5e045b482ab2a98e241c9347f8ffe265bb6acd10452a6cc0c01041c516238dd0a79bac4bebe041c44bad8bf880d74720733d2fc0d255d28070c6173746572696141646d696e0502000000010e0110010d0207617374657269610f00041cb16a0775a5e045b482ab2a98e241c9347f8ffe265bb6acd10452a6cc0c01041c516238dd0a79bac4bebe041c44bad8bf880d74720733d2fc0d255d28070c6173746572696141646d696e05020000000c01000005fc80841e000f00041cb6c5e14f31af0c92515ce156625afc4749e30ceef178cfae1f929fff0300050d0107705f706f735f78020d0107705f706f735f79020d0109736869705f6e616d65040d010a70696c6f745f6e616d65040d01136c6173745f6d6f76655f74696d657374616d70020e010e010c01041cb6c5e14f31af0c92515ce156625afc4749e30ceef178cfae1f929fff0d0109736869705f6e616d650405020c01041c98b1c97b219c102dd0e9ba014481272d6ec069ec3ff47c63e291f1b707044655454c050a0f01050401000d01087469705f736c6f7402020e010c01041cb6c5e14f31af0c92515ce156625afc4749e30ceef178cfae1f929fff0d010a70696c6f745f6e616d650405020c01041cb6c5e14f31af0c92515ce156625afc4749e30ceef178cfae1f929fff0d0109736869705f6e616d650405020300000c01041c98b1c97b219c102dd0e9ba014481272d6ec069ec3ff47c63e291f1b707044655454c050a0300000000010d020a636f6c6c61746572616c0d0106706c61796572050d030000010000", encoding: "hex", version: "v1alpha8", }; diff --git a/src/txs/create-ship.ts b/src/txs/create-ship.ts index e0c7c66..e16c0b5 100644 --- a/src/txs/create-ship.ts +++ b/src/txs/create-ship.ts @@ -1,9 +1,9 @@ import dotenv from "dotenv"; -import { ArgValue, SubmitParams, BytesEnvelope } from "tx3-sdk/trp"; +import { SubmitParams, BytesEnvelope } from "tx3-sdk/trp"; import { protocol, CreateShipParams } from "../bindings/protocol"; import signTx from "../utils/sign-tx"; -const CHALLENGE = { +const CHALLENGE_PREVIEW = { spacetimePolicyHash: new TextEncoder().encode('b6c5e14f31af0c92515ce156625afc4749e30ceef178cfae1f929fff'), spacetimePolicyRef: '81667fe89e20c352a8428f68efd0c9db1fef6cd15aa36ad4423797bb2c401431#1', pelletPolicyHash: new TextEncoder().encode('98b1c97b219c102dd0e9ba014481272d6ec069ec3ff47c63e291f1b7'), @@ -28,12 +28,14 @@ export async function run() { throw new Error("PLAYER_ADDRESS environment variable is not set"); } + const challenge = CHALLENGE_PREVIEW; // Select the challenge you want to play + const playerAddress = process.env.PLAYER_ADDRESS; - const positionX = 20; - const positionY = 20; + const positionX = 20; // Replace with your desired start X position + const positionY = 20; // Replace with your desired start Y position const shipName = "SHIP0"; // Replace with the next ship number const pilotName = "PILOT0"; // Replace with the next ship number - const tipSlot = 88297128; // Replace with the latest block slot + const tipSlot = 88358609; // Replace with the latest block slot const lastMoveTimestamp = Date.now(); console.log("-- PARAMS");