Skip to content

Conversation

pyAndr3w
Copy link
Collaborator

@pyAndr3w pyAndr3w commented Oct 9, 2025

Closes #198

Copy link

github-actions bot commented Oct 9, 2025

To fix the formatting issues:

  1. Install necessary dependencies: npm ci
  2. Then, run this command:
npx remark -o --silent --silently-ignore standard/wallets/highload/overview.mdx standard/wallets/highload/v2/specification.mdx standard/wallets/highload/v3/how-to/create.mdx standard/wallets/highload/v3/how-to/send-batch-transfers.mdx standard/wallets/highload/v3/how-to/send-single-transfer.mdx standard/wallets/highload/v3/how-to/verify-is-processed.mdx standard/wallets/highload/v3/specification.mdx 

Copy link

github-actions bot commented Oct 9, 2025

Thanks for the thorough updates across the Highload wallet docs. I did a focused review of the changed pages under standard/wallets/highload and found several high‑severity items that need fixes before merge.

Findings (13)

High (13)

[HIGH] Emojis used in comparison table

Location:

| **Replay rollback on action failure** | ⚠️ Yes | ⚠️ Yes | ✅ No (two-transaction pattern) |
| **Fund locking risk** | ✅ No | ⚠️ Yes | ✅ No |
| **Gas efficiency** | Not optimized | ⚠️ High cleanup costs | ✅ Optimized |
| **Max batch size** | 255 messages | 255 messages | 254 messages |
| **Replay protection** | Simple seqno | Query ID dictionary | Dual dictionary + timestamp |
| **Transaction pattern** | Single transaction | Single transaction | Two-transaction pattern |
| **Query ID space** | Sequential seqno | ~32,000 | 8,380,416 unique IDs |
| **Parallel submissions** | ❌ Sequential only | ✅ Supported | ✅ Supported |
| **Status** | ⚠️ Deprecated | ⚠️ Deprecated | ✅ Recommended |

Description:
The version comparison table uses emojis (⚠️, ✅, ❌), which are banned in technical docs for accessibility and localization. The style guide requires clear text equivalents.

Suggestion:
Replace emojis with plain text.

- | **Replay rollback on action failure** | ⚠️ Yes            | ⚠️ Yes                    | ✅ No (two-transaction pattern) |
- | **Fund locking risk**             | ✅ No                 | ⚠️ Yes                    | ✅ No                          |
- | **Gas efficiency**                | Not optimized         | ⚠️ High cleanup costs     | ✅ Optimized                   |
+ | **Replay rollback on action failure** | Yes                 | Yes                       | No (two-transaction pattern)   |
+ | **Fund locking risk**             | No                    | Yes                       | No                             |
+ | **Gas efficiency**                | Not optimized         | High cleanup costs        | Optimized                      |
- | **Parallel submissions**          | ❌ Sequential only    | ✅ Supported              | ✅ Supported                   |
- | **Status**                        | ⚠️ Deprecated         | ⚠️ Deprecated             | ✅ Recommended                 |
+ | **Parallel submissions**          | Sequential only       | Supported                 | Supported                      |
+ | **Status**                        | Deprecated            | Deprecated                | Recommended                    |

[HIGH] Moving-target GitHub link to contract code

Location:

- [Highload Wallet v1](https://github.com/ton-blockchain/ton/blob/master/crypto/smartcont/highload-wallet-code.fc) — legacy version (deprecated)

Description:
The “Highload Wallet v1” link points to the master branch. Precision-critical code references must be stable; use a commit permalink.

Suggestion:
Update to a commit permalink.

-- [Highload Wallet v1](https://github.com/ton-blockchain/ton/blob/master/crypto/smartcont/highload-wallet-code.fc) — legacy version (deprecated)
+- [Highload Wallet v1](https://github.com/ton-blockchain/ton/blob/<COMMIT>/crypto/smartcont/highload-wallet-code.fc) — legacy version (deprecated)

[HIGH] Unlabeled code block for message layout

Location:

```
signature:bits512
subwallet_id:uint32
query_id:uint64
messages:(HashmapE 16 Cell)
```

Description:
The fenced block showing the external message layout lacks a language tag. All code fences must declare a language for correct highlighting and tooling.

Suggestion:
Tag the block as text.

-```
+```text
 signature:bits512
 subwallet_id:uint32
 query_id:uint64
 messages:(HashmapE 16 Cell)

#### [HIGH] Moving-target GitHub link to contract code

Location: https://github.com/tact-lang/mintlify-ton-docs/blob/98d17bab6ace55c7551f3ac2e0869fac5a2415df/standard/wallets/highload/v2/specification.mdx?plain=1#L278-L279

Description:
The “Source code” link references master, which is mutable. Use a commit permalink to ensure reproducible references.

Suggestion:
Link to a specific commit.

```diff
-**Source code:**  
-[ton-blockchain/ton (highload-wallet-v2-code.fc)](https://github.com/ton-blockchain/ton/blob/master/crypto/smartcont/highload-wallet-v2-code.fc)
+**Source code:**  
+[ton-blockchain/ton (highload-wallet-v2-code.fc)](https://github.com/ton-blockchain/ton/blob/<COMMIT>/crypto/smartcont/highload-wallet-v2-code.fc)

[HIGH] Unlabeled code block for message layout

Location:

```
signature:bits512
^[ subwallet_id:uint32
message_to_send:^Cell
send_mode:uint8
query_id:QueryId
created_at:uint64
timeout:uint22 ]
```

Description:
The external message layout block is missing a language tag. Every fenced block must specify a language.

Suggestion:
Tag the block as text.

-```
+```text
 signature:bits512
 ^[ subwallet_id:uint32
    message_to_send:^Cell
    send_mode:uint8
    query_id:QueryId
    created_at:uint64
    timeout:uint22 ]

#### [HIGH] Unlabeled code block in timestamp validation

Location: https://github.com/tact-lang/mintlify-ton-docs/blob/98d17bab6ace55c7551f3ac2e0869fac5a2415df/standard/wallets/highload/v3/specification.mdx?plain=1#L229-L234

Description:
The fenced block illustrating the validation condition lacks a language tag. All code fences require a language.

Suggestion:
Tag the block as text.

```diff
-```
+```text
 Message is valid if:
   created_at > now() - timeout  // Not too old
   created_at <= now()           // Not from future
 Otherwise: reject with exit code 35

#### [HIGH] Unlabeled ASCII diagram block

Location: https://github.com/tact-lang/mintlify-ton-docs/blob/98d17bab6ace55c7551f3ac2e0869fac5a2415df/standard/wallets/highload/v3/specification.mdx?plain=1#L446-L482

Description:
The ASCII diagram is in a fenced block without a language tag. For plain text/diagrams, use text.

Suggestion:
Tag the block as text.

```diff
-```
+```text
 +------------------------------------------+
 |   Transaction 1: External Message        |
 ...
 +------------------------------------------+

#### [HIGH] Mnemonic printed in example

Location: https://github.com/tact-lang/mintlify-ton-docs/blob/98d17bab6ace55c7551f3ac2e0869fac5a2415df/standard/wallets/highload/v3/how-to/create.mdx?plain=1#L105-L107

Description:
The example logs the full 24‑word mnemonic, exposing a master secret. The style guide prohibits secrets in examples and this normalizes unsafe handling.

Suggestion:
Remove logging and add a safety comment.

```diff
 import { mnemonicNew } from '@ton/crypto';
 
 const mnemonic = await mnemonicNew(24); // Array of 24 words
-console.log('Mnemonic:', mnemonic.join(' '));
+// Do not print or log mnemonics; store securely.

[HIGH] Silently truncated address in example output

Location:

// Output: 0QD4E... (non-bounceable, testnet)

Description:
The example shows a truncated address (“0QD4E...”) without stating it is truncated. Truncation must be explicit.

Suggestion:
Mark truncation explicitly.

-// Output: 0QD4E... (non-bounceable, testnet)
+// Example (truncated): 0QD4E... (non-bounceable, testnet)

[HIGH] Missing funds-at-risk warning for funding step

Location:

**Required before deployment:** Send TON to your wallet address (from Step 6) to prepare it for deployment.
External messages (which deploy the wallet) require gas to execute. By funding the address, you transition the account from `nonexist` to `uninit` status and provide the balance needed for deployment. See [Account statuses](/ton/statuses) for details on how account states work.
Send TON using a faucet (testnet) or from another wallet (mainnet). After funding, the account transitions to `uninit` status — it has a balance and can accept external messages, but no code or data yet.

Description:
The funding step moves funds but lacks the required Warning/Caution callout detailing risk, scope, rollback, and environment guidance.

Suggestion:
Insert a warning callout before the funding instruction.

 ## Step 7: Fund the wallet
+
+<Aside type="warning">
+Warning — funds at risk
+Running the next step transfers TON. Do first (testnet).
+Scope: your wallet balance for this address.
+Rollback: none — on-chain transfers are final.
+</Aside>
 
 **Required before deployment:** Send TON to your wallet address (from Step 6) to prepare it for deployment.

[HIGH] Missing funds-at-risk warning for single transfer

Location:

```typescript
const createdAt = Math.floor(Date.now() / 1000) - 30; // 30 seconds ago
const queryId = new HighloadQueryId(); // Represents query_id as a seqno
await wallet.sendExternalMessage(keyPair.secretKey, {
message: internalMessage,
mode: SendMode.PAY_GAS_SEPARATELY,
query_id: queryId,
createdAt: createdAt,
subwalletId: walletData.subwalletId,
timeout: walletData.timeout,
});
console.log('Transfer sent');
```

Description:
This section performs a TON transfer without the required safety callout. Any operation moving funds needs a Warning/Caution with risk, scope, rollback, and environment guidance.

Suggestion:
Add a warning callout before the send code.

 ## Step 3: Send the transfer
+
+<Aside type="warning">
+Warning — funds at risk
+This transfer sends TON. Use testnet first.
+Scope: this wallet’s funds; incorrect addresses lose funds.
+Rollback: none — on-chain transfers are final.
+</Aside>
 
 Send the transfer using the `sendExternalMessage` method:
 
 ```typescript

[HIGH] Missing funds-at-risk warning for batch transfers

Location:

```typescript
const queryId = HighloadQueryId.fromSeqno(17n); // Use a specific seqno
const createdAt = Math.floor(Date.now() / 1000) - 30; // 30 seconds ago
const value = toNano('0.0007024'); // Compute fee for internal receiver
await wallet.sendBatch(
keyPair.secretKey,
messages,
walletData.subwalletId,
queryId,
walletData.timeout,
createdAt,
value
);
console.log('Batch sent: 10 transfers');
console.log(`Query ID: ${queryId.toSeqno()}`);
console.log(`Created At: ${createdAt}`);
```

Description:
This section sends multiple transfers without a safety callout. Batch operations multiply risk and require the Warning/Caution with required details.

Suggestion:
Add a warning callout before the batch send.

 ## Step 3: Send the batch
+
+<Aside type="warning">
+Warning — funds at risk
+This sends multiple transfers. Test on testnet first.
+Scope: this wallet’s funds; multiple messages amplify risk.
+Rollback: none — on-chain transfers are final.
+</Aside>
 
 Send the batch using the `sendBatch` method:
 
 ```typescript

[HIGH] Emojis and unlabeled code blocks in expected outputs

Location:

### Full success
```
✓ Query marked as processed
✓ External transaction succeeded
✓ Internal transaction succeeded
✅ Sent 10/10 messages
```
### Partial success
```
✓ Query marked as processed
✓ External transaction succeeded
✓ Internal transaction succeeded
✅ Sent 8/10 messages (2 failed)
```
### External transaction failure
```
✓ Query marked as processed
❌ External transaction failed: exit code 35
```
The `query_id` is marked as processed, but the transaction failed during validation. See [Exit codes](/standard/wallets/highload/v3/specification#exit-codes) for troubleshooting.
### Internal transaction failure
```
✓ Query marked as processed
✓ External transaction succeeded
❌ Internal transaction failed: exit code 9
```
Transaction 1 succeeded (replay protection applied), but Transaction 2 failed. The `query_id` cannot be reused.
### Action phase failure
```
✓ Query marked as processed
✓ External transaction succeeded
❌ Action phase failed: result code 37
```

Description:
The “Expected outputs” section uses emojis and the fenced output blocks lack language tags. Emojis are banned in technical docs, and all fences must have a language.

Suggestion:
Remove emojis and tag each block as text.

-```
-✓ Query marked as processed
-✓ External transaction succeeded
-✓ Internal transaction succeeded
-✅ Sent 10/10 messages
-```
+```text
+OK Query marked as processed
+OK External transaction succeeded
+OK Internal transaction succeeded
+Sent 10/10 messages
+```

```diff
-```
-✓ Query marked as processed
-✓ External transaction succeeded
-✓ Internal transaction succeeded
-✅ Sent 8/10 messages (2 failed)
-```
+```text
+OK Query marked as processed
+OK External transaction succeeded
+OK Internal transaction succeeded
+Sent 8/10 messages (2 failed)
+```

```diff
-```
-✓ Query marked as processed
-❌ External transaction failed: exit code 35
-```
+```text
+OK Query marked as processed
+External transaction failed: exit code 35
+```

```diff
-```
-✓ Query marked as processed
-✓ External transaction succeeded
-❌ Internal transaction failed: exit code 9
-```
+```text
+OK Query marked as processed
+OK External transaction succeeded
+Internal transaction failed: exit code 9
+```

```diff
-```
-✓ Query marked as processed
-✓ External transaction succeeded
-❌ Action phase failed: result code 37
-```
+```text
+OK Query marked as processed
+OK External transaction succeeded
+Action phase failed: result code 37
+```

Copy link
Collaborator

@verytactical verytactical left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please take a look at high-priority warnings from AI review. Most of them make sense.

@verytactical verytactical marked this pull request as draft October 10, 2025 15:36
Copy link

To fix the formatting issues:

  1. Install necessary dependencies: npm ci
  2. Then, run this command:
npx remark -o --silent --silently-ignore standard/wallets/highload/overview.mdx standard/wallets/highload/v2/specification.mdx standard/wallets/highload/v3/create.mdx standard/wallets/highload/v3/send-batch-transfers.mdx standard/wallets/highload/v3/send-single-transfer.mdx standard/wallets/highload/v3/specification.mdx standard/wallets/highload/v3/verify-is-processed.mdx 

Copy link

To fix the formatting issues:

  1. Install necessary dependencies: npm ci
  2. Then, run this command:
npx remark -o --silent --silently-ignore standard/wallets/highload/overview.mdx standard/wallets/highload/v2/specification.mdx standard/wallets/highload/v3/create.mdx standard/wallets/highload/v3/send-batch-transfers.mdx standard/wallets/highload/v3/send-single-transfer.mdx standard/wallets/highload/v3/specification.mdx standard/wallets/highload/v3/verify-is-processed.mdx 

@pyAndr3w pyAndr3w marked this pull request as ready for review October 10, 2025 20:15
Copy link

Thanks for the substantial Highload v3 docs work across multiple pages. A set of high‑severity link, style, and correctness fixes are required before merge.

Findings (12)

High (12)

[HIGH] Broken internal links use non-existent "how-to" path

Location:

- Completed [wallet creation](/standard/wallets/highload/v3/how-to/create) with funded balance and saved configuration in `.wallet.json`

Description:
Links under Highload v3 incorrectly include a “how-to” path segment that does not exist. Actual pages are directly under /standard/wallets/highload/v3/. This will 404. Also affected (validated in-diff): standard/wallets/highload/v3/send-single-transfer.mdx:81,128, standard/wallets/highload/v3/send-batch-transfers.mdx:25,161, standard/wallets/highload/v3/verify-is-processed.mdx:19, and standard/wallets/highload/v3/specification.mdx:15,105,437,538,623,664–673.

Suggestion:
Replace “/standard/wallets/highload/v3/how-to/…” with the actual page paths.

- - Completed [wallet creation](/standard/wallets/highload/v3/how-to/create) with funded balance and saved configuration in `.wallet.json`
+ - Completed [wallet creation](/standard/wallets/highload/v3/create) with funded balance and saved configuration in `.wallet.json`

-   If you need to deploy a contract (send a message with `state_init`), use [batch transfers](/standard/wallets/highload/v3/how-to/send-batch-transfers) with an action list instead. See [Limitations and constraints](/standard/wallets/highload/v3/specification#limitations-and-constraints) in the specification for details.
+   If you need to deploy a contract (send a message with `state_init`), use [batch transfers](/standard/wallets/highload/v3/send-batch-transfers) with an action list instead. See [Limitations and constraints](/standard/wallets/highload/v3/specification#limitations-and-constraints) in the specification for details.

- To verify that your message, see [How to verify message is processed](/standard/wallets/highload/v3/how-to/verify-is-processed).
+ To verify that your message, see [How to verify message is processed](/standard/wallets/highload/v3/verify-is-processed).

- - Completed [wallet creation](/standard/wallets/highload/v3/how-to/create) with funded balance and saved configuration in `.wallet.json`
+ - Completed [wallet creation](/standard/wallets/highload/v3/create) with funded balance and saved configuration in `.wallet.json`

- To verify that your batch was fully processed, see [How to verify message is processed](/standard/wallets/highload/v3/how-to/verify-is-processed).
+ To verify that your batch was fully processed, see [How to verify message is processed](/standard/wallets/highload/v3/verify-is-processed).

- - Completed [wallet creation](/standard/wallets/highload/v3/how-to/create) with funded balance
+ - Completed [wallet creation](/standard/wallets/highload/v3/create) with funded balance

-   For practical usage, see [How-to guides](/standard/wallets/highload/v3/how-to/create).
+   For practical usage, see [How-to guides](/standard/wallets/highload/v3/create).

- Use `subwallet_id: 0x10ad` (4269) ... See [How to create Highload Wallet v3](/standard/wallets/highload/v3/how-to/create) for details.
+ Use `subwallet_id: 0x10ad` (4269) ... See [How to create Highload Wallet v3](/standard/wallets/highload/v3/create) for details.

-    State-init validation is too expensive ... [batch transfer pattern](/standard/wallets/highload/v3/how-to/send-batch-transfers)
+    State-init validation is too expensive ... [batch transfer pattern](/standard/wallets/highload/v3/send-batch-transfers)

- **How to implement:** [Send batch transfers](/standard/wallets/highload/v3/how-to/send-batch-transfers)
+ **How to implement:** [Send batch transfers](/standard/wallets/highload/v3/send-batch-transfers)

- **Link:** [How to verify if a message is processed](/standard/wallets/highload/v3/how-to/verify-is-processed)
+ **Link:** [How to verify if a message is processed](/standard/wallets/highload/v3/verify-is-processed)

- **Link:** [How-to guides](/standard/wallets/highload/v3/how-to/create)
+ **Link:** [How-to guides](/standard/wallets/highload/v3/create)

- - [How to create Highload Wallet v3](/standard/wallets/highload/v3/how-to/create)
+ - [How to create Highload Wallet v3](/standard/wallets/highload/v3/create)
- - [How to send single transfer](/standard/wallets/highload/v3/how-to/send-single-transfer)
+ - [How to send single transfer](/standard/wallets/highload/v3/send-single-transfer)
- - [How to send batch transfers](/standard/wallets/highload/v3/how-to/send-batch-transfers)
+ - [How to send batch transfers](/standard/wallets/highload/v3/send-batch-transfers)
- - [How to verify if a message is processed](/standard/wallets/highload/v3/how-to/verify-is-processed)
+ - [How to verify if a message is processed](/standard/wallets/highload/v3/verify-is-processed)

[HIGH] Mis-encoded anchor “%3F” breaks deep link

Location:

**Highload v3's solution:** Uses a [two-transaction pattern](/standard/wallets/highload/v3/specification#why-internal-messages-to-self%3F) where replay protection is committed in the first transaction, and actions are performed in a separate internal transaction. This guarantees replay protection **never rolls back**, even if sending messages fails.

Description:
The link encodes the question mark in the target heading’s slug (#why-internal-messages-to-self%3F), but the generated anchor omits punctuation (#why-internal-messages-to-self). The deep link won’t resolve.

Suggestion:
Use the correct anchor slug.

- **Highload v3's solution:** Uses a [two-transaction pattern](/standard/wallets/highload/v3/specification#why-internal-messages-to-self%3F) where replay protection is committed in the first transaction, and actions are performed in a separate internal transaction. This guarantees replay protection **never rolls back**, even if sending messages fails.
+ **Highload v3's solution:** Uses a [two-transaction pattern](/standard/wallets/highload/v3/specification#why-internal-messages-to-self) where replay protection is committed in the first transaction, and actions are performed in a separate internal transaction. This guarantees replay protection **never rolls back**, even if sending messages fails.

[HIGH] Incorrect deep link to stdlib function anchor

Location:

**Link:** [send\_raw\_message modes](/language/func/stdlib#send-raw-message)

Description:
The deep link points to #send-raw-message, but the canonical anchor is #send_raw_message (underscore). The current link breaks.

Suggestion:
Point to the correct anchor slug.

- **Link:** [send\_raw\_message modes](/language/func/stdlib#send-raw-message)
+ **Link:** [send\_raw\_message modes](/language/func/stdlib/#send_raw_message)

[HIGH] Emojis used in comparison table

Location:

| **Replay rollback on action failure** | ⚠️ Yes | ⚠️ Yes | ✅ No (two-transaction pattern) |
| **Fund locking risk** | ✅ No | ⚠️ Yes | ✅ No |
| **Gas efficiency** | Not optimized | ⚠️ High cleanup costs | ✅ Optimized |
| **Max batch size** | 255 messages | 255 messages | 254 messages |
| **Replay protection** | Simple seqno | Query ID dictionary | Dual dictionary + timestamp |
| **Transaction pattern** | Single transaction | Single transaction | Two-transaction pattern |
| **Query ID space** | Sequential seqno | \~32,000 | 8,380,416 unique IDs |
| **Parallel submissions** | ❌ Sequential only | ✅ Supported | ✅ Supported |
| **Status** | ⚠️ Deprecated | ⚠️ Deprecated | ✅ Recommended |

Description:
The comparison table uses emojis (⚠️, ✅, ❌), which the style guide forbids on technical pages. Replace with plain text for clarity and localization.

Suggestion:
Replace emojis with plain text.

-| **Replay rollback on action failure** | ⚠️ Yes             | ⚠️ Yes                | ✅ No (two-transaction pattern) |
+| **Replay rollback on action failure** | Yes                | Yes                   | No (two-transaction pattern)    |
-| **Fund locking risk**                 | ✅ No               | ⚠️ Yes                | ✅ No                           |
+| **Fund locking risk**                 | No                 | Yes                   | No                              |
-| **Parallel submissions**              | ❌ Sequential only  | ✅ Supported           | ✅ Supported                    |
+| **Parallel submissions**              | Sequential only     | Supported             | Supported                       |
-| **Status**                            | ⚠️ Deprecated      | ⚠️ Deprecated         | ✅ Recommended                  |
+| **Status**                            | Deprecated          | Deprecated            | Recommended                     |

[HIGH] Incorrect timeout duration (~55 days vs actual ~48.6 days)

Location:

<Aside type="note">
22 bits allows timeout values up to \~4.8 million seconds (\~55 days).
</Aside>

Description:
The text claims “~55 days” for a 22‑bit max timeout. 22 bits is 4,194,303 seconds, which is ~48.6 days. Update the figure and units.

Suggestion:
Correct the calculation.

-  22 bits allows timeout values up to ~4.8 million seconds (~55 days).
+  22 bits allows timeout values up to ~4,194,303 seconds (~48.6 days).

[HIGH] Incorrect parsing of external message body (skips ref, wrong field handling)

Location:

// Parse external message to extract query_id and created_at
function parseExternalMessageBody(body: Cell) {
try {
const inner = body.refs[0]!.beginParse();
inner.skip(32 + 8); // Skip subwalletId and mode
const queryId = inner.loadUintBig(23);
const createdAt = inner.loadUint(64);
return { queryId, createdAt };

Description:
parseExternalMessageBody skips fields and reads queryId incorrectly. The TL‑B schema places message_to_send:^Cell between subwallet_id and send_mode, and query_id is composite (13+10 bits). Without loading the ref and reading both parts, values are wrong.

Suggestion:
Load the reference, read send_mode, then read composite QueryId before created_at.

 function parseExternalMessageBody(body: Cell) {
   try {
-    const inner = body.refs[0]!.beginParse();
-    inner.skip(32 + 8); // Skip subwalletId and mode
-    const queryId = inner.loadUintBig(23);
-    const createdAt = inner.loadUint(64);
-    
-    return { queryId, createdAt };
+    const inner = body.refs[0]!.beginParse();
+    inner.loadUint(32);           // subwallet_id:uint32
+    inner.loadRef();              // message_to_send:^Cell
+    inner.loadUint(8);            // send_mode:uint8
+    const shift = inner.loadUint(13);      // QueryId.shift
+    const bitNumber = inner.loadUint(10);  // QueryId.bit_number
+    const createdAt = inner.loadUint(64);  // created_at:uint64
+    const queryId = (BigInt(shift) << 10n) | BigInt(bitNumber);
+    return { queryId, createdAt };
   } catch (e) {
     return null;
   }
 }

[HIGH] Emojis used in code/log output and expected outputs

Location:

console.log('❌ Query not processed');
return;
}
console.log('✓ Query marked as processed');
```

Description:
Console logs and “Expected outputs” blocks use emojis (❌, ✓, ✅), which the style guide forbids. Replace with plain text across the file, including logs and expected outputs.

Suggestion:
Remove emojis from logs and outputs.

-console.log('❌ Query not processed');
+console.log('Query not processed');
-console.log('✓ Query marked as processed');
+console.log('Query marked as processed');

Also update “Expected outputs” accordingly, for example:

  • “✓ Query marked as processed” → “Query marked as processed”
  • “❌ External transaction failed: exit code 35” → “External transaction failed: exit code 35”
  • “✅ Sent 10/10 messages” → “Sent 10/10 messages”

[HIGH] Moving-target GitHub links for normative references

Location:

**SDK wrappers:**
- **Go:** [tonutils-go](https://github.com/xssnick/tonutils-go) — includes Highload v3 wrapper
- **Python:** [pytoniq](https://github.com/yungwine/pytoniq) — includes Highload v3 wrapper
- **TypeScript/JavaScript:** Copy wrappers from the [official repository](https://github.com/ton-blockchain/highload-wallet-contract-v3/tree/main/wrappers)
**Tests and examples:**\
See the [tests/](https://github.com/ton-blockchain/highload-wallet-contract-v3/tree/main/tests) directory in the repository for reference implementation and usage patterns.

Description:
Links to repository paths use tree/main, which are moving targets. Pin to a specific commit SHA for stable references.

Suggestion:
Pin links to a commit that includes the referenced paths.

- - **TypeScript/JavaScript:** Copy wrappers from the [official repository](https://github.com/ton-blockchain/highload-wallet-contract-v3/tree/main/wrappers)
+ - **TypeScript/JavaScript:** Copy wrappers from the [official repository](https://github.com/ton-blockchain/highload-wallet-contract-v3/tree/f5d9b592bd5ab5c9ae6ca627819929e140f6bd61/wrappers)
- See the [tests/](https://github.com/ton-blockchain/highload-wallet-contract-v3/tree/main/tests) directory in the repository for reference implementation and usage patterns.
+ See the [tests/](https://github.com/ton-blockchain/highload-wallet-contract-v3/tree/f5d9b592bd5ab5c9ae6ca627819929e140f6bd61/tests) directory in the repository for reference implementation and usage patterns.

[HIGH] Safety callout missing required elements (send single)

Location:

<Aside
type="danger"
>
**Funds at risk:** This guide sends real TON. Test on testnet first. Double-check recipient addresses — blockchain transactions cannot be reversed.
</Aside>

Description:
The “Funds at risk” callout lacks required structure: explicit scope, rollback/mitigation, and a clear testnet‑first environment label. Per the style guide, funds/keys callouts must include these elements.

Suggestion:
Replace with a complete warning.

-<Aside
-  type="danger"
->
-  **Funds at risk:** This guide sends real TON. Test on testnet first. Double-check recipient addresses — blockchain transactions cannot be reversed.
-</Aside>
+<Aside type="danger">
+  <strong>Warning — funds at risk</strong><br/>
+  Scope: Sends TON from your wallet to a recipient.<br/>
+  Do first (testnet): use a testnet wallet and faucet to validate the flow.<br/>
+  If using mainnet: verify the address carefully. Rollback: none — on‑chain transfers are final.
+</Aside>

[HIGH] Safety callout missing required elements (send batch)

Location:

<Aside
type="danger"
>
**Funds at risk:** This guide sends real TON. Test on testnet first. Double-check recipient addresses — blockchain transactions cannot be reversed.
</Aside>

Description:
The batch transfer guide’s warning omits scope, rollback/mitigation, and an explicit testnet‑first label. These are required for funds‑moving steps.

Suggestion:
Use a complete warning adapted to batch transfers.

-<Aside
-  type="danger"
->
-  **Funds at risk:** This guide sends real TON. Test on testnet first. Double-check recipient addresses — blockchain transactions cannot be reversed.
-</Aside>
+<Aside type="danger">
+  <strong>Warning — funds at risk</strong><br/>
+  Scope: Sends multiple TON transfers in one transaction.<br/>
+  Do first (testnet): validate the batch on testnet (faucet funds).<br/>
+  If using mainnet: verify all recipients. Rollback: none — on‑chain transfers are final.
+</Aside>

[HIGH] Safety callout missing required elements (fund wallet)

Location:

<Aside
type="danger"
>
**Funds at risk:** You will send TON to this address. Test on testnet first. Verify the wallet address carefully — blockchain transactions cannot be reversed.
</Aside>
**Required before deployment:** Send TON to your wallet address (from Step 6) to prepare it for deployment.

Description:
The funding step’s warning lacks explicit scope, a testnet‑first instruction, and a clear rollback statement. These are required for funds‑moving steps.

Suggestion:
Replace with a complete warning block.

-<Aside
-  type="danger"
->
-  **Funds at risk:** You will send TON to this address. Test on testnet first. Verify the wallet address carefully — blockchain transactions cannot be reversed.
-</Aside>
+<Aside type="danger">
+  <strong>Warning — funds at risk</strong><br/>
+  Scope: Funding the wallet address to enable deployment.<br/>
+  Do first (testnet): fund via a testnet faucet to confirm the address.<br/>
+  If using mainnet: verify the full address before sending. Rollback: none — on‑chain transfers are final.
+</Aside>

[HIGH] Broken self-link anchor in specification

Location:

Highload v3 supports up to **8,380,416 unique query IDs** (see [`query_id` structure](#query-id-composite-structure) for details).

Description:
The self‑link uses #query-id-composite-structure, but the actual header is “Query ID structure” with slug #query-id-structure. The current anchor does not resolve.

Suggestion:
Fix the self‑link anchor.

-Highload v3 supports up to **8,380,416 unique query IDs** (see [`query_id` structure](#query-id-composite-structure) for details).
+Highload v3 supports up to **8,380,416 unique query IDs** (see [`query_id` structure](#query-id-structure) for details).

@anton-trunov
Copy link
Member

@pyAndr3w Superb work!

@anton-trunov anton-trunov merged commit 3950847 into main Oct 14, 2025
4 checks passed
@anton-trunov anton-trunov deleted the 198-highload-wallets branch October 14, 2025 14:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Wallets > Highload wallet]

3 participants