@sequence0/sdk 1.1.0 → 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.
- package/README.md +1 -1
- package/dist/chains/algorand.d.ts +44 -0
- package/dist/chains/algorand.d.ts.map +1 -0
- package/dist/chains/algorand.js +148 -0
- package/dist/chains/algorand.js.map +1 -0
- package/dist/chains/aptos.d.ts +39 -0
- package/dist/chains/aptos.d.ts.map +1 -0
- package/dist/chains/aptos.js +168 -0
- package/dist/chains/aptos.js.map +1 -0
- package/dist/chains/bitcoin-taproot.d.ts +77 -14
- package/dist/chains/bitcoin-taproot.d.ts.map +1 -1
- package/dist/chains/bitcoin-taproot.js +324 -65
- package/dist/chains/bitcoin-taproot.js.map +1 -1
- package/dist/chains/bitcoin.d.ts +12 -7
- package/dist/chains/bitcoin.d.ts.map +1 -1
- package/dist/chains/bitcoin.js +14 -9
- package/dist/chains/bitcoin.js.map +1 -1
- package/dist/chains/cardano.d.ts +42 -0
- package/dist/chains/cardano.d.ts.map +1 -0
- package/dist/chains/cardano.js +188 -0
- package/dist/chains/cardano.js.map +1 -0
- package/dist/chains/cosmos.d.ts +42 -0
- package/dist/chains/cosmos.d.ts.map +1 -0
- package/dist/chains/cosmos.js +216 -0
- package/dist/chains/cosmos.js.map +1 -0
- package/dist/chains/dogecoin-litecoin.d.ts +57 -0
- package/dist/chains/dogecoin-litecoin.d.ts.map +1 -0
- package/dist/chains/dogecoin-litecoin.js +521 -0
- package/dist/chains/dogecoin-litecoin.js.map +1 -0
- package/dist/chains/ethereum.d.ts.map +1 -1
- package/dist/chains/ethereum.js +16 -0
- package/dist/chains/ethereum.js.map +1 -1
- package/dist/chains/hedera.d.ts +113 -0
- package/dist/chains/hedera.d.ts.map +1 -0
- package/dist/chains/hedera.js +302 -0
- package/dist/chains/hedera.js.map +1 -0
- package/dist/chains/icp.d.ts +95 -0
- package/dist/chains/icp.d.ts.map +1 -0
- package/dist/chains/icp.js +520 -0
- package/dist/chains/icp.js.map +1 -0
- package/dist/chains/kaspa.d.ts +152 -0
- package/dist/chains/kaspa.d.ts.map +1 -0
- package/dist/chains/kaspa.js +790 -0
- package/dist/chains/kaspa.js.map +1 -0
- package/dist/chains/multiversx.d.ts +143 -0
- package/dist/chains/multiversx.d.ts.map +1 -0
- package/dist/chains/multiversx.js +524 -0
- package/dist/chains/multiversx.js.map +1 -0
- package/dist/chains/near.d.ts +40 -0
- package/dist/chains/near.d.ts.map +1 -0
- package/dist/chains/near.js +170 -0
- package/dist/chains/near.js.map +1 -0
- package/dist/chains/polkadot.d.ts +43 -0
- package/dist/chains/polkadot.d.ts.map +1 -0
- package/dist/chains/polkadot.js +179 -0
- package/dist/chains/polkadot.js.map +1 -0
- package/dist/chains/ripple.d.ts +41 -0
- package/dist/chains/ripple.d.ts.map +1 -0
- package/dist/chains/ripple.js +190 -0
- package/dist/chains/ripple.js.map +1 -0
- package/dist/chains/stellar.d.ts +40 -0
- package/dist/chains/stellar.d.ts.map +1 -0
- package/dist/chains/stellar.js +156 -0
- package/dist/chains/stellar.js.map +1 -0
- package/dist/chains/sui.d.ts +44 -0
- package/dist/chains/sui.d.ts.map +1 -0
- package/dist/chains/sui.js +157 -0
- package/dist/chains/sui.js.map +1 -0
- package/dist/chains/tezos.d.ts +43 -0
- package/dist/chains/tezos.d.ts.map +1 -0
- package/dist/chains/tezos.js +162 -0
- package/dist/chains/tezos.js.map +1 -0
- package/dist/chains/ton.d.ts +40 -0
- package/dist/chains/ton.d.ts.map +1 -0
- package/dist/chains/ton.js +168 -0
- package/dist/chains/ton.js.map +1 -0
- package/dist/chains/tron.d.ts +41 -0
- package/dist/chains/tron.d.ts.map +1 -0
- package/dist/chains/tron.js +124 -0
- package/dist/chains/tron.js.map +1 -0
- package/dist/core/client.d.ts +4 -5
- package/dist/core/client.d.ts.map +1 -1
- package/dist/core/client.js +54 -29
- package/dist/core/client.js.map +1 -1
- package/dist/core/types.d.ts +161 -1
- package/dist/core/types.d.ts.map +1 -1
- package/dist/erc4337/types.js +2 -2
- package/dist/index.d.ts +21 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +85 -4
- package/dist/index.js.map +1 -1
- package/dist/utils/discovery.d.ts.map +1 -1
- package/dist/utils/discovery.js +56 -1
- package/dist/utils/discovery.js.map +1 -1
- package/dist/utils/eip712.d.ts +36 -0
- package/dist/utils/eip712.d.ts.map +1 -0
- package/dist/utils/eip712.js +80 -0
- package/dist/utils/eip712.js.map +1 -0
- package/dist/utils/fee.d.ts +2 -2
- package/dist/utils/fee.js +2 -2
- package/dist/utils/optional-deps.d.ts +9 -0
- package/dist/utils/optional-deps.d.ts.map +1 -0
- package/dist/utils/optional-deps.js +21 -0
- package/dist/utils/optional-deps.js.map +1 -0
- package/dist/utils/validation.d.ts +8 -0
- package/dist/utils/validation.d.ts.map +1 -1
- package/dist/utils/validation.js +24 -1
- package/dist/utils/validation.js.map +1 -1
- package/dist/utils/websocket.js +1 -1
- package/dist/utils/websocket.js.map +1 -1
- package/dist/wallet/wallet.d.ts +16 -2
- package/dist/wallet/wallet.d.ts.map +1 -1
- package/dist/wallet/wallet.js +131 -58
- package/dist/wallet/wallet.js.map +1 -1
- package/package.json +35 -1
package/README.md
CHANGED
|
@@ -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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"}
|
|
@@ -7,10 +7,15 @@
|
|
|
7
7
|
* FROST-secp256k1 produces BIP-340 compatible Schnorr signatures that are
|
|
8
8
|
* NATIVE to Taproot key-path spends -- no signature format conversion needed.
|
|
9
9
|
*
|
|
10
|
-
*
|
|
11
|
-
* -
|
|
12
|
-
*
|
|
13
|
-
* -
|
|
10
|
+
* Key features:
|
|
11
|
+
* - **Real secp256k1 EC point arithmetic** for BIP-341 key tweaking
|
|
12
|
+
* (lift_x, point_add, scalar_mul -- no external crypto dependencies)
|
|
13
|
+
* - **Per-input sighash computation** for multi-input transactions
|
|
14
|
+
* (each input gets its own BIP-341 sighash for independent FROST signing)
|
|
15
|
+
* - **Full transaction serialization** with proper segwit witness structure
|
|
16
|
+
* - **Broadcast via Mempool.space API** (mainnet, testnet, signet, regtest)
|
|
17
|
+
*
|
|
18
|
+
* No external dependencies beyond Node.js crypto (SHA-256).
|
|
14
19
|
*
|
|
15
20
|
* @example
|
|
16
21
|
* ```typescript
|
|
@@ -66,13 +71,32 @@ export interface TaprootAddressInfo {
|
|
|
66
71
|
outputKey: string;
|
|
67
72
|
/** ScriptPubKey (hex-encoded, OP_1 <32-byte output key>) */
|
|
68
73
|
scriptPubkey: string;
|
|
74
|
+
/**
|
|
75
|
+
* Taproot tweak scalar (64-char hex).
|
|
76
|
+
* This must be applied to the FROST group private key during signing:
|
|
77
|
+
* tweaked_privkey = privkey + tweak (mod n)
|
|
78
|
+
* The FROST signing request should include this tweak so agents can
|
|
79
|
+
* adjust their secret shares before producing partial signatures.
|
|
80
|
+
*/
|
|
81
|
+
tapTweak: string;
|
|
69
82
|
/** Network */
|
|
70
83
|
network: BitcoinNetwork;
|
|
71
84
|
}
|
|
72
85
|
/** Unsigned Taproot transaction ready for FROST signing */
|
|
73
86
|
export interface UnsignedTaprootTx {
|
|
74
|
-
/**
|
|
87
|
+
/**
|
|
88
|
+
* Sighash for the first input (32 bytes, hex-encoded).
|
|
89
|
+
* For single-input transactions this is all you need.
|
|
90
|
+
* For multi-input transactions, use `sighashes` instead.
|
|
91
|
+
*/
|
|
75
92
|
sighash: string;
|
|
93
|
+
/**
|
|
94
|
+
* Per-input sighashes (32 bytes each, hex-encoded).
|
|
95
|
+
* Each input has its own BIP-341 sighash that must be independently
|
|
96
|
+
* signed via FROST. The same key signs all inputs, but each sighash
|
|
97
|
+
* includes the input index and produces a different message.
|
|
98
|
+
*/
|
|
99
|
+
sighashes: string[];
|
|
76
100
|
/** Serialized unsigned transaction (hex-encoded) */
|
|
77
101
|
rawUnsigned: string;
|
|
78
102
|
/** Transaction inputs */
|
|
@@ -145,6 +169,21 @@ export declare class BitcoinTaprootAdapter implements ChainAdapter {
|
|
|
145
169
|
* @returns TaprootAddressInfo with address, keys, and scriptPubkey
|
|
146
170
|
*/
|
|
147
171
|
deriveAddress(groupPubkeyHex: string): TaprootAddressInfo;
|
|
172
|
+
/**
|
|
173
|
+
* Compute the Taproot tweak for a FROST group public key.
|
|
174
|
+
*
|
|
175
|
+
* The FROST signing protocol must apply this tweak to the group private key
|
|
176
|
+
* before signing. This ensures the Schnorr signature verifies against the
|
|
177
|
+
* tweaked output key (which is what the scriptPubKey commits to).
|
|
178
|
+
*
|
|
179
|
+
* The tweak scalar t = hash_TapTweak(internal_key) is returned as hex.
|
|
180
|
+
* During FROST signing, the group's secret share is tweaked:
|
|
181
|
+
* tweaked_share = share + t (mod n)
|
|
182
|
+
*
|
|
183
|
+
* @param groupPubkeyHex - Hex-encoded FROST group verifying key (33 or 32 bytes)
|
|
184
|
+
* @returns Hex-encoded 32-byte tweak scalar
|
|
185
|
+
*/
|
|
186
|
+
getTapTweak(groupPubkeyHex: string): string;
|
|
148
187
|
/**
|
|
149
188
|
* Fetch unspent transaction outputs (UTXOs) for a Taproot address.
|
|
150
189
|
*
|
|
@@ -212,24 +251,36 @@ export declare class BitcoinTaprootAdapter implements ChainAdapter {
|
|
|
212
251
|
*/
|
|
213
252
|
buildUnsignedTx(inputs: TaprootTxInput[], outputs: TaprootTxOutput[], feeRate: number): UnsignedTaprootTx;
|
|
214
253
|
/**
|
|
215
|
-
* Attach
|
|
254
|
+
* Attach FROST Schnorr signature(s) to an unsigned Taproot transaction.
|
|
255
|
+
*
|
|
256
|
+
* The FROST signing protocol produces 64-byte BIP-340 Schnorr signatures
|
|
257
|
+
* (R_x || s) that are directly used as Taproot witness for key-path spends.
|
|
216
258
|
*
|
|
217
|
-
*
|
|
218
|
-
*
|
|
259
|
+
* For single-input transactions: pass a single 128-char hex signature.
|
|
260
|
+
* For multi-input transactions: pass signatures separated by commas, or
|
|
261
|
+
* a single signature that will be applied to all inputs (if all inputs
|
|
262
|
+
* share the same signing key and the caller signs each sighash separately).
|
|
219
263
|
*
|
|
220
264
|
* @param unsignedTxHex - Hex-encoded unsigned transaction (from buildTransaction)
|
|
221
|
-
* @param signatureHex - 64-byte FROST Schnorr signature
|
|
265
|
+
* @param signatureHex - 64-byte FROST Schnorr signature(s). For multi-input
|
|
266
|
+
* transactions, separate per-input signatures with commas.
|
|
222
267
|
* @returns Hex-encoded signed transaction ready for broadcast
|
|
223
268
|
*/
|
|
224
269
|
attachSignature(unsignedTxHex: string, signatureHex: string): Promise<string>;
|
|
225
270
|
/**
|
|
226
|
-
* Attach
|
|
271
|
+
* Attach FROST Schnorr signature(s) with full output (returns structured data).
|
|
227
272
|
*
|
|
228
273
|
* @param unsignedTx - The UnsignedTaprootTx from buildUnsignedTx
|
|
229
|
-
* @param signatureHex - 64-byte FROST Schnorr signature (hex
|
|
274
|
+
* @param signatureHex - 64-byte FROST Schnorr signature(s) (hex). For multi-input
|
|
275
|
+
* transactions, pass an array of per-input signatures or a comma-separated string.
|
|
230
276
|
* @returns SignedTaprootTx with raw_signed, txid, and vsize
|
|
231
277
|
*/
|
|
232
|
-
attachSignatureToTx(unsignedTx: UnsignedTaprootTx, signatureHex: string): SignedTaprootTx;
|
|
278
|
+
attachSignatureToTx(unsignedTx: UnsignedTaprootTx, signatureHex: string | string[]): SignedTaprootTx;
|
|
279
|
+
/**
|
|
280
|
+
* Parse signature hex into per-input signatures.
|
|
281
|
+
* Supports: single sig (applied to all inputs), comma-separated, or concatenated.
|
|
282
|
+
*/
|
|
283
|
+
private parseSignatures;
|
|
233
284
|
/**
|
|
234
285
|
* Broadcast a signed Taproot transaction to the Bitcoin network.
|
|
235
286
|
*
|
|
@@ -276,7 +327,10 @@ export declare class BitcoinTaprootAdapter implements ChainAdapter {
|
|
|
276
327
|
*/
|
|
277
328
|
private serializeUnsignedTx;
|
|
278
329
|
/**
|
|
279
|
-
* Serialize a signed Taproot transaction.
|
|
330
|
+
* Serialize a signed Taproot transaction with per-input signatures.
|
|
331
|
+
*
|
|
332
|
+
* @param unsignedTx - The unsigned transaction data
|
|
333
|
+
* @param signatures - Array of per-input signature hex strings (128 chars each)
|
|
280
334
|
*/
|
|
281
335
|
private serializeSignedTx;
|
|
282
336
|
/**
|
|
@@ -295,7 +349,16 @@ export declare class BitcoinTaprootAdapter implements ChainAdapter {
|
|
|
295
349
|
* - Spend type (0x00 for key-path, no annex)
|
|
296
350
|
* - Input index (4 bytes LE)
|
|
297
351
|
*/
|
|
298
|
-
|
|
352
|
+
/**
|
|
353
|
+
* Compute all per-input BIP-341 sighashes for the transaction.
|
|
354
|
+
*
|
|
355
|
+
* Each input has its own sighash because the input_index field differs.
|
|
356
|
+
* The common transaction-level hashes (prevouts, amounts, scripts, sequences,
|
|
357
|
+
* outputs) are precomputed once and reused across all inputs.
|
|
358
|
+
*
|
|
359
|
+
* @returns Array of hex-encoded sighashes, one per input
|
|
360
|
+
*/
|
|
361
|
+
private computeAllSighashes;
|
|
299
362
|
}
|
|
300
363
|
/**
|
|
301
364
|
* Create a Bitcoin Taproot adapter for mainnet.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bitcoin-taproot.d.ts","sourceRoot":"","sources":["../../src/chains/bitcoin-taproot.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"bitcoin-taproot.d.ts","sourceRoot":"","sources":["../../src/chains/bitcoin-taproot.ts"],"names":[],"mappings":"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"}
|