@molteee/arena-tools 0.2.9 → 0.2.10

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.
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Send a write transaction with automatic retry on 429 rate limits.
3
- * By default uses a fixed gas limit (300k) to skip estimateGas and save an RPC call.
4
- * Set ARENA_ESTIMATE_GAS=1 to use dynamic gas estimation instead.
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
- // Default gas limit skips estimateGas to save 1 RPC call per transaction.
3
- // 1M covers all arena contracts including claim-timeout which triggers
4
- // _resolveRound + _settleGame + escrow.settle() + ELO updates (~600k+ gas).
5
- // On Monad you only pay for gas USED, not the limit, so overshooting is free.
6
- // Set ARENA_ESTIMATE_GAS=1 to use dynamic estimation instead.
7
- const DEFAULT_GAS = 1000000n;
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
- * By default uses a fixed gas limit (300k) to skip estimateGas and save an RPC call.
24
- * Set ARENA_ESTIMATE_GAS=1 to use dynamic gas estimation instead.
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: use fixed default or estimate dynamically
35
- let gas = DEFAULT_GAS;
36
- if (SHOULD_ESTIMATE) {
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;
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({
@@ -1 +1 @@
1
- {"version":3,"file":"tx.js","sourceRoot":"","sources":["../../src/utils/tx.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tx.js","sourceRoot":"","sources":["../../src/utils/tx.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@molteee/arena-tools",
3
- "version": "0.2.9",
3
+ "version": "0.2.10",
4
4
  "description": "CLI tool for interacting with the Molteee Gaming Arena on Monad testnet",
5
5
  "type": "module",
6
6
  "bin": {