@sequence0/sdk 1.1.2 → 1.2.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.
Files changed (89) hide show
  1. package/README.md +1 -1
  2. package/dist/chains/algorand.d.ts +44 -0
  3. package/dist/chains/algorand.d.ts.map +1 -0
  4. package/dist/chains/algorand.js +148 -0
  5. package/dist/chains/algorand.js.map +1 -0
  6. package/dist/chains/aptos.d.ts +39 -0
  7. package/dist/chains/aptos.d.ts.map +1 -0
  8. package/dist/chains/aptos.js +168 -0
  9. package/dist/chains/aptos.js.map +1 -0
  10. package/dist/chains/cardano.d.ts +42 -0
  11. package/dist/chains/cardano.d.ts.map +1 -0
  12. package/dist/chains/cardano.js +188 -0
  13. package/dist/chains/cardano.js.map +1 -0
  14. package/dist/chains/cosmos.d.ts +42 -0
  15. package/dist/chains/cosmos.d.ts.map +1 -0
  16. package/dist/chains/cosmos.js +216 -0
  17. package/dist/chains/cosmos.js.map +1 -0
  18. package/dist/chains/dogecoin-litecoin.d.ts +57 -0
  19. package/dist/chains/dogecoin-litecoin.d.ts.map +1 -0
  20. package/dist/chains/dogecoin-litecoin.js +521 -0
  21. package/dist/chains/dogecoin-litecoin.js.map +1 -0
  22. package/dist/chains/ethereum.d.ts.map +1 -1
  23. package/dist/chains/ethereum.js +16 -0
  24. package/dist/chains/ethereum.js.map +1 -1
  25. package/dist/chains/hedera.d.ts +113 -0
  26. package/dist/chains/hedera.d.ts.map +1 -0
  27. package/dist/chains/hedera.js +302 -0
  28. package/dist/chains/hedera.js.map +1 -0
  29. package/dist/chains/icp.d.ts +95 -0
  30. package/dist/chains/icp.d.ts.map +1 -0
  31. package/dist/chains/icp.js +520 -0
  32. package/dist/chains/icp.js.map +1 -0
  33. package/dist/chains/kaspa.d.ts +152 -0
  34. package/dist/chains/kaspa.d.ts.map +1 -0
  35. package/dist/chains/kaspa.js +790 -0
  36. package/dist/chains/kaspa.js.map +1 -0
  37. package/dist/chains/multiversx.d.ts +143 -0
  38. package/dist/chains/multiversx.d.ts.map +1 -0
  39. package/dist/chains/multiversx.js +524 -0
  40. package/dist/chains/multiversx.js.map +1 -0
  41. package/dist/chains/near.d.ts +40 -0
  42. package/dist/chains/near.d.ts.map +1 -0
  43. package/dist/chains/near.js +170 -0
  44. package/dist/chains/near.js.map +1 -0
  45. package/dist/chains/polkadot.d.ts +43 -0
  46. package/dist/chains/polkadot.d.ts.map +1 -0
  47. package/dist/chains/polkadot.js +179 -0
  48. package/dist/chains/polkadot.js.map +1 -0
  49. package/dist/chains/ripple.d.ts +41 -0
  50. package/dist/chains/ripple.d.ts.map +1 -0
  51. package/dist/chains/ripple.js +190 -0
  52. package/dist/chains/ripple.js.map +1 -0
  53. package/dist/chains/stellar.d.ts +40 -0
  54. package/dist/chains/stellar.d.ts.map +1 -0
  55. package/dist/chains/stellar.js +156 -0
  56. package/dist/chains/stellar.js.map +1 -0
  57. package/dist/chains/sui.d.ts +44 -0
  58. package/dist/chains/sui.d.ts.map +1 -0
  59. package/dist/chains/sui.js +157 -0
  60. package/dist/chains/sui.js.map +1 -0
  61. package/dist/chains/tezos.d.ts +43 -0
  62. package/dist/chains/tezos.d.ts.map +1 -0
  63. package/dist/chains/tezos.js +162 -0
  64. package/dist/chains/tezos.js.map +1 -0
  65. package/dist/chains/ton.d.ts +40 -0
  66. package/dist/chains/ton.d.ts.map +1 -0
  67. package/dist/chains/ton.js +168 -0
  68. package/dist/chains/ton.js.map +1 -0
  69. package/dist/chains/tron.d.ts +41 -0
  70. package/dist/chains/tron.d.ts.map +1 -0
  71. package/dist/chains/tron.js +124 -0
  72. package/dist/chains/tron.js.map +1 -0
  73. package/dist/core/types.d.ts +161 -1
  74. package/dist/core/types.d.ts.map +1 -1
  75. package/dist/index.d.ts +19 -2
  76. package/dist/index.d.ts.map +1 -1
  77. package/dist/index.js +79 -4
  78. package/dist/index.js.map +1 -1
  79. package/dist/utils/optional-deps.d.ts +9 -0
  80. package/dist/utils/optional-deps.d.ts.map +1 -0
  81. package/dist/utils/optional-deps.js +21 -0
  82. package/dist/utils/optional-deps.js.map +1 -0
  83. package/dist/utils/validation.d.ts.map +1 -1
  84. package/dist/utils/validation.js +6 -1
  85. package/dist/utils/validation.js.map +1 -1
  86. package/dist/wallet/wallet.d.ts.map +1 -1
  87. package/dist/wallet/wallet.js +61 -33
  88. package/dist/wallet/wallet.js.map +1 -1
  89. package/package.json +35 -1
package/README.md CHANGED
@@ -30,7 +30,7 @@ const txHash = await wallet.sendTransaction({
30
30
  console.log('TX Hash:', txHash);
31
31
  ```
32
32
 
33
- ## What's New in v1.1.0
33
+ ## What's New in v1.1.2
34
34
 
35
35
  ### Bitcoin Taproot (P2TR) Support
36
36
 
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Algorand Chain Adapter
3
+ *
4
+ * Builds Algorand transactions using MessagePack serialization,
5
+ * attaches Ed25519 signatures from the FROST threshold signing
6
+ * network, and broadcasts via Algod API.
7
+ *
8
+ * Note: Algorand Ed25519 signs the raw bytes ("TX" prefix + msgpack),
9
+ * NOT a hash of them.
10
+ *
11
+ * Requires: npm install algosdk
12
+ */
13
+ import { ChainAdapter, AlgorandTransaction } from '../core/types';
14
+ export declare class AlgorandAdapter implements ChainAdapter {
15
+ private rpcUrl;
16
+ private network;
17
+ private algosdk;
18
+ private client;
19
+ constructor(network?: 'mainnet' | 'testnet', rpcUrl?: string);
20
+ getRpcUrl(): string;
21
+ /**
22
+ * Build an unsigned Algorand payment transaction.
23
+ *
24
+ * The signing payload is "TX" + MessagePack-encoded transaction.
25
+ * Algorand signs the RAW BYTES directly (not a hash).
26
+ */
27
+ buildTransaction(tx: AlgorandTransaction, fromAddress: string): Promise<string>;
28
+ getSigningPayload(unsignedTx: string): string;
29
+ /**
30
+ * Attach an Ed25519 signature to the Algorand transaction
31
+ */
32
+ attachSignature(unsignedTx: string, signature: string): Promise<string>;
33
+ /**
34
+ * Broadcast a signed Algorand transaction
35
+ */
36
+ broadcast(signedTx: string): Promise<string>;
37
+ /**
38
+ * Get ALGO balance in microAlgos
39
+ */
40
+ getBalance(address: string): Promise<string>;
41
+ }
42
+ export declare function createAlgorandAdapter(rpcUrl?: string): AlgorandAdapter;
43
+ export declare function createAlgorandTestnetAdapter(rpcUrl?: string): AlgorandAdapter;
44
+ //# sourceMappingURL=algorand.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"algorand.d.ts","sourceRoot":"","sources":["../../src/chains/algorand.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAiBlE,qBAAa,eAAgB,YAAW,YAAY;IAChD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAM;IACrB,OAAO,CAAC,MAAM,CAAM;gBAER,OAAO,GAAE,SAAS,GAAG,SAAqB,EAAE,MAAM,CAAC,EAAE,MAAM;IAQvE,SAAS,IAAI,MAAM;IAInB;;;;;OAKG;IACG,gBAAgB,CAAC,EAAE,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAkCrF,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAS7C;;OAEG;IACG,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAmB7E;;OAEG;IACG,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA4BlD;;OAEG;IACG,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAQrD;AAED,wBAAgB,qBAAqB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,eAAe,CAEtE;AAED,wBAAgB,4BAA4B,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,eAAe,CAE7E"}
@@ -0,0 +1,148 @@
1
+ "use strict";
2
+ /**
3
+ * Algorand Chain Adapter
4
+ *
5
+ * Builds Algorand transactions using MessagePack serialization,
6
+ * attaches Ed25519 signatures from the FROST threshold signing
7
+ * network, and broadcasts via Algod API.
8
+ *
9
+ * Note: Algorand Ed25519 signs the raw bytes ("TX" prefix + msgpack),
10
+ * NOT a hash of them.
11
+ *
12
+ * Requires: npm install algosdk
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.AlgorandAdapter = void 0;
16
+ exports.createAlgorandAdapter = createAlgorandAdapter;
17
+ exports.createAlgorandTestnetAdapter = createAlgorandTestnetAdapter;
18
+ const errors_1 = require("../utils/errors");
19
+ const optional_deps_1 = require("../utils/optional-deps");
20
+ const DEFAULT_RPCS = {
21
+ 'mainnet': {
22
+ server: 'https://mainnet-api.algonode.cloud',
23
+ token: '',
24
+ port: '',
25
+ },
26
+ 'testnet': {
27
+ server: 'https://testnet-api.algonode.cloud',
28
+ token: '',
29
+ port: '',
30
+ },
31
+ };
32
+ class AlgorandAdapter {
33
+ constructor(network = 'mainnet', rpcUrl) {
34
+ this.network = network;
35
+ const config = DEFAULT_RPCS[network];
36
+ this.rpcUrl = rpcUrl || config.server;
37
+ this.algosdk = (0, optional_deps_1.requireOptionalDependency)('algosdk', 'algorand');
38
+ this.client = new this.algosdk.Algodv2(config.token, this.rpcUrl, config.port);
39
+ }
40
+ getRpcUrl() {
41
+ return this.rpcUrl;
42
+ }
43
+ /**
44
+ * Build an unsigned Algorand payment transaction.
45
+ *
46
+ * The signing payload is "TX" + MessagePack-encoded transaction.
47
+ * Algorand signs the RAW BYTES directly (not a hash).
48
+ */
49
+ async buildTransaction(tx, fromAddress) {
50
+ try {
51
+ const params = await this.client.getTransactionParams().do();
52
+ const txn = this.algosdk.makePaymentTxnWithSuggestedParamsFromObject({
53
+ from: fromAddress,
54
+ to: tx.to,
55
+ amount: tx.amount,
56
+ suggestedParams: params,
57
+ note: tx.note ? new TextEncoder().encode(tx.note) : undefined,
58
+ });
59
+ // bytesToSign() returns "TX" prefix + msgpack-encoded TX
60
+ // Algorand signs this directly with Ed25519 (no hashing)
61
+ const bytesToSign = txn.bytesToSign();
62
+ const payload = {
63
+ signingPayload: Buffer.from(bytesToSign).toString('hex'),
64
+ txnBytes: Buffer.from(this.algosdk.encodeUnsignedTransaction(txn)).toString('hex'),
65
+ fromAddress,
66
+ toAddress: tx.to,
67
+ amount: tx.amount,
68
+ };
69
+ return Buffer.from(JSON.stringify(payload)).toString('hex');
70
+ }
71
+ catch (e) {
72
+ if (e instanceof errors_1.ChainError)
73
+ throw e;
74
+ throw new errors_1.ChainError(`Failed to build Algorand transaction: ${e.message}`, 'algorand');
75
+ }
76
+ }
77
+ getSigningPayload(unsignedTx) {
78
+ try {
79
+ const payload = JSON.parse(Buffer.from(unsignedTx, 'hex').toString());
80
+ return payload.signingPayload;
81
+ }
82
+ catch {
83
+ return unsignedTx;
84
+ }
85
+ }
86
+ /**
87
+ * Attach an Ed25519 signature to the Algorand transaction
88
+ */
89
+ async attachSignature(unsignedTx, signature) {
90
+ try {
91
+ const payload = JSON.parse(Buffer.from(unsignedTx, 'hex').toString());
92
+ const sig = signature.startsWith('0x') ? signature.slice(2) : signature;
93
+ const signedPayload = {
94
+ ...payload,
95
+ signature: sig,
96
+ };
97
+ return Buffer.from(JSON.stringify(signedPayload)).toString('hex');
98
+ }
99
+ catch (e) {
100
+ throw new errors_1.ChainError(`Failed to attach Algorand signature: ${e.message}`, 'algorand');
101
+ }
102
+ }
103
+ /**
104
+ * Broadcast a signed Algorand transaction
105
+ */
106
+ async broadcast(signedTx) {
107
+ try {
108
+ const payload = JSON.parse(Buffer.from(signedTx, 'hex').toString());
109
+ // Reconstruct the unsigned transaction
110
+ const txnBytes = Buffer.from(payload.txnBytes, 'hex');
111
+ const txn = this.algosdk.decodeUnsignedTransaction(txnBytes);
112
+ // Create the signed transaction object
113
+ const sigBytes = Buffer.from(payload.signature, 'hex');
114
+ const signedTxn = {
115
+ txn: txn.get_obj_for_encoding(),
116
+ sig: sigBytes,
117
+ };
118
+ const signedBytes = this.algosdk.encodeObj(signedTxn);
119
+ const result = await this.client.sendRawTransaction(signedBytes).do();
120
+ return result.txId;
121
+ }
122
+ catch (e) {
123
+ if (e instanceof errors_1.ChainError)
124
+ throw e;
125
+ throw new errors_1.ChainError(`Failed to broadcast Algorand tx: ${e.message}`, 'algorand');
126
+ }
127
+ }
128
+ /**
129
+ * Get ALGO balance in microAlgos
130
+ */
131
+ async getBalance(address) {
132
+ try {
133
+ const info = await this.client.accountInformation(address).do();
134
+ return info.amount.toString();
135
+ }
136
+ catch {
137
+ return '0';
138
+ }
139
+ }
140
+ }
141
+ exports.AlgorandAdapter = AlgorandAdapter;
142
+ function createAlgorandAdapter(rpcUrl) {
143
+ return new AlgorandAdapter('mainnet', rpcUrl);
144
+ }
145
+ function createAlgorandTestnetAdapter(rpcUrl) {
146
+ return new AlgorandAdapter('testnet', rpcUrl);
147
+ }
148
+ //# sourceMappingURL=algorand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"algorand.js","sourceRoot":"","sources":["../../src/chains/algorand.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Aptos Chain Adapter
3
+ *
4
+ * Builds Aptos Move transactions using BCS serialization,
5
+ * attaches Ed25519 signatures from the FROST threshold signing
6
+ * network, and broadcasts via Aptos REST API.
7
+ *
8
+ * Requires: npm install @aptos-labs/ts-sdk
9
+ */
10
+ import { ChainAdapter, AptosTransaction } from '../core/types';
11
+ export declare class AptosAdapter implements ChainAdapter {
12
+ private rpcUrl;
13
+ private network;
14
+ private aptosSdk;
15
+ constructor(network?: 'mainnet' | 'testnet' | 'devnet', rpcUrl?: string);
16
+ getRpcUrl(): string;
17
+ /**
18
+ * Build an unsigned Aptos transaction.
19
+ *
20
+ * The signing payload is SHA3-256("APTOS::RawTransaction" prefix hash + BCS-serialized RawTransaction).
21
+ */
22
+ buildTransaction(tx: AptosTransaction, fromAddress: string): Promise<string>;
23
+ getSigningPayload(unsignedTx: string): string;
24
+ /**
25
+ * Attach an Ed25519 signature to the Aptos transaction
26
+ */
27
+ attachSignature(unsignedTx: string, signature: string): Promise<string>;
28
+ /**
29
+ * Broadcast a signed Aptos transaction
30
+ */
31
+ broadcast(signedTx: string): Promise<string>;
32
+ /**
33
+ * Get APT balance in Octas
34
+ */
35
+ getBalance(address: string): Promise<string>;
36
+ }
37
+ export declare function createAptosAdapter(rpcUrl?: string): AptosAdapter;
38
+ export declare function createAptosTestnetAdapter(rpcUrl?: string): AptosAdapter;
39
+ //# sourceMappingURL=aptos.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aptos.d.ts","sourceRoot":"","sources":["../../src/chains/aptos.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAU/D,qBAAa,YAAa,YAAW,YAAY;IAC7C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAM;gBAEV,OAAO,GAAE,SAAS,GAAG,SAAS,GAAG,QAAoB,EAAE,MAAM,CAAC,EAAE,MAAM;IAMlF,SAAS,IAAI,MAAM;IAInB;;;;OAIG;IACG,gBAAgB,CAAC,EAAE,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAmDlF,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAS7C;;OAEG;IACG,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAmB7E;;OAEG;IACG,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAsClD;;OAEG;IACG,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAqBrD;AAED,wBAAgB,kBAAkB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,YAAY,CAEhE;AAED,wBAAgB,yBAAyB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,YAAY,CAEvE"}
@@ -0,0 +1,168 @@
1
+ "use strict";
2
+ /**
3
+ * Aptos Chain Adapter
4
+ *
5
+ * Builds Aptos Move transactions using BCS serialization,
6
+ * attaches Ed25519 signatures from the FROST threshold signing
7
+ * network, and broadcasts via Aptos REST API.
8
+ *
9
+ * Requires: npm install @aptos-labs/ts-sdk
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.AptosAdapter = void 0;
13
+ exports.createAptosAdapter = createAptosAdapter;
14
+ exports.createAptosTestnetAdapter = createAptosTestnetAdapter;
15
+ const errors_1 = require("../utils/errors");
16
+ const optional_deps_1 = require("../utils/optional-deps");
17
+ const DEFAULT_RPCS = {
18
+ 'mainnet': 'https://fullnode.mainnet.aptoslabs.com/v1',
19
+ 'testnet': 'https://fullnode.testnet.aptoslabs.com/v1',
20
+ 'devnet': 'https://fullnode.devnet.aptoslabs.com/v1',
21
+ };
22
+ class AptosAdapter {
23
+ constructor(network = 'mainnet', rpcUrl) {
24
+ this.network = network;
25
+ this.rpcUrl = rpcUrl || DEFAULT_RPCS[network];
26
+ this.aptosSdk = (0, optional_deps_1.requireOptionalDependency)('@aptos-labs/ts-sdk', 'aptos');
27
+ }
28
+ getRpcUrl() {
29
+ return this.rpcUrl;
30
+ }
31
+ /**
32
+ * Build an unsigned Aptos transaction.
33
+ *
34
+ * The signing payload is SHA3-256("APTOS::RawTransaction" prefix hash + BCS-serialized RawTransaction).
35
+ */
36
+ async buildTransaction(tx, fromAddress) {
37
+ try {
38
+ const { Aptos, AptosConfig, Network, AccountAddress } = this.aptosSdk;
39
+ const networkMap = {
40
+ 'mainnet': Network.MAINNET,
41
+ 'testnet': Network.TESTNET,
42
+ 'devnet': Network.DEVNET,
43
+ };
44
+ const config = new AptosConfig({
45
+ network: networkMap[this.network] || Network.MAINNET,
46
+ });
47
+ const aptos = new Aptos(config);
48
+ // Build a coin transfer transaction
49
+ const rawTx = await aptos.transaction.build.simple({
50
+ sender: AccountAddress.from(fromAddress),
51
+ data: {
52
+ function: '0x1::aptos_account::transfer',
53
+ functionArguments: [AccountAddress.from(tx.to), BigInt(tx.amount)],
54
+ },
55
+ });
56
+ // Get the signing message (prefix hash + BCS bytes)
57
+ const signingMessage = rawTx.bcsToBytes();
58
+ // SHA3-256 of the signing message
59
+ const crypto = require('crypto');
60
+ const signingHash = crypto.createHash('sha3-256')
61
+ .update(Buffer.from(signingMessage))
62
+ .digest();
63
+ const payload = {
64
+ signingHash: Buffer.from(signingHash).toString('hex'),
65
+ signingMessage: Buffer.from(signingMessage).toString('hex'),
66
+ fromAddress,
67
+ toAddress: tx.to,
68
+ amount: tx.amount,
69
+ };
70
+ return Buffer.from(JSON.stringify(payload)).toString('hex');
71
+ }
72
+ catch (e) {
73
+ if (e instanceof errors_1.ChainError)
74
+ throw e;
75
+ throw new errors_1.ChainError(`Failed to build Aptos transaction: ${e.message}`, 'aptos');
76
+ }
77
+ }
78
+ getSigningPayload(unsignedTx) {
79
+ try {
80
+ const payload = JSON.parse(Buffer.from(unsignedTx, 'hex').toString());
81
+ return payload.signingHash;
82
+ }
83
+ catch {
84
+ return unsignedTx;
85
+ }
86
+ }
87
+ /**
88
+ * Attach an Ed25519 signature to the Aptos transaction
89
+ */
90
+ async attachSignature(unsignedTx, signature) {
91
+ try {
92
+ const payload = JSON.parse(Buffer.from(unsignedTx, 'hex').toString());
93
+ const sig = signature.startsWith('0x') ? signature.slice(2) : signature;
94
+ const signedPayload = {
95
+ ...payload,
96
+ signature: sig,
97
+ };
98
+ return Buffer.from(JSON.stringify(signedPayload)).toString('hex');
99
+ }
100
+ catch (e) {
101
+ throw new errors_1.ChainError(`Failed to attach Aptos signature: ${e.message}`, 'aptos');
102
+ }
103
+ }
104
+ /**
105
+ * Broadcast a signed Aptos transaction
106
+ */
107
+ async broadcast(signedTx) {
108
+ try {
109
+ const { Aptos, AptosConfig, Network } = this.aptosSdk;
110
+ const payload = JSON.parse(Buffer.from(signedTx, 'hex').toString());
111
+ const networkMap = {
112
+ 'mainnet': Network.MAINNET,
113
+ 'testnet': Network.TESTNET,
114
+ 'devnet': Network.DEVNET,
115
+ };
116
+ const config = new AptosConfig({
117
+ network: networkMap[this.network] || Network.MAINNET,
118
+ });
119
+ const aptos = new Aptos(config);
120
+ // Submit the signed BCS transaction
121
+ const signingMessage = Buffer.from(payload.signingMessage, 'hex');
122
+ const sigBytes = Buffer.from(payload.signature, 'hex');
123
+ const result = await aptos.transaction.submit.simple({
124
+ transaction: signingMessage,
125
+ senderAuthenticator: {
126
+ type: 'ed25519',
127
+ signature: sigBytes,
128
+ },
129
+ });
130
+ return result.hash;
131
+ }
132
+ catch (e) {
133
+ if (e instanceof errors_1.ChainError)
134
+ throw e;
135
+ throw new errors_1.ChainError(`Failed to broadcast Aptos tx: ${e.message}`, 'aptos');
136
+ }
137
+ }
138
+ /**
139
+ * Get APT balance in Octas
140
+ */
141
+ async getBalance(address) {
142
+ try {
143
+ const { Aptos, AptosConfig, Network } = this.aptosSdk;
144
+ const networkMap = {
145
+ 'mainnet': Network.MAINNET,
146
+ 'testnet': Network.TESTNET,
147
+ 'devnet': Network.DEVNET,
148
+ };
149
+ const config = new AptosConfig({
150
+ network: networkMap[this.network] || Network.MAINNET,
151
+ });
152
+ const aptos = new Aptos(config);
153
+ const balance = await aptos.getAccountAPTAmount({ accountAddress: address });
154
+ return balance.toString();
155
+ }
156
+ catch {
157
+ return '0';
158
+ }
159
+ }
160
+ }
161
+ exports.AptosAdapter = AptosAdapter;
162
+ function createAptosAdapter(rpcUrl) {
163
+ return new AptosAdapter('mainnet', rpcUrl);
164
+ }
165
+ function createAptosTestnetAdapter(rpcUrl) {
166
+ return new AptosAdapter('testnet', rpcUrl);
167
+ }
168
+ //# sourceMappingURL=aptos.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aptos.js","sourceRoot":"","sources":["../../src/chains/aptos.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Cardano Chain Adapter
3
+ *
4
+ * Builds Cardano transactions using CBOR serialization, attaches
5
+ * Ed25519 signatures from the FROST threshold signing network,
6
+ * and broadcasts via Blockfrost API.
7
+ *
8
+ * Requires: npm install @emurgo/cardano-serialization-lib-nodejs
9
+ */
10
+ import { ChainAdapter, CardanoTransaction } from '../core/types';
11
+ export declare class CardanoAdapter implements ChainAdapter {
12
+ private rpcUrl;
13
+ private network;
14
+ private cardanoWasm;
15
+ private apiKey;
16
+ constructor(network?: 'mainnet' | 'preprod' | 'preview', rpcUrl?: string, apiKey?: string);
17
+ getRpcUrl(): string;
18
+ /**
19
+ * Build an unsigned Cardano transaction.
20
+ *
21
+ * Cardano is UTXO-based. The signing payload is
22
+ * Blake2b-256(transaction_body_cbor).
23
+ */
24
+ buildTransaction(tx: CardanoTransaction, fromAddress: string): Promise<string>;
25
+ getSigningPayload(unsignedTx: string): string;
26
+ /**
27
+ * Attach an Ed25519 signature to the Cardano transaction
28
+ */
29
+ attachSignature(unsignedTx: string, signature: string): Promise<string>;
30
+ /**
31
+ * Broadcast a signed Cardano transaction
32
+ */
33
+ broadcast(signedTx: string): Promise<string>;
34
+ /**
35
+ * Get ADA balance in lovelace
36
+ */
37
+ getBalance(address: string): Promise<string>;
38
+ private fetchUtxos;
39
+ }
40
+ export declare function createCardanoAdapter(apiKey?: string): CardanoAdapter;
41
+ export declare function createCardanoPreprodAdapter(apiKey?: string): CardanoAdapter;
42
+ //# sourceMappingURL=cardano.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cardano.d.ts","sourceRoot":"","sources":["../../src/chains/cardano.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAUjE,qBAAa,cAAe,YAAW,YAAY;IAC/C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,WAAW,CAAM;IACzB,OAAO,CAAC,MAAM,CAAS;gBAGnB,OAAO,GAAE,SAAS,GAAG,SAAS,GAAG,SAAqB,EACtD,MAAM,CAAC,EAAE,MAAM,EACf,MAAM,SAAK;IAWf,SAAS,IAAI,MAAM;IAInB;;;;;OAKG;IACG,gBAAgB,CAAC,EAAE,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAwEpF,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAS7C;;OAEG;IACG,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAmB7E;;OAEG;IACG,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAoDlD;;OAEG;IACG,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YAcpC,UAAU;CAY3B;AAED,wBAAgB,oBAAoB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,cAAc,CAEpE;AAED,wBAAgB,2BAA2B,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,cAAc,CAE3E"}
@@ -0,0 +1,188 @@
1
+ "use strict";
2
+ /**
3
+ * Cardano Chain Adapter
4
+ *
5
+ * Builds Cardano transactions using CBOR serialization, attaches
6
+ * Ed25519 signatures from the FROST threshold signing network,
7
+ * and broadcasts via Blockfrost API.
8
+ *
9
+ * Requires: npm install @emurgo/cardano-serialization-lib-nodejs
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.CardanoAdapter = void 0;
13
+ exports.createCardanoAdapter = createCardanoAdapter;
14
+ exports.createCardanoPreprodAdapter = createCardanoPreprodAdapter;
15
+ const errors_1 = require("../utils/errors");
16
+ const optional_deps_1 = require("../utils/optional-deps");
17
+ const BLOCKFROST_URLS = {
18
+ 'mainnet': 'https://cardano-mainnet.blockfrost.io/api/v0',
19
+ 'preprod': 'https://cardano-preprod.blockfrost.io/api/v0',
20
+ 'preview': 'https://cardano-preview.blockfrost.io/api/v0',
21
+ };
22
+ class CardanoAdapter {
23
+ constructor(network = 'mainnet', rpcUrl, apiKey = '') {
24
+ this.network = network;
25
+ this.rpcUrl = rpcUrl || BLOCKFROST_URLS[network];
26
+ this.apiKey = apiKey;
27
+ this.cardanoWasm = (0, optional_deps_1.requireOptionalDependency)('@emurgo/cardano-serialization-lib-nodejs', 'cardano');
28
+ }
29
+ getRpcUrl() {
30
+ return this.rpcUrl;
31
+ }
32
+ /**
33
+ * Build an unsigned Cardano transaction.
34
+ *
35
+ * Cardano is UTXO-based. The signing payload is
36
+ * Blake2b-256(transaction_body_cbor).
37
+ */
38
+ async buildTransaction(tx, fromAddress) {
39
+ try {
40
+ const CSL = this.cardanoWasm;
41
+ // Fetch UTXOs from Blockfrost
42
+ const utxos = await this.fetchUtxos(fromAddress);
43
+ if (!utxos || utxos.length === 0) {
44
+ throw new Error('No UTXOs found for address');
45
+ }
46
+ // Build transaction
47
+ const txBuilder = CSL.TransactionBuilder.new(CSL.TransactionBuilderConfigBuilder.new()
48
+ .fee_algo(CSL.LinearFee.new(CSL.BigNum.from_str('44'), CSL.BigNum.from_str('155381')))
49
+ .pool_deposit(CSL.BigNum.from_str('500000000'))
50
+ .key_deposit(CSL.BigNum.from_str('2000000'))
51
+ .max_value_size(5000)
52
+ .max_tx_size(16384)
53
+ .coins_per_utxo_byte(CSL.BigNum.from_str('4310'))
54
+ .build());
55
+ // Add inputs
56
+ for (const utxo of utxos) {
57
+ const txInput = CSL.TransactionInput.new(CSL.TransactionHash.from_bytes(Buffer.from(utxo.tx_hash, 'hex')), utxo.output_index);
58
+ const amount = CSL.Value.new(CSL.BigNum.from_str(utxo.amount));
59
+ txBuilder.add_input(CSL.Address.from_bech32(fromAddress), txInput, amount);
60
+ }
61
+ // Add output
62
+ txBuilder.add_output(CSL.TransactionOutput.new(CSL.Address.from_bech32(tx.to), CSL.Value.new(CSL.BigNum.from_str(tx.amount))));
63
+ // Set change address
64
+ txBuilder.add_change_if_needed(CSL.Address.from_bech32(fromAddress));
65
+ // Build the transaction body
66
+ const txBody = txBuilder.build();
67
+ const txHash = CSL.hash_transaction(txBody);
68
+ const payload = {
69
+ signingHash: Buffer.from(txHash.to_bytes()).toString('hex'),
70
+ txBodyBytes: Buffer.from(txBody.to_bytes()).toString('hex'),
71
+ fromAddress,
72
+ toAddress: tx.to,
73
+ amount: tx.amount,
74
+ };
75
+ return Buffer.from(JSON.stringify(payload)).toString('hex');
76
+ }
77
+ catch (e) {
78
+ if (e instanceof errors_1.ChainError)
79
+ throw e;
80
+ throw new errors_1.ChainError(`Failed to build Cardano transaction: ${e.message}`, 'cardano');
81
+ }
82
+ }
83
+ getSigningPayload(unsignedTx) {
84
+ try {
85
+ const payload = JSON.parse(Buffer.from(unsignedTx, 'hex').toString());
86
+ return payload.signingHash;
87
+ }
88
+ catch {
89
+ return unsignedTx;
90
+ }
91
+ }
92
+ /**
93
+ * Attach an Ed25519 signature to the Cardano transaction
94
+ */
95
+ async attachSignature(unsignedTx, signature) {
96
+ try {
97
+ const payload = JSON.parse(Buffer.from(unsignedTx, 'hex').toString());
98
+ const sig = signature.startsWith('0x') ? signature.slice(2) : signature;
99
+ const signedPayload = {
100
+ ...payload,
101
+ signature: sig,
102
+ };
103
+ return Buffer.from(JSON.stringify(signedPayload)).toString('hex');
104
+ }
105
+ catch (e) {
106
+ throw new errors_1.ChainError(`Failed to attach Cardano signature: ${e.message}`, 'cardano');
107
+ }
108
+ }
109
+ /**
110
+ * Broadcast a signed Cardano transaction
111
+ */
112
+ async broadcast(signedTx) {
113
+ try {
114
+ const CSL = this.cardanoWasm;
115
+ const payload = JSON.parse(Buffer.from(signedTx, 'hex').toString());
116
+ // Reconstruct the signed transaction
117
+ const txBody = CSL.TransactionBody.from_bytes(Buffer.from(payload.txBodyBytes, 'hex'));
118
+ const sigBytes = Buffer.from(payload.signature, 'hex');
119
+ // Create witness set with the Ed25519 signature
120
+ const witnesses = CSL.TransactionWitnessSet.new();
121
+ const vkeyWitnesses = CSL.Vkeywitnesses.new();
122
+ vkeyWitnesses.add(CSL.Vkeywitness.new(CSL.Vkey.new(CSL.PublicKey.from_bytes(Buffer.alloc(32))), // placeholder
123
+ CSL.Ed25519Signature.from_bytes(sigBytes)));
124
+ witnesses.set_vkeys(vkeyWitnesses);
125
+ const signedTransaction = CSL.Transaction.new(txBody, witnesses);
126
+ const txBytes = signedTransaction.to_bytes();
127
+ // Submit via Blockfrost
128
+ const response = await fetch(`${this.rpcUrl}/tx/submit`, {
129
+ method: 'POST',
130
+ headers: {
131
+ 'Content-Type': 'application/cbor',
132
+ 'project_id': this.apiKey,
133
+ },
134
+ body: txBytes,
135
+ });
136
+ if (!response.ok) {
137
+ const error = await response.text();
138
+ throw new Error(`Blockfrost error: ${error}`);
139
+ }
140
+ const txHash = await response.text();
141
+ return txHash.replace(/"/g, '');
142
+ }
143
+ catch (e) {
144
+ if (e instanceof errors_1.ChainError)
145
+ throw e;
146
+ throw new errors_1.ChainError(`Failed to broadcast Cardano tx: ${e.message}`, 'cardano');
147
+ }
148
+ }
149
+ /**
150
+ * Get ADA balance in lovelace
151
+ */
152
+ async getBalance(address) {
153
+ try {
154
+ const response = await fetch(`${this.rpcUrl}/addresses/${address}`, {
155
+ headers: { 'project_id': this.apiKey },
156
+ });
157
+ if (!response.ok)
158
+ return '0';
159
+ const data = await response.json();
160
+ const lovelace = data.amount?.find((a) => a.unit === 'lovelace');
161
+ return lovelace?.quantity || '0';
162
+ }
163
+ catch {
164
+ return '0';
165
+ }
166
+ }
167
+ async fetchUtxos(address) {
168
+ const response = await fetch(`${this.rpcUrl}/addresses/${address}/utxos`, {
169
+ headers: { 'project_id': this.apiKey },
170
+ });
171
+ if (!response.ok)
172
+ return [];
173
+ const utxos = await response.json();
174
+ return utxos.map((u) => ({
175
+ tx_hash: u.tx_hash,
176
+ output_index: u.output_index,
177
+ amount: u.amount.find((a) => a.unit === 'lovelace')?.quantity || '0',
178
+ }));
179
+ }
180
+ }
181
+ exports.CardanoAdapter = CardanoAdapter;
182
+ function createCardanoAdapter(apiKey) {
183
+ return new CardanoAdapter('mainnet', undefined, apiKey);
184
+ }
185
+ function createCardanoPreprodAdapter(apiKey) {
186
+ return new CardanoAdapter('preprod', undefined, apiKey);
187
+ }
188
+ //# sourceMappingURL=cardano.js.map