nat-cli 0.0.3 → 0.3.0
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/LICENSE +21 -0
- package/README.md +50 -1
- package/SKILL.md +100 -0
- package/assets/deployment.json +8 -0
- package/i18n/en.json +283 -0
- package/i18n/revert.json +98 -0
- package/i18n/zh.json +283 -0
- package/lib/baw.mjs +191 -0
- package/lib/chain.mjs +238 -0
- package/lib/i18n.mjs +96 -0
- package/lib/journal.mjs +59 -0
- package/lib/tui.mjs +671 -0
- package/llms.txt +26 -0
- package/package.json +38 -4
- package/scripts/cli.mjs +570 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 bNAT
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,3 +1,52 @@
|
|
|
1
1
|
# nat-cli
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Command-line tool and agent skill for [bNAT](https://bnat.live) on BSC: mint NAT (one NFT per BSC block, valued by the BNB that block burned under BEP-95), wrap / unwrap it into the ERC-20 BNAT, and trade BNAT on its bid market. Every transaction is signed by the Binance Agentic Wallet (`baw`); this tool never handles private keys.
|
|
4
|
+
|
|
5
|
+
```sh
|
|
6
|
+
npm install -g nat-cli
|
|
7
|
+
bnat
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
Run `bnat` on its own in a terminal for the interactive screen (sign in by scanning the QR code with the Binance App). `bnat help` lists the subcommands.
|
|
11
|
+
|
|
12
|
+
## Commands
|
|
13
|
+
|
|
14
|
+
```sh
|
|
15
|
+
bnat status
|
|
16
|
+
bnat wallet
|
|
17
|
+
bnat blocks
|
|
18
|
+
bnat top
|
|
19
|
+
bnat block --block <N>
|
|
20
|
+
bnat holdings [--address <addr>]
|
|
21
|
+
bnat vault
|
|
22
|
+
bnat bids [--mine]
|
|
23
|
+
bnat mint --block <N> | --best [--to <addr>]
|
|
24
|
+
bnat wrap --block <N[,N2,…]>
|
|
25
|
+
bnat unwrap --block <N[,N2,…]>
|
|
26
|
+
bnat bid --price <BNB> --amount <BNAT>
|
|
27
|
+
bnat sell --bid <id> --amount <BNAT> | --all
|
|
28
|
+
bnat cancel --bid <id>
|
|
29
|
+
bnat resume --hash 0x…
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Write commands only check and simulate unless `--yes` is given. With `--yes`, each one runs: local checks → on-chain simulation → item-by-item check of the wallet preview → journal entry → execute once → receipt event check. An interrupted transaction is never resent; settle it with `bnat resume`.
|
|
33
|
+
|
|
34
|
+
`bnat help` lists every command and option, including `history`, `lang`, `config` and `resume --abandon`.
|
|
35
|
+
|
|
36
|
+
Options: `--json` for machine-readable output, `--lang zh|en`, `--preview-only`. Environment: `BNAT_SITE`, `BNAT_RPC`, `BNAT_LANG`.
|
|
37
|
+
|
|
38
|
+
Local files: settings in `~/.config/bnat/config.json`; the journal of writes in `~/.local/state/bnat/journal.jsonl`; logs of the interactive screen in `~/.local/state/bnat/logs/`.
|
|
39
|
+
|
|
40
|
+
## AI agents
|
|
41
|
+
|
|
42
|
+
The package ships `SKILL.md` (usage rules for agents: always run without `--yes` first, show the plan, and execute only after the user agrees) and `llms.txt`.
|
|
43
|
+
|
|
44
|
+
## Requirements
|
|
45
|
+
|
|
46
|
+
Node.js 22 or later. Minting requires a .ai Agent ID on the wallet; wrap, unwrap and the market do not.
|
|
47
|
+
|
|
48
|
+
bNAT is an experiment. The contracts may have bugs and the tokens may go to zero. Not investment advice.
|
|
49
|
+
|
|
50
|
+
## License
|
|
51
|
+
|
|
52
|
+
MIT
|
package/SKILL.md
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: bnat
|
|
3
|
+
description: Mint, wrap / unwrap and trade NAT (one NFT per BSC block, valued by the BNB that block burned) and its ERC-20 BNAT on BSC through the Binance Agentic Wallet with the bnat CLI. Use when the user asks to mint a NAT block, wrap a NAT into BNAT, unwrap a NAT out of the BNAT vault, place / fill / cancel a BNAT bid, or check bNAT wallet status.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# bNAT Skill
|
|
7
|
+
|
|
8
|
+
**Talk to the user in the user's own language** (e.g. reply in Chinese if they write Chinese). This skill text is English; the CLI prints in Chinese or English (see `--lang` below).
|
|
9
|
+
|
|
10
|
+
## What bNAT is
|
|
11
|
+
|
|
12
|
+
- One NFT per BSC block (tokenId = block number), recording the BNB that block burned under BEP-95 (in gwei).
|
|
13
|
+
- Only an address holding a .ai (SPACE ID Agent ID) can mint.
|
|
14
|
+
- An NFT can be wrapped into the ERC-20 BNAT (1 BNAT = 1 BNB burned): the NFT goes into the BNAT vault, the wrapping wallet receives 99%, and the 1% fee stays in the BNAT contract.
|
|
15
|
+
- Wrapping is reversible: anyone can pay the block's burn + 1% in BNAT to unwrap any block from the vault (the NFT goes to the payer, not necessarily the original wrapper).
|
|
16
|
+
- BNAT has a bid-only market: buyers lock BNB at a bid price, holders sell into bids, and 1% of the BNB paid on each fill goes to the developer.
|
|
17
|
+
|
|
18
|
+
Every transaction is signed by the user's **Binance Agentic Wallet**. The `bnat` CLI does: local checks → on-chain simulation → item-by-item wallet-preview check → journal entry → execute exactly once → receipt verification. You never touch private keys.
|
|
19
|
+
|
|
20
|
+
## Setup
|
|
21
|
+
|
|
22
|
+
```sh
|
|
23
|
+
npm install -g nat-cli # installs baw 1.12.0 (@binance/agentic-wallet) as a dependency; a global copy is optional (same login)
|
|
24
|
+
bnat # the user runs this in a terminal and scans the QR with the Binance App
|
|
25
|
+
# (without a terminal UI: baw auth signin)
|
|
26
|
+
bnat wallet # address, Agent ID, BNB, NAT, BNAT
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
- **Agent ID**: if `bnat wallet` shows none (the Agent ID line reads `没有`, "none"), the contract will reject minting. Have the user claim one in the Binance App (Web3 Wallet → Agent ID); check status with `baw wallet agent-id`. Wrap, unwrap and the market do not need an Agent ID.
|
|
30
|
+
- A little BNB is needed for gas (the CLI estimates gas and checks the balance before sending, and says how much is missing). Placing a bid also locks price × amount in BNB.
|
|
31
|
+
- The site URL comes from `BNAT_SITE` (if the package does not bundle one). Override the RPC with `BNAT_RPC`. **Never print the user's full RPC URL in output**; it may contain a key.
|
|
32
|
+
|
|
33
|
+
## Commands
|
|
34
|
+
|
|
35
|
+
Always call a subcommand. Bare `bnat` opens an interactive terminal UI for people (without a terminal it only prints the help).
|
|
36
|
+
|
|
37
|
+
```sh
|
|
38
|
+
bnat status # deployed addresses, mint progress, market overview
|
|
39
|
+
bnat wallet
|
|
40
|
+
bnat blocks --size 20 # recent finalized, unminted blocks, highest burn first
|
|
41
|
+
bnat top --size 20 # all-time highest-burn unminted blocks (--filter minted|all, --offset; up to 100 a call, ranked 10,000 deep)
|
|
42
|
+
bnat block --block <N> # one block: burn, finalized, minted, holder, in the vault or not
|
|
43
|
+
bnat holdings [--address <address>] # NAT held by an address (default: this wallet); --size, --offset
|
|
44
|
+
bnat vault [--sort burn|recent] # NAT in the BNAT vault with each one's unwrap price; --size, --offset
|
|
45
|
+
bnat bids [--mine] # bid book, best price first; --mine: this wallet's open bids; --size, --offset
|
|
46
|
+
bnat history # transactions sent from this machine
|
|
47
|
+
|
|
48
|
+
bnat mint --block <N> [--to <address>] # mint a specific block to --to, else the saved mintTo setting, else this wallet
|
|
49
|
+
bnat mint --best [--to <address>] # mint the unminted block with the highest burn among recent finalized blocks
|
|
50
|
+
bnat wrap --block <N>[,<N2>,…] # wrap into BNAT for yourself; comma-separate several, one transaction, max 50
|
|
51
|
+
bnat unwrap --block <N>[,<N2>,…] # pay burn + 1% in BNAT to unwrap these blocks from the vault to yourself; max 50
|
|
52
|
+
bnat bid --price <BNB/BNAT> --amount <BNAT>
|
|
53
|
+
bnat sell --bid <id> --amount <BNAT> # or --all: sell until the bid's remainder or your balance runs out
|
|
54
|
+
bnat cancel --bid <id>
|
|
55
|
+
bnat resume --hash 0x… # settle an interrupted transaction
|
|
56
|
+
bnat resume --abandon <record-id> # void a record after confirming it was never sent
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
- Write commands **without `--yes` only run checks and on-chain simulation; nothing is sent** (the CLI prints `没有加 --yes:只做了检查,没有发交易。` / `Without --yes: only checked, nothing was sent.`).
|
|
60
|
+
- `--preview-only` goes as far as the wallet preview.
|
|
61
|
+
- `--json` prints a machine-readable result (`ok`, `stopped`, `error`, `result`, `log`); `log` holds the lines the plain output would print.
|
|
62
|
+
- Output is Chinese or English: `--lang zh|en`, else `BNAT_LANG`, else the saved `lang` setting, else the system locale (Chinese locale → zh, anything else → en). Only a person's first run in a terminal asks for the language; without a terminal it never asks. Pass `--lang en` if you parse the text.
|
|
63
|
+
- Settings live in `~/.config/bnat/config.json`: `lang` (`bnat lang zh|en`) and `mintTo` (`bnat config mintTo <address|self>`). The journal of writes is `~/.local/state/bnat/journal.jsonl`; the interactive screen also logs each session to `~/.local/state/bnat/logs/`.
|
|
64
|
+
|
|
65
|
+
Exit codes:
|
|
66
|
+
- `0` success.
|
|
67
|
+
- `2` precondition not met, nothing sent (tell the user what is missing, per the message). Plain output goes to stderr and starts with `已停止:` / `Stopped: `.
|
|
68
|
+
- `1` any other error. Plain output goes to stderr and starts with `出错:` / `Error: `.
|
|
69
|
+
- With `--json`, success and failure both print one JSON object to stdout.
|
|
70
|
+
|
|
71
|
+
## Rules you must follow
|
|
72
|
+
|
|
73
|
+
1. **Run first without `--yes` and show the user the plan verbatim** (block, burn, wrap proceeds, unwrap cost, price, amount, locked BNB, amount received, fee, gas). **Only after the user explicitly agrees**, run the same command with `--yes`. Consent covers that one command only.
|
|
74
|
+
2. **When selling with insufficient allowance, the CLI first sends an approve for the exact amount (not unlimited), then the sell.** When asking for consent, say clearly that it is two transactions.
|
|
75
|
+
3. **After a wrap the NFT sits in the vault and anyone can unwrap it**: anyone paying burn + 1% can take that block out; the original wrapper has no priority. A round trip (wrap then unwrap) costs about 2% in fees. Tell the user this before executing.
|
|
76
|
+
4. **Never resend.** When an outcome is unknown, the CLI refuses further transactions (output contains `执行结果未知` / `Outcome unknown`, or `笔交易结果未知` / `transaction(s) with an unknown outcome`). Follow the prompt: find the hash with `baw wallet tx-history`, then settle with `bnat resume --hash 0x…`. Use `--abandon` only if the user confirms the transaction really was not sent.
|
|
77
|
+
5. **Do not bypass the CLI by calling the bNAT contracts directly with `baw contract-call`**, and do not edit `~/.local/state/bnat/journal.jsonl`.
|
|
78
|
+
6. If any step errors or says stopped (`已停止` / `Stopped`), stop and relay the exact message to the user. Do not retry on your own with changed parameters (especially never raise the amount or change the price).
|
|
79
|
+
7. Minting is first-come-first-served: the signature is public in the mempool and someone may land it first. `AlreadyMinted` is not a bug; ask the user about another block.
|
|
80
|
+
8. When minting, if the user gives a recipient address, add `--to <address>` (wrap / unwrap have no `--to`; BNAT or the NFT only goes to the initiating wallet — to give it to someone else, transfer afterwards). Without `--to`, a recipient saved with `bnat config mintTo <address>` is used (check with `bnat config`; `bnat config mintTo self` resets it). The plan always shows `→ <address>`; have the user check the full address (do not read out only the first and last few characters). After minting to another address the NFT is not in the Agentic Wallet; later wraps and trades are done by that address itself.
|
|
81
|
+
9. The `bnat blocks` / `bnat top` / `bnat block` / `bnat holdings` / `bnat vault` output comes from the site index and may lag; a block may have just been minted by someone else. The on-chain check in `bnat mint` is authoritative.
|
|
82
|
+
|
|
83
|
+
## What the CLI checks
|
|
84
|
+
|
|
85
|
+
- Mint: the wallet holds an Agent ID; block ≥ 13,082,000, not yet minted in the contract. The burn comes from the signing service (the site's burn index), which answers 503 for blocks past its burn index (the CLI says the index is syncing; `bnat mint --best` only picks indexed blocks) and 422 for blocks that burned < 1 gwei. The signature must be for this contract and recover to the contract's current signer.
|
|
86
|
+
- Wrap: every block is minted, not in the vault, and owned by this wallet (or approved to it).
|
|
87
|
+
- Unwrap: every block is currently in the BNAT vault; Σ(burn + 1%) is computed with the contract's `quote`, and the wallet's BNAT balance must cover it (if not, it says how much you have and how much is missing). No approval needed.
|
|
88
|
+
- On-chain simulation passes and BNB covers gas.
|
|
89
|
+
- Wallet preview: the target contract and attached BNB match the plan (the wallet's reply normally has no calldata, so calldata and the function selector are compared only when the reply includes them); only the planned asset changes are allowed (mint: only NAT in; wrap: only these NATs out, BNAT in; unwrap: only Σ(burn + 1%) BNAT out, NAT in; bid: only the locked BNB out; sell: only the specified BNAT out, BNB in); no risk warnings, no permission changes, no App confirmation required.
|
|
90
|
+
- After inclusion, verify the receipt events (Minted / Wrapped / Unwrapped / BidPlaced / BidFilled / BidCancelled).
|
|
91
|
+
|
|
92
|
+
## Example flows
|
|
93
|
+
|
|
94
|
+
- User: "Mint a NAT for me, to 0xAbC… (full address)" → `bnat mint --best --to 0xAbC…` → check the recipient address in the plan → after consent, add `--yes`.
|
|
95
|
+
- User: "Mint a NAT for me" → `bnat wallet` (confirm Agent ID and BNB) → `bnat mint --best` → show the plan → after consent, `bnat mint --best --yes`. Note `--best` may pick different blocks on the two runs; to lock the same block, use `--block <block number from the plan>` the second time.
|
|
96
|
+
- User: "Get #50000123 back" → `bnat unwrap --block 50000123` → state how much BNAT it costs (including the 1%) → after consent, add `--yes`.
|
|
97
|
+
- User: "Bid for 10 BNAT at 0.05 BNB" → `bnat bid --price 0.05 --amount 10` → state that 0.5 BNB will be locked → after consent, add `--yes`.
|
|
98
|
+
- User: "Sell my BNAT to the highest bid" → `bnat bids`, take the first row's id → `bnat sell --bid <id> --all` → state the amount received, the fee, and whether an approve is needed first → after consent, add `--yes`.
|
|
99
|
+
|
|
100
|
+
bNAT is an experiment. The contracts may have bugs and the tokens may go to zero. None of this is investment advice.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
{
|
|
2
|
+
"chainId": 56,
|
|
3
|
+
"nat": "0x45bDcb3774a1027E492f1B0cd3EdE7e9FFb58353",
|
|
4
|
+
"bnat": "0x5473B4D8caED7ef06cb8D4eFCa58C302DFedCBE5",
|
|
5
|
+
"market": "0xd255231bF062Ad179A10a932C4FB9b0618ca703B",
|
|
6
|
+
"agentId": "0x60B9262456dE011F7d15a54CdD8c48bAaa8B022F",
|
|
7
|
+
"site": "https://bnat.live"
|
|
8
|
+
}
|
package/i18n/en.json
ADDED
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
{
|
|
2
|
+
"chain.aDevDeploymentMockagentidNeeds": "A dev deployment (mockAgentId) needs BNAT_RPC pointing at the local chain",
|
|
3
|
+
"chain.bidDoesnTExistIn": "Bid #{id} doesn't exist ({n} in total)",
|
|
4
|
+
"chain.cannotReadTheDeploymentFile": "Cannot read the deployment file {path}: ",
|
|
5
|
+
"chain.noDefaultRpcForChainid": "No default RPC for chainId {chainId}; set BNAT_RPC",
|
|
6
|
+
"chain.noSiteAddressSetBnat": "No site address: set BNAT_SITE (e.g. https://bnat.live)",
|
|
7
|
+
"chain.revertNameSuffix": " ({name})",
|
|
8
|
+
"chain.theDeploymentFileLacks": "The deployment file lacks {k}",
|
|
9
|
+
"chain.theSignatureIsNotFor": "The signature is not for this contract",
|
|
10
|
+
"chain.theSignerDiffersFromThe": "The signer differs from the one in the contract; this signature would be refused",
|
|
11
|
+
"chain.unexpectedReplyFromTheSigning": "Unexpected reply from the signing service",
|
|
12
|
+
"cli.addressMustBeAFull": "--address must be a full 0x address",
|
|
13
|
+
"cli.amountTooSmallWorthLess": "Amount too small: worth less than 1 wei at this price",
|
|
14
|
+
"cli.approveTheMarketToUse": "approve the market to use {amount} BNAT (exact, not unlimited)",
|
|
15
|
+
"cli.atMostPerSplitIt": "At most {BATCH_MAX} per {verb}; split it up",
|
|
16
|
+
"cli.belongsToNotThisWallet": "#{blk} belongs to {owner}, not this wallet",
|
|
17
|
+
"cli.bid": "Bid #{id}",
|
|
18
|
+
"cli.bidHasOnlyBnatLeft": "Bid #{id} has only {remaining} BNAT left; you want to sell {amount}",
|
|
19
|
+
"cli.bidIsAlreadyFilledOr": "Bid #{id} is already filled or cancelled",
|
|
20
|
+
"cli.bidWasPlacedByNot": "Bid #{id} was placed by {buyer}, not this wallet",
|
|
21
|
+
"cli.bidBnatAtBnbLocking": "bid: {amount} BNAT at {price} BNB, locking {cost}",
|
|
22
|
+
"cli.bidsShowing": "{total} bids, showing {v0}–{v1}",
|
|
23
|
+
"cli.block": "Block ",
|
|
24
|
+
"cli.blockBurnGwei": "Block burn gwei",
|
|
25
|
+
"cli.blockBurnGweiUnwrapCost": "Block burn gwei unwrap cost BNAT",
|
|
26
|
+
"cli.blockListsABlockTwice": "--block lists a block twice",
|
|
27
|
+
"cli.natInTheVault": "{total} NAT in the vault{range}",
|
|
28
|
+
"cli.bscRecomputesWhichDiffersFrom": " (the burn index has {bscBurnGwei}, which differs from the minted record)",
|
|
29
|
+
"cli.burn": "Burn ",
|
|
30
|
+
"cli.cancelBidRefunding": "cancel bid #{id}, refunding {escrow}",
|
|
31
|
+
"cli.chainNatBnatMarket": "Chain {chainId} · NAT {nat}\nBNAT {bnat} · market {market}",
|
|
32
|
+
"cli.configSaved": "Saved: {key} = {value} ({file})",
|
|
33
|
+
"cli.configShow": "language {lang} · mint recipient {mintTo} ({file})",
|
|
34
|
+
"cli.configUsage": "Usage: bnat config [mintTo <address|self>]",
|
|
35
|
+
"cli.contractSendsGasAbout": " contract {address} · {functionName} · sends {value} · gas about {v0}",
|
|
36
|
+
"cli.countUnit": "",
|
|
37
|
+
"cli.doneBlock": "Done: {hash} (block {blockNumber})",
|
|
38
|
+
"cli.error": "Error",
|
|
39
|
+
"cli.executeErrorPrefix": "({message}) ",
|
|
40
|
+
"cli.filterMustBeUnmintedMinted": "--filter must be unminted, minted or all",
|
|
41
|
+
"cli.final": "Final ",
|
|
42
|
+
"cli.fromTheSiteIndexChecked": "(from the site index; checked on chain again before minting)",
|
|
43
|
+
"cli.giveTheAmountWithAmount": "Give the amount with --amount <BNAT>, or --all to sell until the bid or your balance runs out",
|
|
44
|
+
"cli.giveTheTransactionHashWith": "Give the transaction hash with --hash 0x…",
|
|
45
|
+
"cli.hasNoHolderNotMinted": "#{blk} has no holder (not minted yet): ",
|
|
46
|
+
"cli.heldBy": " (held by {value})",
|
|
47
|
+
"cli.help": "bnat {VERSION} — mint NAT, wrap / unwrap it into BNAT and trade BNAT through the Binance Agentic Wallet\n\nRun bnat on its own (in a terminal) for the interactive screen; bnat help shows this help.\n\nRead-only\n bnat status deployment, minting progress, market overview\n bnat wallet wallet address, .ai (Agent ID), BNB, NAT, BNAT\n bnat blocks [--size 20] recent finalized blocks not minted yet, highest burn first\n bnat top [--size 20] [--filter unminted|minted|all] [--offset 0]\n highest-burn blocks of all time (unminted by default; up to 100 per call, ranked 10,000 deep)\n bnat block --block <N> one block: burn, finalized, minted, holder\n bnat holdings [--address <addr>] [--size 100] [--offset 0]\n NAT held by an address (this wallet by default)\n bnat vault [--sort burn|recent] [--size 20] [--offset 0]\n NAT in the BNAT vault and the unwrap price of each\n bnat bids [--mine] [--size 100] [--offset 0]\n the bid book (highest price first); --mine only this wallet's open bids\n bnat history transactions sent from this machine\n bnat lang [zh|en] show or save the language (asked on the first run in a terminal)\n bnat config [mintTo <addr|self>] show the settings; set the default mint recipient (self = this wallet)\n\nWrites (without --yes: checks and simulation only, nothing is sent)\n bnat mint --block <N> | --best [--to <addr>] mint one block (one per transaction) to --to, else the mintTo setting, else this wallet\n bnat wrap --block <N[,N2,…]> wrap NAT into BNAT for this wallet, up to {BATCH_MAX} at once (the 1% fee stays in the BNAT contract)\n bnat unwrap --block <N[,N2,…]> pay burn + 1% in BNAT to unwrap these NAT from the vault to this wallet (anyone can), up to {BATCH_MAX} at once\n bnat bid --price <BNB> --amount <BNAT> place a bid, locking price × amount in BNB\n bnat sell --bid <id> --amount <BNAT> | --all sell BNAT into a bid (with an exact approval first if needed)\n bnat cancel --bid <id> cancel your own bid and get the remaining BNB back\n bnat resume --hash 0x… settle an interrupted transaction (never resends)\n bnat resume --abandon <entry id> void an interrupted entry once you are sure it was not sent\n\nOptions\n --yes really execute (get the user's consent first)\n --preview-only stop after the wallet preview, do not execute\n --json machine-readable output\n --lang zh|en this run only (saved setting: ~/.config/bnat/config.json; BNAT_LANG overrides it)\n\nEnvironment: BNAT_SITE (site), BNAT_RPC (contract chain RPC)",
|
|
48
|
+
"cli.holdsNat": "{who} holds {heldTotal} NAT{range}",
|
|
49
|
+
"cli.idPriceBnbBnatLeft": "id price BNB / BNAT remaining BNAT locked BNB buyer",
|
|
50
|
+
"cli.inTheBnatVaultCan": " (in the BNAT vault, can be unwrapped)",
|
|
51
|
+
"cli.isAlreadyInTheBnat": "#{blk} is already in the BNAT vault (take it out with bnat unwrap)",
|
|
52
|
+
"cli.isAlreadyMintedFirstCome": "#{blk} has already been minted; pick another",
|
|
53
|
+
"cli.isBeforeTheBep95": "#{blk} is before the BEP-95 activation block {ELEMENT_ACTIVATION_BLOCK}; it has no burn record",
|
|
54
|
+
"cli.langMustBeZhOr": "--lang must be zh or en",
|
|
55
|
+
"cli.langSaved": "Saved: English from now on ({file})",
|
|
56
|
+
"cli.languageEnglishSettingsFile": "Language: English (settings file {v0})",
|
|
57
|
+
"cli.marketBidsCurrentPriceBnb": "Market: {openBids} bids, current price {price} BNB / BNAT (highest bid), total volume {vol} BNB",
|
|
58
|
+
"cli.mintSummary": "mint #{blk} (burn {burn} gwei) → {dest}",
|
|
59
|
+
"cli.mintToBad": "mintTo in the settings is not a valid address: {v} (bnat config mintTo self resets it)",
|
|
60
|
+
"cli.minted": "minted",
|
|
61
|
+
"cli.minted2": "Minted ",
|
|
62
|
+
"cli.mintedHeldBy": "yes, held by {owner}{where}",
|
|
63
|
+
"cli.mintedOfThemInThe": "{minted} minted ({wrapped} of them in the BNAT vault), sealed burn {sealed} BNB, {holders} holders",
|
|
64
|
+
"cli.mustBeAnIntegerFrom": "--{name} must be an integer from {lo} to {hi}",
|
|
65
|
+
"cli.nameTheBidToCancel": "Name the bid to cancel with --bid <id>",
|
|
66
|
+
"cli.nameTheBidWithBid": "Name the bid with --bid <id> (see `bnat bids`)",
|
|
67
|
+
"cli.nameTheBlockWithBlock": "Name the block with --block <number>",
|
|
68
|
+
"cli.nameTheBlockWithBlock2": "Name the block with --block <number>, or --best for the recent block with the highest burn",
|
|
69
|
+
"cli.nameTheNatToWith": "Name the NAT to {verb} with --block <number>, several separated by commas: --block 1,2,3",
|
|
70
|
+
"cli.no": "no",
|
|
71
|
+
"cli.no2": "no",
|
|
72
|
+
"cli.noEntriesYet": "No entries yet.",
|
|
73
|
+
"cli.noHash": "no hash",
|
|
74
|
+
"cli.noMatchingBlocks": "No matching blocks.",
|
|
75
|
+
"cli.noOpenEntries": "No open entries",
|
|
76
|
+
"cli.noOpenEntry": "No open entry {abandon}",
|
|
77
|
+
"cli.noneClaimOneInThe": "none — claim one in the Binance App before minting (check with `baw wallet agent-id`)",
|
|
78
|
+
"cli.notEnoughBnbNeedIncluding": "Not enough BNB: need {need} (including about {v0} gas), have {bal}, short by {short}",
|
|
79
|
+
"cli.notEnoughBnatNeedHave": "Not enough BNAT: need {amount}, have {bal}, short by {short}",
|
|
80
|
+
"cli.notEnoughBnatNeedIncluding": "Not enough BNAT: need {total} (including {fee} fee), have {bal}, short by {v0}",
|
|
81
|
+
"cli.notMintedYet": " (not minted yet: {reason})",
|
|
82
|
+
"cli.nothingLeftToMintIn": "Nothing left to mint in the last 96 finalized blocks; try again later.",
|
|
83
|
+
"cli.onChainSimulationFailed": "On-chain simulation failed: ",
|
|
84
|
+
"cli.onChainSimulationPassed": " on-chain simulation: passed",
|
|
85
|
+
"cli.openEntriesPickOneWith": "{length} open entries; pick one with --id: ",
|
|
86
|
+
"cli.outcomeUnknownDoNotResend": "Outcome unknown. Do not resend; find the hash with `baw wallet tx-history`, then run bnat resume --hash 0x…",
|
|
87
|
+
"cli.plan": "Plan: ",
|
|
88
|
+
"cli.priceAndAmountMustBoth": "Price and amount must both be above 0",
|
|
89
|
+
"cli.priceBnbPerBnatAnd": "--price (BNB per BNAT) and --amount (BNAT) must both be numbers with at most 18 decimals",
|
|
90
|
+
"cli.rankBlockBurnGweiStatus": "Rank Block burn gwei status",
|
|
91
|
+
"cli.sellBnatToBidReceive": "sell {amount} BNAT to bid #{id}: receive {v0} (fee {fee})",
|
|
92
|
+
"cli.sentWaitingForTheReceipt": " sent {hash}, waiting for the receipt…",
|
|
93
|
+
"cli.showing": " (showing {v0}–{v1})",
|
|
94
|
+
"cli.sortMustBeBurnOr": "--sort must be burn or recent",
|
|
95
|
+
"cli.stopped": "Stopped",
|
|
96
|
+
"cli.theApprovalHasNotRun": "(The approval has not run yet; the sale can only be simulated once it is on chain.)",
|
|
97
|
+
"cli.theInteractiveScreenNeedsA": "The interactive screen needs a terminal",
|
|
98
|
+
"cli.theLast96FinalizedBlocks": "The last 96 finalized blocks are all minted or burned nothing.",
|
|
99
|
+
"cli.theMarketSBnatAllowance": "The market's BNAT allowance is {allowance}; approving exactly {amount} first (a separate transaction).",
|
|
100
|
+
"cli.theReceiptLacksTheExpected": "The receipt lacks the expected {name} event; check it by hand",
|
|
101
|
+
"cli.theSellAmountMustBe": "The sell amount must be above 0",
|
|
102
|
+
"cli.theWalletAcceptedItBut": "The wallet accepted it but gave no hash (order {v0}, {status}). ",
|
|
103
|
+
"cli.thereAreNoBidsRight": "There are no bids right now.",
|
|
104
|
+
"cli.thisEntryHasAHash": "This entry has a hash: settle it with --hash, it can't be voided",
|
|
105
|
+
"cli.thisIsADevDeployment": "This is a dev deployment (local chain): the real Binance wallet would send to BSC mainnet, so stopped. Sending on the dev chain needs the fake baw (BNAT_BAW_BIN) with both BNAT_RPC and FAKE_BAW_RPC on this machine",
|
|
106
|
+
"cli.thisTransactionDoesNotMatch": "This transaction does not match the recorded call (sender / contract / calldata / BNB sent); not settled",
|
|
107
|
+
"cli.thisWallet": "this wallet",
|
|
108
|
+
"cli.thisWalletHasNoOpen": "This wallet has no open bids.",
|
|
109
|
+
"cli.toIsNotAValid": "--to is not a valid address",
|
|
110
|
+
"cli.transactionIsOnChainBut": "Transaction {hash} is on chain but reverted (block {blockNumber})",
|
|
111
|
+
"cli.transactionSWithAnUnknown": "{length} transaction(s) with an unknown outcome ({list}). Settle with `bnat resume --hash 0x…` first; only if you are sure it was not sent, `bnat resume --abandon <id>`.",
|
|
112
|
+
"cli.transactionWasSentButHas": "Transaction {hash} was sent but has no receipt yet ({why}); outcome unknown. Do not resend; later run bnat resume --hash {hash}",
|
|
113
|
+
"cli.unexpectedReplyFromAddr": "Unexpected reply from /addr",
|
|
114
|
+
"cli.unexpectedReplyFromMarket": "Unexpected reply from /market",
|
|
115
|
+
"cli.unexpectedReplyFromMints": "Unexpected reply from /mints",
|
|
116
|
+
"cli.unexpectedReplyFromRecent": "Unexpected reply from /recent",
|
|
117
|
+
"cli.unexpectedReplyFromTop": "Unexpected reply from /top",
|
|
118
|
+
"cli.unknownCommand": "Unknown command",
|
|
119
|
+
"cli.unminted": "unminted",
|
|
120
|
+
"cli.unwrapHasNoToThe": "unwrap has no --to: the NFTs only go to the unwrapping wallet; to give them to someone, unwrap first and then transfer",
|
|
121
|
+
"cli.unwrapPayBnatBurnFee": "unwrap {names}: pay {total} BNAT (burn {amount} + fee {fee} that stays in the BNAT contract) → {length} NAT to this wallet",
|
|
122
|
+
"cli.usageBnatLangZhEn": "Usage: bnat lang zh|en",
|
|
123
|
+
"cli.voided": "Voided {action} [{id}]",
|
|
124
|
+
"cli.wallet": "Wallet ",
|
|
125
|
+
"cli.walletHasNoAiAgent": "Wallet {from} has no .ai (Agent ID); the contract would refuse. Claim one in the Binance App first (check with `baw wallet agent-id`).",
|
|
126
|
+
"cli.walletPreviewEveryFieldChecked": " wallet preview: every field checked",
|
|
127
|
+
"cli.withoutYesOnlyCheckedNothing": "Without --yes: only checked, nothing was sent.",
|
|
128
|
+
"cli.wrapHasNoToBnat": "wrap has no --to: BNAT only goes to the wrapping wallet; to give it to someone, wrap first and then transfer",
|
|
129
|
+
"cli.wrapBnatToThisWallet": "wrap {names} → {toHolder} BNAT to this wallet (fee {fee} stays in the BNAT contract; anyone can unwrap for burn + 1%)",
|
|
130
|
+
"cli.yes": "yes",
|
|
131
|
+
"cli.yes2": "yes",
|
|
132
|
+
"common.colon": ": ",
|
|
133
|
+
"common.listSep": "; ",
|
|
134
|
+
"tui.16TabsMoveR": "1–5 tabs · ↑↓ move · {v0} · r refresh",
|
|
135
|
+
"tui.aTransactionIsExecutingCannot": "A transaction is executing: cannot quit until it finishes",
|
|
136
|
+
"tui.abandon": "Abandon {action}",
|
|
137
|
+
"tui.action": "Action",
|
|
138
|
+
"tui.amountBnatEscCancels": "Amount (BNAT, Esc cancels): ",
|
|
139
|
+
"tui.atMostPerTransaction": "At most {BATCH} per transaction",
|
|
140
|
+
"tui.atMostPerTransactionPicked": "At most {BATCH} per transaction: picked the first {BATCH}",
|
|
141
|
+
"tui.badAddress": "Not a valid address: {v}",
|
|
142
|
+
"tui.batchTitle": "{verb} {length}",
|
|
143
|
+
"tui.bawAuthSigninReturnedAn": "baw auth signin returned an unexpected shape",
|
|
144
|
+
"tui.bawCheckingLogin": "baw checking login…",
|
|
145
|
+
"tui.bawIsCreatingTheWallet": "baw is creating the wallet: scan with the Binance App to continue",
|
|
146
|
+
"tui.bawIsNotLoggedIn": "baw not logged in: scan with the Binance App",
|
|
147
|
+
"tui.bawLoggedIn": "baw logged in",
|
|
148
|
+
"tui.bawLoggedIn2": "baw logged in",
|
|
149
|
+
"tui.bawLogin": "baw login",
|
|
150
|
+
"tui.bawNotLoggedInL": "baw not logged in · L to scan",
|
|
151
|
+
"tui.bawUnavailable": "baw unavailable",
|
|
152
|
+
"tui.bidBnat": "Bid {amount} BNAT @ {price}",
|
|
153
|
+
"tui.block": "Block",
|
|
154
|
+
"tui.bnatStarted": "bnat started",
|
|
155
|
+
"tui.burnGwei": "Burn gwei",
|
|
156
|
+
"tui.buyer": "Buyer",
|
|
157
|
+
"tui.byBurn": "by burn",
|
|
158
|
+
"tui.cancel": " cancel",
|
|
159
|
+
"tui.cancelBid": "Cancel bid #{id}",
|
|
160
|
+
"tui.cancelledNothingSent": "cancelled, nothing sent",
|
|
161
|
+
"tui.cannotQuitUntilItFinishes": " (cannot quit until it finishes)",
|
|
162
|
+
"tui.checking": "Checking {title}…",
|
|
163
|
+
"tui.checkingAndSimulatingOnChain": "checking and simulating on chain…",
|
|
164
|
+
"tui.checksAndSimulationPassedNothing": " checks and simulation passed, nothing sent yet · ",
|
|
165
|
+
"tui.confirmedHandedToBawTo": "confirmed, handed to baw to sign and send",
|
|
166
|
+
"tui.couldNotCreateTheLogin": "Could not create the login QR code",
|
|
167
|
+
"tui.creatingTheLoginQrCode": "Creating the login QR code…",
|
|
168
|
+
"tui.done": "Done",
|
|
169
|
+
"tui.done2": "done",
|
|
170
|
+
"tui.enterMintTMintTo2": "Enter mint · t set recipient · n/p page",
|
|
171
|
+
"tui.enterSellBPlaceBid": "Enter sell · b place bid · c cancel · m mine only · n/p page",
|
|
172
|
+
"tui.errorsCountReason": "Errors (count · reason)",
|
|
173
|
+
"tui.executing": "Executing {title}…",
|
|
174
|
+
"tui.expiresInLNewCode": "Expires in {mmss} · L new code · Esc skip for now",
|
|
175
|
+
"tui.hSettleByHashX": "h settle by hash · x abandon",
|
|
176
|
+
"tui.history": "History",
|
|
177
|
+
"tui.holdings": "Holdings",
|
|
178
|
+
"tui.howMuchBnatToSell": "How much BNAT to sell to #{id} (Enter alone = until the bid or your balance runs out, Esc cancels): ",
|
|
179
|
+
"tui.id": "ID",
|
|
180
|
+
"tui.lLogIn": "L log in · ",
|
|
181
|
+
"tui.lNewQrCodeEsc": "L new QR code · Esc skip for now",
|
|
182
|
+
"tui.langSwitched": "Switched to English (saved in {file})",
|
|
183
|
+
"tui.leftBnat": "Remaining BNAT",
|
|
184
|
+
"tui.lockedBnb": "Locked BNB",
|
|
185
|
+
"tui.log": "Log",
|
|
186
|
+
"tui.loginFailed": "Login failed",
|
|
187
|
+
"tui.loginQrCodeReadyWaiting": "Login QR code ready, waiting for the scan…",
|
|
188
|
+
"tui.market": "Market",
|
|
189
|
+
"tui.mine": " mine",
|
|
190
|
+
"tui.mineOnly": "mine only",
|
|
191
|
+
"tui.mint": "Mint #{blk}",
|
|
192
|
+
"tui.mint2": "Mint #{blk} → {to}",
|
|
193
|
+
"tui.mintToCleared": "Mint recipient is this wallet again (saved in {file})",
|
|
194
|
+
"tui.mintToHeader": "mints to {to}",
|
|
195
|
+
"tui.mintToSet": "Mint recipient set to {to} (saved in {file})",
|
|
196
|
+
"tui.mintToWhichAddress0x": "Mint recipient (0x…; empty = this wallet; Esc cancels): ",
|
|
197
|
+
"tui.mintable": "Mintable",
|
|
198
|
+
"tui.newest": "newest",
|
|
199
|
+
"tui.noOutput": "no output",
|
|
200
|
+
"tui.none": "✗ none",
|
|
201
|
+
"tui.notLoggedInPressL": "baw not logged in: press L to log in with a QR code",
|
|
202
|
+
"tui.nothingHere": "(nothing here)",
|
|
203
|
+
"tui.pageRange": "{range}",
|
|
204
|
+
"tui.pairingCodeCheckItMatches": "Pairing code {v0} (check it matches the App)",
|
|
205
|
+
"tui.pgupPgdnScrollLogQ": "PgUp/PgDn scroll log · {loginKey}i 中文 · q quit",
|
|
206
|
+
"tui.pickedGetBnat": "{size} picked · get ≈ {amt} BNAT",
|
|
207
|
+
"tui.pickedPayBnat": "{size} picked · pay ≈ {amt} BNAT",
|
|
208
|
+
"tui.priceBnbBnat": "Price BNB / BNAT",
|
|
209
|
+
"tui.priceBnbBnatEscCancels": "Price (BNB / BNAT, Esc cancels): ",
|
|
210
|
+
"tui.qrCodeExpiredPressL": "QR code expired: press L for a new one",
|
|
211
|
+
"tui.rank": "Rank",
|
|
212
|
+
"tui.rankRange": "ranks {from}–{to}",
|
|
213
|
+
"tui.readFailed": "Read failed",
|
|
214
|
+
"tui.readingBids": "Reading bids…",
|
|
215
|
+
"tui.readingHistory": "Reading history…",
|
|
216
|
+
"tui.readingHoldings": "Reading holdings…",
|
|
217
|
+
"tui.readingMintableBlocks": "Reading mintable blocks…",
|
|
218
|
+
"tui.readingVault": "Reading vault…",
|
|
219
|
+
"tui.readingWallet": "Reading wallet…",
|
|
220
|
+
"tui.ready": "Ready",
|
|
221
|
+
"tui.scanResult": "scan result {status}",
|
|
222
|
+
"tui.scanWithTheBinanceApp": "Scan with the Binance App to log in to the Agentic Wallet",
|
|
223
|
+
"tui.sellToBid": "Sell to bid #{id}",
|
|
224
|
+
"tui.send": " send ",
|
|
225
|
+
"tui.settle": "Settle {action}",
|
|
226
|
+
"tui.skippedLoginYouCanBrowse": "Skipped login: you can browse; press L to log in before sending",
|
|
227
|
+
"tui.spacePickAPickPage": "Space pick · a pick page · Enter wrap · Esc clear · n/p page",
|
|
228
|
+
"tui.spacePickAPickPage2": "Space pick · a pick page · Enter unwrap · s sort · Esc clear · n/p page",
|
|
229
|
+
"tui.status": "Status",
|
|
230
|
+
"tui.summary": "Summary",
|
|
231
|
+
"tui.sureItWasNeverSent": "Sure it was never sent and should be abandoned? Type yes: ",
|
|
232
|
+
"tui.thisEntryIsAlreadySettled": "This entry is already settled",
|
|
233
|
+
"tui.time": "Time",
|
|
234
|
+
"tui.toConfirm": "To confirm ▸ ",
|
|
235
|
+
"tui.transactionHash0xFindIt": "Transaction hash (0x…, find it with baw wallet tx-history, Esc cancels): ",
|
|
236
|
+
"tui.unexpectedReply": "Unexpected reply shape from the bnat command",
|
|
237
|
+
"tui.unwrapCostsBnat": "unwrap costs BNAT",
|
|
238
|
+
"tui.vault": "Vault",
|
|
239
|
+
"tui.walletReadFailed": "Wallet read failed",
|
|
240
|
+
"tui.windowTooSmallForThe": "Window too small for the QR code: enlarge the terminal, or open this link on your phone",
|
|
241
|
+
"tui.withoutYes": "Without --yes",
|
|
242
|
+
"tui.wrapGetsBnat": "wrap gets BNAT",
|
|
243
|
+
"tui.youCanOnlyCancelYour": "You can only cancel your own bids (m: mine only)",
|
|
244
|
+
"wallet.balanceChange": "balance change",
|
|
245
|
+
"wallet.bawDidNotReturnJson": "baw did not return JSON: ",
|
|
246
|
+
"wallet.bawIsNotLoggedIn": ": baw not logged in or the session expired. Run bnat and scan the QR code (or baw auth signin)",
|
|
247
|
+
"wallet.bawIsNotLoggedIn2": "baw not logged in: run bnat and scan the QR code (or baw auth signin)",
|
|
248
|
+
"wallet.binanceRiskControlRefusedThis": "Binance risk control refused this call (at preview: nothing on chain, no gas spent)",
|
|
249
|
+
"wallet.cannotStartBawRunNpm": "Cannot start baw (reinstall with npm install -g nat-cli): ",
|
|
250
|
+
"wallet.contractCallsNeedDeveloperMode": "contract calls need developer mode: turn it on in the Agentic Wallet settings in the Binance App, then run again",
|
|
251
|
+
"wallet.failed": " failed: ",
|
|
252
|
+
"wallet.heldByATemporaryBinance": "held by a temporary Binance security check and not sent; run again in a few minutes",
|
|
253
|
+
"wallet.messageSuffix": " ({message})",
|
|
254
|
+
"wallet.theBinanceAgenticWalletHas": "The Binance Agentic Wallet has no BSC address",
|
|
255
|
+
"wallet.thePreviewApprovesADifferent": "The preview approves a different spender",
|
|
256
|
+
"wallet.thePreviewApprovesMoreThan": "The preview approves more than planned",
|
|
257
|
+
"wallet.thePreviewCalldataDiffersFrom": "The preview calldata differs from the plan",
|
|
258
|
+
"wallet.thePreviewChangesAnAllowance": "The preview changes an allowance the plan does not",
|
|
259
|
+
"wallet.thePreviewChangesAnotherAccount": "The preview changes another account's balance",
|
|
260
|
+
"wallet.thePreviewChangesAnotherToken": "The preview changes another token's allowance",
|
|
261
|
+
"wallet.thePreviewFunctionSelectorDiffers": "The preview function selector differs from the plan",
|
|
262
|
+
"wallet.thePreviewHasExpired": "The preview has expired",
|
|
263
|
+
"wallet.thePreviewHasNoValid": "The preview has no valid requestId",
|
|
264
|
+
"wallet.thePreviewMovesAnUnplanned": "The preview moves an unplanned asset {contractAddress}",
|
|
265
|
+
"wallet.thePreviewSendsFromA": "The preview sends from a different address than planned",
|
|
266
|
+
"wallet.thePreviewSendsWeiThe": "The preview sends {value} wei; the plan is {value2}",
|
|
267
|
+
"wallet.thePreviewShowsAnAuthority": "The preview shows an authority change; stopped",
|
|
268
|
+
"wallet.thePreviewSpendsMoreThan": "The preview spends {v0} ({token}), more than the planned {max}",
|
|
269
|
+
"wallet.thePreviewTargetsADifferent": "The preview targets a different contract than planned",
|
|
270
|
+
"wallet.theWalletReportsRisks": "The wallet reports risks: ",
|
|
271
|
+
"wallet.theWalletWantsThisCall": "The wallet wants this call confirmed in the Binance App; stopped (change the setting in the App and run again)",
|
|
272
|
+
"wallet.unexpectedDecreaseOfInThe": "Unexpected decrease of {v0} in the preview",
|
|
273
|
+
"wallet.unexpectedIncreaseOfInThe": "Unexpected increase of {v0} in the preview",
|
|
274
|
+
"wallet.unexpectedShapeFromBawWallet": "Unexpected shape from baw wallet address: ",
|
|
275
|
+
"wallet.unrecognizedInTheWalletPreview": "Unrecognized {what} in the wallet preview: ",
|
|
276
|
+
"wallet.walletSimulationFailed": "Wallet simulation failed: ",
|
|
277
|
+
"wallet.unexpectedPreviewShape": "Unexpected wallet preview: {field} is missing or not recognized, so stopped",
|
|
278
|
+
"wallet.bawTimedOut": "baw {cmd} gave no reply within {s} s, gave up",
|
|
279
|
+
"cli.stillWaitingForTheWallet": "Still waiting for the wallet to execute (entry {id}). Do not resend; if interrupted, check with bnat resume",
|
|
280
|
+
"tui.drawFailed": "Drawing the screen failed",
|
|
281
|
+
"chain.indexSyncing": "index syncing",
|
|
282
|
+
"journal.corruptLine": "The journal {path} is corrupt at line {n}; no write will run until it is fixed. Keep a copy of the file and check the wallet's transaction history (baw wallet tx-history) before changing anything."
|
|
283
|
+
}
|
package/i18n/revert.json
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
{
|
|
2
|
+
"NoAgentId": {
|
|
3
|
+
"zh": "钱包没有 .ai(Agent ID),合约拒绝铸造",
|
|
4
|
+
"en": "The wallet has no .ai (Agent ID); the contract refuses to mint"
|
|
5
|
+
},
|
|
6
|
+
"BeforeActivation": {
|
|
7
|
+
"zh": "区块早于 BEP-95 生效块",
|
|
8
|
+
"en": "The block is before the BEP-95 activation block"
|
|
9
|
+
},
|
|
10
|
+
"FutureBlock": {
|
|
11
|
+
"zh": "区块还没出(区块号要小于当前块)",
|
|
12
|
+
"en": "The block doesn't exist yet (it must be below the current block)"
|
|
13
|
+
},
|
|
14
|
+
"ZeroBurn": {
|
|
15
|
+
"zh": "该块销毁量为 0",
|
|
16
|
+
"en": "This block burned 0"
|
|
17
|
+
},
|
|
18
|
+
"AlreadyMinted": {
|
|
19
|
+
"zh": "该块已被铸造",
|
|
20
|
+
"en": "This block has already been minted"
|
|
21
|
+
},
|
|
22
|
+
"BadSignature": {
|
|
23
|
+
"zh": "签名无效(签名者已更换,或数值不符)",
|
|
24
|
+
"en": "Invalid signature (the signer changed, or the values differ)"
|
|
25
|
+
},
|
|
26
|
+
"NotAuthorized": {
|
|
27
|
+
"zh": "你不是这张 NFT 的持有人或被授权人(或它已在 BNAT 金库里)",
|
|
28
|
+
"en": "You are not the holder or an approved operator of this NFT (or it is in the BNAT vault)"
|
|
29
|
+
},
|
|
30
|
+
"EmptyBatch": {
|
|
31
|
+
"zh": "没有指定区块",
|
|
32
|
+
"en": "No blocks given"
|
|
33
|
+
},
|
|
34
|
+
"ZeroAddress": {
|
|
35
|
+
"zh": "接收地址不能为空",
|
|
36
|
+
"en": "The recipient address can't be empty"
|
|
37
|
+
},
|
|
38
|
+
"ERC721NonexistentToken": {
|
|
39
|
+
"zh": "这张 NFT 不存在(还没铸造)",
|
|
40
|
+
"en": "This NFT doesn't exist (not minted yet)"
|
|
41
|
+
},
|
|
42
|
+
"NotInVault": {
|
|
43
|
+
"zh": "这块不在 BNAT 金库里",
|
|
44
|
+
"en": "This block isn't in the BNAT vault"
|
|
45
|
+
},
|
|
46
|
+
"CannotWithdrawNft": {
|
|
47
|
+
"zh": "金库里的 NFT 不能被取出,只能 unwrap",
|
|
48
|
+
"en": "NFTs in the vault can't be withdrawn, only unwrapped"
|
|
49
|
+
},
|
|
50
|
+
"OnlyDev": {
|
|
51
|
+
"zh": "只有开发者能从 BNAT 金库提取手续费",
|
|
52
|
+
"en": "Only the developer can withdraw fees from the BNAT vault"
|
|
53
|
+
},
|
|
54
|
+
"OnlyNft": {
|
|
55
|
+
"zh": "只有 NAT 合约能调用",
|
|
56
|
+
"en": "Only the NAT contract can call this"
|
|
57
|
+
},
|
|
58
|
+
"RenounceDisabled": {
|
|
59
|
+
"zh": "合约所有权不能放弃",
|
|
60
|
+
"en": "Ownership can't be renounced"
|
|
61
|
+
},
|
|
62
|
+
"TransferFailed": {
|
|
63
|
+
"zh": "BNB 转账失败(收款方不接受 BNB)",
|
|
64
|
+
"en": "BNB transfer failed (the recipient doesn't accept BNB)"
|
|
65
|
+
},
|
|
66
|
+
"WrongValue": {
|
|
67
|
+
"zh": "锁定的 BNB 和买单金额不符",
|
|
68
|
+
"en": "The locked BNB doesn't match the bid amount"
|
|
69
|
+
},
|
|
70
|
+
"ZeroAmount": {
|
|
71
|
+
"zh": "数量和价格都要大于 0",
|
|
72
|
+
"en": "Amount and price must both be above 0"
|
|
73
|
+
},
|
|
74
|
+
"NotBuyer": {
|
|
75
|
+
"zh": "只有挂单人能撤这个买单",
|
|
76
|
+
"en": "Only the bidder can cancel this bid"
|
|
77
|
+
},
|
|
78
|
+
"BidClosed": {
|
|
79
|
+
"zh": "这个买单已经成交完或撤销了",
|
|
80
|
+
"en": "This bid is already filled or cancelled"
|
|
81
|
+
},
|
|
82
|
+
"TooMuch": {
|
|
83
|
+
"zh": "卖出数量超过了买单剩余",
|
|
84
|
+
"en": "The sell amount is more than the bid has left"
|
|
85
|
+
},
|
|
86
|
+
"NothingToPay": {
|
|
87
|
+
"zh": "卖出数量太小,按这个价格换不到 1 wei",
|
|
88
|
+
"en": "Sell amount too small: worth less than 1 wei at this price"
|
|
89
|
+
},
|
|
90
|
+
"ERC20InsufficientBalance": {
|
|
91
|
+
"zh": "BNAT 不足",
|
|
92
|
+
"en": "Not enough BNAT"
|
|
93
|
+
},
|
|
94
|
+
"ERC20InsufficientAllowance": {
|
|
95
|
+
"zh": "市场合约的 BNAT 授权不足",
|
|
96
|
+
"en": "The market's BNAT allowance is too low"
|
|
97
|
+
}
|
|
98
|
+
}
|