hpw-convert-eip681 0.5.0 → 0.6.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/README.md CHANGED
@@ -61,6 +61,10 @@ ethereum:<JPYCコントラクトアドレス>@<chain id>/transfer?address=<to>&u
61
61
  取りうる値の全体像が未確認のため、真偽値等には決め打ちしていません。
62
62
  パラメータが存在しない場合は `None`(JS側では `undefined`)です。
63
63
 
64
+ 順方向は寛容なパースですが、`to` がゼロアドレス、またはJPYCコントラクト自身の
65
+ 場合は `UnsafeRecipient` として拒否します(送金が失敗するか資金が永久に失われる
66
+ だけで、正当な用途がないため)。
67
+
64
68
  ## 逆方向: EIP-681 → HashPort Wallet決済リンク
65
69
 
66
70
  > **注意:** 生成した決済リンクが意味を持つのは、**送金先アドレスがHashPort Wallet側で受け取り先として設定済みである場合に限られます。** 本ライブラリはネットワークアクセスを一切行わないため、そのアドレスがHashPort Walletに登録されているかどうかを確認できません。生成されるのはあくまで「HashPort Walletが生成するリンクと同じ形式の文字列」であり、HashPort Wallet側がそのリンクを受け付けることや、支払いが正しく行われることは保証されません。
@@ -71,7 +75,7 @@ ethereum:<JPYCコントラクトアドレス>@<chain id>/transfer?address=<to>&u
71
75
  ethereum:[pay-]<JPYCコントラクトアドレス>@<chain id>/transfer?address=<to>[&uint256=<amount>]
72
76
  ```
73
77
 
74
- - `uint256` は省略可能です(省略時は金額未指定のリンクになります)。EIP-681の数値表記に従い、`1000` のような整数のほか `2.014e18` のような指数表記も受け付けます(結果が非負の整数かつ `uint256` に収まる場合のみ)。
78
+ - `uint256` は省略可能です(省略時は金額未指定のリンクになります)。EIP-681の数値表記に従い、`1000` のような整数のほか `2.014e18` のような指数表記も受け付けます(結果が1以上の整数かつ `uint256` に収まる場合のみ。金額を指定しない場合は `uint256=0` ではなく `uint256` 自体を省略してください)。
75
79
  - ガス関連のヒント(`gas`・`gasLimit`・`gasPrice`)は、支払い内容を変えないため受け付けたうえで無視します。
76
80
  - EIP-681のURIはHashPortリンクの `to_name`・`type` に相当する情報を持たないため、これらは別途指定します(Rustでは `ParsedLink` の `to_name`・`link_type` フィールドを設定、JSでは `parseEip681` の第2・第3引数)。
77
81
 
@@ -90,7 +94,10 @@ ethereum:[pay-]<JPYCコントラクトアドレス>@<chain id>/transfer?address=
90
94
  | `value=` やその他の未知のパラメータ | `UnsupportedParam` | `value` はネイティブ通貨の同時送金を意味し、黙って捨てると支払いの意味が変わるため |
91
95
  | ENS名(`example.eth`)、`0x` のないアドレス | `InvalidAddress` | ENSの名前解決にはネットワークアクセスが必要なため |
92
96
  | 大文字小文字が混在しているのにEIP-55チェックサムが合わないアドレス | `InvalidAddress` | 打ち間違いの兆候であるため(すべて小文字・すべて大文字は受け付ける) |
97
+ | ゼロアドレス、JPYCコントラクト自身を受取人にする | `UnsafeRecipient` | 送金が失敗するか資金が永久に失われるだけで正当な用途がないため(順方向・`to_hashport_link()` でも拒否) |
93
98
  | 負数、整数にならない値(`1.5`)、`uint256` に収まらない値、16進(`0x10`)、空 | `InvalidAmount` | 金額として一意に解釈できないため |
99
+ | 値0(`0`、`0e5`、`.0` 等) | `InvalidAmount` | 0の送金でもチェーン上では成功して `Transfer` イベントが出るため、入金と誤認されうる(金額未指定なら `uint256` を省略する)。順方向の `amount=0x0` は受け付ける |
100
+ | 整数部・指数部の先頭ゼロ(`01`、`007`、`1e018`) | `InvalidAmount` | chain id と同様、8進と誤読されうるため(`0.5e1` のような単独の `0` は可) |
94
101
  | 前後の空白・制御文字・非ASCII文字、フラグメント(`#`)、不正なパーセントエンコード | `InvalidEip681` | コピペ由来の混入物やホモグリフ等を黙って受け入れないため |
95
102
 
96
103
  ### 出力形式
@@ -265,6 +272,7 @@ try {
265
272
  | `UnsupportedCurrency` | 順方向: 非対応の `master_currency_id` |
266
273
  | `MissingParam` | 必須パラメータ(順方向の `to`・`master_currency_id`、逆方向の chain id・`address`)がない |
267
274
  | `InvalidAddress` / `InvalidAmount` | 両方向: アドレス・金額が不正 |
275
+ | `UnsafeRecipient` | 両方向と `to_hashport_link()`: 受取人がゼロアドレス、または対応トークンのコントラクト自身。JSでは `{ kind: "UnsafeRecipient", reason: "zero_address" \| "token_contract" }`(Rustでは `UnsafeRecipientReason`) |
268
276
  | `InvalidEip681` | 逆方向: EIP-681 URIとして構文的に不正 |
269
277
  | `UnsupportedContract` / `UnsupportedChain` / `UnsupportedFunction` / `UnsupportedParam` / `DuplicateParam` | 逆方向: [拒否される入力](#拒否される入力)を参照(`UnsupportedChain` は `to_hashport_link()` でも発生しうる) |
270
278
 
package/errors.d.ts CHANGED
@@ -27,4 +27,8 @@ export type HpwParseError =
27
27
  // 意味を黙って捨てることになるため受け付けないパラメータ(例: `value`)。
28
28
  | { kind: "UnsupportedParam"; name: string }
29
29
  // EIP-681入力での同名パラメータの重複。
30
- | { kind: "DuplicateParam"; name: string };
30
+ | { kind: "DuplicateParam"; name: string }
31
+ // 送金先として確実に安全でないアドレス。ゼロアドレスなら `"zero_address"`、
32
+ // 対応トークンのコントラクト自身なら `"token_contract"`。両方向のパースと
33
+ // `toHashportLink()` で拒否される。
34
+ | { kind: "UnsafeRecipient"; reason: "zero_address" | "token_contract" };
@@ -248,7 +248,7 @@ export function parseHashportLink(url) {
248
248
  export function start() {
249
249
  wasm.start();
250
250
  }
251
- export function __wbg___wbindgen_throw_5d9e815e6fdf150f(arg0, arg1) {
251
+ export function __wbg___wbindgen_throw_41e9ee4f547fc59a(arg0, arg1) {
252
252
  throw new Error(getStringFromWasm0(arg0, arg1));
253
253
  }
254
254
  export function __wbg_error_757e9472f8410341(arg0, arg1) {
@@ -266,7 +266,7 @@ export function __wbg_new_227d7c05414eb861() {
266
266
  const ret = new Error();
267
267
  return ret;
268
268
  }
269
- export function __wbg_new_bebc3f4757acf305() {
269
+ export function __wbg_new_617a8cdb8bb1130e() {
270
270
  const ret = new Object();
271
271
  return ret;
272
272
  }
Binary file
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "collaborators": [
5
5
  "Osumi Akari"
6
6
  ],
7
- "version": "0.5.0",
7
+ "version": "0.6.0",
8
8
  "license": "MIT",
9
9
  "repository": {
10
10
  "type": "git",