@molteee/arena-tools 0.2.3 → 0.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -8,7 +8,6 @@
8
8
  import { encodeFunctionData, parseEther, getAddress as checksumAddress } from "viem";
9
9
  import { CONTRACTS, GAME_CONTRACTS, GAME_TYPES } from "../config.js";
10
10
  import { escrowAbi } from "../contracts.js";
11
- import { getPublicClient, getAddress } from "../client.js";
12
11
  import { sendTx } from "../utils/tx.js";
13
12
  import { event, fail } from "../utils/output.js";
14
13
  import { respondCommand } from "./respond.js";
@@ -19,7 +18,6 @@ export async function playCommand(opponent, wager, gameType, opts) {
19
18
  }
20
19
  const gameContract = GAME_CONTRACTS[gt];
21
20
  const wagerWei = parseEther(wager);
22
- const myAddress = getAddress();
23
21
  // Step 1: Create the challenge
24
22
  event({ event: "challenging", opponent, wager, gameType: gt });
25
23
  const data = encodeFunctionData({
@@ -27,19 +25,20 @@ export async function playCommand(opponent, wager, gameType, opts) {
27
25
  functionName: "createMatch",
28
26
  args: [checksumAddress(opponent), gameContract],
29
27
  });
30
- const { hash } = await sendTx({
28
+ const { hash, logs } = await sendTx({
31
29
  to: CONTRACTS.Escrow,
32
30
  data,
33
31
  value: wagerWei,
34
32
  });
35
- // Get the match ID from nextMatchId
36
- const client = getPublicClient();
37
- const nextId = (await client.readContract({
38
- address: CONTRACTS.Escrow,
39
- abi: escrowAbi,
40
- functionName: "nextMatchId",
41
- }));
42
- const matchId = Number(nextId) - 1;
33
+ // Parse matchId from MatchCreated event in tx logs (topics[1]).
34
+ // Race-safe reads directly from our own tx receipt, not from global state.
35
+ let matchId = -1;
36
+ for (const log of logs) {
37
+ if (log.address.toLowerCase() === CONTRACTS.Escrow.toLowerCase() && log.topics.length > 1) {
38
+ matchId = Number(BigInt(log.topics[1]));
39
+ break;
40
+ }
41
+ }
43
42
  event({ event: "challenge_created", matchId, opponent, wager, gameType: gt, txHash: hash });
44
43
  // Step 2: Delegate to respond — it handles waiting for acceptance, game creation, and play
45
44
  await respondCommand(String(matchId), opts);
@@ -1 +1 @@
1
- {"version":3,"file":"play.js","sourceRoot":"","sources":["../../src/commands/play.ts"],"names":[],"mappings":"AAAA,wFAAwF;AACxF,mFAAmF;AACnF,EAAE;AACF,0FAA0F;AAC1F,EAAE;AACF,oFAAoF;AACpF,uDAAuD;AACvD,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,UAAU,IAAI,eAAe,EAAE,MAAM,MAAM,CAAC;AACrF,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,QAAgB,EAAE,KAAa,EAAE,QAAgB,EAAE,IAAS;IAC1F,MAAM,EAAE,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IAClC,IAAI,CAAC,CAAC,EAAE,IAAI,UAAU,CAAC,EAAE,CAAC;QACtB,IAAI,CAAC,sBAAsB,QAAQ,mCAAmC,EAAE,mBAAmB,CAAC,CAAC;IACjG,CAAC;IACD,MAAM,YAAY,GAAG,cAAc,CAAC,EAAE,CAAC,CAAC;IACxC,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IACnC,MAAM,SAAS,GAAG,UAAU,EAAE,CAAC;IAE/B,+BAA+B;IAC/B,KAAK,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;IAC/D,MAAM,IAAI,GAAG,kBAAkB,CAAC;QAC5B,GAAG,EAAE,SAAS;QACd,YAAY,EAAE,aAAa;QAC3B,IAAI,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC;KAClD,CAAC,CAAC;IACH,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC;QAC1B,EAAE,EAAE,SAAS,CAAC,MAAM;QACpB,IAAI;QACJ,KAAK,EAAE,QAAQ;KAClB,CAAC,CAAC;IAEH,oCAAoC;IACpC,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,MAAM,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,YAAY,CAAC;QACtC,OAAO,EAAE,SAAS,CAAC,MAAM;QACzB,GAAG,EAAE,SAAS;QACd,YAAY,EAAE,aAAa;KAC9B,CAAC,CAAkB,CAAC;IACrB,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAEnC,KAAK,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAE5F,2FAA2F;IAC3F,MAAM,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC;AAChD,CAAC"}
1
+ {"version":3,"file":"play.js","sourceRoot":"","sources":["../../src/commands/play.ts"],"names":[],"mappings":"AAAA,wFAAwF;AACxF,mFAAmF;AACnF,EAAE;AACF,0FAA0F;AAC1F,EAAE;AACF,oFAAoF;AACpF,uDAAuD;AACvD,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,UAAU,IAAI,eAAe,EAAE,MAAM,MAAM,CAAC;AACrF,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,QAAgB,EAAE,KAAa,EAAE,QAAgB,EAAE,IAAS;IAC1F,MAAM,EAAE,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IAClC,IAAI,CAAC,CAAC,EAAE,IAAI,UAAU,CAAC,EAAE,CAAC;QACtB,IAAI,CAAC,sBAAsB,QAAQ,mCAAmC,EAAE,mBAAmB,CAAC,CAAC;IACjG,CAAC;IACD,MAAM,YAAY,GAAG,cAAc,CAAC,EAAE,CAAC,CAAC;IACxC,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAEnC,+BAA+B;IAC/B,KAAK,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;IAC/D,MAAM,IAAI,GAAG,kBAAkB,CAAC;QAC5B,GAAG,EAAE,SAAS;QACd,YAAY,EAAE,aAAa;QAC3B,IAAI,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC;KAClD,CAAC,CAAC;IACH,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC;QAChC,EAAE,EAAE,SAAS,CAAC,MAAM;QACpB,IAAI;QACJ,KAAK,EAAE,QAAQ;KAClB,CAAC,CAAC;IAEH,gEAAgE;IAChE,6EAA6E;IAC7E,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC;IACjB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACrB,IAAI,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,SAAS,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxF,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC;YACzC,MAAM;QACV,CAAC;IACL,CAAC;IAED,KAAK,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAE5F,2FAA2F;IAC3F,MAAM,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC;AAChD,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@molteee/arena-tools",
3
- "version": "0.2.3",
3
+ "version": "0.2.4",
4
4
  "description": "CLI tool for interacting with the Molteee Gaming Arena on Monad testnet",
5
5
  "type": "module",
6
6
  "bin": {