@meshconnect/uwc-injected-connector 0.14.1 → 0.14.2-snapshot.dd1e191
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/dist/injected-connector.d.ts +24 -1
- package/dist/injected-connector.d.ts.map +1 -1
- package/dist/injected-connector.js +105 -4
- package/dist/injected-connector.js.map +1 -1
- package/dist/services/tron/tron-transaction-builder.d.ts.map +1 -1
- package/dist/services/tron/tron-transaction-builder.js +25 -2
- package/dist/services/tron/tron-transaction-builder.js.map +1 -1
- package/package.json +6 -5
- package/src/injected-connector.test.ts +94 -0
- package/src/injected-connector.ts +128 -4
- package/src/services/tron/tron-transaction-builder.test.ts +31 -1
- package/src/services/tron/tron-transaction-builder.ts +31 -2
- package/src/services/tron/tron-transaction-service.test.ts +2 -1
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Network, ExtensionInjectedProvider, IntegratedBrowserInjectedProvider, Connector, ConnectorResult, SwitchNetworkResult, Namespace, DetectedEIP6963WalletInfo, DetectedSolanaWalletInfo, DetectedTronWalletInfo, DetectedTonWalletInfo, TransactionRequest, TransactionResult, NetworkRpcMap, EVMCapabilities, SignatureType, EIP712TypedData, WalletMetadata, TonConnectConfig } from '@meshconnect/uwc-types';
|
|
2
|
+
import { type TronConnectorConfig } from '@meshconnect/uwc-tron-connector';
|
|
2
3
|
export declare class InjectedConnector implements Connector {
|
|
3
4
|
private readonly storageService;
|
|
4
5
|
private ethereumService;
|
|
@@ -10,7 +11,18 @@ export declare class InjectedConnector implements Connector {
|
|
|
10
11
|
private transactionService;
|
|
11
12
|
private networkRpcMap;
|
|
12
13
|
private tonConnectManifestUrl;
|
|
13
|
-
|
|
14
|
+
/**
|
|
15
|
+
* Mesh-owned Tron connector. When set (via `tronConnectorConfig`), the Tron
|
|
16
|
+
* namespace is routed through `@meshconnect/uwc-tron-connector` instead of the
|
|
17
|
+
* legacy `window.tronWeb` path; the `tronService` is not consulted for Tron.
|
|
18
|
+
*/
|
|
19
|
+
private tronConnector;
|
|
20
|
+
/**
|
|
21
|
+
* Configured networks, used to resolve the Tron network for cross-namespace
|
|
22
|
+
* Tron auto-connect (see `enrichWithTron`).
|
|
23
|
+
*/
|
|
24
|
+
private networks;
|
|
25
|
+
constructor(networkRpcMap?: NetworkRpcMap, expectedWallets?: WalletMetadata[], tonConnectConfig?: TonConnectConfig, tronConnectorConfig?: TronConnectorConfig, networks?: Network[]);
|
|
14
26
|
/**
|
|
15
27
|
* Get available wallets for a specific namespace
|
|
16
28
|
*/
|
|
@@ -19,6 +31,17 @@ export declare class InjectedConnector implements Connector {
|
|
|
19
31
|
* Connect to a wallet
|
|
20
32
|
*/
|
|
21
33
|
connect(network: Network, provider: ExtensionInjectedProvider | IntegratedBrowserInjectedProvider): Promise<ConnectorResult>;
|
|
34
|
+
/** Establish a fresh connection for the target namespace. */
|
|
35
|
+
private connectToNamespace;
|
|
36
|
+
/**
|
|
37
|
+
* Cross-namespace Tron gather: when the Tron connector is configured and the
|
|
38
|
+
* wallet exposes a detected Tron provider, connect Tron and merge its address
|
|
39
|
+
* into `availableAddresses` — the Tron equivalent of the ETH/Solana/TON
|
|
40
|
+
* gathers in `ConnectionManager`. Best-effort: a missing Tron network, an
|
|
41
|
+
* undetected wallet, or a declined prompt leaves the rest of the connection
|
|
42
|
+
* intact (same as the other gathers, which swallow their failures).
|
|
43
|
+
*/
|
|
44
|
+
private enrichWithTron;
|
|
22
45
|
/**
|
|
23
46
|
* Switch to a different network
|
|
24
47
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"injected-connector.d.ts","sourceRoot":"","sources":["../src/injected-connector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EAEP,yBAAyB,EACzB,iCAAiC,EACjC,SAAS,EACT,eAAe,
|
|
1
|
+
{"version":3,"file":"injected-connector.d.ts","sourceRoot":"","sources":["../src/injected-connector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EAEP,yBAAyB,EACzB,iCAAiC,EACjC,SAAS,EACT,eAAe,EAEf,mBAAmB,EACnB,SAAS,EACT,yBAAyB,EACzB,wBAAwB,EACxB,sBAAsB,EACtB,qBAAqB,EACrB,kBAAkB,EAClB,iBAAiB,EAEjB,aAAa,EACb,eAAe,EACf,aAAa,EACb,eAAe,EACf,cAAc,EACd,gBAAgB,EACjB,MAAM,wBAAwB,CAAA;AAE/B,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,iCAAiC,CAAA;AAiBxC,qBAAa,iBAAkB,YAAW,SAAS;IACjD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgB;IAC/C,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,WAAW,CAAmB;IACtC,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,iBAAiB,CAAmB;IAC5C,OAAO,CAAC,gBAAgB,CAAkB;IAC1C,OAAO,CAAC,kBAAkB,CAAoB;IAC9C,OAAO,CAAC,aAAa,CAAe;IACpC,OAAO,CAAC,qBAAqB,CAAqC;IAClE;;;;OAIG;IACH,OAAO,CAAC,aAAa,CAAsB;IAC3C;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAW;gBAGzB,aAAa,GAAE,aAAkB,EACjC,eAAe,GAAE,cAAc,EAAO,EACtC,gBAAgB,CAAC,EAAE,gBAAgB,EACnC,mBAAmB,CAAC,EAAE,mBAAmB,EACzC,QAAQ,GAAE,OAAO,EAAO;IAkC1B;;OAEG;IACG,mBAAmB,CACvB,SAAS,EAAE,SAAS,EACpB,eAAe,GAAE,cAAc,EAAO,GACrC,OAAO,CACN,yBAAyB,EAAE,GAC3B,wBAAwB,EAAE,GAC1B,sBAAsB,EAAE,GACxB,qBAAqB,EAAE,CAC1B;IA8DD;;OAEG;IACG,OAAO,CACX,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,yBAAyB,GAAG,iCAAiC,GACtE,OAAO,CAAC,eAAe,CAAC;IAqC3B,6DAA6D;YAC/C,kBAAkB;IAmChC;;;;;;;OAOG;YACW,cAAc;IAiC5B;;OAEG;IACG,aAAa,CACjB,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,yBAAyB,GAAG,iCAAiC,GACtE,OAAO,CAAC,mBAAmB,CAAC;IAW/B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAYjC;;OAEG;IACG,WAAW,CACf,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,yBAAyB,GAAG,iCAAiC,GACtE,OAAO,CAAC,aAAa,CAAC;IAsFzB;;;;;OAKG;IACG,aAAa,CACjB,SAAS,EAAE,eAAe,EAC1B,SAAS,CAAC,EAAE,yBAAyB,GAAG,iCAAiC,GACxE,OAAO,CAAC,MAAM,CAAC;IA8BlB;;OAEG;IACG,eAAe,CACnB,OAAO,EAAE,kBAAkB,EAC3B,QAAQ,EAAE,yBAAyB,GAAG,iCAAiC,GACtE,OAAO,CAAC,iBAAiB,CAAC;IAkE7B;;;;OAIG;IACG,qBAAqB,CACzB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,OAAO,EAAE,GAClB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAS3C;;;;;;OAMG;IACG,0BAA0B,CAC9B,YAAY,EAAE,UAAU,GACvB,OAAO,CAAC,UAAU,CAAC;CAgGvB"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { assertSameMessage } from '@meshconnect/uwc-types';
|
|
2
|
+
import { TronConnector } from '@meshconnect/uwc-tron-connector';
|
|
2
3
|
import { Transaction, VersionedTransaction } from '@solana/web3.js';
|
|
3
4
|
import { BridgeChild } from '@meshconnect/uwc-bridge-child';
|
|
4
5
|
import { EthereumWalletService } from './services/ethereum/ethereum-wallet-service';
|
|
@@ -22,9 +23,24 @@ export class InjectedConnector {
|
|
|
22
23
|
transactionService;
|
|
23
24
|
networkRpcMap;
|
|
24
25
|
tonConnectManifestUrl;
|
|
25
|
-
|
|
26
|
+
/**
|
|
27
|
+
* Mesh-owned Tron connector. When set (via `tronConnectorConfig`), the Tron
|
|
28
|
+
* namespace is routed through `@meshconnect/uwc-tron-connector` instead of the
|
|
29
|
+
* legacy `window.tronWeb` path; the `tronService` is not consulted for Tron.
|
|
30
|
+
*/
|
|
31
|
+
tronConnector;
|
|
32
|
+
/**
|
|
33
|
+
* Configured networks, used to resolve the Tron network for cross-namespace
|
|
34
|
+
* Tron auto-connect (see `enrichWithTron`).
|
|
35
|
+
*/
|
|
36
|
+
networks;
|
|
37
|
+
constructor(networkRpcMap = {}, expectedWallets = [], tonConnectConfig, tronConnectorConfig, networks = []) {
|
|
26
38
|
this.networkRpcMap = networkRpcMap;
|
|
39
|
+
this.networks = networks;
|
|
27
40
|
this.tonConnectManifestUrl = tonConnectConfig?.manifestUrl;
|
|
41
|
+
this.tronConnector = tronConnectorConfig
|
|
42
|
+
? new TronConnector(tronConnectorConfig)
|
|
43
|
+
: null;
|
|
28
44
|
this.storageService = new StorageService();
|
|
29
45
|
this.ethereumService = new EthereumWalletService();
|
|
30
46
|
this.solanaService = new SolanaWalletService(this.storageService);
|
|
@@ -68,6 +84,9 @@ export class InjectedConnector {
|
|
|
68
84
|
}));
|
|
69
85
|
}
|
|
70
86
|
case 'tron': {
|
|
87
|
+
if (this.tronConnector) {
|
|
88
|
+
return (await this.tronConnector.getAvailableWallets('tron', expectedWallets));
|
|
89
|
+
}
|
|
71
90
|
await this.tronService.initializeDiscovery(expectedWallets);
|
|
72
91
|
return this.tronService.getDetectedWallets().map(wallet => ({
|
|
73
92
|
uuid: wallet.uuid,
|
|
@@ -94,22 +113,45 @@ export class InjectedConnector {
|
|
|
94
113
|
const targetNamespace = network.namespace;
|
|
95
114
|
// Check if we're already connected
|
|
96
115
|
const { address: existingAddress, availableAddresses } = await this.connectionManager.checkExistingConnections(targetNamespace, provider);
|
|
97
|
-
|
|
116
|
+
let result;
|
|
98
117
|
if (existingAddress) {
|
|
118
|
+
// Already connected — return the existing connection.
|
|
99
119
|
this.connectionManager.setCurrentNetworkId(network.id);
|
|
100
|
-
|
|
120
|
+
result = {
|
|
101
121
|
networkId: network.id,
|
|
102
122
|
address: existingAddress,
|
|
103
123
|
availableAddresses
|
|
104
124
|
};
|
|
105
125
|
}
|
|
106
|
-
|
|
126
|
+
else {
|
|
127
|
+
// Not connected, need to establish a new connection.
|
|
128
|
+
result = await this.connectToNamespace(targetNamespace, network, provider);
|
|
129
|
+
}
|
|
130
|
+
// Cross-namespace Tron auto-connect. When the Tron connector owns the Tron
|
|
131
|
+
// namespace, the legacy connection-manager gather is dormant, so a
|
|
132
|
+
// multi-namespace wallet (Trust, OKX, …) connected on EVM/Solana would
|
|
133
|
+
// otherwise never expose its Tron address. Mirror the ETH/Solana/TON
|
|
134
|
+
// gathers and connect Tron too (skipped when Tron is the connect target —
|
|
135
|
+
// that path connects Tron directly above).
|
|
136
|
+
if (targetNamespace !== 'tron') {
|
|
137
|
+
await this.enrichWithTron(provider, result.availableAddresses);
|
|
138
|
+
}
|
|
139
|
+
return result;
|
|
140
|
+
}
|
|
141
|
+
/** Establish a fresh connection for the target namespace. */
|
|
142
|
+
async connectToNamespace(targetNamespace, network, provider) {
|
|
107
143
|
switch (targetNamespace) {
|
|
108
144
|
case 'eip155':
|
|
109
145
|
return await this.connectionManager.connectEthereum(network, provider);
|
|
110
146
|
case 'solana':
|
|
111
147
|
return await this.connectionManager.connectSolana(network, provider);
|
|
112
148
|
case 'tron':
|
|
149
|
+
if (this.tronConnector) {
|
|
150
|
+
const walletUuid = provider.namespaceMetaData?.tron?.detectedWallet?.uuid;
|
|
151
|
+
const result = await this.tronConnector.connect(network, walletUuid ? { uuid: walletUuid } : undefined);
|
|
152
|
+
this.connectionManager.setCurrentNetworkId(network.id);
|
|
153
|
+
return result;
|
|
154
|
+
}
|
|
113
155
|
return await this.connectionManager.connectTron(network, provider);
|
|
114
156
|
case 'tvm':
|
|
115
157
|
return await this.connectionManager.connectTon(network, provider);
|
|
@@ -117,16 +159,67 @@ export class InjectedConnector {
|
|
|
117
159
|
throw new Error(`Namespace '${network.namespace}' is not implemented yet. Only 'eip155', 'solana', 'tron', and 'tvm' are currently supported.`);
|
|
118
160
|
}
|
|
119
161
|
}
|
|
162
|
+
/**
|
|
163
|
+
* Cross-namespace Tron gather: when the Tron connector is configured and the
|
|
164
|
+
* wallet exposes a detected Tron provider, connect Tron and merge its address
|
|
165
|
+
* into `availableAddresses` — the Tron equivalent of the ETH/Solana/TON
|
|
166
|
+
* gathers in `ConnectionManager`. Best-effort: a missing Tron network, an
|
|
167
|
+
* undetected wallet, or a declined prompt leaves the rest of the connection
|
|
168
|
+
* intact (same as the other gathers, which swallow their failures).
|
|
169
|
+
*/
|
|
170
|
+
async enrichWithTron(provider, availableAddresses) {
|
|
171
|
+
if (!this.tronConnector)
|
|
172
|
+
return;
|
|
173
|
+
const walletUuid = provider.namespaceMetaData?.tron?.detectedWallet?.uuid;
|
|
174
|
+
if (!walletUuid)
|
|
175
|
+
return;
|
|
176
|
+
// Already gathered (e.g. a re-entrant connect) — don't reprompt.
|
|
177
|
+
if (availableAddresses.some(a => a.networkId.startsWith('tron:')))
|
|
178
|
+
return;
|
|
179
|
+
const tronNetwork = this.networks.find(n => n.namespace === 'tron' && provider.supportedNetworkIds.includes(n.id));
|
|
180
|
+
if (!tronNetwork)
|
|
181
|
+
return;
|
|
182
|
+
try {
|
|
183
|
+
const result = await this.tronConnector.connect(tronNetwork, {
|
|
184
|
+
uuid: walletUuid
|
|
185
|
+
});
|
|
186
|
+
for (const addr of result.availableAddresses) {
|
|
187
|
+
const dup = availableAddresses.some(a => a.networkId === addr.networkId && a.address === addr.address);
|
|
188
|
+
if (!dup)
|
|
189
|
+
availableAddresses.push(addr);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
catch {
|
|
193
|
+
// Tron unavailable or the user declined the prompt — continue without it,
|
|
194
|
+
// same as the Solana/Tron/TON gathers in ConnectionManager.
|
|
195
|
+
}
|
|
196
|
+
}
|
|
120
197
|
/**
|
|
121
198
|
* Switch to a different network
|
|
122
199
|
*/
|
|
123
200
|
async switchNetwork(network, provider) {
|
|
201
|
+
if (this.tronConnector && network.namespace === 'tron') {
|
|
202
|
+
const result = await this.tronConnector.switchNetwork(network);
|
|
203
|
+
// Keep ConnectionManager's current network id in sync so subsequent
|
|
204
|
+
// signMessage/sendTransaction namespace routing isn't left stale.
|
|
205
|
+
this.connectionManager.setCurrentNetworkId(network.id);
|
|
206
|
+
return result;
|
|
207
|
+
}
|
|
124
208
|
return await this.connectionManager.switchNetwork(network, provider);
|
|
125
209
|
}
|
|
126
210
|
/**
|
|
127
211
|
* Disconnect from all wallets (only clears local state)
|
|
128
212
|
*/
|
|
129
213
|
async disconnect() {
|
|
214
|
+
if (this.tronConnector) {
|
|
215
|
+
// Best-effort: don't fail the overall disconnect if the connector throws.
|
|
216
|
+
try {
|
|
217
|
+
await this.tronConnector.disconnect();
|
|
218
|
+
}
|
|
219
|
+
catch {
|
|
220
|
+
// ignore
|
|
221
|
+
}
|
|
222
|
+
}
|
|
130
223
|
await this.connectionManager.disconnect();
|
|
131
224
|
}
|
|
132
225
|
/**
|
|
@@ -176,6 +269,11 @@ export class InjectedConnector {
|
|
|
176
269
|
};
|
|
177
270
|
}
|
|
178
271
|
else if (namespace === 'tron') {
|
|
272
|
+
if (this.tronConnector) {
|
|
273
|
+
// TronConnector.signMessage already returns a SignatureType
|
|
274
|
+
// ({ type: 'standard', signature }) — return it as-is, no re-wrap.
|
|
275
|
+
return await this.tronConnector.signMessage(message);
|
|
276
|
+
}
|
|
179
277
|
const tronProvider = this.tronService.getConnectedProvider();
|
|
180
278
|
if (!tronProvider) {
|
|
181
279
|
throw new Error('No connected Tron provider');
|
|
@@ -249,6 +347,9 @@ export class InjectedConnector {
|
|
|
249
347
|
return await this.transactionService.sendTransaction(request, namespace, solanaAdapter, currentNetworkId);
|
|
250
348
|
}
|
|
251
349
|
else if (namespace === 'tron') {
|
|
350
|
+
if (this.tronConnector) {
|
|
351
|
+
return await this.tronConnector.sendTransaction(request);
|
|
352
|
+
}
|
|
252
353
|
const tronProvider = this.tronService.getConnectedProvider();
|
|
253
354
|
if (!tronProvider) {
|
|
254
355
|
throw new Error('No connected Tron provider');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"injected-connector.js","sourceRoot":"","sources":["../src/injected-connector.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"injected-connector.js","sourceRoot":"","sources":["../src/injected-connector.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tron-transaction-builder.d.ts","sourceRoot":"","sources":["../../../src/services/tron/tron-transaction-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,KAAK,EACV,yBAAyB,EACzB,wBAAwB,EACzB,MAAM,wBAAwB,CAAA;AAG/B;;;GAGG;AACH,qBAAa,sBAAsB;IACjC;;OAEG;IACG,mBAAmB,CACvB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,yBAAyB,GAEjC,OAAO,CAAC,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"tron-transaction-builder.d.ts","sourceRoot":"","sources":["../../../src/services/tron/tron-transaction-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,KAAK,EACV,yBAAyB,EACzB,wBAAwB,EACzB,MAAM,wBAAwB,CAAA;AAG/B;;;GAGG;AACH,qBAAa,sBAAsB;IACjC;;OAEG;IACG,mBAAmB,CACvB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,yBAAyB,GAEjC,OAAO,CAAC,GAAG,CAAC;IA2Bf;;OAEG;IACG,kBAAkB,CACtB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,wBAAwB,GAEhC,OAAO,CAAC,GAAG,CAAC;CAyChB"}
|
|
@@ -11,7 +11,18 @@ export class TronTransactionBuilder {
|
|
|
11
11
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
12
12
|
) {
|
|
13
13
|
try {
|
|
14
|
-
|
|
14
|
+
// sendTrx takes a JS number, so the SUN amount must be a non-negative
|
|
15
|
+
// safe integer. The public type allows bigint; guard before narrowing so
|
|
16
|
+
// an out-of-range value fails loudly instead of silently losing precision
|
|
17
|
+
// (mirrors the new connector's assertValidAmount).
|
|
18
|
+
const { amount } = request;
|
|
19
|
+
const valid = typeof amount === 'bigint'
|
|
20
|
+
? amount >= 0n && amount <= BigInt(Number.MAX_SAFE_INTEGER)
|
|
21
|
+
: Number.isSafeInteger(amount) && amount >= 0;
|
|
22
|
+
if (!valid) {
|
|
23
|
+
throw new Error(`TronTransactionBuilder: native amount must be a non-negative integer within the safe range, got ${amount}`);
|
|
24
|
+
}
|
|
25
|
+
const transaction = await tronWeb.transactionBuilder.sendTrx(request.to, Number(amount), request.from);
|
|
15
26
|
return transaction;
|
|
16
27
|
}
|
|
17
28
|
catch (error) {
|
|
@@ -25,10 +36,22 @@ export class TronTransactionBuilder {
|
|
|
25
36
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
26
37
|
) {
|
|
27
38
|
try {
|
|
39
|
+
// The uint256 amount must be a non-negative integer; a fractional or
|
|
40
|
+
// precision-lost number would stringify to a wrong/invalid value. (A
|
|
41
|
+
// bigint is exact at any magnitude, so only the sign is checked here.)
|
|
42
|
+
const { amount } = request;
|
|
43
|
+
const valid = typeof amount === 'bigint'
|
|
44
|
+
? amount >= 0n
|
|
45
|
+
: Number.isSafeInteger(amount) && amount >= 0;
|
|
46
|
+
if (!valid) {
|
|
47
|
+
throw new Error(`TronTransactionBuilder: TRC20 amount must be a non-negative integer, got ${amount}`);
|
|
48
|
+
}
|
|
28
49
|
const functionSelector = 'transfer(address,uint256)';
|
|
29
50
|
const parameter = [
|
|
30
51
|
{ type: 'address', value: request.to },
|
|
31
|
-
|
|
52
|
+
// Pass uint256 as a string so a large bigint amount keeps full
|
|
53
|
+
// precision through tronWeb's ABI encoding.
|
|
54
|
+
{ type: 'uint256', value: amount.toString() }
|
|
32
55
|
];
|
|
33
56
|
const { transaction, result } = await tronWeb.transactionBuilder.triggerSmartContract(request.contractAddress, functionSelector, {}, parameter, request.from);
|
|
34
57
|
if (!result?.result) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tron-transaction-builder.js","sourceRoot":"","sources":["../../../src/services/tron/tron-transaction-builder.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAEpD;;;GAGG;AACH,MAAM,OAAO,sBAAsB;IACjC;;OAEG;IACH,KAAK,CAAC,mBAAmB,CACvB,OAAgB,EAChB,OAAkC;IAClC,8DAA8D;;QAE9D,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,kBAAkB,CAAC,OAAO,CAC1D,OAAO,CAAC,EAAE,EACV,
|
|
1
|
+
{"version":3,"file":"tron-transaction-builder.js","sourceRoot":"","sources":["../../../src/services/tron/tron-transaction-builder.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAEpD;;;GAGG;AACH,MAAM,OAAO,sBAAsB;IACjC;;OAEG;IACH,KAAK,CAAC,mBAAmB,CACvB,OAAgB,EAChB,OAAkC;IAClC,8DAA8D;;QAE9D,IAAI,CAAC;YACH,sEAAsE;YACtE,yEAAyE;YACzE,0EAA0E;YAC1E,mDAAmD;YACnD,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAA;YAC1B,MAAM,KAAK,GACT,OAAO,MAAM,KAAK,QAAQ;gBACxB,CAAC,CAAC,MAAM,IAAI,EAAE,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC;gBAC3D,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,CAAA;YACjD,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,IAAI,KAAK,CACb,mGAAmG,MAAM,EAAE,CAC5G,CAAA;YACH,CAAC;YACD,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,kBAAkB,CAAC,OAAO,CAC1D,OAAO,CAAC,EAAE,EACV,MAAM,CAAC,MAAM,CAAC,EACd,OAAO,CAAC,IAAI,CACb,CAAA;YACD,OAAO,WAAW,CAAA;QACpB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,UAAU,CAAC,KAAK,CAAC,CAAA;QACnB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,kBAAkB,CACtB,OAAgB,EAChB,OAAiC;IACjC,8DAA8D;;QAE9D,IAAI,CAAC;YACH,qEAAqE;YACrE,qEAAqE;YACrE,uEAAuE;YACvE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAA;YAC1B,MAAM,KAAK,GACT,OAAO,MAAM,KAAK,QAAQ;gBACxB,CAAC,CAAC,MAAM,IAAI,EAAE;gBACd,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,CAAA;YACjD,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,IAAI,KAAK,CACb,4EAA4E,MAAM,EAAE,CACrF,CAAA;YACH,CAAC;YACD,MAAM,gBAAgB,GAAG,2BAA2B,CAAA;YACpD,MAAM,SAAS,GAAG;gBAChB,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,EAAE;gBACtC,+DAA+D;gBAC/D,4CAA4C;gBAC5C,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,EAAE;aAC9C,CAAA;YAED,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAC3B,MAAM,OAAO,CAAC,kBAAkB,CAAC,oBAAoB,CACnD,OAAO,CAAC,eAAe,EACvB,gBAAgB,EAChB,EAAE,EACF,SAAS,EACT,OAAO,CAAC,IAAI,CACb,CAAA;YAEH,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;gBACpB,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAA;YAC/D,CAAC;YAED,OAAO,WAAW,CAAA;QACpB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,UAAU,CAAC,KAAK,CAAC,CAAA;QACnB,CAAC;IACH,CAAC;CACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@meshconnect/uwc-injected-connector",
|
|
3
|
-
"version": "0.14.
|
|
3
|
+
"version": "0.14.2-snapshot.dd1e191",
|
|
4
4
|
"description": "Injected connector for Universal Wallet Connector",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -27,10 +27,11 @@
|
|
|
27
27
|
"buffer": "^6.0.3",
|
|
28
28
|
"uuid": "^13.0.0",
|
|
29
29
|
"viem": "^2.44.4",
|
|
30
|
-
"@meshconnect/uwc-bridge-child": "0.2.2",
|
|
31
|
-
"@meshconnect/uwc-constants": "0.6.
|
|
32
|
-
"@meshconnect/uwc-ton-connector": "0.6.
|
|
33
|
-
"@meshconnect/uwc-
|
|
30
|
+
"@meshconnect/uwc-bridge-child": "0.2.2-snapshot.dd1e191",
|
|
31
|
+
"@meshconnect/uwc-constants": "0.6.5-snapshot.dd1e191",
|
|
32
|
+
"@meshconnect/uwc-ton-connector": "0.6.4-snapshot.dd1e191",
|
|
33
|
+
"@meshconnect/uwc-tron-connector": "0.1.0-snapshot.dd1e191",
|
|
34
|
+
"@meshconnect/uwc-types": "0.15.1-snapshot.dd1e191"
|
|
34
35
|
},
|
|
35
36
|
"devDependencies": {
|
|
36
37
|
"typescript": "^5.9.3"
|
|
@@ -15,6 +15,9 @@ vi.mock('./services/tron/tron-wallet-service')
|
|
|
15
15
|
vi.mock('./services/connection-manager')
|
|
16
16
|
vi.mock('./services/signature-service')
|
|
17
17
|
vi.mock('./services/transaction-service')
|
|
18
|
+
vi.mock('@meshconnect/uwc-tron-connector', () => ({
|
|
19
|
+
TronConnector: vi.fn()
|
|
20
|
+
}))
|
|
18
21
|
|
|
19
22
|
describe('InjectedConnector', () => {
|
|
20
23
|
let connector: InjectedConnector
|
|
@@ -235,6 +238,97 @@ describe('InjectedConnector', () => {
|
|
|
235
238
|
expect(result.address).toBe('0xnewaddress')
|
|
236
239
|
})
|
|
237
240
|
|
|
241
|
+
describe('cross-namespace Tron gather (tronConnectorConfig set)', () => {
|
|
242
|
+
const tronNetwork = {
|
|
243
|
+
id: 'tron:0x2b6653dc',
|
|
244
|
+
internalId: 2,
|
|
245
|
+
name: 'Tron',
|
|
246
|
+
namespace: 'tron',
|
|
247
|
+
networkType: 'tron',
|
|
248
|
+
nativeCurrency: { name: 'Tron', symbol: 'TRX', decimals: 6 }
|
|
249
|
+
} as Network
|
|
250
|
+
|
|
251
|
+
// A multi-namespace wallet (e.g. Trust): EVM target + a detected Tron provider.
|
|
252
|
+
const multiNsProvider = {
|
|
253
|
+
supportedNetworkIds: ['eip155:1', 'tron:0x2b6653dc'],
|
|
254
|
+
namespaceMetaData: {
|
|
255
|
+
eip155: { detectedWallet: { uuid: 'eth-uuid' } },
|
|
256
|
+
tron: { detectedWallet: { uuid: 'trust' } }
|
|
257
|
+
}
|
|
258
|
+
} as unknown as ExtensionInjectedProvider
|
|
259
|
+
|
|
260
|
+
// Build an InjectedConnector wired with the Tron connector + networks, and
|
|
261
|
+
// return the stubbed TronConnector instance so the test can assert on it.
|
|
262
|
+
const buildWithTron = async (tronConnect: ReturnType<typeof vi.fn>) => {
|
|
263
|
+
const { TronConnector } =
|
|
264
|
+
await import('@meshconnect/uwc-tron-connector')
|
|
265
|
+
// Must be constructable (`new TronConnector(...)`), so use a function,
|
|
266
|
+
// not an arrow.
|
|
267
|
+
vi.mocked(TronConnector).mockImplementation(function () {
|
|
268
|
+
return { connect: tronConnect } as never
|
|
269
|
+
} as never)
|
|
270
|
+
const c = new InjectedConnector(
|
|
271
|
+
{},
|
|
272
|
+
[],
|
|
273
|
+
undefined,
|
|
274
|
+
{ enabledWallets: ['trust'] } as never,
|
|
275
|
+
[mockNetwork, tronNetwork]
|
|
276
|
+
)
|
|
277
|
+
const { ConnectionManager } =
|
|
278
|
+
await import('./services/connection-manager')
|
|
279
|
+
const connManager = vi
|
|
280
|
+
.mocked(ConnectionManager)
|
|
281
|
+
.mock.results.at(-1)!.value
|
|
282
|
+
connManager.checkExistingConnections.mockResolvedValue({
|
|
283
|
+
address: null,
|
|
284
|
+
availableAddresses: []
|
|
285
|
+
})
|
|
286
|
+
connManager.connectEthereum.mockResolvedValue({
|
|
287
|
+
networkId: 'eip155:1',
|
|
288
|
+
address: '0xeth',
|
|
289
|
+
availableAddresses: [{ address: '0xeth', networkId: 'eip155:1' }]
|
|
290
|
+
})
|
|
291
|
+
return c
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
it('auto-connects Tron alongside an EVM target and merges the address', async () => {
|
|
295
|
+
const tronConnect = vi.fn().mockResolvedValue({
|
|
296
|
+
networkId: 'tron:0x2b6653dc',
|
|
297
|
+
address: 'TTronAddr',
|
|
298
|
+
availableAddresses: [
|
|
299
|
+
{ address: 'TTronAddr', networkId: 'tron:0x2b6653dc' }
|
|
300
|
+
]
|
|
301
|
+
})
|
|
302
|
+
const c = await buildWithTron(tronConnect)
|
|
303
|
+
|
|
304
|
+
const result = await c.connect(mockNetwork, multiNsProvider)
|
|
305
|
+
|
|
306
|
+
// Routed through the Tron connector with the detected wallet id.
|
|
307
|
+
expect(tronConnect).toHaveBeenCalledWith(tronNetwork, { uuid: 'trust' })
|
|
308
|
+
// EVM address preserved AND the Tron address merged in.
|
|
309
|
+
expect(result.address).toBe('0xeth')
|
|
310
|
+
expect(result.availableAddresses).toContainEqual({
|
|
311
|
+
address: 'TTronAddr',
|
|
312
|
+
networkId: 'tron:0x2b6653dc'
|
|
313
|
+
})
|
|
314
|
+
})
|
|
315
|
+
|
|
316
|
+
it('swallows a declined/failed Tron connect and keeps the EVM connection', async () => {
|
|
317
|
+
const tronConnect = vi
|
|
318
|
+
.fn()
|
|
319
|
+
.mockRejectedValue(new Error('user declined'))
|
|
320
|
+
const c = await buildWithTron(tronConnect)
|
|
321
|
+
|
|
322
|
+
const result = await c.connect(mockNetwork, multiNsProvider)
|
|
323
|
+
|
|
324
|
+
expect(tronConnect).toHaveBeenCalled()
|
|
325
|
+
expect(result.address).toBe('0xeth')
|
|
326
|
+
expect(
|
|
327
|
+
result.availableAddresses.some(a => a.networkId.startsWith('tron:'))
|
|
328
|
+
).toBe(false)
|
|
329
|
+
})
|
|
330
|
+
})
|
|
331
|
+
|
|
238
332
|
it('should connect to Solana wallet for solana namespace', async () => {
|
|
239
333
|
const { ConnectionManager } =
|
|
240
334
|
await import('./services/connection-manager')
|
|
@@ -5,6 +5,7 @@ import type {
|
|
|
5
5
|
IntegratedBrowserInjectedProvider,
|
|
6
6
|
Connector,
|
|
7
7
|
ConnectorResult,
|
|
8
|
+
AvailableAddress,
|
|
8
9
|
SwitchNetworkResult,
|
|
9
10
|
Namespace,
|
|
10
11
|
DetectedEIP6963WalletInfo,
|
|
@@ -22,6 +23,10 @@ import type {
|
|
|
22
23
|
TonConnectConfig
|
|
23
24
|
} from '@meshconnect/uwc-types'
|
|
24
25
|
import { assertSameMessage } from '@meshconnect/uwc-types'
|
|
26
|
+
import {
|
|
27
|
+
TronConnector,
|
|
28
|
+
type TronConnectorConfig
|
|
29
|
+
} from '@meshconnect/uwc-tron-connector'
|
|
25
30
|
import { Transaction, VersionedTransaction } from '@solana/web3.js'
|
|
26
31
|
import type { StandardWalletAdapter } from '@solana/wallet-standard-wallet-adapter-base'
|
|
27
32
|
import { BridgeChild } from '@meshconnect/uwc-bridge-child'
|
|
@@ -49,14 +54,31 @@ export class InjectedConnector implements Connector {
|
|
|
49
54
|
private transactionService: TransactionService
|
|
50
55
|
private networkRpcMap: NetworkRpcMap
|
|
51
56
|
private tonConnectManifestUrl: string | (() => string) | undefined
|
|
57
|
+
/**
|
|
58
|
+
* Mesh-owned Tron connector. When set (via `tronConnectorConfig`), the Tron
|
|
59
|
+
* namespace is routed through `@meshconnect/uwc-tron-connector` instead of the
|
|
60
|
+
* legacy `window.tronWeb` path; the `tronService` is not consulted for Tron.
|
|
61
|
+
*/
|
|
62
|
+
private tronConnector: TronConnector | null
|
|
63
|
+
/**
|
|
64
|
+
* Configured networks, used to resolve the Tron network for cross-namespace
|
|
65
|
+
* Tron auto-connect (see `enrichWithTron`).
|
|
66
|
+
*/
|
|
67
|
+
private networks: Network[]
|
|
52
68
|
|
|
53
69
|
constructor(
|
|
54
70
|
networkRpcMap: NetworkRpcMap = {},
|
|
55
71
|
expectedWallets: WalletMetadata[] = [],
|
|
56
|
-
tonConnectConfig?: TonConnectConfig
|
|
72
|
+
tonConnectConfig?: TonConnectConfig,
|
|
73
|
+
tronConnectorConfig?: TronConnectorConfig,
|
|
74
|
+
networks: Network[] = []
|
|
57
75
|
) {
|
|
58
76
|
this.networkRpcMap = networkRpcMap
|
|
77
|
+
this.networks = networks
|
|
59
78
|
this.tonConnectManifestUrl = tonConnectConfig?.manifestUrl
|
|
79
|
+
this.tronConnector = tronConnectorConfig
|
|
80
|
+
? new TronConnector(tronConnectorConfig)
|
|
81
|
+
: null
|
|
60
82
|
|
|
61
83
|
this.storageService = new StorageService()
|
|
62
84
|
this.ethereumService = new EthereumWalletService()
|
|
@@ -126,6 +148,12 @@ export class InjectedConnector implements Connector {
|
|
|
126
148
|
}
|
|
127
149
|
|
|
128
150
|
case 'tron': {
|
|
151
|
+
if (this.tronConnector) {
|
|
152
|
+
return (await this.tronConnector.getAvailableWallets(
|
|
153
|
+
'tron',
|
|
154
|
+
expectedWallets
|
|
155
|
+
)) as DetectedTronWalletInfo[]
|
|
156
|
+
}
|
|
129
157
|
await this.tronService.initializeDiscovery(expectedWallets)
|
|
130
158
|
|
|
131
159
|
return this.tronService.getDetectedWallets().map(wallet => ({
|
|
@@ -166,17 +194,39 @@ export class InjectedConnector implements Connector {
|
|
|
166
194
|
provider
|
|
167
195
|
)
|
|
168
196
|
|
|
169
|
-
|
|
197
|
+
let result: ConnectorResult
|
|
170
198
|
if (existingAddress) {
|
|
199
|
+
// Already connected — return the existing connection.
|
|
171
200
|
this.connectionManager.setCurrentNetworkId(network.id)
|
|
172
|
-
|
|
201
|
+
result = {
|
|
173
202
|
networkId: network.id,
|
|
174
203
|
address: existingAddress,
|
|
175
204
|
availableAddresses
|
|
176
205
|
}
|
|
206
|
+
} else {
|
|
207
|
+
// Not connected, need to establish a new connection.
|
|
208
|
+
result = await this.connectToNamespace(targetNamespace, network, provider)
|
|
177
209
|
}
|
|
178
210
|
|
|
179
|
-
//
|
|
211
|
+
// Cross-namespace Tron auto-connect. When the Tron connector owns the Tron
|
|
212
|
+
// namespace, the legacy connection-manager gather is dormant, so a
|
|
213
|
+
// multi-namespace wallet (Trust, OKX, …) connected on EVM/Solana would
|
|
214
|
+
// otherwise never expose its Tron address. Mirror the ETH/Solana/TON
|
|
215
|
+
// gathers and connect Tron too (skipped when Tron is the connect target —
|
|
216
|
+
// that path connects Tron directly above).
|
|
217
|
+
if (targetNamespace !== 'tron') {
|
|
218
|
+
await this.enrichWithTron(provider, result.availableAddresses)
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
return result
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
/** Establish a fresh connection for the target namespace. */
|
|
225
|
+
private async connectToNamespace(
|
|
226
|
+
targetNamespace: Namespace,
|
|
227
|
+
network: Network,
|
|
228
|
+
provider: ExtensionInjectedProvider | IntegratedBrowserInjectedProvider
|
|
229
|
+
): Promise<ConnectorResult> {
|
|
180
230
|
switch (targetNamespace) {
|
|
181
231
|
case 'eip155':
|
|
182
232
|
return await this.connectionManager.connectEthereum(network, provider)
|
|
@@ -185,6 +235,16 @@ export class InjectedConnector implements Connector {
|
|
|
185
235
|
return await this.connectionManager.connectSolana(network, provider)
|
|
186
236
|
|
|
187
237
|
case 'tron':
|
|
238
|
+
if (this.tronConnector) {
|
|
239
|
+
const walletUuid =
|
|
240
|
+
provider.namespaceMetaData?.tron?.detectedWallet?.uuid
|
|
241
|
+
const result = await this.tronConnector.connect(
|
|
242
|
+
network,
|
|
243
|
+
walletUuid ? { uuid: walletUuid } : undefined
|
|
244
|
+
)
|
|
245
|
+
this.connectionManager.setCurrentNetworkId(network.id)
|
|
246
|
+
return result
|
|
247
|
+
}
|
|
188
248
|
return await this.connectionManager.connectTron(network, provider)
|
|
189
249
|
|
|
190
250
|
case 'tvm':
|
|
@@ -197,6 +257,47 @@ export class InjectedConnector implements Connector {
|
|
|
197
257
|
}
|
|
198
258
|
}
|
|
199
259
|
|
|
260
|
+
/**
|
|
261
|
+
* Cross-namespace Tron gather: when the Tron connector is configured and the
|
|
262
|
+
* wallet exposes a detected Tron provider, connect Tron and merge its address
|
|
263
|
+
* into `availableAddresses` — the Tron equivalent of the ETH/Solana/TON
|
|
264
|
+
* gathers in `ConnectionManager`. Best-effort: a missing Tron network, an
|
|
265
|
+
* undetected wallet, or a declined prompt leaves the rest of the connection
|
|
266
|
+
* intact (same as the other gathers, which swallow their failures).
|
|
267
|
+
*/
|
|
268
|
+
private async enrichWithTron(
|
|
269
|
+
provider: ExtensionInjectedProvider | IntegratedBrowserInjectedProvider,
|
|
270
|
+
availableAddresses: AvailableAddress[]
|
|
271
|
+
): Promise<void> {
|
|
272
|
+
if (!this.tronConnector) return
|
|
273
|
+
|
|
274
|
+
const walletUuid = provider.namespaceMetaData?.tron?.detectedWallet?.uuid
|
|
275
|
+
if (!walletUuid) return
|
|
276
|
+
|
|
277
|
+
// Already gathered (e.g. a re-entrant connect) — don't reprompt.
|
|
278
|
+
if (availableAddresses.some(a => a.networkId.startsWith('tron:'))) return
|
|
279
|
+
|
|
280
|
+
const tronNetwork = this.networks.find(
|
|
281
|
+
n => n.namespace === 'tron' && provider.supportedNetworkIds.includes(n.id)
|
|
282
|
+
)
|
|
283
|
+
if (!tronNetwork) return
|
|
284
|
+
|
|
285
|
+
try {
|
|
286
|
+
const result = await this.tronConnector.connect(tronNetwork, {
|
|
287
|
+
uuid: walletUuid
|
|
288
|
+
})
|
|
289
|
+
for (const addr of result.availableAddresses) {
|
|
290
|
+
const dup = availableAddresses.some(
|
|
291
|
+
a => a.networkId === addr.networkId && a.address === addr.address
|
|
292
|
+
)
|
|
293
|
+
if (!dup) availableAddresses.push(addr)
|
|
294
|
+
}
|
|
295
|
+
} catch {
|
|
296
|
+
// Tron unavailable or the user declined the prompt — continue without it,
|
|
297
|
+
// same as the Solana/Tron/TON gathers in ConnectionManager.
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
|
|
200
301
|
/**
|
|
201
302
|
* Switch to a different network
|
|
202
303
|
*/
|
|
@@ -204,6 +305,13 @@ export class InjectedConnector implements Connector {
|
|
|
204
305
|
network: Network,
|
|
205
306
|
provider: ExtensionInjectedProvider | IntegratedBrowserInjectedProvider
|
|
206
307
|
): Promise<SwitchNetworkResult> {
|
|
308
|
+
if (this.tronConnector && network.namespace === 'tron') {
|
|
309
|
+
const result = await this.tronConnector.switchNetwork(network)
|
|
310
|
+
// Keep ConnectionManager's current network id in sync so subsequent
|
|
311
|
+
// signMessage/sendTransaction namespace routing isn't left stale.
|
|
312
|
+
this.connectionManager.setCurrentNetworkId(network.id)
|
|
313
|
+
return result
|
|
314
|
+
}
|
|
207
315
|
return await this.connectionManager.switchNetwork(network, provider)
|
|
208
316
|
}
|
|
209
317
|
|
|
@@ -211,6 +319,14 @@ export class InjectedConnector implements Connector {
|
|
|
211
319
|
* Disconnect from all wallets (only clears local state)
|
|
212
320
|
*/
|
|
213
321
|
async disconnect(): Promise<void> {
|
|
322
|
+
if (this.tronConnector) {
|
|
323
|
+
// Best-effort: don't fail the overall disconnect if the connector throws.
|
|
324
|
+
try {
|
|
325
|
+
await this.tronConnector.disconnect()
|
|
326
|
+
} catch {
|
|
327
|
+
// ignore
|
|
328
|
+
}
|
|
329
|
+
}
|
|
214
330
|
await this.connectionManager.disconnect()
|
|
215
331
|
}
|
|
216
332
|
|
|
@@ -281,6 +397,11 @@ export class InjectedConnector implements Connector {
|
|
|
281
397
|
signature: signature
|
|
282
398
|
}
|
|
283
399
|
} else if (namespace === 'tron') {
|
|
400
|
+
if (this.tronConnector) {
|
|
401
|
+
// TronConnector.signMessage already returns a SignatureType
|
|
402
|
+
// ({ type: 'standard', signature }) — return it as-is, no re-wrap.
|
|
403
|
+
return await this.tronConnector.signMessage(message)
|
|
404
|
+
}
|
|
284
405
|
const tronProvider = this.tronService.getConnectedProvider()
|
|
285
406
|
if (!tronProvider) {
|
|
286
407
|
throw new Error('No connected Tron provider')
|
|
@@ -390,6 +511,9 @@ export class InjectedConnector implements Connector {
|
|
|
390
511
|
currentNetworkId as NetworkId
|
|
391
512
|
)
|
|
392
513
|
} else if (namespace === 'tron') {
|
|
514
|
+
if (this.tronConnector) {
|
|
515
|
+
return await this.tronConnector.sendTransaction(request)
|
|
516
|
+
}
|
|
393
517
|
const tronProvider = this.tronService.getConnectedProvider()
|
|
394
518
|
if (!tronProvider) {
|
|
395
519
|
throw new Error('No connected Tron provider')
|
|
@@ -67,6 +67,19 @@ describe('TronTransactionBuilder', () => {
|
|
|
67
67
|
expect(result).toEqual(mockTransaction)
|
|
68
68
|
})
|
|
69
69
|
|
|
70
|
+
it('rejects a bigint amount beyond the safe-integer range (no silent precision loss)', async () => {
|
|
71
|
+
const request: TronNativeTransferRequest = {
|
|
72
|
+
from: 'TFromAddress123',
|
|
73
|
+
to: 'TToAddress456',
|
|
74
|
+
amount: BigInt(Number.MAX_SAFE_INTEGER) + 2n
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
await expect(
|
|
78
|
+
builder.buildNativeTransfer(mockTronWeb, request)
|
|
79
|
+
).rejects.toThrow()
|
|
80
|
+
expect(mockTronWeb.transactionBuilder.sendTrx).not.toHaveBeenCalled()
|
|
81
|
+
})
|
|
82
|
+
|
|
70
83
|
it('should throw on transactionBuilder error', async () => {
|
|
71
84
|
vi.mocked(mockTronWeb.transactionBuilder.sendTrx).mockRejectedValue(
|
|
72
85
|
new Error('Insufficient balance')
|
|
@@ -111,13 +124,30 @@ describe('TronTransactionBuilder', () => {
|
|
|
111
124
|
{},
|
|
112
125
|
[
|
|
113
126
|
{ type: 'address', value: 'TToAddress456' },
|
|
114
|
-
|
|
127
|
+
// uint256 is passed as a string to preserve precision for large amounts
|
|
128
|
+
{ type: 'uint256', value: '1000000' }
|
|
115
129
|
],
|
|
116
130
|
'TFromAddress123'
|
|
117
131
|
)
|
|
118
132
|
expect(result).toEqual(mockTransaction)
|
|
119
133
|
})
|
|
120
134
|
|
|
135
|
+
it('rejects a fractional TRC20 amount before building (no wrong uint256)', async () => {
|
|
136
|
+
const request: TronTRC20TransferRequest = {
|
|
137
|
+
from: 'TFromAddress123',
|
|
138
|
+
to: 'TToAddress456',
|
|
139
|
+
amount: 1.5,
|
|
140
|
+
contractAddress: 'TContractAddress789'
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
await expect(
|
|
144
|
+
builder.buildTRC20Transfer(mockTronWeb, request)
|
|
145
|
+
).rejects.toThrow()
|
|
146
|
+
expect(
|
|
147
|
+
mockTronWeb.transactionBuilder.triggerSmartContract
|
|
148
|
+
).not.toHaveBeenCalled()
|
|
149
|
+
})
|
|
150
|
+
|
|
121
151
|
it('should throw when triggerSmartContract result is false', async () => {
|
|
122
152
|
vi.mocked(
|
|
123
153
|
mockTronWeb.transactionBuilder.triggerSmartContract
|
|
@@ -19,9 +19,23 @@ export class TronTransactionBuilder {
|
|
|
19
19
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
20
20
|
): Promise<any> {
|
|
21
21
|
try {
|
|
22
|
+
// sendTrx takes a JS number, so the SUN amount must be a non-negative
|
|
23
|
+
// safe integer. The public type allows bigint; guard before narrowing so
|
|
24
|
+
// an out-of-range value fails loudly instead of silently losing precision
|
|
25
|
+
// (mirrors the new connector's assertValidAmount).
|
|
26
|
+
const { amount } = request
|
|
27
|
+
const valid =
|
|
28
|
+
typeof amount === 'bigint'
|
|
29
|
+
? amount >= 0n && amount <= BigInt(Number.MAX_SAFE_INTEGER)
|
|
30
|
+
: Number.isSafeInteger(amount) && amount >= 0
|
|
31
|
+
if (!valid) {
|
|
32
|
+
throw new Error(
|
|
33
|
+
`TronTransactionBuilder: native amount must be a non-negative integer within the safe range, got ${amount}`
|
|
34
|
+
)
|
|
35
|
+
}
|
|
22
36
|
const transaction = await tronWeb.transactionBuilder.sendTrx(
|
|
23
37
|
request.to,
|
|
24
|
-
|
|
38
|
+
Number(amount),
|
|
25
39
|
request.from
|
|
26
40
|
)
|
|
27
41
|
return transaction
|
|
@@ -39,10 +53,25 @@ export class TronTransactionBuilder {
|
|
|
39
53
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
40
54
|
): Promise<any> {
|
|
41
55
|
try {
|
|
56
|
+
// The uint256 amount must be a non-negative integer; a fractional or
|
|
57
|
+
// precision-lost number would stringify to a wrong/invalid value. (A
|
|
58
|
+
// bigint is exact at any magnitude, so only the sign is checked here.)
|
|
59
|
+
const { amount } = request
|
|
60
|
+
const valid =
|
|
61
|
+
typeof amount === 'bigint'
|
|
62
|
+
? amount >= 0n
|
|
63
|
+
: Number.isSafeInteger(amount) && amount >= 0
|
|
64
|
+
if (!valid) {
|
|
65
|
+
throw new Error(
|
|
66
|
+
`TronTransactionBuilder: TRC20 amount must be a non-negative integer, got ${amount}`
|
|
67
|
+
)
|
|
68
|
+
}
|
|
42
69
|
const functionSelector = 'transfer(address,uint256)'
|
|
43
70
|
const parameter = [
|
|
44
71
|
{ type: 'address', value: request.to },
|
|
45
|
-
|
|
72
|
+
// Pass uint256 as a string so a large bigint amount keeps full
|
|
73
|
+
// precision through tronWeb's ABI encoding.
|
|
74
|
+
{ type: 'uint256', value: amount.toString() }
|
|
46
75
|
]
|
|
47
76
|
|
|
48
77
|
const { transaction, result } =
|
|
@@ -180,7 +180,8 @@ describe('TronTransactionService', () => {
|
|
|
180
180
|
{},
|
|
181
181
|
[
|
|
182
182
|
{ type: 'address', value: 'TToAddr' },
|
|
183
|
-
|
|
183
|
+
// uint256 is passed as a string to preserve precision for large amounts
|
|
184
|
+
{ type: 'uint256', value: '100000' }
|
|
184
185
|
],
|
|
185
186
|
'TFromAddr'
|
|
186
187
|
)
|