@rozoai/checkout 0.1.2 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +30 -9
- package/docs/QUICKSTART.es.md +4 -2
- package/docs/QUICKSTART.ja.md +3 -2
- package/docs/QUICKSTART.md +7 -3
- package/docs/QUICKSTART.zh.md +3 -3
- package/docs/README.es.md +10 -2
- package/docs/README.ja.md +9 -2
- package/docs/README.zh.md +8 -2
- package/docs/review-history.md +77 -0
- package/llms.txt +7 -1
- package/package.json +1 -1
- package/scripts/dist/cli.js +2983 -2881
- package/scripts/dist/create-order.js +53 -2
- package/scripts/dist/quote.js +4 -0
- package/scripts/dist/send-evm.js +4 -0
- package/scripts/dist/send-sol.js +4 -0
- package/scripts/dist/status.js +39 -1
package/README.md
CHANGED
|
@@ -32,7 +32,7 @@ npx @rozoai/checkout pay <coinbase-link> --with usdt-solana
|
|
|
32
32
|
| Polygon | `usdt-polygon` `usdc-polygon` | `137` | 6 decimals |
|
|
33
33
|
| Base | `usdc-base` | `8453` | 6 decimals |
|
|
34
34
|
| Solana | `usdt-solana` `usdc-solana` | `900` | SPL; native SOL not supported |
|
|
35
|
-
| Stellar | `usdc-stellar` | `1500` | memo required — shown in the deposit block |
|
|
35
|
+
| Stellar | `usdc-stellar` | `1500` | `MEMO_TEXT` memo required — shown in the deposit block |
|
|
36
36
|
| Bitcoin Lightning | `btc-lightning` | `lightning` | BOLT11; amounts in satoshis |
|
|
37
37
|
|
|
38
38
|
Native gas coins (SOL, BNB, ETH, MATIC) and on-chain BTC are not accepted.
|
|
@@ -169,7 +169,8 @@ npx @rozoai/checkout pay <coinbase-link> --with usdt-solana
|
|
|
169
169
|
```
|
|
170
170
|
|
|
171
171
|
Wallet: any wallet, no key. `--send` signs locally using your Solana CLI
|
|
172
|
-
keypair or an encrypted keystore
|
|
172
|
+
keypair or an encrypted keystore, and supports EVM chains and Solana only —
|
|
173
|
+
Stellar and Lightning are Mode A only.
|
|
173
174
|
</details>
|
|
174
175
|
|
|
175
176
|
<details>
|
|
@@ -183,7 +184,8 @@ npx @rozoai/checkout pay <coinbase-link> --with usdt-solana
|
|
|
183
184
|
```
|
|
184
185
|
|
|
185
186
|
Wallet: any wallet, no key. `--send` signs locally using your Solana CLI
|
|
186
|
-
keypair or an encrypted keystore
|
|
187
|
+
keypair or an encrypted keystore, and supports EVM chains and Solana only —
|
|
188
|
+
Stellar and Lightning are Mode A only.
|
|
187
189
|
</details>
|
|
188
190
|
|
|
189
191
|
<details>
|
|
@@ -197,7 +199,8 @@ npx @rozoai/checkout pay <coinbase-link> --with usdt-solana
|
|
|
197
199
|
```
|
|
198
200
|
|
|
199
201
|
Wallet: any wallet, no key. `--send` signs locally using your Solana CLI
|
|
200
|
-
keypair or an encrypted keystore
|
|
202
|
+
keypair or an encrypted keystore, and supports EVM chains and Solana only —
|
|
203
|
+
Stellar and Lightning are Mode A only.
|
|
201
204
|
</details>
|
|
202
205
|
|
|
203
206
|
<details>
|
|
@@ -211,7 +214,8 @@ npx @rozoai/checkout pay <coinbase-link> --with usdt-solana
|
|
|
211
214
|
```
|
|
212
215
|
|
|
213
216
|
Wallet: any wallet, no key. `--send` signs locally using your Solana CLI
|
|
214
|
-
keypair or an encrypted keystore
|
|
217
|
+
keypair or an encrypted keystore, and supports EVM chains and Solana only —
|
|
218
|
+
Stellar and Lightning are Mode A only.
|
|
215
219
|
</details>
|
|
216
220
|
|
|
217
221
|
<details>
|
|
@@ -226,7 +230,8 @@ npx @rozoai/checkout pay <coinbase-link> --with usdt-solana
|
|
|
226
230
|
```
|
|
227
231
|
|
|
228
232
|
Wallet: any wallet, no key. `--send` signs locally using your Solana CLI
|
|
229
|
-
keypair or an encrypted keystore
|
|
233
|
+
keypair or an encrypted keystore, and supports EVM chains and Solana only —
|
|
234
|
+
Stellar and Lightning are Mode A only.
|
|
230
235
|
</details>
|
|
231
236
|
|
|
232
237
|
<details>
|
|
@@ -240,7 +245,8 @@ openclaw agent exec "Pay this OpenRouter link with USDT on Solana by running: np
|
|
|
240
245
|
```
|
|
241
246
|
|
|
242
247
|
Wallet: any wallet, no key. `--send` signs locally using your Solana CLI
|
|
243
|
-
keypair or an encrypted keystore
|
|
248
|
+
keypair or an encrypted keystore, and supports EVM chains and Solana only —
|
|
249
|
+
Stellar and Lightning are Mode A only.
|
|
244
250
|
</details>
|
|
245
251
|
|
|
246
252
|
<details>
|
|
@@ -255,7 +261,8 @@ npx @rozoai/checkout pay <coinbase-link> --with usdt-solana
|
|
|
255
261
|
```
|
|
256
262
|
|
|
257
263
|
Wallet: any wallet, no key. `--send` signs locally using your Solana CLI
|
|
258
|
-
keypair or an encrypted keystore
|
|
264
|
+
keypair or an encrypted keystore, and supports EVM chains and Solana only —
|
|
265
|
+
Stellar and Lightning are Mode A only.
|
|
259
266
|
</details>
|
|
260
267
|
|
|
261
268
|
<details>
|
|
@@ -304,7 +311,8 @@ If the agent has no shell but can make HTTP requests, it can drive the four
|
|
|
304
311
|
public endpoints directly — see [how it works](docs/how-it-works.md).
|
|
305
312
|
|
|
306
313
|
Wallet: any wallet, no key. `--send` signs locally using your Solana CLI
|
|
307
|
-
keypair or an encrypted keystore
|
|
314
|
+
keypair or an encrypted keystore, and supports EVM chains and Solana only —
|
|
315
|
+
Stellar and Lightning are Mode A only.
|
|
308
316
|
</details>
|
|
309
317
|
|
|
310
318
|
## Three rules worth knowing
|
|
@@ -313,6 +321,10 @@ keypair or an encrypted keystore.
|
|
|
313
321
|
cached response or a screenshot.
|
|
314
322
|
- **Send the exact amount shown.** It is normally larger than the invoice — it
|
|
315
323
|
includes the bridge and network fees.
|
|
324
|
+
- **Stellar deposits carry a memo, and it is `MEMO_TEXT`** — even when it looks
|
|
325
|
+
like a number (`65371582` is text, not an id). Sending it as `MEMO_ID`
|
|
326
|
+
produces a different memo and the payment will not be matched. The deposit
|
|
327
|
+
block states the type as `receiverMemoType`.
|
|
316
328
|
- **Never pay a funded order twice.** If a payment has already been detected,
|
|
317
329
|
stop and get a human to reconcile it; a second payment to a one-time address
|
|
318
330
|
is not guaranteed to be credited.
|
|
@@ -331,6 +343,15 @@ The full list of what this refuses to do, and why, is in
|
|
|
331
343
|
|
|
332
344
|
## Changelog
|
|
333
345
|
|
|
346
|
+
- **0.1.3** — fixes found by the first real payment. The built bundles no
|
|
347
|
+
longer crash with `__filename is not defined` on Node 22+ (the esbuild banner
|
|
348
|
+
now shims `__filename`/`__dirname` as well as `require`, and every bundle is
|
|
349
|
+
now executed by the test suite). Stellar deposits state their memo type
|
|
350
|
+
(`MEMO_TEXT`, even when the memo looks numeric). Orders show remaining
|
|
351
|
+
validity as a duration ("expires in 47m") in the deposit block and in
|
|
352
|
+
`status`, with the exact command to make a fresh one. Reusing an existing
|
|
353
|
+
unpaid order, and asking for a coin that differs from it, are both explained
|
|
354
|
+
instead of reading as errors.
|
|
334
355
|
- **0.1.2** — Mode B no longer needs a raw private key in an environment
|
|
335
356
|
variable. On Solana it uses the `~/.config/solana/id.json` that
|
|
336
357
|
`solana-keygen` already wrote; on EVM an encrypted V3 keystore whose
|
package/docs/QUICKSTART.es.md
CHANGED
|
@@ -159,6 +159,7 @@ exigen los scripts de envío.
|
|
|
159
159
|
```
|
|
160
160
|
|
|
161
161
|
Enviar exactamente los campos que entrega este bloque. Para Lightning,
|
|
162
|
+
En Stellar el memo es **`MEMO_TEXT`** aunque parezca numérico: enviarlo como `MEMO_ID` no coincidirá. `deposit.expiresIn` indica cuánto sigue siendo válida la orden.
|
|
162
163
|
`deposit.lnInvoice` contiene la cadena BOLT11 que hay que escanear, y
|
|
163
164
|
`deposit.amount` está en satoshis.
|
|
164
165
|
|
|
@@ -182,8 +183,9 @@ Eso es todo el Modo A. Continuar en el paso 5.
|
|
|
182
183
|
|
|
183
184
|
### La forma opcional: dejar que el script pague (Modo B)
|
|
184
185
|
|
|
185
|
-
Solo si se quiere que esta máquina firme, y únicamente en cadenas EVM y
|
|
186
|
-
|
|
186
|
+
Solo si se quiere que esta máquina firme, y únicamente en **cadenas EVM y
|
|
187
|
+
Solana**: no hay `--send` para Stellar ni Lightning, que se pagan desde la
|
|
188
|
+
propia billetera. Esta es la única parte que necesita una clave.
|
|
187
189
|
|
|
188
190
|
**Solana: usar el par de claves que ya se tiene.** Si alguna vez se ejecutó
|
|
189
191
|
`solana-keygen`, `~/.config/solana/id.json` ya existe y se usa automáticamente:
|
package/docs/QUICKSTART.ja.md
CHANGED
|
@@ -141,6 +141,7 @@ node scripts/dist/create-order.js --url "$LINK" --chain 900 --token USDT --confi
|
|
|
141
141
|
```
|
|
142
142
|
|
|
143
143
|
このブロックが示すフィールドを、そのとおりに送金してください。Lightning の場合、
|
|
144
|
+
Stellar の memo は数字に見えても**常に `MEMO_TEXT`** です — `MEMO_ID` として送ると一致しません。`deposit.expiresIn` に残りの有効時間が出ます。
|
|
144
145
|
`deposit.lnInvoice` にスキャン用の BOLT11 文字列が入り、`deposit.amount` は
|
|
145
146
|
satoshi 単位になります。
|
|
146
147
|
|
|
@@ -163,8 +164,8 @@ satoshi 単位になります。
|
|
|
163
164
|
|
|
164
165
|
### 任意の方法: スクリプトに支払わせる(モード B)
|
|
165
166
|
|
|
166
|
-
このマシンに署名させたい場合のみで、対象は EVM チェーンと Solana
|
|
167
|
-
|
|
167
|
+
このマシンに署名させたい場合のみで、対象は **EVM チェーンと Solana だけ**です。Stellar と
|
|
168
|
+
Lightning に `--send` はなく、自分のウォレットから支払います。鍵が必要なのはこの部分だけです。
|
|
168
169
|
|
|
169
170
|
**Solana — すでにある鍵ペアをそのまま使います。** `solana-keygen` を一度でも実行して
|
|
170
171
|
いれば `~/.config/solana/id.json` が既に存在し、自動的に使われます:
|
package/docs/QUICKSTART.md
CHANGED
|
@@ -151,7 +151,10 @@ scripts require.
|
|
|
151
151
|
}
|
|
152
152
|
```
|
|
153
153
|
|
|
154
|
-
Send exactly the fields this block gives you.
|
|
154
|
+
Send exactly the fields this block gives you. On Stellar the memo is
|
|
155
|
+
**`MEMO_TEXT`** even when it looks numeric — sending it as `MEMO_ID` will not
|
|
156
|
+
match. `deposit.expiresIn` tells you how long the order stays valid. For
|
|
157
|
+
Lightning,
|
|
155
158
|
`deposit.lnInvoice` holds the BOLT11 string to scan, and `deposit.amount` is
|
|
156
159
|
in satoshis.
|
|
157
160
|
|
|
@@ -174,8 +177,9 @@ That is the whole of Mode A. Skip to step 5.
|
|
|
174
177
|
|
|
175
178
|
### The optional way: let the script pay (Mode B)
|
|
176
179
|
|
|
177
|
-
Only if you want this machine to sign for you, and only on EVM chains and
|
|
178
|
-
Solana
|
|
180
|
+
Only if you want this machine to sign for you, and only on **EVM chains and
|
|
181
|
+
Solana** — there is no `--send` for Stellar or Lightning, which are paid from
|
|
182
|
+
your own wallet. This is the only part that needs a key.
|
|
179
183
|
|
|
180
184
|
**Solana — use the keypair you already have.** If you have ever run
|
|
181
185
|
`solana-keygen`, `~/.config/solana/id.json` already exists and is used
|
package/docs/QUICKSTART.zh.md
CHANGED
|
@@ -129,7 +129,7 @@ node scripts/dist/create-order.js --url "$LINK" --chain 900 --token USDT --confi
|
|
|
129
129
|
}
|
|
130
130
|
```
|
|
131
131
|
|
|
132
|
-
|
|
132
|
+
严格按这个信息块给出的字段来发送。Stellar 上的 memo 即使看起来是纯数字,也**始终是 `MEMO_TEXT`** —— 按 `MEMO_ID` 发送不会被匹配上。`deposit.expiresIn` 会告诉你订单还有多久过期。对于 Lightning,`deposit.lnInvoice` 里是供扫码的
|
|
133
133
|
BOLT11 字符串,`deposit.amount` 的单位是聪 (satoshis)。
|
|
134
134
|
|
|
135
135
|
## 4. 付款
|
|
@@ -150,8 +150,8 @@ BOLT11 字符串,`deposit.amount` 的单位是聪 (satoshis)。
|
|
|
150
150
|
|
|
151
151
|
### 可选的方式:让脚本替你付(模式 B)
|
|
152
152
|
|
|
153
|
-
|
|
154
|
-
|
|
153
|
+
只有当你想让这台机器替你签名时才需要,而且**只支持 EVM 链和 Solana** —— Stellar 和
|
|
154
|
+
闪电网络没有 `--send`,只能用你自己的钱包付。这是整个流程里唯一需要私钥的部分。
|
|
155
155
|
|
|
156
156
|
**Solana —— 直接用你已有的密钥对。** 只要你跑过 `solana-keygen`,
|
|
157
157
|
`~/.config/solana/id.json` 就已经存在,脚本会自动使用它:
|
package/docs/README.es.md
CHANGED
|
@@ -34,7 +34,7 @@ npx @rozoai/checkout pay <coinbase-link> --with usdt-solana
|
|
|
34
34
|
| Polygon | `usdt-polygon` `usdc-polygon` | `137` | 6 decimales |
|
|
35
35
|
| Base | `usdc-base` | `8453` | 6 decimales |
|
|
36
36
|
| Solana | `usdt-solana` `usdc-solana` | `900` | SPL; SOL nativo no admitido |
|
|
37
|
-
| Stellar | `usdc-stellar` | `1500` | memo obligatorio — se muestra en el bloque de depósito |
|
|
37
|
+
| Stellar | `usdc-stellar` | `1500` | memo `MEMO_TEXT` obligatorio — se muestra en el bloque de depósito |
|
|
38
38
|
| Bitcoin Lightning | `btc-lightning` | `lightning` | BOLT11; importes en satoshis |
|
|
39
39
|
|
|
40
40
|
Las monedas de gas nativas (SOL, BNB, ETH, MATIC) y el BTC on-chain no se aceptan.
|
|
@@ -103,7 +103,7 @@ Para pagar un enlace de pago de OpenRouter / Coinbase, ejecuta:
|
|
|
103
103
|
npx @rozoai/checkout pay <coinbase-link> --with usdt-solana
|
|
104
104
|
```
|
|
105
105
|
|
|
106
|
-
Billetera: cualquier billetera, **sin clave**. Solo `--send` la necesita: firma localmente con el par de claves de la CLI de Solana o un keystore cifrado.
|
|
106
|
+
Billetera: cualquier billetera, **sin clave**. Solo `--send` la necesita: firma localmente con el par de claves de la CLI de Solana o un keystore cifrado, y solo admite cadenas EVM y Solana (Stellar y Lightning son solo Modo A).
|
|
107
107
|
</details>
|
|
108
108
|
|
|
109
109
|
<details>
|
|
@@ -329,6 +329,14 @@ La lista completa de lo que esta herramienta se niega a hacer, y por qué, está
|
|
|
329
329
|
|
|
330
330
|
## Registro de cambios
|
|
331
331
|
|
|
332
|
+
- **0.1.3** — Correcciones surgidas del primer pago real. Los bundles ya no fallan
|
|
333
|
+
con `__filename is not defined` en Node 22+ (el banner de esbuild ahora define
|
|
334
|
+
`__filename`/`__dirname` además de `require`, y las pruebas ejecutan cada bundle
|
|
335
|
+
de verdad). Los depósitos de Stellar indican el tipo de memo (`MEMO_TEXT`, aunque
|
|
336
|
+
el memo parezca numérico). Las órdenes muestran la validez restante como duración
|
|
337
|
+
("expires in 47m") en el bloque de depósito y en `status`, con el comando exacto
|
|
338
|
+
para crear una nueva. Reutilizar una orden impaga existente, y pedir una moneda
|
|
339
|
+
distinta a la suya, ahora se explican en lugar de parecer errores.
|
|
332
340
|
- **0.1.2** — El Modo B ya no necesita una clave privada en bruto en una variable
|
|
333
341
|
de entorno. En Solana usa el `~/.config/solana/id.json` que `solana-keygen` ya
|
|
334
342
|
creó; en EVM un keystore V3 cifrado cuya frase de contraseña se solicita.
|
package/docs/README.ja.md
CHANGED
|
@@ -33,7 +33,7 @@ npx @rozoai/checkout pay <coinbase-link> --with usdt-solana
|
|
|
33
33
|
| Polygon | `usdt-polygon` `usdc-polygon` | `137` | 小数点以下 6 桁 |
|
|
34
34
|
| Base | `usdc-base` | `8453` | 小数点以下 6 桁 |
|
|
35
35
|
| Solana | `usdt-solana` `usdc-solana` | `900` | SPL。ネイティブの SOL は非対応 |
|
|
36
|
-
| Stellar | `usdc-stellar` | `1500` |
|
|
36
|
+
| Stellar | `usdc-stellar` | `1500` | `MEMO_TEXT` のメモが必須 — 入金ブロックに表示されます |
|
|
37
37
|
| Bitcoin Lightning | `btc-lightning` | `lightning` | BOLT11。金額は satoshi 単位 |
|
|
38
38
|
|
|
39
39
|
ネイティブのガス通貨(SOL、BNB、ETH、MATIC)およびオンチェーンの BTC は受け付けません。
|
|
@@ -89,7 +89,7 @@ OpenRouter / Coinbase の決済リンクを支払うには、次を実行して
|
|
|
89
89
|
npx @rozoai/checkout pay <coinbase-link> --with usdt-solana
|
|
90
90
|
```
|
|
91
91
|
|
|
92
|
-
ウォレット: どのウォレットでも構いません。**鍵は不要です。** Solana CLI の鍵ペアまたは暗号化された keystore を使う `--send
|
|
92
|
+
ウォレット: どのウォレットでも構いません。**鍵は不要です。** Solana CLI の鍵ペアまたは暗号化された keystore を使う `--send`(EVM チェーンと Solana のみ、Stellar と Lightning はモード A 専用)の場合だけ
|
|
93
93
|
環境変数の鍵が必要です。
|
|
94
94
|
</details>
|
|
95
95
|
|
|
@@ -320,6 +320,13 @@ WalletConnect 専用のモバイルウォレット、取引所アカウント。
|
|
|
320
320
|
|
|
321
321
|
## 変更履歴
|
|
322
322
|
|
|
323
|
+
- **0.1.3** — 最初の実際の支払いで見つかった不具合の修正。ビルド済みバンドルが Node 22 以降で
|
|
324
|
+
`__filename is not defined` により停止しなくなりました(esbuild の banner が `require` に加えて
|
|
325
|
+
`__filename`/`__dirname` も定義し、テストが各バンドルを実際に実行するようになりました)。Stellar の
|
|
326
|
+
入金では memo の種類(`MEMO_TEXT`。memo が数字に見える場合も同様)を明示します。注文の残り有効時間を
|
|
327
|
+
入金ブロックと `status` の両方で継続時間として表示し("expires in 47m")、期限切れ時には新しい注文を
|
|
328
|
+
作るコマンドをそのまま示します。既存の未払い注文の再利用と、それと異なる通貨を指定した場合の双方を、
|
|
329
|
+
エラーではなく説明として提示します。
|
|
323
330
|
- **0.1.2** — モード B で環境変数に生の秘密鍵を置く必要がなくなりました。Solana では
|
|
324
331
|
`solana-keygen` が既に作成した `~/.config/solana/id.json` を、EVM では暗号化された
|
|
325
332
|
V3 keystore(パスフレーズは対話的に入力)を使います。`--keyfile` でどちらも明示でき、
|
package/docs/README.zh.md
CHANGED
|
@@ -30,7 +30,7 @@ npx @rozoai/checkout pay <coinbase-link> --with usdt-solana
|
|
|
30
30
|
| Polygon | `usdt-polygon` `usdc-polygon` | `137` | 6 位小数 |
|
|
31
31
|
| Base | `usdc-base` | `8453` | 6 位小数 |
|
|
32
32
|
| Solana | `usdt-solana` `usdc-solana` | `900` | SPL;不支持原生 SOL |
|
|
33
|
-
| Stellar | `usdc-stellar` | `1500` | 必须带 memo —— 会在充值信息块里给出 |
|
|
33
|
+
| Stellar | `usdc-stellar` | `1500` | 必须带 `MEMO_TEXT` memo —— 会在充值信息块里给出 |
|
|
34
34
|
| Bitcoin Lightning | `btc-lightning` | `lightning` | BOLT11;金额单位为聪 |
|
|
35
35
|
|
|
36
36
|
原生 gas 币(SOL、BNB、ETH、MATIC)以及链上 BTC 均不接受。
|
|
@@ -82,7 +82,7 @@ Codex 会读取项目根目录的 `AGENTS.md`。加一条常驻指令,它就
|
|
|
82
82
|
npx @rozoai/checkout pay <coinbase-link> --with usdt-solana
|
|
83
83
|
```
|
|
84
84
|
|
|
85
|
-
钱包:任意钱包,**无需私钥**。只有 `--send` 需要,它用你的 Solana CLI 密钥对或加密 keystore
|
|
85
|
+
钱包:任意钱包,**无需私钥**。只有 `--send` 需要,它用你的 Solana CLI 密钥对或加密 keystore 在本地签名;仅支持 EVM 链和 Solana —— Stellar 与闪电网络只能用模式 A。
|
|
86
86
|
</details>
|
|
87
87
|
|
|
88
88
|
<details>
|
|
@@ -292,6 +292,12 @@ echo '.env' >> .gitignore
|
|
|
292
292
|
|
|
293
293
|
## 更新日志
|
|
294
294
|
|
|
295
|
+
- **0.1.3** —— 第一笔真实付款暴露出来的问题修复。构建产物在 Node 22+ 上不再因
|
|
296
|
+
`__filename is not defined` 崩溃(esbuild banner 现在同时注入 `__filename`/`__dirname`
|
|
297
|
+
和 `require`,并且测试会真正执行每一个构建产物)。Stellar 充值现在会明确标出 memo
|
|
298
|
+
类型(`MEMO_TEXT`,即使 memo 看起来是纯数字)。订单在充值信息块和 `status` 里都会以
|
|
299
|
+
时长显示剩余有效期("expires in 47m"),过期时给出重新下单的完整命令。复用已有的未付
|
|
300
|
+
订单、以及所选币种与已有订单不一致这两种情况,现在都会被解释清楚,而不是看起来像报错。
|
|
295
301
|
- **0.1.2** —— 模式 B 不再需要把原始私钥放进环境变量。Solana 直接用 `solana-keygen`
|
|
296
302
|
已经写好的 `~/.config/solana/id.json`;EVM 用加密的 V3 keystore,口令交互式提示输入。
|
|
297
303
|
`--keyfile` 可以显式指定其中任一种,相关设置也可以放进已 gitignore 的 `.env`。
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# Review history
|
|
2
|
+
|
|
3
|
+
[← back to the README](../README.md) · [Safety design](safety.md)
|
|
4
|
+
|
|
5
|
+
This tool moves other people's money. It was reviewed adversarially before it
|
|
6
|
+
was written, again after it was written, and again after the first real payment.
|
|
7
|
+
This page is the record of that.
|
|
8
|
+
|
|
9
|
+
## Design review — 3 rounds, before any code existed
|
|
10
|
+
|
|
11
|
+
The design was written as a plan document and reviewed by an independent model
|
|
12
|
+
with a standing instruction to hunt for anything that could lose funds. No code
|
|
13
|
+
was written until the plan passed with no P0 findings.
|
|
14
|
+
|
|
15
|
+
| Round | Verdict |
|
|
16
|
+
|---|---|
|
|
17
|
+
| 1 | 6 P0, 7 P1, 2 P2 — plan revised |
|
|
18
|
+
| 2 | still had P0s: several round-1 fixes were incomplete, plus one new P0 — plan revised again |
|
|
19
|
+
| 3 | no P0 — implementation began |
|
|
20
|
+
|
|
21
|
+
The P0s were about the plan being wrong regarding the payment rails, not about
|
|
22
|
+
style. Among them: the reuse rule was mis-stated (an existing order is reused
|
|
23
|
+
whenever it is merely unexpired, not only when it is unpaid); the binding
|
|
24
|
+
confirmation was placed before the deposit details existed, so it could not
|
|
25
|
+
bind them; and the payment link could be consumed by another payer between the
|
|
26
|
+
quote and the signature, which needed a re-check immediately before paying.
|
|
27
|
+
|
|
28
|
+
## Code review — 2 rounds, after implementation
|
|
29
|
+
|
|
30
|
+
| Round | Verdict |
|
|
31
|
+
|---|---|
|
|
32
|
+
| 1 | 8 P0, 10 P1, 5 P2 |
|
|
33
|
+
| 2 | 20 of 23 resolved; 3 residual findings, then fixed |
|
|
34
|
+
|
|
35
|
+
The round-1 P0s were the interesting ones, and each is now a real code path
|
|
36
|
+
with its own error code and tests:
|
|
37
|
+
|
|
38
|
+
- the confirmation gate and the `--send` opt-in were documented but not
|
|
39
|
+
actually enforced
|
|
40
|
+
- the send-once claim was a check-then-act race that two concurrent processes
|
|
41
|
+
could both pass
|
|
42
|
+
- an unreadable `amountReceived` was treated as "no money received" rather than
|
|
43
|
+
as money
|
|
44
|
+
- the post-create comparison ignored security-critical fields when they were
|
|
45
|
+
simply absent
|
|
46
|
+
- payability was not re-proved immediately before signing, and incomplete
|
|
47
|
+
upstream state read as payable
|
|
48
|
+
- deposit instructions were not validated for completeness before being shown
|
|
49
|
+
- provider errors could leak credential-bearing URLs
|
|
50
|
+
- the tracked-secret check failed open when it could not consult git
|
|
51
|
+
|
|
52
|
+
## First real payment
|
|
53
|
+
|
|
54
|
+
A live payment then settled in about a minute — and surfaced four more defects,
|
|
55
|
+
all fixed in 0.1.3:
|
|
56
|
+
|
|
57
|
+
- the built bundles crashed on newer Node because the bundler's CommonJS shim
|
|
58
|
+
was incomplete; it had never been caught because only `--help` was ever run
|
|
59
|
+
against a built bundle. The test suite now executes every bundle.
|
|
60
|
+
- the Stellar memo type was not stated anywhere, and sending that memo with the
|
|
61
|
+
wrong type loses the payment. It is `MEMO_TEXT`, and the deposit block now
|
|
62
|
+
says so.
|
|
63
|
+
- reusing an existing unpaid order, and asking for a coin that differs from it,
|
|
64
|
+
both read as errors rather than as the ordinary situations they are
|
|
65
|
+
- nothing showed how long an order had left, and a real payment nearly missed
|
|
66
|
+
its window
|
|
67
|
+
|
|
68
|
+
## What this means for a reader
|
|
69
|
+
|
|
70
|
+
Every finding above is closed, and the behaviours they produced are covered by
|
|
71
|
+
the test suite, which runs entirely offline against recorded fixtures. The full
|
|
72
|
+
list of what this tool refuses to do, and why, is in
|
|
73
|
+
[docs/safety.md](safety.md).
|
|
74
|
+
|
|
75
|
+
The detailed review transcripts are kept internally; they quote source from
|
|
76
|
+
private repositories and so are not published here. The findings themselves are
|
|
77
|
+
summarised above in full — nothing material is omitted.
|
package/llms.txt
CHANGED
|
@@ -54,6 +54,8 @@ Where the material comes from:
|
|
|
54
54
|
`cast wallet import <name> --interactive` writes a V3 keystore to
|
|
55
55
|
~/.foundry/keystores/<name>; `geth account import` also writes one. Browser
|
|
56
56
|
wallets do not export keystores, only raw keys.
|
|
57
|
+
- --send supports EVM chains and Solana ONLY. Stellar and Lightning are paid
|
|
58
|
+
from the user's own wallet (Mode A); there is no local signing for them.
|
|
57
59
|
- Hardware wallets, WalletConnect-only wallets and exchange accounts CANNOT be
|
|
58
60
|
used with --send. Those users take the default keyless path, which works with
|
|
59
61
|
any wallet.
|
|
@@ -108,7 +110,11 @@ private key (EVM and Solana only); every other path is keyless.
|
|
|
108
110
|
Pay EXACTLY source.amount of the requested token on the requested chain to
|
|
109
111
|
source.receiverAddress, including every other field the block carries (Stellar
|
|
110
112
|
routes on a shared hub address plus source.receiverMemo, so omitting the memo
|
|
111
|
-
loses the payment).
|
|
113
|
+
loses the payment). The Stellar memo is ALWAYS MEMO_TEXT, even when it is all
|
|
114
|
+
digits (e.g. 65371582) — sending it as MEMO_ID produces a different memo and
|
|
115
|
+
the payment will not match. The deposit block reports this as
|
|
116
|
+
receiverMemoType. Orders expire: deposit.expiresIn / status expiry.expiresIn
|
|
117
|
+
give the remaining validity as a duration.
|
|
112
118
|
For Lightning, pay the BOLT11 in source.lnInvoice (receiverAddress is empty).
|
|
113
119
|
|
|
114
120
|
4) Poll until settled:
|
package/package.json
CHANGED