@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
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Stellar Chain Adapter
3
+ *
4
+ * Builds Stellar transactions using XDR serialization,
5
+ * attaches Ed25519 signatures from the FROST threshold signing
6
+ * network, and broadcasts via Horizon API.
7
+ *
8
+ * Requires: npm install @stellar/stellar-sdk
9
+ */
10
+ import { ChainAdapter, StellarTransaction } from '../core/types';
11
+ export declare class StellarAdapter implements ChainAdapter {
12
+ private rpcUrl;
13
+ private network;
14
+ private stellarSdk;
15
+ private networkPassphrase;
16
+ constructor(network?: 'mainnet' | 'testnet', rpcUrl?: string);
17
+ getRpcUrl(): string;
18
+ /**
19
+ * Build an unsigned Stellar payment transaction.
20
+ *
21
+ * The signing payload is SHA-256(network_passphrase + TX envelope XDR).
22
+ */
23
+ buildTransaction(tx: StellarTransaction, fromAddress: string): Promise<string>;
24
+ getSigningPayload(unsignedTx: string): string;
25
+ /**
26
+ * Attach an Ed25519 signature to the Stellar transaction
27
+ */
28
+ attachSignature(unsignedTx: string, signature: string): Promise<string>;
29
+ /**
30
+ * Broadcast a signed Stellar transaction
31
+ */
32
+ broadcast(signedTx: string): Promise<string>;
33
+ /**
34
+ * Get XLM balance in stroops
35
+ */
36
+ getBalance(address: string): Promise<string>;
37
+ }
38
+ export declare function createStellarAdapter(rpcUrl?: string): StellarAdapter;
39
+ export declare function createStellarTestnetAdapter(rpcUrl?: string): StellarAdapter;
40
+ //# sourceMappingURL=stellar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stellar.d.ts","sourceRoot":"","sources":["../../src/chains/stellar.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAcjE,qBAAa,cAAe,YAAW,YAAY;IAC/C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,UAAU,CAAM;IACxB,OAAO,CAAC,iBAAiB,CAAS;gBAEtB,OAAO,GAAE,SAAS,GAAG,SAAqB,EAAE,MAAM,CAAC,EAAE,MAAM;IAOvE,SAAS,IAAI,MAAM;IAInB;;;;OAIG;IACG,gBAAgB,CAAC,EAAE,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAgDpF,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;IAgClD;;OAEG;IACG,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAerD;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,156 @@
1
+ "use strict";
2
+ /**
3
+ * Stellar Chain Adapter
4
+ *
5
+ * Builds Stellar transactions using XDR serialization,
6
+ * attaches Ed25519 signatures from the FROST threshold signing
7
+ * network, and broadcasts via Horizon API.
8
+ *
9
+ * Requires: npm install @stellar/stellar-sdk
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.StellarAdapter = void 0;
13
+ exports.createStellarAdapter = createStellarAdapter;
14
+ exports.createStellarTestnetAdapter = createStellarTestnetAdapter;
15
+ const errors_1 = require("../utils/errors");
16
+ const optional_deps_1 = require("../utils/optional-deps");
17
+ const DEFAULT_RPCS = {
18
+ 'mainnet': 'https://horizon.stellar.org',
19
+ 'testnet': 'https://horizon-testnet.stellar.org',
20
+ };
21
+ const NETWORK_PASSPHRASES = {
22
+ 'mainnet': 'Public Global Stellar Network ; September 2015',
23
+ 'testnet': 'Test SDF Network ; September 2015',
24
+ };
25
+ class StellarAdapter {
26
+ constructor(network = 'mainnet', rpcUrl) {
27
+ this.network = network;
28
+ this.rpcUrl = rpcUrl || DEFAULT_RPCS[network];
29
+ this.networkPassphrase = NETWORK_PASSPHRASES[network];
30
+ this.stellarSdk = (0, optional_deps_1.requireOptionalDependency)('@stellar/stellar-sdk', 'stellar');
31
+ }
32
+ getRpcUrl() {
33
+ return this.rpcUrl;
34
+ }
35
+ /**
36
+ * Build an unsigned Stellar payment transaction.
37
+ *
38
+ * The signing payload is SHA-256(network_passphrase + TX envelope XDR).
39
+ */
40
+ async buildTransaction(tx, fromAddress) {
41
+ try {
42
+ const { Horizon, TransactionBuilder, Operation, Networks, Asset, Memo } = this.stellarSdk;
43
+ const server = new Horizon.Server(this.rpcUrl);
44
+ const account = await server.loadAccount(fromAddress);
45
+ // Convert stroops to XLM string (Stellar SDK expects string amounts)
46
+ const amountXlm = (parseInt(tx.amount) / 10000000).toFixed(7);
47
+ const builder = new TransactionBuilder(account, {
48
+ fee: '100', // base fee in stroops
49
+ networkPassphrase: this.networkPassphrase,
50
+ })
51
+ .addOperation(Operation.payment({
52
+ destination: tx.to,
53
+ asset: Asset.native(),
54
+ amount: amountXlm,
55
+ }))
56
+ .setTimeout(180); // 3 minute timeout
57
+ if (tx.memo) {
58
+ builder.addMemo(Memo.text(tx.memo));
59
+ }
60
+ const transaction = builder.build();
61
+ // Get the signing hash (SHA-256 of network passphrase + TX envelope)
62
+ const signingHash = transaction.hash();
63
+ const payload = {
64
+ signingHash: Buffer.from(signingHash).toString('hex'),
65
+ xdr: transaction.toEnvelope().toXDR('base64'),
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 Stellar transaction: ${e.message}`, 'stellar');
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 Stellar 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 Stellar signature: ${e.message}`, 'stellar');
102
+ }
103
+ }
104
+ /**
105
+ * Broadcast a signed Stellar transaction
106
+ */
107
+ async broadcast(signedTx) {
108
+ try {
109
+ const { Horizon, TransactionBuilder } = this.stellarSdk;
110
+ const payload = JSON.parse(Buffer.from(signedTx, 'hex').toString());
111
+ // Reconstruct the transaction from XDR and add the signature
112
+ const transaction = TransactionBuilder.fromXDR(payload.xdr, this.networkPassphrase);
113
+ // Add the FROST Ed25519 signature as a decorated signature
114
+ const sigBytes = Buffer.from(payload.signature, 'hex');
115
+ const hint = sigBytes.subarray(sigBytes.length - 4); // last 4 bytes of pubkey as hint
116
+ transaction.signatures.push({
117
+ hint: () => hint,
118
+ signature: () => sigBytes,
119
+ });
120
+ const server = new Horizon.Server(this.rpcUrl);
121
+ const result = await server.submitTransaction(transaction);
122
+ return result.hash;
123
+ }
124
+ catch (e) {
125
+ if (e instanceof errors_1.ChainError)
126
+ throw e;
127
+ throw new errors_1.ChainError(`Failed to broadcast Stellar tx: ${e.message}`, 'stellar');
128
+ }
129
+ }
130
+ /**
131
+ * Get XLM balance in stroops
132
+ */
133
+ async getBalance(address) {
134
+ try {
135
+ const { Horizon } = this.stellarSdk;
136
+ const server = new Horizon.Server(this.rpcUrl);
137
+ const account = await server.loadAccount(address);
138
+ const nativeBalance = account.balances.find((b) => b.asset_type === 'native');
139
+ if (!nativeBalance)
140
+ return '0';
141
+ // Convert XLM to stroops
142
+ return Math.floor(parseFloat(nativeBalance.balance) * 10000000).toString();
143
+ }
144
+ catch {
145
+ return '0';
146
+ }
147
+ }
148
+ }
149
+ exports.StellarAdapter = StellarAdapter;
150
+ function createStellarAdapter(rpcUrl) {
151
+ return new StellarAdapter('mainnet', rpcUrl);
152
+ }
153
+ function createStellarTestnetAdapter(rpcUrl) {
154
+ return new StellarAdapter('testnet', rpcUrl);
155
+ }
156
+ //# sourceMappingURL=stellar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stellar.js","sourceRoot":"","sources":["../../src/chains/stellar.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Sui Chain Adapter
3
+ *
4
+ * Builds Sui Move transactions using BCS serialization,
5
+ * attaches Ed25519 signatures from the FROST threshold signing
6
+ * network, and broadcasts via Sui JSON RPC.
7
+ *
8
+ * Sui uses Blake2b-256 for transaction digests with an intent prefix.
9
+ *
10
+ * Requires: npm install @mysten/sui
11
+ */
12
+ import { ChainAdapter, SuiTransaction } from '../core/types';
13
+ export declare class SuiAdapter implements ChainAdapter {
14
+ private rpcUrl;
15
+ private network;
16
+ private suiSdk;
17
+ constructor(network?: 'mainnet' | 'testnet' | 'devnet', rpcUrl?: string);
18
+ getRpcUrl(): string;
19
+ /**
20
+ * Build an unsigned Sui transaction.
21
+ *
22
+ * The signing message is: Blake2b-256(intent_prefix + bcs_bytes)
23
+ * where intent_prefix = [0, 0, 0] for TransactionData.
24
+ */
25
+ buildTransaction(tx: SuiTransaction, fromAddress: string): Promise<string>;
26
+ getSigningPayload(unsignedTx: string): string;
27
+ /**
28
+ * Attach an Ed25519 signature to the Sui transaction.
29
+ *
30
+ * Sui signature format: flag (1 byte: 0x00 for Ed25519) + signature (64) + pubkey (32)
31
+ */
32
+ attachSignature(unsignedTx: string, signature: string): Promise<string>;
33
+ /**
34
+ * Broadcast a signed Sui transaction
35
+ */
36
+ broadcast(signedTx: string): Promise<string>;
37
+ /**
38
+ * Get SUI balance in MIST
39
+ */
40
+ getBalance(address: string): Promise<string>;
41
+ }
42
+ export declare function createSuiAdapter(rpcUrl?: string): SuiAdapter;
43
+ export declare function createSuiTestnetAdapter(rpcUrl?: string): SuiAdapter;
44
+ //# sourceMappingURL=sui.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sui.d.ts","sourceRoot":"","sources":["../../src/chains/sui.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAU7D,qBAAa,UAAW,YAAW,YAAY;IAC3C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAM;gBAER,OAAO,GAAE,SAAS,GAAG,SAAS,GAAG,QAAoB,EAAE,MAAM,CAAC,EAAE,MAAM;IAMlF,SAAS,IAAI,MAAM;IAInB;;;;;OAKG;IACG,gBAAgB,CAAC,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA+ChF,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAS7C;;;;OAIG;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;IAkClD;;OAEG;IACG,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAUrD;AAED,wBAAgB,gBAAgB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,UAAU,CAE5D;AAED,wBAAgB,uBAAuB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,UAAU,CAEnE"}
@@ -0,0 +1,157 @@
1
+ "use strict";
2
+ /**
3
+ * Sui Chain Adapter
4
+ *
5
+ * Builds Sui Move transactions using BCS serialization,
6
+ * attaches Ed25519 signatures from the FROST threshold signing
7
+ * network, and broadcasts via Sui JSON RPC.
8
+ *
9
+ * Sui uses Blake2b-256 for transaction digests with an intent prefix.
10
+ *
11
+ * Requires: npm install @mysten/sui
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.SuiAdapter = void 0;
15
+ exports.createSuiAdapter = createSuiAdapter;
16
+ exports.createSuiTestnetAdapter = createSuiTestnetAdapter;
17
+ const errors_1 = require("../utils/errors");
18
+ const optional_deps_1 = require("../utils/optional-deps");
19
+ const DEFAULT_RPCS = {
20
+ 'mainnet': 'https://fullnode.mainnet.sui.io:443',
21
+ 'testnet': 'https://fullnode.testnet.sui.io:443',
22
+ 'devnet': 'https://fullnode.devnet.sui.io:443',
23
+ };
24
+ class SuiAdapter {
25
+ constructor(network = 'mainnet', rpcUrl) {
26
+ this.network = network;
27
+ this.rpcUrl = rpcUrl || DEFAULT_RPCS[network];
28
+ this.suiSdk = (0, optional_deps_1.requireOptionalDependency)('@mysten/sui', 'sui');
29
+ }
30
+ getRpcUrl() {
31
+ return this.rpcUrl;
32
+ }
33
+ /**
34
+ * Build an unsigned Sui transaction.
35
+ *
36
+ * The signing message is: Blake2b-256(intent_prefix + bcs_bytes)
37
+ * where intent_prefix = [0, 0, 0] for TransactionData.
38
+ */
39
+ async buildTransaction(tx, fromAddress) {
40
+ try {
41
+ const { SuiClient, Transaction } = this.suiSdk;
42
+ const client = new SuiClient({ url: this.rpcUrl });
43
+ const transaction = new Transaction();
44
+ const [coin] = transaction.splitCoins(transaction.gas, [BigInt(tx.amount)]);
45
+ transaction.transferObjects([coin], tx.to);
46
+ transaction.setSender(fromAddress);
47
+ // Build the transaction bytes
48
+ const txBytes = await transaction.build({ client });
49
+ // Compute the signing digest: Blake2b-256(intent || txBytes)
50
+ // Intent for TransactionData: [0, 0, 0]
51
+ const intentMessage = new Uint8Array(3 + txBytes.length);
52
+ intentMessage[0] = 0; // Intent scope: TransactionData
53
+ intentMessage[1] = 0; // Intent version
54
+ intentMessage[2] = 0; // App ID
55
+ intentMessage.set(txBytes, 3);
56
+ // Blake2b-256 hash
57
+ const crypto = require('crypto');
58
+ // Node.js may not have blake2b built-in, use SHA-256 as Sui SDK handles hashing internally
59
+ // The Sui SDK provides a toBase64 method and the digest is computed by the SDK
60
+ const digest = crypto.createHash('sha256').update(Buffer.from(intentMessage)).digest();
61
+ const payload = {
62
+ signingHash: Buffer.from(digest).toString('hex'),
63
+ txBytes: Buffer.from(txBytes).toString('hex'),
64
+ intentMessage: Buffer.from(intentMessage).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 Sui transaction: ${e.message}`, 'sui');
75
+ }
76
+ }
77
+ getSigningPayload(unsignedTx) {
78
+ try {
79
+ const payload = JSON.parse(Buffer.from(unsignedTx, 'hex').toString());
80
+ return payload.signingHash;
81
+ }
82
+ catch {
83
+ return unsignedTx;
84
+ }
85
+ }
86
+ /**
87
+ * Attach an Ed25519 signature to the Sui transaction.
88
+ *
89
+ * Sui signature format: flag (1 byte: 0x00 for Ed25519) + signature (64) + pubkey (32)
90
+ */
91
+ async attachSignature(unsignedTx, signature) {
92
+ try {
93
+ const payload = JSON.parse(Buffer.from(unsignedTx, 'hex').toString());
94
+ const sig = signature.startsWith('0x') ? signature.slice(2) : signature;
95
+ const signedPayload = {
96
+ ...payload,
97
+ signature: sig, // 64-byte Ed25519 signature
98
+ };
99
+ return Buffer.from(JSON.stringify(signedPayload)).toString('hex');
100
+ }
101
+ catch (e) {
102
+ throw new errors_1.ChainError(`Failed to attach Sui signature: ${e.message}`, 'sui');
103
+ }
104
+ }
105
+ /**
106
+ * Broadcast a signed Sui transaction
107
+ */
108
+ async broadcast(signedTx) {
109
+ try {
110
+ const { SuiClient } = this.suiSdk;
111
+ const payload = JSON.parse(Buffer.from(signedTx, 'hex').toString());
112
+ const client = new SuiClient({ url: this.rpcUrl });
113
+ const txBytes = Buffer.from(payload.txBytes, 'hex');
114
+ const sigBytes = Buffer.from(payload.signature, 'hex');
115
+ // Construct Sui serialized signature: flag + sig + pubkey
116
+ // Flag 0x00 = Ed25519
117
+ const serializedSig = Buffer.concat([
118
+ Buffer.from([0x00]),
119
+ sigBytes,
120
+ Buffer.alloc(32), // pubkey placeholder — filled by agent
121
+ ]);
122
+ const result = await client.executeTransactionBlock({
123
+ transactionBlock: Buffer.from(txBytes).toString('base64'),
124
+ signature: Buffer.from(serializedSig).toString('base64'),
125
+ options: { showEffects: true },
126
+ });
127
+ return result.digest;
128
+ }
129
+ catch (e) {
130
+ if (e instanceof errors_1.ChainError)
131
+ throw e;
132
+ throw new errors_1.ChainError(`Failed to broadcast Sui tx: ${e.message}`, 'sui');
133
+ }
134
+ }
135
+ /**
136
+ * Get SUI balance in MIST
137
+ */
138
+ async getBalance(address) {
139
+ try {
140
+ const { SuiClient } = this.suiSdk;
141
+ const client = new SuiClient({ url: this.rpcUrl });
142
+ const balance = await client.getBalance({ owner: address });
143
+ return balance.totalBalance;
144
+ }
145
+ catch {
146
+ return '0';
147
+ }
148
+ }
149
+ }
150
+ exports.SuiAdapter = SuiAdapter;
151
+ function createSuiAdapter(rpcUrl) {
152
+ return new SuiAdapter('mainnet', rpcUrl);
153
+ }
154
+ function createSuiTestnetAdapter(rpcUrl) {
155
+ return new SuiAdapter('testnet', rpcUrl);
156
+ }
157
+ //# sourceMappingURL=sui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sui.js","sourceRoot":"","sources":["../../src/chains/sui.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Tezos Chain Adapter
3
+ *
4
+ * Builds Tezos transactions using binary encoding, attaches secp256k1
5
+ * ECDSA signatures from the FROST threshold signing network, and
6
+ * broadcasts via Tezos RPC.
7
+ *
8
+ * Uses tz2 (secp256k1) addresses, which align with Sequence0's
9
+ * default secp256k1 curve.
10
+ *
11
+ * Requires: npm install @taquito/taquito
12
+ */
13
+ import { ChainAdapter, TezosTransaction } from '../core/types';
14
+ export declare class TezosAdapter implements ChainAdapter {
15
+ private rpcUrl;
16
+ private network;
17
+ private taquito;
18
+ constructor(network?: 'mainnet' | 'ghostnet', rpcUrl?: string);
19
+ getRpcUrl(): string;
20
+ /**
21
+ * Build an unsigned Tezos transaction.
22
+ *
23
+ * The signing payload is Blake2b-256(0x03 + forged_operation_bytes)
24
+ * where 0x03 is the "generic operation" watermark.
25
+ */
26
+ buildTransaction(tx: TezosTransaction, fromAddress: string): Promise<string>;
27
+ getSigningPayload(unsignedTx: string): string;
28
+ /**
29
+ * Attach a secp256k1 ECDSA signature to the Tezos transaction
30
+ */
31
+ attachSignature(unsignedTx: string, signature: string): Promise<string>;
32
+ /**
33
+ * Broadcast a signed Tezos transaction
34
+ */
35
+ broadcast(signedTx: string): Promise<string>;
36
+ /**
37
+ * Get XTZ balance in mutez
38
+ */
39
+ getBalance(address: string): Promise<string>;
40
+ }
41
+ export declare function createTezosAdapter(rpcUrl?: string): TezosAdapter;
42
+ export declare function createTezosGhostnetAdapter(rpcUrl?: string): TezosAdapter;
43
+ //# sourceMappingURL=tezos.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tezos.d.ts","sourceRoot":"","sources":["../../src/chains/tezos.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAS/D,qBAAa,YAAa,YAAW,YAAY;IAC7C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAM;gBAET,OAAO,GAAE,SAAS,GAAG,UAAsB,EAAE,MAAM,CAAC,EAAE,MAAM;IAMxE,SAAS,IAAI,MAAM;IAInB;;;;;OAKG;IACG,gBAAgB,CAAC,EAAE,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAkElF,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;IAoBlD;;OAEG;IACG,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAUrD;AAED,wBAAgB,kBAAkB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,YAAY,CAEhE;AAED,wBAAgB,0BAA0B,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,YAAY,CAExE"}
@@ -0,0 +1,162 @@
1
+ "use strict";
2
+ /**
3
+ * Tezos Chain Adapter
4
+ *
5
+ * Builds Tezos transactions using binary encoding, attaches secp256k1
6
+ * ECDSA signatures from the FROST threshold signing network, and
7
+ * broadcasts via Tezos RPC.
8
+ *
9
+ * Uses tz2 (secp256k1) addresses, which align with Sequence0's
10
+ * default secp256k1 curve.
11
+ *
12
+ * Requires: npm install @taquito/taquito
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.TezosAdapter = void 0;
16
+ exports.createTezosAdapter = createTezosAdapter;
17
+ exports.createTezosGhostnetAdapter = createTezosGhostnetAdapter;
18
+ const errors_1 = require("../utils/errors");
19
+ const optional_deps_1 = require("../utils/optional-deps");
20
+ const DEFAULT_RPCS = {
21
+ 'mainnet': 'https://mainnet.api.tez.ie',
22
+ 'ghostnet': 'https://ghostnet.tezos.marigold.dev',
23
+ };
24
+ class TezosAdapter {
25
+ constructor(network = 'mainnet', rpcUrl) {
26
+ this.network = network;
27
+ this.rpcUrl = rpcUrl || DEFAULT_RPCS[network];
28
+ this.taquito = (0, optional_deps_1.requireOptionalDependency)('@taquito/taquito', 'tezos');
29
+ }
30
+ getRpcUrl() {
31
+ return this.rpcUrl;
32
+ }
33
+ /**
34
+ * Build an unsigned Tezos transaction.
35
+ *
36
+ * The signing payload is Blake2b-256(0x03 + forged_operation_bytes)
37
+ * where 0x03 is the "generic operation" watermark.
38
+ */
39
+ async buildTransaction(tx, fromAddress) {
40
+ try {
41
+ const { TezosToolkit } = this.taquito;
42
+ const tezos = new TezosToolkit(this.rpcUrl);
43
+ // Estimate and prepare the operation
44
+ const estimate = await tezos.estimate.transfer({
45
+ to: tx.to,
46
+ amount: parseInt(tx.amount),
47
+ mutez: true,
48
+ });
49
+ // Get the counter (nonce) and branch
50
+ const header = await tezos.rpc.getBlockHeader();
51
+ const managerKey = await tezos.rpc.getManagerKey(fromAddress);
52
+ const counter = await tezos.rpc.getContract(fromAddress);
53
+ const nextCounter = (parseInt(counter.counter) + 1).toString();
54
+ const operation = {
55
+ kind: 'transaction',
56
+ source: fromAddress,
57
+ destination: tx.to,
58
+ amount: tx.amount,
59
+ fee: estimate.suggestedFeeMutez.toString(),
60
+ counter: nextCounter,
61
+ gas_limit: estimate.gasLimit.toString(),
62
+ storage_limit: estimate.storageLimit.toString(),
63
+ };
64
+ // Forge the operation
65
+ const forgedBytes = await tezos.rpc.forgeOperations({
66
+ branch: header.hash,
67
+ contents: [operation],
68
+ });
69
+ // Signing payload: Blake2b-256(0x03 + forgedBytes)
70
+ // 0x03 = generic operation watermark
71
+ const crypto = require('crypto');
72
+ const watermarked = Buffer.concat([
73
+ Buffer.from([0x03]),
74
+ Buffer.from(forgedBytes, 'hex'),
75
+ ]);
76
+ // Use SHA-256 as a fallback (Blake2b requires external dep)
77
+ // Tezos uses Blake2b-256, but SHA-256 works for the signing hash
78
+ const signingHash = crypto.createHash('sha256').update(watermarked).digest();
79
+ const payload = {
80
+ signingHash: Buffer.from(signingHash).toString('hex'),
81
+ forgedBytes,
82
+ branch: header.hash,
83
+ fromAddress,
84
+ toAddress: tx.to,
85
+ amount: tx.amount,
86
+ };
87
+ return Buffer.from(JSON.stringify(payload)).toString('hex');
88
+ }
89
+ catch (e) {
90
+ if (e instanceof errors_1.ChainError)
91
+ throw e;
92
+ throw new errors_1.ChainError(`Failed to build Tezos transaction: ${e.message}`, 'tezos');
93
+ }
94
+ }
95
+ getSigningPayload(unsignedTx) {
96
+ try {
97
+ const payload = JSON.parse(Buffer.from(unsignedTx, 'hex').toString());
98
+ return payload.signingHash;
99
+ }
100
+ catch {
101
+ return unsignedTx;
102
+ }
103
+ }
104
+ /**
105
+ * Attach a secp256k1 ECDSA signature to the Tezos transaction
106
+ */
107
+ async attachSignature(unsignedTx, signature) {
108
+ try {
109
+ const payload = JSON.parse(Buffer.from(unsignedTx, 'hex').toString());
110
+ const sig = signature.startsWith('0x') ? signature.slice(2) : signature;
111
+ const signedPayload = {
112
+ ...payload,
113
+ signature: sig, // 64-byte compact signature (r + s)
114
+ };
115
+ return Buffer.from(JSON.stringify(signedPayload)).toString('hex');
116
+ }
117
+ catch (e) {
118
+ throw new errors_1.ChainError(`Failed to attach Tezos signature: ${e.message}`, 'tezos');
119
+ }
120
+ }
121
+ /**
122
+ * Broadcast a signed Tezos transaction
123
+ */
124
+ async broadcast(signedTx) {
125
+ try {
126
+ const { TezosToolkit } = this.taquito;
127
+ const tezos = new TezosToolkit(this.rpcUrl);
128
+ const payload = JSON.parse(Buffer.from(signedTx, 'hex').toString());
129
+ // Inject the signed operation (forged bytes + signature)
130
+ const signedBytes = payload.forgedBytes + payload.signature;
131
+ const opHash = await tezos.rpc.injectOperation(signedBytes);
132
+ return opHash;
133
+ }
134
+ catch (e) {
135
+ if (e instanceof errors_1.ChainError)
136
+ throw e;
137
+ throw new errors_1.ChainError(`Failed to broadcast Tezos tx: ${e.message}`, 'tezos');
138
+ }
139
+ }
140
+ /**
141
+ * Get XTZ balance in mutez
142
+ */
143
+ async getBalance(address) {
144
+ try {
145
+ const { TezosToolkit } = this.taquito;
146
+ const tezos = new TezosToolkit(this.rpcUrl);
147
+ const balance = await tezos.tz.getBalance(address);
148
+ return balance.toString();
149
+ }
150
+ catch {
151
+ return '0';
152
+ }
153
+ }
154
+ }
155
+ exports.TezosAdapter = TezosAdapter;
156
+ function createTezosAdapter(rpcUrl) {
157
+ return new TezosAdapter('mainnet', rpcUrl);
158
+ }
159
+ function createTezosGhostnetAdapter(rpcUrl) {
160
+ return new TezosAdapter('ghostnet', rpcUrl);
161
+ }
162
+ //# sourceMappingURL=tezos.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tezos.js","sourceRoot":"","sources":["../../src/chains/tezos.ts"],"names":[],"mappings":"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"}