@sequence0/sdk 1.1.2 → 2.0.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/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/atomic.d.ts +76 -0
- package/dist/core/atomic.d.ts.map +1 -0
- package/dist/core/atomic.js +39 -0
- package/dist/core/atomic.js.map +1 -0
- package/dist/core/client.d.ts +238 -0
- package/dist/core/client.d.ts.map +1 -1
- package/dist/core/client.js +536 -4
- package/dist/core/client.js.map +1 -1
- package/dist/core/delegation.d.ts +184 -0
- package/dist/core/delegation.d.ts.map +1 -0
- package/dist/core/delegation.js +37 -0
- package/dist/core/delegation.js.map +1 -0
- package/dist/core/programmable.d.ts +66 -0
- package/dist/core/programmable.d.ts.map +1 -0
- package/dist/core/programmable.js +36 -0
- package/dist/core/programmable.js.map +1 -0
- package/dist/core/solvency.d.ts +223 -0
- package/dist/core/solvency.d.ts.map +1 -0
- package/dist/core/solvency.js +267 -0
- package/dist/core/solvency.js.map +1 -0
- package/dist/core/types.d.ts +172 -1
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/universal-account.d.ts +438 -0
- package/dist/core/universal-account.d.ts.map +1 -0
- package/dist/core/universal-account.js +597 -0
- package/dist/core/universal-account.js.map +1 -0
- package/dist/core/witness.d.ts +197 -0
- package/dist/core/witness.d.ts.map +1 -0
- package/dist/core/witness.js +298 -0
- package/dist/core/witness.js.map +1 -0
- package/dist/erc4337/types.js +2 -2
- package/dist/index.d.ts +30 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +91 -4
- package/dist/index.js.map +1 -1
- package/dist/settlement/settlement.d.ts +152 -0
- package/dist/settlement/settlement.d.ts.map +1 -0
- package/dist/settlement/settlement.js +172 -0
- package/dist/settlement/settlement.js.map +1 -0
- package/dist/utils/eip712.js +2 -2
- 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.map +1 -1
- package/dist/utils/validation.js +6 -1
- package/dist/utils/validation.js.map +1 -1
- package/dist/wallet/wallet.d.ts +52 -0
- package/dist/wallet/wallet.d.ts.map +1 -1
- package/dist/wallet/wallet.js +265 -33
- package/dist/wallet/wallet.js.map +1 -1
- package/package.json +35 -1
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TON Chain Adapter
|
|
3
|
+
*
|
|
4
|
+
* Builds TON blockchain transactions using Cell/BoC serialization,
|
|
5
|
+
* attaches Ed25519 signatures from the FROST threshold signing
|
|
6
|
+
* network, and broadcasts via TON Center API.
|
|
7
|
+
*
|
|
8
|
+
* Requires: npm install @ton/ton
|
|
9
|
+
*/
|
|
10
|
+
import { ChainAdapter, TonTransaction } from '../core/types';
|
|
11
|
+
export declare class TonAdapter implements ChainAdapter {
|
|
12
|
+
private rpcUrl;
|
|
13
|
+
private network;
|
|
14
|
+
private tonSdk;
|
|
15
|
+
constructor(network?: 'mainnet' | 'testnet', rpcUrl?: string);
|
|
16
|
+
getRpcUrl(): string;
|
|
17
|
+
/**
|
|
18
|
+
* Build an unsigned TON transaction.
|
|
19
|
+
*
|
|
20
|
+
* TON uses Cell tree serialization. The signing payload is the
|
|
21
|
+
* SHA-256 hash of the external message body cell.
|
|
22
|
+
*/
|
|
23
|
+
buildTransaction(tx: TonTransaction, fromAddress: string): Promise<string>;
|
|
24
|
+
getSigningPayload(unsignedTx: string): string;
|
|
25
|
+
/**
|
|
26
|
+
* Attach an Ed25519 signature to the TON transaction
|
|
27
|
+
*/
|
|
28
|
+
attachSignature(unsignedTx: string, signature: string): Promise<string>;
|
|
29
|
+
/**
|
|
30
|
+
* Broadcast a signed TON transaction
|
|
31
|
+
*/
|
|
32
|
+
broadcast(signedTx: string): Promise<string>;
|
|
33
|
+
/**
|
|
34
|
+
* Get TON balance in nanotons
|
|
35
|
+
*/
|
|
36
|
+
getBalance(address: string): Promise<string>;
|
|
37
|
+
}
|
|
38
|
+
export declare function createTonAdapter(rpcUrl?: string): TonAdapter;
|
|
39
|
+
export declare function createTonTestnetAdapter(rpcUrl?: string): TonAdapter;
|
|
40
|
+
//# sourceMappingURL=ton.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ton.d.ts","sourceRoot":"","sources":["../../src/chains/ton.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAS7D,qBAAa,UAAW,YAAW,YAAY;IAC3C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAM;gBAER,OAAO,GAAE,SAAS,GAAG,SAAqB,EAAE,MAAM,CAAC,EAAE,MAAM;IAMvE,SAAS,IAAI,MAAM;IAInB;;;;;OAKG;IACG,gBAAgB,CAAC,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAuDhF,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;IA4ClD;;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,168 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* TON Chain Adapter
|
|
4
|
+
*
|
|
5
|
+
* Builds TON blockchain transactions using Cell/BoC serialization,
|
|
6
|
+
* attaches Ed25519 signatures from the FROST threshold signing
|
|
7
|
+
* network, and broadcasts via TON Center API.
|
|
8
|
+
*
|
|
9
|
+
* Requires: npm install @ton/ton
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.TonAdapter = void 0;
|
|
13
|
+
exports.createTonAdapter = createTonAdapter;
|
|
14
|
+
exports.createTonTestnetAdapter = createTonTestnetAdapter;
|
|
15
|
+
const errors_1 = require("../utils/errors");
|
|
16
|
+
const optional_deps_1 = require("../utils/optional-deps");
|
|
17
|
+
const DEFAULT_RPCS = {
|
|
18
|
+
'mainnet': 'https://toncenter.com/api/v2',
|
|
19
|
+
'testnet': 'https://testnet.toncenter.com/api/v2',
|
|
20
|
+
};
|
|
21
|
+
class TonAdapter {
|
|
22
|
+
constructor(network = 'mainnet', rpcUrl) {
|
|
23
|
+
this.network = network;
|
|
24
|
+
this.rpcUrl = rpcUrl || DEFAULT_RPCS[network];
|
|
25
|
+
this.tonSdk = (0, optional_deps_1.requireOptionalDependency)('@ton/ton', 'ton');
|
|
26
|
+
}
|
|
27
|
+
getRpcUrl() {
|
|
28
|
+
return this.rpcUrl;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Build an unsigned TON transaction.
|
|
32
|
+
*
|
|
33
|
+
* TON uses Cell tree serialization. The signing payload is the
|
|
34
|
+
* SHA-256 hash of the external message body cell.
|
|
35
|
+
*/
|
|
36
|
+
async buildTransaction(tx, fromAddress) {
|
|
37
|
+
try {
|
|
38
|
+
const { TonClient, WalletContractV4, internal, Address, toNano, beginCell } = this.tonSdk;
|
|
39
|
+
const client = new TonClient({
|
|
40
|
+
endpoint: this.rpcUrl,
|
|
41
|
+
});
|
|
42
|
+
const address = Address.parse(fromAddress);
|
|
43
|
+
// Get seqno (sequence number) from wallet contract
|
|
44
|
+
const contract = client.open(WalletContractV4.create({
|
|
45
|
+
workchain: 0,
|
|
46
|
+
publicKey: Buffer.alloc(32), // placeholder
|
|
47
|
+
}));
|
|
48
|
+
// Build the internal message
|
|
49
|
+
const internalMsg = internal({
|
|
50
|
+
to: Address.parse(tx.to),
|
|
51
|
+
value: BigInt(tx.amount),
|
|
52
|
+
body: tx.payload ? beginCell().storeStringTail(tx.payload).endCell() : undefined,
|
|
53
|
+
bounce: true,
|
|
54
|
+
});
|
|
55
|
+
// Create the transfer message body
|
|
56
|
+
const body = beginCell()
|
|
57
|
+
.storeUint(0, 32) // seqno placeholder
|
|
58
|
+
.storeUint(Math.floor(Date.now() / 1000) + 60, 32) // expiry
|
|
59
|
+
.storeUint(0, 8) // mode: 0 = pay transfer fees separately
|
|
60
|
+
.storeRef(beginCell()
|
|
61
|
+
.store(internalMsg)
|
|
62
|
+
.endCell())
|
|
63
|
+
.endCell();
|
|
64
|
+
const bodyHash = body.hash();
|
|
65
|
+
const payload = {
|
|
66
|
+
signingHash: Buffer.from(bodyHash).toString('hex'),
|
|
67
|
+
body: body.toBoc().toString('hex'),
|
|
68
|
+
fromAddress,
|
|
69
|
+
toAddress: tx.to,
|
|
70
|
+
amount: tx.amount,
|
|
71
|
+
payload: tx.payload || '',
|
|
72
|
+
};
|
|
73
|
+
return Buffer.from(JSON.stringify(payload)).toString('hex');
|
|
74
|
+
}
|
|
75
|
+
catch (e) {
|
|
76
|
+
if (e instanceof errors_1.ChainError)
|
|
77
|
+
throw e;
|
|
78
|
+
throw new errors_1.ChainError(`Failed to build TON transaction: ${e.message}`, 'ton');
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
getSigningPayload(unsignedTx) {
|
|
82
|
+
try {
|
|
83
|
+
const payload = JSON.parse(Buffer.from(unsignedTx, 'hex').toString());
|
|
84
|
+
return payload.signingHash;
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
return unsignedTx;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Attach an Ed25519 signature to the TON transaction
|
|
92
|
+
*/
|
|
93
|
+
async attachSignature(unsignedTx, signature) {
|
|
94
|
+
try {
|
|
95
|
+
const payload = JSON.parse(Buffer.from(unsignedTx, 'hex').toString());
|
|
96
|
+
const sig = signature.startsWith('0x') ? signature.slice(2) : signature;
|
|
97
|
+
const signedPayload = {
|
|
98
|
+
...payload,
|
|
99
|
+
signature: sig,
|
|
100
|
+
};
|
|
101
|
+
return Buffer.from(JSON.stringify(signedPayload)).toString('hex');
|
|
102
|
+
}
|
|
103
|
+
catch (e) {
|
|
104
|
+
throw new errors_1.ChainError(`Failed to attach TON signature: ${e.message}`, 'ton');
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Broadcast a signed TON transaction
|
|
109
|
+
*/
|
|
110
|
+
async broadcast(signedTx) {
|
|
111
|
+
try {
|
|
112
|
+
const { TonClient, Cell, beginCell } = this.tonSdk;
|
|
113
|
+
const payload = JSON.parse(Buffer.from(signedTx, 'hex').toString());
|
|
114
|
+
const client = new TonClient({ endpoint: this.rpcUrl });
|
|
115
|
+
// Reconstruct the signed external message
|
|
116
|
+
const bodyBoc = Buffer.from(payload.body, 'hex');
|
|
117
|
+
const body = Cell.fromBoc(bodyBoc)[0];
|
|
118
|
+
const sigBytes = Buffer.from(payload.signature, 'hex');
|
|
119
|
+
// Prepend signature to message body
|
|
120
|
+
const signedBody = beginCell()
|
|
121
|
+
.storeBuffer(sigBytes)
|
|
122
|
+
.storeSlice(body.beginParse())
|
|
123
|
+
.endCell();
|
|
124
|
+
// Create external message
|
|
125
|
+
const ext = beginCell()
|
|
126
|
+
.storeUint(0b10, 2) // ext_in_msg_info
|
|
127
|
+
.storeUint(0, 2) // src: addr_none
|
|
128
|
+
.storeAddress(null) // dest: will be set
|
|
129
|
+
.storeCoins(0) // import_fee
|
|
130
|
+
.storeBit(false) // state_init: none
|
|
131
|
+
.storeBit(true) // body: in reference
|
|
132
|
+
.storeRef(signedBody)
|
|
133
|
+
.endCell();
|
|
134
|
+
await client.sendFile(ext.toBoc());
|
|
135
|
+
// TON doesn't return a hash on send — compute it from the BoC
|
|
136
|
+
const crypto = require('crypto');
|
|
137
|
+
const hash = crypto.createHash('sha256').update(ext.toBoc()).digest('hex');
|
|
138
|
+
return hash;
|
|
139
|
+
}
|
|
140
|
+
catch (e) {
|
|
141
|
+
if (e instanceof errors_1.ChainError)
|
|
142
|
+
throw e;
|
|
143
|
+
throw new errors_1.ChainError(`Failed to broadcast TON tx: ${e.message}`, 'ton');
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Get TON balance in nanotons
|
|
148
|
+
*/
|
|
149
|
+
async getBalance(address) {
|
|
150
|
+
try {
|
|
151
|
+
const { TonClient, Address } = this.tonSdk;
|
|
152
|
+
const client = new TonClient({ endpoint: this.rpcUrl });
|
|
153
|
+
const balance = await client.getBalance(Address.parse(address));
|
|
154
|
+
return balance.toString();
|
|
155
|
+
}
|
|
156
|
+
catch {
|
|
157
|
+
return '0';
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
exports.TonAdapter = TonAdapter;
|
|
162
|
+
function createTonAdapter(rpcUrl) {
|
|
163
|
+
return new TonAdapter('mainnet', rpcUrl);
|
|
164
|
+
}
|
|
165
|
+
function createTonTestnetAdapter(rpcUrl) {
|
|
166
|
+
return new TonAdapter('testnet', rpcUrl);
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=ton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ton.js","sourceRoot":"","sources":["../../src/chains/ton.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TRON Chain Adapter
|
|
3
|
+
*
|
|
4
|
+
* Builds TRON transactions using Protobuf serialization (NOT EVM RLP),
|
|
5
|
+
* attaches secp256k1 ECDSA signatures from the FROST threshold signing
|
|
6
|
+
* network, and broadcasts via TRON full node HTTP API.
|
|
7
|
+
*
|
|
8
|
+
* Requires: npm install tronweb
|
|
9
|
+
*/
|
|
10
|
+
import { ChainAdapter, TronTransaction } from '../core/types';
|
|
11
|
+
export declare class TronAdapter implements ChainAdapter {
|
|
12
|
+
private rpcUrl;
|
|
13
|
+
private network;
|
|
14
|
+
private tronWeb;
|
|
15
|
+
constructor(network?: 'mainnet' | 'shasta' | 'nile', rpcUrl?: string);
|
|
16
|
+
getRpcUrl(): string;
|
|
17
|
+
/**
|
|
18
|
+
* Build an unsigned TRON transaction.
|
|
19
|
+
*
|
|
20
|
+
* TRON uses Protobuf for TX serialization. The signing payload
|
|
21
|
+
* is SHA-256 of the raw transaction data (returned as txID by TronWeb).
|
|
22
|
+
*/
|
|
23
|
+
buildTransaction(tx: TronTransaction, fromAddress: string): Promise<string>;
|
|
24
|
+
getSigningPayload(unsignedTx: string): string;
|
|
25
|
+
/**
|
|
26
|
+
* Attach a secp256k1 ECDSA signature to the TRON transaction.
|
|
27
|
+
* TRON expects 65-byte signatures (r + s + v), same format as EVM.
|
|
28
|
+
*/
|
|
29
|
+
attachSignature(unsignedTx: string, signature: string): Promise<string>;
|
|
30
|
+
/**
|
|
31
|
+
* Broadcast a signed TRON transaction
|
|
32
|
+
*/
|
|
33
|
+
broadcast(signedTx: string): Promise<string>;
|
|
34
|
+
/**
|
|
35
|
+
* Get TRX balance in SUN
|
|
36
|
+
*/
|
|
37
|
+
getBalance(address: string): Promise<string>;
|
|
38
|
+
}
|
|
39
|
+
export declare function createTronAdapter(rpcUrl?: string): TronAdapter;
|
|
40
|
+
export declare function createTronShastaAdapter(rpcUrl?: string): TronAdapter;
|
|
41
|
+
//# sourceMappingURL=tron.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tron.d.ts","sourceRoot":"","sources":["../../src/chains/tron.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAU9D,qBAAa,WAAY,YAAW,YAAY;IAC5C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAM;gBAET,OAAO,GAAE,SAAS,GAAG,QAAQ,GAAG,MAAkB,EAAE,MAAM,CAAC,EAAE,MAAM;IAO/E,SAAS,IAAI,MAAM;IAInB;;;;;OAKG;IACG,gBAAgB,CAAC,EAAE,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAwBjF,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAS7C;;;OAGG;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;IA2BlD;;OAEG;IACG,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAQrD;AAED,wBAAgB,iBAAiB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,WAAW,CAE9D;AAED,wBAAgB,uBAAuB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,WAAW,CAEpE"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* TRON Chain Adapter
|
|
4
|
+
*
|
|
5
|
+
* Builds TRON transactions using Protobuf serialization (NOT EVM RLP),
|
|
6
|
+
* attaches secp256k1 ECDSA signatures from the FROST threshold signing
|
|
7
|
+
* network, and broadcasts via TRON full node HTTP API.
|
|
8
|
+
*
|
|
9
|
+
* Requires: npm install tronweb
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.TronAdapter = void 0;
|
|
13
|
+
exports.createTronAdapter = createTronAdapter;
|
|
14
|
+
exports.createTronShastaAdapter = createTronShastaAdapter;
|
|
15
|
+
const errors_1 = require("../utils/errors");
|
|
16
|
+
const optional_deps_1 = require("../utils/optional-deps");
|
|
17
|
+
const DEFAULT_RPCS = {
|
|
18
|
+
'mainnet': 'https://api.trongrid.io',
|
|
19
|
+
'shasta': 'https://api.shasta.trongrid.io',
|
|
20
|
+
'nile': 'https://nile.trongrid.io',
|
|
21
|
+
};
|
|
22
|
+
class TronAdapter {
|
|
23
|
+
constructor(network = 'mainnet', rpcUrl) {
|
|
24
|
+
this.network = network;
|
|
25
|
+
this.rpcUrl = rpcUrl || DEFAULT_RPCS[network];
|
|
26
|
+
const TronWeb = (0, optional_deps_1.requireOptionalDependency)('tronweb', 'tron');
|
|
27
|
+
this.tronWeb = new TronWeb({ fullHost: this.rpcUrl });
|
|
28
|
+
}
|
|
29
|
+
getRpcUrl() {
|
|
30
|
+
return this.rpcUrl;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Build an unsigned TRON transaction.
|
|
34
|
+
*
|
|
35
|
+
* TRON uses Protobuf for TX serialization. The signing payload
|
|
36
|
+
* is SHA-256 of the raw transaction data (returned as txID by TronWeb).
|
|
37
|
+
*/
|
|
38
|
+
async buildTransaction(tx, fromAddress) {
|
|
39
|
+
try {
|
|
40
|
+
const unsignedTx = await this.tronWeb.transactionBuilder.sendTrx(tx.to, tx.amount, fromAddress);
|
|
41
|
+
// txID is already SHA-256(rawData) — the signing hash
|
|
42
|
+
const payload = {
|
|
43
|
+
signingHash: unsignedTx.txID,
|
|
44
|
+
rawData: unsignedTx.raw_data,
|
|
45
|
+
rawDataHex: unsignedTx.raw_data_hex,
|
|
46
|
+
};
|
|
47
|
+
return Buffer.from(JSON.stringify(payload)).toString('hex');
|
|
48
|
+
}
|
|
49
|
+
catch (e) {
|
|
50
|
+
throw new errors_1.ChainError(`Failed to build TRON transaction: ${e.message}`, 'tron');
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
getSigningPayload(unsignedTx) {
|
|
54
|
+
try {
|
|
55
|
+
const payload = JSON.parse(Buffer.from(unsignedTx, 'hex').toString());
|
|
56
|
+
return payload.signingHash;
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
return unsignedTx;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Attach a secp256k1 ECDSA signature to the TRON transaction.
|
|
64
|
+
* TRON expects 65-byte signatures (r + s + v), same format as EVM.
|
|
65
|
+
*/
|
|
66
|
+
async attachSignature(unsignedTx, signature) {
|
|
67
|
+
try {
|
|
68
|
+
const payload = JSON.parse(Buffer.from(unsignedTx, 'hex').toString());
|
|
69
|
+
const sig = signature.startsWith('0x') ? signature.slice(2) : signature;
|
|
70
|
+
const signedPayload = {
|
|
71
|
+
...payload,
|
|
72
|
+
signature: [sig],
|
|
73
|
+
};
|
|
74
|
+
return Buffer.from(JSON.stringify(signedPayload)).toString('hex');
|
|
75
|
+
}
|
|
76
|
+
catch (e) {
|
|
77
|
+
throw new errors_1.ChainError(`Failed to attach TRON signature: ${e.message}`, 'tron');
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Broadcast a signed TRON transaction
|
|
82
|
+
*/
|
|
83
|
+
async broadcast(signedTx) {
|
|
84
|
+
try {
|
|
85
|
+
const payload = JSON.parse(Buffer.from(signedTx, 'hex').toString());
|
|
86
|
+
const signedTransaction = {
|
|
87
|
+
txID: payload.signingHash,
|
|
88
|
+
raw_data: payload.rawData,
|
|
89
|
+
raw_data_hex: payload.rawDataHex,
|
|
90
|
+
signature: payload.signature,
|
|
91
|
+
};
|
|
92
|
+
const result = await this.tronWeb.trx.sendRawTransaction(signedTransaction);
|
|
93
|
+
if (!result.result && !result.txid) {
|
|
94
|
+
throw new Error(result.message || 'Broadcast failed');
|
|
95
|
+
}
|
|
96
|
+
return result.txid || payload.signingHash;
|
|
97
|
+
}
|
|
98
|
+
catch (e) {
|
|
99
|
+
if (e instanceof errors_1.ChainError)
|
|
100
|
+
throw e;
|
|
101
|
+
throw new errors_1.ChainError(`Failed to broadcast TRON tx: ${e.message}`, 'tron');
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Get TRX balance in SUN
|
|
106
|
+
*/
|
|
107
|
+
async getBalance(address) {
|
|
108
|
+
try {
|
|
109
|
+
const balance = await this.tronWeb.trx.getBalance(address);
|
|
110
|
+
return balance.toString();
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
return '0';
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
exports.TronAdapter = TronAdapter;
|
|
118
|
+
function createTronAdapter(rpcUrl) {
|
|
119
|
+
return new TronAdapter('mainnet', rpcUrl);
|
|
120
|
+
}
|
|
121
|
+
function createTronShastaAdapter(rpcUrl) {
|
|
122
|
+
return new TronAdapter('shasta', rpcUrl);
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=tron.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tron.js","sourceRoot":"","sources":["../../src/chains/tron.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* K2: Cross-Chain Atomic Composability -- all-or-nothing signing across chains
|
|
3
|
+
*
|
|
4
|
+
* Submit a batch of signing operations spanning multiple wallets and chains.
|
|
5
|
+
* Either all operations succeed and produce signatures, or the entire batch
|
|
6
|
+
* is aborted atomically. This is essential for cross-chain arbitrage, bridge
|
|
7
|
+
* transfers, and multi-leg DeFi strategies where partial execution would
|
|
8
|
+
* leave funds stranded.
|
|
9
|
+
*
|
|
10
|
+
* The agent network coordinates via a 2-phase commit protocol:
|
|
11
|
+
* Phase 1: All participating agents lock the wallets and produce partial sigs
|
|
12
|
+
* Phase 2: Partial sigs are aggregated; if any operation fails, all are rolled back
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```typescript
|
|
16
|
+
* import { Sequence0 } from '@sequence0/sdk';
|
|
17
|
+
*
|
|
18
|
+
* const s0 = new Sequence0({ network: 'mainnet', ownerPrivateKey: '0x...' });
|
|
19
|
+
*
|
|
20
|
+
* const result = await s0.signAtomic({
|
|
21
|
+
* operations: [
|
|
22
|
+
* { walletId: 'eth-wallet', chain: 'ethereum', message: '0xabc...' },
|
|
23
|
+
* { walletId: 'arb-wallet', chain: 'arbitrum', message: '0xdef...' },
|
|
24
|
+
* ],
|
|
25
|
+
* deadlineBlocks: 50,
|
|
26
|
+
* timeout: 60000,
|
|
27
|
+
* });
|
|
28
|
+
*
|
|
29
|
+
* if (result.status === 'committed') {
|
|
30
|
+
* // All signatures available
|
|
31
|
+
* for (const [reqId, sig] of result.signatures) {
|
|
32
|
+
* console.log(`Request ${reqId}: ${sig}`);
|
|
33
|
+
* }
|
|
34
|
+
* }
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
import { Chain } from './types';
|
|
38
|
+
export interface AtomicOperation {
|
|
39
|
+
/** Wallet ID to sign with */
|
|
40
|
+
walletId: string;
|
|
41
|
+
/** Target blockchain */
|
|
42
|
+
chain: Chain;
|
|
43
|
+
/** Hex-encoded message to sign */
|
|
44
|
+
message: string;
|
|
45
|
+
}
|
|
46
|
+
export interface AtomicSignOptions {
|
|
47
|
+
/** Array of operations to execute atomically */
|
|
48
|
+
operations: AtomicOperation[];
|
|
49
|
+
/** Max blocks to wait for completion (default: 50) */
|
|
50
|
+
deadlineBlocks?: number;
|
|
51
|
+
/** Polling timeout in ms (default: 60000) */
|
|
52
|
+
timeout?: number;
|
|
53
|
+
}
|
|
54
|
+
export interface AtomicSignResult {
|
|
55
|
+
/** Unique manifest identifier for this atomic batch */
|
|
56
|
+
manifestId: string;
|
|
57
|
+
/** Final status: all succeeded ('committed') or all rolled back ('aborted') */
|
|
58
|
+
status: 'committed' | 'aborted';
|
|
59
|
+
/** Map of requestId to hex-encoded signature (only populated if committed) */
|
|
60
|
+
signatures: Map<string, string>;
|
|
61
|
+
/** Error message explaining why the batch was aborted (only if aborted) */
|
|
62
|
+
error?: string;
|
|
63
|
+
}
|
|
64
|
+
export interface AtomicOperationResult {
|
|
65
|
+
/** Request ID for this individual operation */
|
|
66
|
+
requestId: string;
|
|
67
|
+
/** Wallet ID that signed */
|
|
68
|
+
walletId: string;
|
|
69
|
+
/** Chain this operation targeted */
|
|
70
|
+
chain: Chain;
|
|
71
|
+
/** Hex-encoded signature (only if this operation succeeded) */
|
|
72
|
+
signature?: string;
|
|
73
|
+
/** Error message (only if this operation failed, triggering abort) */
|
|
74
|
+
error?: string;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=atomic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"atomic.d.ts","sourceRoot":"","sources":["../../src/core/atomic.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAIhC,MAAM,WAAW,eAAe;IAC5B,6BAA6B;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,wBAAwB;IACxB,KAAK,EAAE,KAAK,CAAC;IACb,kCAAkC;IAClC,OAAO,EAAE,MAAM,CAAC;CACnB;AAID,MAAM,WAAW,iBAAiB;IAC9B,gDAAgD;IAChD,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,sDAAsD;IACtD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,6CAA6C;IAC7C,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAID,MAAM,WAAW,gBAAgB;IAC7B,uDAAuD;IACvD,UAAU,EAAE,MAAM,CAAC;IACnB,+EAA+E;IAC/E,MAAM,EAAE,WAAW,GAAG,SAAS,CAAC;IAChC,8EAA8E;IAC9E,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,2EAA2E;IAC3E,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAID,MAAM,WAAW,qBAAqB;IAClC,+CAA+C;IAC/C,SAAS,EAAE,MAAM,CAAC;IAClB,4BAA4B;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,oCAAoC;IACpC,KAAK,EAAE,KAAK,CAAC;IACb,+DAA+D;IAC/D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sEAAsE;IACtE,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* K2: Cross-Chain Atomic Composability -- all-or-nothing signing across chains
|
|
4
|
+
*
|
|
5
|
+
* Submit a batch of signing operations spanning multiple wallets and chains.
|
|
6
|
+
* Either all operations succeed and produce signatures, or the entire batch
|
|
7
|
+
* is aborted atomically. This is essential for cross-chain arbitrage, bridge
|
|
8
|
+
* transfers, and multi-leg DeFi strategies where partial execution would
|
|
9
|
+
* leave funds stranded.
|
|
10
|
+
*
|
|
11
|
+
* The agent network coordinates via a 2-phase commit protocol:
|
|
12
|
+
* Phase 1: All participating agents lock the wallets and produce partial sigs
|
|
13
|
+
* Phase 2: Partial sigs are aggregated; if any operation fails, all are rolled back
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* import { Sequence0 } from '@sequence0/sdk';
|
|
18
|
+
*
|
|
19
|
+
* const s0 = new Sequence0({ network: 'mainnet', ownerPrivateKey: '0x...' });
|
|
20
|
+
*
|
|
21
|
+
* const result = await s0.signAtomic({
|
|
22
|
+
* operations: [
|
|
23
|
+
* { walletId: 'eth-wallet', chain: 'ethereum', message: '0xabc...' },
|
|
24
|
+
* { walletId: 'arb-wallet', chain: 'arbitrum', message: '0xdef...' },
|
|
25
|
+
* ],
|
|
26
|
+
* deadlineBlocks: 50,
|
|
27
|
+
* timeout: 60000,
|
|
28
|
+
* });
|
|
29
|
+
*
|
|
30
|
+
* if (result.status === 'committed') {
|
|
31
|
+
* // All signatures available
|
|
32
|
+
* for (const [reqId, sig] of result.signatures) {
|
|
33
|
+
* console.log(`Request ${reqId}: ${sig}`);
|
|
34
|
+
* }
|
|
35
|
+
* }
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
//# sourceMappingURL=atomic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"atomic.js","sourceRoot":"","sources":["../../src/core/atomic.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG"}
|