@amadeus-protocol/sdk 1.0.6 → 1.0.8
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 +2 -2
- package/dist/client.js +1 -1
- package/dist/client.js.map +1 -1
- package/dist/contract-state.d.ts +59 -0
- package/dist/contract-state.d.ts.map +1 -0
- package/dist/contract-state.js +117 -0
- package/dist/contract-state.js.map +1 -0
- package/dist/contracts/abi-types.d.ts +87 -0
- package/dist/contracts/abi-types.d.ts.map +1 -0
- package/dist/contracts/abi-types.js +8 -0
- package/dist/contracts/abi-types.js.map +1 -0
- package/dist/contracts/coin.d.ts +42 -0
- package/dist/contracts/coin.d.ts.map +1 -0
- package/dist/contracts/coin.js +42 -0
- package/dist/contracts/coin.js.map +1 -0
- package/dist/contracts/contract-call.d.ts +49 -0
- package/dist/contracts/contract-call.d.ts.map +1 -0
- package/dist/contracts/contract-call.js +57 -0
- package/dist/contracts/contract-call.js.map +1 -0
- package/dist/contracts/contract.d.ts +113 -0
- package/dist/contracts/contract.d.ts.map +1 -0
- package/dist/contracts/contract.js +107 -0
- package/dist/contracts/contract.js.map +1 -0
- package/dist/contracts/index.d.ts +7 -0
- package/dist/contracts/index.d.ts.map +1 -0
- package/dist/contracts/index.js +7 -0
- package/dist/contracts/index.js.map +1 -0
- package/dist/contracts/lockup/abi.d.ts +62 -0
- package/dist/contracts/lockup/abi.d.ts.map +1 -0
- package/dist/contracts/lockup/abi.js +77 -0
- package/dist/contracts/lockup/abi.js.map +1 -0
- package/dist/contracts/lockup/calls.d.ts +23 -0
- package/dist/contracts/lockup/calls.d.ts.map +1 -0
- package/dist/contracts/lockup/calls.js +25 -0
- package/dist/contracts/lockup/calls.js.map +1 -0
- package/dist/contracts/lockup/helpers.d.ts +24 -0
- package/dist/contracts/lockup/helpers.d.ts.map +1 -0
- package/dist/contracts/lockup/helpers.js +49 -0
- package/dist/contracts/lockup/helpers.js.map +1 -0
- package/dist/contracts/lockup/index.d.ts +6 -0
- package/dist/contracts/lockup/index.d.ts.map +1 -0
- package/dist/contracts/lockup/index.js +6 -0
- package/dist/contracts/lockup/index.js.map +1 -0
- package/dist/contracts/lockup/parsers.d.ts +20 -0
- package/dist/contracts/lockup/parsers.d.ts.map +1 -0
- package/dist/contracts/lockup/parsers.js +60 -0
- package/dist/contracts/lockup/parsers.js.map +1 -0
- package/dist/contracts/lockup/storage-keys.d.ts +15 -0
- package/dist/contracts/lockup/storage-keys.d.ts.map +1 -0
- package/dist/contracts/lockup/storage-keys.js +78 -0
- package/dist/contracts/lockup/storage-keys.js.map +1 -0
- package/dist/contracts/lockup/types.d.ts +90 -0
- package/dist/contracts/lockup/types.d.ts.map +1 -0
- package/dist/contracts/lockup/types.js +7 -0
- package/dist/contracts/lockup/types.js.map +1 -0
- package/dist/contracts/lockup-prime/abi.d.ts +348 -0
- package/dist/contracts/lockup-prime/abi.d.ts.map +1 -0
- package/dist/contracts/lockup-prime/abi.js +420 -0
- package/dist/contracts/lockup-prime/abi.js.map +1 -0
- package/dist/contracts/lockup-prime/calls.d.ts +53 -0
- package/dist/contracts/lockup-prime/calls.d.ts.map +1 -0
- package/dist/contracts/lockup-prime/calls.js +60 -0
- package/dist/contracts/lockup-prime/calls.js.map +1 -0
- package/dist/contracts/lockup-prime/helpers.d.ts +38 -0
- package/dist/contracts/lockup-prime/helpers.d.ts.map +1 -0
- package/dist/contracts/lockup-prime/helpers.js +147 -0
- package/dist/contracts/lockup-prime/helpers.js.map +1 -0
- package/dist/contracts/lockup-prime/index.d.ts +6 -0
- package/dist/contracts/lockup-prime/index.d.ts.map +1 -0
- package/dist/contracts/lockup-prime/index.js +6 -0
- package/dist/contracts/lockup-prime/index.js.map +1 -0
- package/dist/contracts/lockup-prime/parsers.d.ts +25 -0
- package/dist/contracts/lockup-prime/parsers.d.ts.map +1 -0
- package/dist/contracts/lockup-prime/parsers.js +68 -0
- package/dist/contracts/lockup-prime/parsers.js.map +1 -0
- package/dist/contracts/lockup-prime/storage-keys.d.ts +25 -0
- package/dist/contracts/lockup-prime/storage-keys.d.ts.map +1 -0
- package/dist/contracts/lockup-prime/storage-keys.js +92 -0
- package/dist/contracts/lockup-prime/storage-keys.js.map +1 -0
- package/dist/contracts/lockup-prime/types.d.ts +116 -0
- package/dist/contracts/lockup-prime/types.d.ts.map +1 -0
- package/dist/contracts/lockup-prime/types.js +18 -0
- package/dist/contracts/lockup-prime/types.js.map +1 -0
- package/dist/crypto.js +1 -1
- package/dist/crypto.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/mnemonic.d.ts +96 -0
- package/dist/mnemonic.d.ts.map +1 -0
- package/dist/mnemonic.js +128 -0
- package/dist/mnemonic.js.map +1 -0
- package/dist/serialization.d.ts +22 -0
- package/dist/serialization.d.ts.map +1 -1
- package/dist/serialization.js +39 -2
- package/dist/serialization.js.map +1 -1
- package/dist/signing.d.ts +39 -0
- package/dist/signing.d.ts.map +1 -0
- package/dist/signing.js +84 -0
- package/dist/signing.js.map +1 -0
- package/dist/transaction-builder.d.ts +135 -194
- package/dist/transaction-builder.d.ts.map +1 -1
- package/dist/transaction-builder.js +237 -288
- package/dist/transaction-builder.js.map +1 -1
- package/dist/types.d.ts +17 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -1
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BIP39 Mnemonic Utilities for Amadeus Protocol
|
|
3
|
+
*
|
|
4
|
+
* This module provides BIP39 mnemonic generation, validation, and seed derivation
|
|
5
|
+
* for use with Amadeus Protocol wallets.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Generate a new 12-word BIP39 mnemonic
|
|
9
|
+
*
|
|
10
|
+
* @returns 12-word mnemonic phrase
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```ts
|
|
14
|
+
* const mnemonic = generateMnemonic()
|
|
15
|
+
* // "abandon ability able about above absent absorb abstract absurd abuse access accident"
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
export declare function generateMnemonic(): string;
|
|
19
|
+
/**
|
|
20
|
+
* Validate a BIP39 mnemonic phrase
|
|
21
|
+
*
|
|
22
|
+
* @param mnemonic - Mnemonic phrase to validate
|
|
23
|
+
* @returns true if the mnemonic is valid
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```ts
|
|
27
|
+
* const isValid = validateMnemonic('abandon ability able ...')
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
export declare function validateMnemonic(mnemonic: string): boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Derive an Amadeus seed (base58-encoded 64 bytes) from a BIP39 mnemonic.
|
|
33
|
+
* Uses BIP39 seed derivation (PBKDF2 with SHA-512) which produces a 64-byte seed,
|
|
34
|
+
* matching the Amadeus SDK's expected seed length.
|
|
35
|
+
*
|
|
36
|
+
* @param mnemonic - BIP39 mnemonic phrase
|
|
37
|
+
* @returns Base58-encoded 64-byte seed
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```ts
|
|
41
|
+
* const seed = mnemonicToSeedBase58('abandon ability able ...')
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
export declare function mnemonicToSeedBase58(mnemonic: string): string;
|
|
45
|
+
/**
|
|
46
|
+
* Detect whether input is a mnemonic phrase or a raw private key.
|
|
47
|
+
*
|
|
48
|
+
* @param input - User input string
|
|
49
|
+
* @returns 'mnemonic' if the input looks like a word-based mnemonic, or 'seed' if it looks like a base58-encoded key
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* ```ts
|
|
53
|
+
* const type = detectInputType('abandon ability able ...')
|
|
54
|
+
* // 'mnemonic'
|
|
55
|
+
* ```
|
|
56
|
+
*/
|
|
57
|
+
export declare function detectInputType(input: string): 'mnemonic' | 'seed';
|
|
58
|
+
/**
|
|
59
|
+
* Vault data format that supports both mnemonic and raw seed storage.
|
|
60
|
+
* When decrypted, old vaults return a plain base58 string,
|
|
61
|
+
* new vaults return a JSON string with this shape.
|
|
62
|
+
*/
|
|
63
|
+
export interface VaultSecretData {
|
|
64
|
+
seed: string;
|
|
65
|
+
mnemonic?: string;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Encode vault secret data as a string for encryption.
|
|
69
|
+
* Always stores as JSON to include the optional mnemonic.
|
|
70
|
+
*
|
|
71
|
+
* @param seed - Base58-encoded seed
|
|
72
|
+
* @param mnemonic - Optional BIP39 mnemonic phrase
|
|
73
|
+
* @returns JSON string for vault encryption
|
|
74
|
+
*
|
|
75
|
+
* @example
|
|
76
|
+
* ```ts
|
|
77
|
+
* const vaultData = encodeVaultSecret(seed, mnemonic)
|
|
78
|
+
* const encrypted = await encryptWithPassword(vaultData, password)
|
|
79
|
+
* ```
|
|
80
|
+
*/
|
|
81
|
+
export declare function encodeVaultSecret(seed: string, mnemonic?: string): string;
|
|
82
|
+
/**
|
|
83
|
+
* Decode vault secret data from a decrypted string.
|
|
84
|
+
* Handles both old format (plain base58 seed) and new format (JSON with seed + mnemonic).
|
|
85
|
+
*
|
|
86
|
+
* @param decrypted - Decrypted vault string
|
|
87
|
+
* @returns Parsed vault secret data
|
|
88
|
+
*
|
|
89
|
+
* @example
|
|
90
|
+
* ```ts
|
|
91
|
+
* const decrypted = await decryptWithPassword(encrypted, password)
|
|
92
|
+
* const { seed, mnemonic } = decodeVaultSecret(decrypted)
|
|
93
|
+
* ```
|
|
94
|
+
*/
|
|
95
|
+
export declare function decodeVaultSecret(decrypted: string): VaultSecretData;
|
|
96
|
+
//# sourceMappingURL=mnemonic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mnemonic.d.ts","sourceRoot":"","sources":["../src/mnemonic.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAG7D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,MAAM,CAUlE;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAA;CACjB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAMzE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,CAapE"}
|
package/dist/mnemonic.js
ADDED
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BIP39 Mnemonic Utilities for Amadeus Protocol
|
|
3
|
+
*
|
|
4
|
+
* This module provides BIP39 mnemonic generation, validation, and seed derivation
|
|
5
|
+
* for use with Amadeus Protocol wallets.
|
|
6
|
+
*/
|
|
7
|
+
import * as bip39 from '@scure/bip39';
|
|
8
|
+
import { wordlist } from '@scure/bip39/wordlists/english.js';
|
|
9
|
+
import { toBase58 } from './encoding';
|
|
10
|
+
/**
|
|
11
|
+
* Generate a new 12-word BIP39 mnemonic
|
|
12
|
+
*
|
|
13
|
+
* @returns 12-word mnemonic phrase
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```ts
|
|
17
|
+
* const mnemonic = generateMnemonic()
|
|
18
|
+
* // "abandon ability able about above absent absorb abstract absurd abuse access accident"
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export function generateMnemonic() {
|
|
22
|
+
return bip39.generateMnemonic(wordlist, 128); // 128 bits = 12 words
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Validate a BIP39 mnemonic phrase
|
|
26
|
+
*
|
|
27
|
+
* @param mnemonic - Mnemonic phrase to validate
|
|
28
|
+
* @returns true if the mnemonic is valid
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```ts
|
|
32
|
+
* const isValid = validateMnemonic('abandon ability able ...')
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export function validateMnemonic(mnemonic) {
|
|
36
|
+
return bip39.validateMnemonic(mnemonic.trim().toLowerCase(), wordlist);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Derive an Amadeus seed (base58-encoded 64 bytes) from a BIP39 mnemonic.
|
|
40
|
+
* Uses BIP39 seed derivation (PBKDF2 with SHA-512) which produces a 64-byte seed,
|
|
41
|
+
* matching the Amadeus SDK's expected seed length.
|
|
42
|
+
*
|
|
43
|
+
* @param mnemonic - BIP39 mnemonic phrase
|
|
44
|
+
* @returns Base58-encoded 64-byte seed
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* ```ts
|
|
48
|
+
* const seed = mnemonicToSeedBase58('abandon ability able ...')
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
export function mnemonicToSeedBase58(mnemonic) {
|
|
52
|
+
const seed = bip39.mnemonicToSeedSync(mnemonic.trim().toLowerCase());
|
|
53
|
+
return toBase58(seed);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Detect whether input is a mnemonic phrase or a raw private key.
|
|
57
|
+
*
|
|
58
|
+
* @param input - User input string
|
|
59
|
+
* @returns 'mnemonic' if the input looks like a word-based mnemonic, or 'seed' if it looks like a base58-encoded key
|
|
60
|
+
*
|
|
61
|
+
* @example
|
|
62
|
+
* ```ts
|
|
63
|
+
* const type = detectInputType('abandon ability able ...')
|
|
64
|
+
* // 'mnemonic'
|
|
65
|
+
* ```
|
|
66
|
+
*/
|
|
67
|
+
export function detectInputType(input) {
|
|
68
|
+
const trimmed = input.trim();
|
|
69
|
+
const words = trimmed.split(/\s+/);
|
|
70
|
+
// BIP39 mnemonics are 12 or 24 words
|
|
71
|
+
if (words.length === 12 || words.length === 24) {
|
|
72
|
+
// Check if all words look like English words (no numbers, no special chars)
|
|
73
|
+
const allWords = words.every((w) => /^[a-zA-Z]+$/.test(w));
|
|
74
|
+
if (allWords)
|
|
75
|
+
return 'mnemonic';
|
|
76
|
+
}
|
|
77
|
+
return 'seed';
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Encode vault secret data as a string for encryption.
|
|
81
|
+
* Always stores as JSON to include the optional mnemonic.
|
|
82
|
+
*
|
|
83
|
+
* @param seed - Base58-encoded seed
|
|
84
|
+
* @param mnemonic - Optional BIP39 mnemonic phrase
|
|
85
|
+
* @returns JSON string for vault encryption
|
|
86
|
+
*
|
|
87
|
+
* @example
|
|
88
|
+
* ```ts
|
|
89
|
+
* const vaultData = encodeVaultSecret(seed, mnemonic)
|
|
90
|
+
* const encrypted = await encryptWithPassword(vaultData, password)
|
|
91
|
+
* ```
|
|
92
|
+
*/
|
|
93
|
+
export function encodeVaultSecret(seed, mnemonic) {
|
|
94
|
+
const data = { seed };
|
|
95
|
+
if (mnemonic) {
|
|
96
|
+
data.mnemonic = mnemonic;
|
|
97
|
+
}
|
|
98
|
+
return JSON.stringify(data);
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Decode vault secret data from a decrypted string.
|
|
102
|
+
* Handles both old format (plain base58 seed) and new format (JSON with seed + mnemonic).
|
|
103
|
+
*
|
|
104
|
+
* @param decrypted - Decrypted vault string
|
|
105
|
+
* @returns Parsed vault secret data
|
|
106
|
+
*
|
|
107
|
+
* @example
|
|
108
|
+
* ```ts
|
|
109
|
+
* const decrypted = await decryptWithPassword(encrypted, password)
|
|
110
|
+
* const { seed, mnemonic } = decodeVaultSecret(decrypted)
|
|
111
|
+
* ```
|
|
112
|
+
*/
|
|
113
|
+
export function decodeVaultSecret(decrypted) {
|
|
114
|
+
try {
|
|
115
|
+
const parsed = JSON.parse(decrypted);
|
|
116
|
+
if (parsed && typeof parsed.seed === 'string') {
|
|
117
|
+
return {
|
|
118
|
+
seed: parsed.seed,
|
|
119
|
+
mnemonic: parsed.mnemonic || undefined
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
// Not JSON — old format, plain base58 seed
|
|
125
|
+
}
|
|
126
|
+
return { seed: decrypted };
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=mnemonic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mnemonic.js","sourceRoot":"","sources":["../src/mnemonic.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAA;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC;;;;;;;;;;GAUG;AACH,MAAM,UAAU,gBAAgB;IAC/B,OAAO,KAAK,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA,CAAC,sBAAsB;AACpE,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAgB;IAChD,OAAO,KAAK,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,QAAQ,CAAC,CAAA;AACvE,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAAgB;IACpD,MAAM,IAAI,GAAG,KAAK,CAAC,kBAAkB,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAA;IACpE,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAA;AACtB,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,eAAe,CAAC,KAAa;IAC5C,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAA;IAC5B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAClC,qCAAqC;IACrC,IAAI,KAAK,CAAC,MAAM,KAAK,EAAE,IAAI,KAAK,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QAChD,4EAA4E;QAC5E,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;QAC1D,IAAI,QAAQ;YAAE,OAAO,UAAU,CAAA;IAChC,CAAC;IACD,OAAO,MAAM,CAAA;AACd,CAAC;AAYD;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAY,EAAE,QAAiB;IAChE,MAAM,IAAI,GAAoB,EAAE,IAAI,EAAE,CAAA;IACtC,IAAI,QAAQ,EAAE,CAAC;QACd,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;IACzB,CAAC;IACD,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;AAC5B,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,iBAAiB,CAAC,SAAiB;IAClD,IAAI,CAAC;QACJ,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;QACpC,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC/C,OAAO;gBACN,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,SAAS;aACtC,CAAA;QACF,CAAC;IACF,CAAC;IAAC,MAAM,CAAC;QACR,2CAA2C;IAC5C,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAA;AAC3B,CAAC"}
|
package/dist/serialization.d.ts
CHANGED
|
@@ -39,4 +39,26 @@ export declare function encode(term: SerializableValue): Uint8Array;
|
|
|
39
39
|
* ```
|
|
40
40
|
*/
|
|
41
41
|
export declare function decode(bytes: Uint8Array | number[]): DecodedValue;
|
|
42
|
+
/**
|
|
43
|
+
* Decode VecPack-encoded contract state into key-value pairs
|
|
44
|
+
*
|
|
45
|
+
* Contract state prefix queries return a VecPack-encoded map where both
|
|
46
|
+
* keys and values are binary (Uint8Array). This convenience function decodes
|
|
47
|
+
* the binary data and returns the entries as an array of tuples.
|
|
48
|
+
*
|
|
49
|
+
* @param bytes - VecPack-encoded bytes (Uint8Array or ArrayBuffer)
|
|
50
|
+
* @returns Array of [key, value] tuples
|
|
51
|
+
* @throws Error if the data is not a valid VecPack map or entries are not binary
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* ```ts
|
|
55
|
+
* const response = await fetch('/contract/state/prefix?prefix=...')
|
|
56
|
+
* const buffer = await response.arrayBuffer()
|
|
57
|
+
* const entries = decodeContractState(buffer)
|
|
58
|
+
* for (const [key, value] of entries) {
|
|
59
|
+
* console.log(key, value)
|
|
60
|
+
* }
|
|
61
|
+
* ```
|
|
62
|
+
*/
|
|
63
|
+
export declare function decodeContractState(bytes: Uint8Array | ArrayBuffer): Array<[Uint8Array, Uint8Array]>;
|
|
42
64
|
//# sourceMappingURL=serialization.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serialization.d.ts","sourceRoot":"","sources":["../src/serialization.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAUH,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAM9D;;;;;;;;;;;GAWG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,iBAAiB,GAAG,UAAU,CAI1D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,EAAE,GAAG,YAAY,CAQjE"}
|
|
1
|
+
{"version":3,"file":"serialization.d.ts","sourceRoot":"","sources":["../src/serialization.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAUH,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAM9D;;;;;;;;;;;GAWG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,iBAAiB,GAAG,UAAU,CAI1D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,EAAE,GAAG,YAAY,CAQjE;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,mBAAmB,CAClC,KAAK,EAAE,UAAU,GAAG,WAAW,GAC7B,KAAK,CAAC,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAiBjC"}
|
package/dist/serialization.js
CHANGED
|
@@ -57,6 +57,42 @@ export function decode(bytes) {
|
|
|
57
57
|
}
|
|
58
58
|
return value;
|
|
59
59
|
}
|
|
60
|
+
/**
|
|
61
|
+
* Decode VecPack-encoded contract state into key-value pairs
|
|
62
|
+
*
|
|
63
|
+
* Contract state prefix queries return a VecPack-encoded map where both
|
|
64
|
+
* keys and values are binary (Uint8Array). This convenience function decodes
|
|
65
|
+
* the binary data and returns the entries as an array of tuples.
|
|
66
|
+
*
|
|
67
|
+
* @param bytes - VecPack-encoded bytes (Uint8Array or ArrayBuffer)
|
|
68
|
+
* @returns Array of [key, value] tuples
|
|
69
|
+
* @throws Error if the data is not a valid VecPack map or entries are not binary
|
|
70
|
+
*
|
|
71
|
+
* @example
|
|
72
|
+
* ```ts
|
|
73
|
+
* const response = await fetch('/contract/state/prefix?prefix=...')
|
|
74
|
+
* const buffer = await response.arrayBuffer()
|
|
75
|
+
* const entries = decodeContractState(buffer)
|
|
76
|
+
* for (const [key, value] of entries) {
|
|
77
|
+
* console.log(key, value)
|
|
78
|
+
* }
|
|
79
|
+
* ```
|
|
80
|
+
*/
|
|
81
|
+
export function decodeContractState(bytes) {
|
|
82
|
+
const data = bytes instanceof ArrayBuffer ? new Uint8Array(bytes) : bytes;
|
|
83
|
+
const decoded = decode(data);
|
|
84
|
+
if (!(decoded instanceof Map)) {
|
|
85
|
+
throw new Error(`Expected MAP type, got ${typeof decoded}`);
|
|
86
|
+
}
|
|
87
|
+
const result = [];
|
|
88
|
+
for (const [key, value] of decoded.entries()) {
|
|
89
|
+
if (!(key instanceof Uint8Array) || !(value instanceof Uint8Array)) {
|
|
90
|
+
throw new Error('Expected Uint8Array for key and value');
|
|
91
|
+
}
|
|
92
|
+
result.push([key, value]);
|
|
93
|
+
}
|
|
94
|
+
return result;
|
|
95
|
+
}
|
|
60
96
|
/*
|
|
61
97
|
* Helper functions for encoding and decoding
|
|
62
98
|
*/
|
|
@@ -118,8 +154,6 @@ function decodeVarint(data, ref) {
|
|
|
118
154
|
for (let i = 0; i < length; i++) {
|
|
119
155
|
mag = (mag << 8n) | BigInt(data[ref.offset++]);
|
|
120
156
|
}
|
|
121
|
-
if (mag > BigInt(Number.MAX_SAFE_INTEGER))
|
|
122
|
-
throw new Error('length_overflow');
|
|
123
157
|
if (signBit === 1) {
|
|
124
158
|
return -mag;
|
|
125
159
|
}
|
|
@@ -132,6 +166,9 @@ function decodeVarintGteZero(data, ref) {
|
|
|
132
166
|
if (n < 0n) {
|
|
133
167
|
throw new Error('length_is_negative');
|
|
134
168
|
}
|
|
169
|
+
if (n > BigInt(Number.MAX_SAFE_INTEGER)) {
|
|
170
|
+
throw new Error('length_overflow');
|
|
171
|
+
}
|
|
135
172
|
return Number(n);
|
|
136
173
|
}
|
|
137
174
|
function encodeTerm(value, out) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serialization.js","sourceRoot":"","sources":["../src/serialization.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"serialization.js","sourceRoot":"","sources":["../src/serialization.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transaction Signing Primitives
|
|
3
|
+
*
|
|
4
|
+
* Stateless, standalone functions for building and signing Amadeus transactions.
|
|
5
|
+
* This module is the source of truth for the signing pipeline — both
|
|
6
|
+
* TransactionBuilder and createContract().connect() delegate to these functions.
|
|
7
|
+
*/
|
|
8
|
+
import type { PrivKey } from '@noble/curves/abstract/utils';
|
|
9
|
+
import type { BuildTransactionResult, SerializableValue, UnsignedTransactionWithHash } from './types';
|
|
10
|
+
import type { ContractCall } from './contracts/contract-call';
|
|
11
|
+
/**
|
|
12
|
+
* Normalize a signer secret key to PrivKey format.
|
|
13
|
+
* Accepts Base58 strings, raw Uint8Array, or already-derived PrivKey.
|
|
14
|
+
*/
|
|
15
|
+
export declare function normalizeSignerSk(signerSk: PrivKey | string | Uint8Array): PrivKey;
|
|
16
|
+
/**
|
|
17
|
+
* Build an unsigned transaction from raw contract/method/args.
|
|
18
|
+
*/
|
|
19
|
+
export declare function buildUnsigned(signerPk: Uint8Array, contract: string, method: string, args: SerializableValue[]): UnsignedTransactionWithHash;
|
|
20
|
+
/**
|
|
21
|
+
* Sign an already-built unsigned transaction.
|
|
22
|
+
*/
|
|
23
|
+
export declare function signUnsigned(unsignedTx: UnsignedTransactionWithHash, signerSk: PrivKey | string | Uint8Array): BuildTransactionResult;
|
|
24
|
+
/**
|
|
25
|
+
* Build and sign a transaction from raw contract/method/args.
|
|
26
|
+
*/
|
|
27
|
+
export declare function buildAndSignRaw(signerPk: Uint8Array, signerSk: PrivKey | string | Uint8Array, contract: string, method: string, args: SerializableValue[]): BuildTransactionResult;
|
|
28
|
+
/**
|
|
29
|
+
* Build an unsigned transaction from a ContractCall.
|
|
30
|
+
*/
|
|
31
|
+
export declare function buildUnsignedFromCall(signerPk: Uint8Array, call: ContractCall): UnsignedTransactionWithHash;
|
|
32
|
+
/**
|
|
33
|
+
* Highest-level: derive keys from a Base58 private key and sign a ContractCall.
|
|
34
|
+
*
|
|
35
|
+
* This is the core function behind `TransactionBuilder.signCall()` and
|
|
36
|
+
* `createContract(ABI).connect(key).method()`.
|
|
37
|
+
*/
|
|
38
|
+
export declare function signContractCall(senderPrivkey: string, call: ContractCall): BuildTransactionResult;
|
|
39
|
+
//# sourceMappingURL=signing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signing.d.ts","sourceRoot":"","sources":["../src/signing.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAA;AAO3D,OAAO,KAAK,EACX,sBAAsB,EACtB,iBAAiB,EAGjB,2BAA2B,EAC3B,MAAM,SAAS,CAAA;AAChB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAU7D;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,UAAU,GAAG,OAAO,CAMlF;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC5B,QAAQ,EAAE,UAAU,EACpB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,iBAAiB,EAAE,GACvB,2BAA2B,CAe7B;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC3B,UAAU,EAAE,2BAA2B,EACvC,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,UAAU,GACrC,sBAAsB,CAOxB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC9B,QAAQ,EAAE,UAAU,EACpB,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,UAAU,EACvC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,iBAAiB,EAAE,GACvB,sBAAsB,CAGxB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACpC,QAAQ,EAAE,UAAU,EACpB,IAAI,EAAE,YAAY,GAChB,2BAA2B,CAE7B;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC/B,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE,YAAY,GAChB,sBAAsB,CAIxB"}
|
package/dist/signing.js
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transaction Signing Primitives
|
|
3
|
+
*
|
|
4
|
+
* Stateless, standalone functions for building and signing Amadeus transactions.
|
|
5
|
+
* This module is the source of truth for the signing pipeline — both
|
|
6
|
+
* TransactionBuilder and createContract().connect() delegate to these functions.
|
|
7
|
+
*/
|
|
8
|
+
import { bls12_381 as bls } from '@noble/curves/bls12-381';
|
|
9
|
+
import { sha256 } from '@noble/hashes/sha2';
|
|
10
|
+
import { deriveSkAndSeed64FromBase58Seed, getPublicKey } from './crypto';
|
|
11
|
+
import { toBase58 } from './encoding';
|
|
12
|
+
import { encode } from './serialization';
|
|
13
|
+
/** Domain Separation Tag for transaction signatures */
|
|
14
|
+
const TX_DST = 'AMADEUS_SIG_BLS12381G2_XMD:SHA-256_SSWU_RO_TX_';
|
|
15
|
+
/** Generate a transaction nonce based on current timestamp */
|
|
16
|
+
function generateNonce() {
|
|
17
|
+
return BigInt(Date.now()) * 1000000n;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Normalize a signer secret key to PrivKey format.
|
|
21
|
+
* Accepts Base58 strings, raw Uint8Array, or already-derived PrivKey.
|
|
22
|
+
*/
|
|
23
|
+
export function normalizeSignerSk(signerSk) {
|
|
24
|
+
if (typeof signerSk === 'string') {
|
|
25
|
+
const { sk } = deriveSkAndSeed64FromBase58Seed(signerSk);
|
|
26
|
+
return sk;
|
|
27
|
+
}
|
|
28
|
+
return signerSk;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Build an unsigned transaction from raw contract/method/args.
|
|
32
|
+
*/
|
|
33
|
+
export function buildUnsigned(signerPk, contract, method, args) {
|
|
34
|
+
const action = {
|
|
35
|
+
op: 'call',
|
|
36
|
+
contract,
|
|
37
|
+
function: method,
|
|
38
|
+
args
|
|
39
|
+
};
|
|
40
|
+
const tx = {
|
|
41
|
+
signer: signerPk,
|
|
42
|
+
nonce: generateNonce(),
|
|
43
|
+
action
|
|
44
|
+
};
|
|
45
|
+
const txEncoded = encode(tx);
|
|
46
|
+
const hash = sha256(txEncoded);
|
|
47
|
+
return { tx, hash };
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Sign an already-built unsigned transaction.
|
|
51
|
+
*/
|
|
52
|
+
export function signUnsigned(unsignedTx, signerSk) {
|
|
53
|
+
const sk = normalizeSignerSk(signerSk);
|
|
54
|
+
const signature = bls.sign(unsignedTx.hash, sk, { DST: TX_DST });
|
|
55
|
+
return {
|
|
56
|
+
txHash: toBase58(unsignedTx.hash),
|
|
57
|
+
txPacked: encode({ tx: unsignedTx.tx, hash: unsignedTx.hash, signature })
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Build and sign a transaction from raw contract/method/args.
|
|
62
|
+
*/
|
|
63
|
+
export function buildAndSignRaw(signerPk, signerSk, contract, method, args) {
|
|
64
|
+
const unsignedTx = buildUnsigned(signerPk, contract, method, args);
|
|
65
|
+
return signUnsigned(unsignedTx, signerSk);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Build an unsigned transaction from a ContractCall.
|
|
69
|
+
*/
|
|
70
|
+
export function buildUnsignedFromCall(signerPk, call) {
|
|
71
|
+
return buildUnsigned(signerPk, call.contract, call.method, call.args);
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Highest-level: derive keys from a Base58 private key and sign a ContractCall.
|
|
75
|
+
*
|
|
76
|
+
* This is the core function behind `TransactionBuilder.signCall()` and
|
|
77
|
+
* `createContract(ABI).connect(key).method()`.
|
|
78
|
+
*/
|
|
79
|
+
export function signContractCall(senderPrivkey, call) {
|
|
80
|
+
const { seed64, sk } = deriveSkAndSeed64FromBase58Seed(senderPrivkey);
|
|
81
|
+
const signerPubKey = getPublicKey(seed64);
|
|
82
|
+
return buildAndSignRaw(signerPubKey, sk, call.contract, call.method, call.args);
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=signing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signing.js","sourceRoot":"","sources":["../src/signing.ts"],"names":[],"mappings":"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"}
|