@molteee/arena-tools 0.2.9 → 0.2.11
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.
- package/dist/commands/auction-round.js +13 -1
- package/dist/commands/auction-round.js.map +1 -1
- package/dist/commands/auction.d.ts +2 -1
- package/dist/commands/auction.js +33 -6
- package/dist/commands/auction.js.map +1 -1
- package/dist/utils/tx.d.ts +2 -2
- package/dist/utils/tx.js +25 -20
- package/dist/utils/tx.js.map +1 -1
- package/package.json +1 -1
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
// Usage: npx arena-tools auction-round <game_id> <bid_in_MON>
|
|
5
5
|
import { encodeFunctionData, parseEther, formatEther } from "viem";
|
|
6
6
|
import { CONTRACTS } from "../config.js";
|
|
7
|
-
import { auctionGameAbi } from "../contracts.js";
|
|
7
|
+
import { auctionGameAbi, escrowAbi } from "../contracts.js";
|
|
8
8
|
import { getPublicClient, getAddress } from "../client.js";
|
|
9
9
|
import { sendTx } from "../utils/tx.js";
|
|
10
10
|
import { generateSalt, saveSalt, loadSalt, deleteSalt, commitBidHash } from "../utils/commit-reveal.js";
|
|
@@ -54,6 +54,18 @@ export async function auctionRoundCommand(gameId, bid) {
|
|
|
54
54
|
ok({ gameId: Number(gid), gameComplete: true, message: "Game is already settled." });
|
|
55
55
|
return;
|
|
56
56
|
}
|
|
57
|
+
// Validate bid ≤ wager BEFORE committing (contract rejects at reveal, catch early)
|
|
58
|
+
const match = await retry(() => client.readContract({
|
|
59
|
+
address: CONTRACTS.Escrow, abi: escrowAbi, functionName: "getMatch", args: [game.escrowMatchId],
|
|
60
|
+
}), "getMatch");
|
|
61
|
+
if (bidWei > match.wager) {
|
|
62
|
+
fail(`Bid ${bid} MON exceeds match wager ${formatEther(match.wager)} MON. Bid must be ≤ wager.`, "BID_EXCEEDS_WAGER");
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
if (bidWei <= 0n) {
|
|
66
|
+
fail(`Bid must be greater than 0. Got: ${bid} MON`, "INVALID_BID");
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
57
69
|
const isPlayer1 = game.player1.toLowerCase() === myAddress.toLowerCase();
|
|
58
70
|
const phase = Number(game.phase);
|
|
59
71
|
// ── Step 1: Commit ──────────────────────────────────────────────────────
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auction-round.js","sourceRoot":"","sources":["../../src/commands/auction-round.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,mEAAmE;AACnE,EAAE;AACF,8DAA8D;AAC9D,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,MAAM,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"auction-round.js","sourceRoot":"","sources":["../../src/commands/auction-round.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/** Create a new Auction game for a match */
|
|
2
2
|
export declare function auctionCreateCommand(matchId: string): Promise<void>;
|
|
3
|
-
/** Commit a bid amount (in MON)
|
|
3
|
+
/** Commit a bid amount (in MON).
|
|
4
|
+
* Validates bid ≤ match wager BEFORE committing to prevent unrevealable bids. */
|
|
4
5
|
export declare function auctionCommitCommand(gameId: string, bid: string): Promise<void>;
|
|
5
6
|
/** Reveal the committed bid */
|
|
6
7
|
export declare function auctionRevealCommand(gameId: string): Promise<void>;
|
package/dist/commands/auction.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
// arena-tools auction-* — step-by-step Auction game commands
|
|
2
2
|
// auction-create: Create a new Auction game
|
|
3
|
-
// auction-commit: Commit a bid amount
|
|
3
|
+
// auction-commit: Commit a bid amount (validates bid ≤ wager before committing)
|
|
4
4
|
// auction-reveal: Reveal the committed bid
|
|
5
|
-
import { encodeFunctionData, parseEther } from "viem";
|
|
5
|
+
import { encodeFunctionData, parseEther, formatEther } from "viem";
|
|
6
6
|
import { CONTRACTS } from "../config.js";
|
|
7
|
-
import { auctionGameAbi } from "../contracts.js";
|
|
8
|
-
import { getAddress } from "../client.js";
|
|
7
|
+
import { auctionGameAbi, escrowAbi } from "../contracts.js";
|
|
8
|
+
import { getPublicClient, getAddress } from "../client.js";
|
|
9
9
|
import { sendTx } from "../utils/tx.js";
|
|
10
10
|
import { generateSalt, saveSalt, loadSalt, deleteSalt, commitBidHash } from "../utils/commit-reveal.js";
|
|
11
11
|
import { ok, fail } from "../utils/output.js";
|
|
@@ -35,9 +35,35 @@ export async function auctionCreateCommand(matchId) {
|
|
|
35
35
|
txHash: hash,
|
|
36
36
|
});
|
|
37
37
|
}
|
|
38
|
-
/** Commit a bid amount (in MON)
|
|
38
|
+
/** Commit a bid amount (in MON).
|
|
39
|
+
* Validates bid ≤ match wager BEFORE committing to prevent unrevealable bids. */
|
|
39
40
|
export async function auctionCommitCommand(gameId, bid) {
|
|
40
41
|
const bidWei = parseEther(bid);
|
|
42
|
+
const client = getPublicClient();
|
|
43
|
+
const gid = BigInt(gameId);
|
|
44
|
+
// Fetch game state to get the escrow match ID, then fetch the wager
|
|
45
|
+
const game = await client.readContract({
|
|
46
|
+
address: CONTRACTS.AuctionGame,
|
|
47
|
+
abi: auctionGameAbi,
|
|
48
|
+
functionName: "getGame",
|
|
49
|
+
args: [gid],
|
|
50
|
+
});
|
|
51
|
+
const match = await client.readContract({
|
|
52
|
+
address: CONTRACTS.Escrow,
|
|
53
|
+
abi: escrowAbi,
|
|
54
|
+
functionName: "getMatch",
|
|
55
|
+
args: [game.escrowMatchId],
|
|
56
|
+
});
|
|
57
|
+
const wager = match.wager;
|
|
58
|
+
// Validate: bid must be > 0 and ≤ wager (contract enforces at reveal, but catch early)
|
|
59
|
+
if (bidWei <= 0n) {
|
|
60
|
+
fail(`Bid must be greater than 0. Got: ${bid} MON`, "INVALID_BID");
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
if (bidWei > wager) {
|
|
64
|
+
fail(`Bid ${bid} MON exceeds match wager ${formatEther(wager)} MON. Bid must be ≤ wager.`, "BID_EXCEEDS_WAGER");
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
41
67
|
const salt = generateSalt();
|
|
42
68
|
const hash = commitBidHash(bidWei, salt);
|
|
43
69
|
// Save salt and bid for reveal (include wallet address to avoid collision)
|
|
@@ -46,7 +72,7 @@ export async function auctionCommitCommand(gameId, bid) {
|
|
|
46
72
|
const data = encodeFunctionData({
|
|
47
73
|
abi: auctionGameAbi,
|
|
48
74
|
functionName: "commitBid",
|
|
49
|
-
args: [
|
|
75
|
+
args: [gid, hash],
|
|
50
76
|
});
|
|
51
77
|
const { hash: txHash } = await sendTx({
|
|
52
78
|
to: CONTRACTS.AuctionGame,
|
|
@@ -56,6 +82,7 @@ export async function auctionCommitCommand(gameId, bid) {
|
|
|
56
82
|
action: "auction-commit",
|
|
57
83
|
gameId: parseInt(gameId),
|
|
58
84
|
bid,
|
|
85
|
+
maxBid: formatEther(wager),
|
|
59
86
|
commitHash: hash,
|
|
60
87
|
txHash,
|
|
61
88
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auction.js","sourceRoot":"","sources":["../../src/commands/auction.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,4CAA4C;AAC5C,
|
|
1
|
+
{"version":3,"file":"auction.js","sourceRoot":"","sources":["../../src/commands/auction.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/tx.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Send a write transaction with automatic retry on 429 rate limits.
|
|
3
|
-
*
|
|
4
|
-
*
|
|
3
|
+
* Always estimates gas to avoid overpaying (Monad charges full gas limit).
|
|
4
|
+
* Falls back to 1M gas limit only if estimation fails or ARENA_SKIP_ESTIMATE=1.
|
|
5
5
|
* Returns the transaction hash, gas used, and receipt logs.
|
|
6
6
|
*/
|
|
7
7
|
export declare function sendTx(params: {
|
package/dist/utils/tx.js
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { getPublicClient, getWalletClient } from "../client.js";
|
|
2
|
-
//
|
|
3
|
-
// 1M
|
|
4
|
-
//
|
|
5
|
-
//
|
|
6
|
-
|
|
7
|
-
const
|
|
8
|
-
const SHOULD_ESTIMATE = !!process.env.ARENA_ESTIMATE_GAS;
|
|
2
|
+
// IMPORTANT: Monad charges for the FULL gas limit, not just gas used.
|
|
3
|
+
// A hardcoded 1M limit costs ~0.102 MON per tx even for simple actions (~170k actual).
|
|
4
|
+
// Always estimate gas to avoid 5-6x overpay. Fallback to 1M only if estimation fails.
|
|
5
|
+
// Set ARENA_SKIP_ESTIMATE=1 to use fixed gas limit (NOT recommended).
|
|
6
|
+
const FALLBACK_GAS = 1000000n;
|
|
7
|
+
const SHOULD_SKIP_ESTIMATE = !!process.env.ARENA_SKIP_ESTIMATE;
|
|
9
8
|
// Max retries for 429 rate limit errors at the sendTx level
|
|
10
9
|
const MAX_RETRIES = 3;
|
|
11
10
|
const BASE_DELAY_MS = 2000;
|
|
@@ -20,8 +19,8 @@ function sleep(ms) {
|
|
|
20
19
|
}
|
|
21
20
|
/**
|
|
22
21
|
* Send a write transaction with automatic retry on 429 rate limits.
|
|
23
|
-
*
|
|
24
|
-
*
|
|
22
|
+
* Always estimates gas to avoid overpaying (Monad charges full gas limit).
|
|
23
|
+
* Falls back to 1M gas limit only if estimation fails or ARENA_SKIP_ESTIMATE=1.
|
|
25
24
|
* Returns the transaction hash, gas used, and receipt logs.
|
|
26
25
|
*/
|
|
27
26
|
export async function sendTx(params) {
|
|
@@ -31,17 +30,23 @@ export async function sendTx(params) {
|
|
|
31
30
|
let lastError;
|
|
32
31
|
for (let attempt = 0; attempt <= MAX_RETRIES; attempt++) {
|
|
33
32
|
try {
|
|
34
|
-
// Gas:
|
|
35
|
-
let gas =
|
|
36
|
-
if (
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
33
|
+
// Gas: always estimate to avoid overpay. Fallback to 1M on failure.
|
|
34
|
+
let gas = FALLBACK_GAS;
|
|
35
|
+
if (!SHOULD_SKIP_ESTIMATE) {
|
|
36
|
+
try {
|
|
37
|
+
const gasEstimate = await publicClient.estimateGas({
|
|
38
|
+
account: account.address,
|
|
39
|
+
to: params.to,
|
|
40
|
+
data: params.data,
|
|
41
|
+
value: params.value ?? 0n,
|
|
42
|
+
});
|
|
43
|
+
// 1.5x buffer — Monad needs more headroom than Ethereum
|
|
44
|
+
gas = (gasEstimate * 3n) / 2n;
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
// Estimation failed (e.g. rate limited) — use fallback
|
|
48
|
+
gas = FALLBACK_GAS;
|
|
49
|
+
}
|
|
45
50
|
}
|
|
46
51
|
// Send transaction
|
|
47
52
|
const hash = await walletClient.sendTransaction({
|
package/dist/utils/tx.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tx.js","sourceRoot":"","sources":["../../src/utils/tx.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEhE,
|
|
1
|
+
{"version":3,"file":"tx.js","sourceRoot":"","sources":["../../src/utils/tx.ts"],"names":[],"mappings":"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"}
|