@meshconnect/uwc-injected-connector 0.2.0 → 0.2.2
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 +6 -2
- package/dist/injected-connector.d.ts.map +1 -1
- package/dist/injected-connector.js +18 -4
- package/dist/injected-connector.js.map +1 -1
- package/dist/services/connection-manager.d.ts +2 -2
- package/dist/services/connection-manager.d.ts.map +1 -1
- package/dist/services/connection-manager.js +2 -2
- package/dist/services/connection-manager.js.map +1 -1
- package/dist/services/ethereum/ethereum-transaction-builder.d.ts +14 -0
- package/dist/services/ethereum/ethereum-transaction-builder.d.ts.map +1 -0
- package/dist/services/ethereum/ethereum-transaction-builder.js +60 -0
- package/dist/services/ethereum/ethereum-transaction-builder.js.map +1 -0
- package/dist/services/ethereum/ethereum-transaction-service.d.ts +26 -0
- package/dist/services/ethereum/ethereum-transaction-service.d.ts.map +1 -0
- package/dist/services/ethereum/ethereum-transaction-service.js +145 -0
- package/dist/services/ethereum/ethereum-transaction-service.js.map +1 -0
- package/dist/services/ethereum/ethereum-wallet-service.d.ts +59 -0
- package/dist/services/ethereum/ethereum-wallet-service.d.ts.map +1 -0
- package/dist/services/ethereum/ethereum-wallet-service.js +173 -0
- package/dist/services/ethereum/ethereum-wallet-service.js.map +1 -0
- package/dist/services/ethereum-transaction-service.d.ts +3 -0
- package/dist/services/ethereum-transaction-service.d.ts.map +1 -1
- package/dist/services/ethereum-transaction-service.js +93 -35
- package/dist/services/ethereum-transaction-service.js.map +1 -1
- package/dist/services/index.d.ts +3 -3
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +3 -3
- package/dist/services/index.js.map +1 -1
- package/dist/services/solana/solana-transaction-builder.d.ts +20 -0
- package/dist/services/solana/solana-transaction-builder.d.ts.map +1 -0
- package/dist/services/solana/solana-transaction-builder.js +112 -0
- package/dist/services/solana/solana-transaction-builder.js.map +1 -0
- package/dist/services/solana/solana-transaction-service.d.ts +27 -0
- package/dist/services/solana/solana-transaction-service.d.ts.map +1 -0
- package/dist/services/solana/solana-transaction-service.js +136 -0
- package/dist/services/solana/solana-transaction-service.js.map +1 -0
- package/dist/services/solana/solana-wallet-service.d.ts +55 -0
- package/dist/services/solana/solana-wallet-service.d.ts.map +1 -0
- package/dist/services/solana/solana-wallet-service.js +129 -0
- package/dist/services/solana/solana-wallet-service.js.map +1 -0
- package/dist/services/transaction-service.d.ts +1 -13
- package/dist/services/transaction-service.d.ts.map +1 -1
- package/dist/services/transaction-service.js +4 -42
- package/dist/services/transaction-service.js.map +1 -1
- package/package.json +4 -2
- package/src/injected-connector.ts +25 -6
- package/src/services/connection-manager.ts +2 -2
- package/src/services/ethereum/ethereum-transaction-builder.ts +82 -0
- package/src/services/ethereum/ethereum-transaction-service.ts +192 -0
- package/src/services/{ethereum-wallet-service.ts → ethereum/ethereum-wallet-service.ts} +56 -3
- package/src/services/index.ts +3 -3
- package/src/services/solana/solana-transaction-builder.ts +214 -0
- package/src/services/solana/solana-transaction-service.ts +190 -0
- package/src/services/{solana-wallet-service.ts → solana/solana-wallet-service.ts} +2 -2
- package/src/services/transaction-service.ts +9 -67
- package/src/services/ethereum-transaction-service.ts +0 -196
- package/src/services/solana-transaction-service.ts +0 -68
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import { getAvailableWallets as getEIP6963Wallets } from '../../eip6963-discovery';
|
|
2
|
+
/**
|
|
3
|
+
* Service for managing Ethereum wallet connections
|
|
4
|
+
*/
|
|
5
|
+
export class EthereumWalletService {
|
|
6
|
+
detectedWallets = [];
|
|
7
|
+
connectedProvider = null;
|
|
8
|
+
account = null;
|
|
9
|
+
/**
|
|
10
|
+
* Initialize wallet discovery
|
|
11
|
+
*/
|
|
12
|
+
async initializeDiscovery() {
|
|
13
|
+
this.detectedWallets = await getEIP6963Wallets();
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Get detected wallets
|
|
17
|
+
*/
|
|
18
|
+
getDetectedWallets() {
|
|
19
|
+
return this.detectedWallets;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Find wallet by UUID
|
|
23
|
+
*/
|
|
24
|
+
findWalletByUuid(uuid) {
|
|
25
|
+
return this.detectedWallets.find(w => w.uuid === uuid);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Check if a wallet is already connected without requesting access
|
|
29
|
+
*/
|
|
30
|
+
async checkExistingConnection(provider) {
|
|
31
|
+
try {
|
|
32
|
+
// Try eth_accounts which doesn't prompt user
|
|
33
|
+
const accounts = await provider.request({
|
|
34
|
+
method: 'eth_accounts'
|
|
35
|
+
});
|
|
36
|
+
return accounts && accounts.length > 0 ? accounts : null;
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Connect to wallet
|
|
44
|
+
*/
|
|
45
|
+
async connect(provider) {
|
|
46
|
+
const accounts = await provider.request({
|
|
47
|
+
method: 'eth_requestAccounts'
|
|
48
|
+
});
|
|
49
|
+
if (!accounts || accounts.length === 0) {
|
|
50
|
+
throw new Error('No accounts returned from wallet');
|
|
51
|
+
}
|
|
52
|
+
const address = accounts[0];
|
|
53
|
+
this.connectedProvider = provider;
|
|
54
|
+
this.account = address;
|
|
55
|
+
// Request chain ID to ensure we're connected
|
|
56
|
+
await provider.request({
|
|
57
|
+
method: 'eth_chainId'
|
|
58
|
+
});
|
|
59
|
+
return address;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Switch network
|
|
63
|
+
*/
|
|
64
|
+
async switchNetwork(networkId) {
|
|
65
|
+
if (!this.connectedProvider) {
|
|
66
|
+
throw new Error('No Ethereum wallet connected');
|
|
67
|
+
}
|
|
68
|
+
// Extract chain ID from network.id (format: "eip155:1")
|
|
69
|
+
const chainIdParts = networkId.split(':');
|
|
70
|
+
if (chainIdParts.length !== 2 || !chainIdParts[1]) {
|
|
71
|
+
throw new Error(`Invalid network ID format: ${networkId}`);
|
|
72
|
+
}
|
|
73
|
+
const chainId = chainIdParts[1];
|
|
74
|
+
const chainIdHex = `0x${parseInt(chainId, 10).toString(16)}`;
|
|
75
|
+
// Try to switch to the requested chain
|
|
76
|
+
try {
|
|
77
|
+
await this.connectedProvider.request({
|
|
78
|
+
method: 'wallet_switchEthereumChain',
|
|
79
|
+
params: [{ chainId: chainIdHex }]
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
catch (switchError) {
|
|
83
|
+
// This error code indicates that the chain has not been added to the wallet
|
|
84
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
85
|
+
if (switchError.code === 4902) {
|
|
86
|
+
throw new Error(`Chain ${networkId} is not added to the wallet`);
|
|
87
|
+
}
|
|
88
|
+
throw switchError;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Build available addresses for all supported networks
|
|
93
|
+
*/
|
|
94
|
+
buildAvailableAddresses(supportedNetworkIds, address) {
|
|
95
|
+
const addresses = [];
|
|
96
|
+
supportedNetworkIds.forEach(networkId => {
|
|
97
|
+
if (networkId.startsWith('eip155:')) {
|
|
98
|
+
addresses.push({
|
|
99
|
+
address,
|
|
100
|
+
networkId: networkId
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
return addresses;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Set connection state
|
|
108
|
+
*/
|
|
109
|
+
setConnectionState(provider, account) {
|
|
110
|
+
this.connectedProvider = provider;
|
|
111
|
+
this.account = account;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Get current account
|
|
115
|
+
*/
|
|
116
|
+
getAccount() {
|
|
117
|
+
return this.account;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Get connected provider
|
|
121
|
+
*/
|
|
122
|
+
getConnectedProvider() {
|
|
123
|
+
return this.connectedProvider;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Disconnect (clear state only)
|
|
127
|
+
*/
|
|
128
|
+
disconnect() {
|
|
129
|
+
this.connectedProvider = null;
|
|
130
|
+
this.account = null;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Get wallet capabilities (EIP-5792 support)
|
|
134
|
+
*/
|
|
135
|
+
async getCapabilities(from) {
|
|
136
|
+
if (!this.connectedProvider) {
|
|
137
|
+
throw new Error('No Ethereum wallet connected');
|
|
138
|
+
}
|
|
139
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
140
|
+
let raw;
|
|
141
|
+
try {
|
|
142
|
+
raw = await this.connectedProvider.request({
|
|
143
|
+
method: 'wallet_getCapabilities',
|
|
144
|
+
params: [from]
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
catch {
|
|
148
|
+
return {};
|
|
149
|
+
}
|
|
150
|
+
const result = {};
|
|
151
|
+
for (const [chainId, caps] of Object.entries(raw || {})) {
|
|
152
|
+
const networkId = `eip155:${Number(chainId)}`;
|
|
153
|
+
result[networkId] = {};
|
|
154
|
+
for (const [capKey, capValue] of Object.entries(caps)) {
|
|
155
|
+
if (capValue && typeof capValue === 'object') {
|
|
156
|
+
if (typeof capValue.supported === 'boolean') {
|
|
157
|
+
result[networkId][capKey] = {
|
|
158
|
+
status: capValue.supported ? 'supported' : 'unsupported'
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
else if (typeof capValue.status === 'string' &&
|
|
162
|
+
['supported', 'ready', 'unsupported'].includes(capValue.status)) {
|
|
163
|
+
result[networkId][capKey] = {
|
|
164
|
+
status: capValue.status
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
return result;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=ethereum-wallet-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ethereum-wallet-service.js","sourceRoot":"","sources":["../../../src/services/ethereum/ethereum-wallet-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import type { EthereumProvider } from '../eip6963-discovery';
|
|
2
2
|
import type { EVMNativeTransferRequest, EVMContractCallRequest, EVMBatchTransactionRequest, EVMCapabilities } from '@meshconnect/uwc-types';
|
|
3
|
+
import type { TransactionRequest } from 'ethers';
|
|
3
4
|
/**
|
|
4
5
|
* Service for handling Ethereum/EVM transaction operations
|
|
5
6
|
*/
|
|
6
7
|
export declare class EthereumTransactionService {
|
|
8
|
+
buildContractCall(provider: EthereumProvider, request: EVMContractCallRequest): Promise<TransactionRequest>;
|
|
9
|
+
buildNativeTransfer(provider: EthereumProvider, request: EVMNativeTransferRequest): Promise<TransactionRequest>;
|
|
7
10
|
/**
|
|
8
11
|
* Send native token transfer (ETH, BNB, MATIC, etc.)
|
|
9
12
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ethereum-transaction-service.d.ts","sourceRoot":"","sources":["../../src/services/ethereum-transaction-service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAC5D,OAAO,KAAK,EAEV,wBAAwB,EACxB,sBAAsB,EACtB,0BAA0B,EAC1B,eAAe,EAEhB,MAAM,wBAAwB,CAAA;
|
|
1
|
+
{"version":3,"file":"ethereum-transaction-service.d.ts","sourceRoot":"","sources":["../../src/services/ethereum-transaction-service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAC5D,OAAO,KAAK,EAEV,wBAAwB,EACxB,sBAAsB,EACtB,0BAA0B,EAC1B,eAAe,EAEhB,MAAM,wBAAwB,CAAA;AAE/B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAA;AAEhD;;GAEG;AACH,qBAAa,0BAA0B;IAC/B,iBAAiB,CACrB,QAAQ,EAAE,gBAAgB,EAC1B,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,kBAAkB,CAAC;IA+CxB,mBAAmB,CACvB,QAAQ,EAAE,gBAAgB,EAC1B,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,kBAAkB,CAAC;IA2B9B;;OAEG;IACG,kBAAkB,CACtB,QAAQ,EAAE,gBAAgB,EAC1B,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,MAAM,CAAC;IAoBlB;;OAEG;IACG,gBAAgB,CACpB,QAAQ,EAAE,gBAAgB,EAC1B,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,MAAM,CAAC;IAoBlB;;OAEG;IACG,SAAS,CACb,QAAQ,EAAE,gBAAgB,EAC1B,OAAO,EAAE,0BAA0B,GAClC,OAAO,CAAC,MAAM,CAAC;IA+ElB;;OAEG;IACG,eAAe,CACnB,QAAQ,EAAE,gBAAgB,EAC1B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,eAAe,CAAC;IAS3B;;OAEG;IACH,OAAO,CAAC,eAAe;CAiBxB"}
|
|
@@ -4,10 +4,7 @@ import { parseError } from '../utils/error-utils';
|
|
|
4
4
|
* Service for handling Ethereum/EVM transaction operations
|
|
5
5
|
*/
|
|
6
6
|
export class EthereumTransactionService {
|
|
7
|
-
|
|
8
|
-
* Send native token transfer (ETH, BNB, MATIC, etc.)
|
|
9
|
-
*/
|
|
10
|
-
async sendNativeTransfer(provider, request) {
|
|
7
|
+
async buildContractCall(provider, request) {
|
|
11
8
|
try {
|
|
12
9
|
// Get current chain ID
|
|
13
10
|
const chainIdHex = await provider.request({
|
|
@@ -16,62 +13,91 @@ export class EthereumTransactionService {
|
|
|
16
13
|
const chainId = parseInt(chainIdHex, 16);
|
|
17
14
|
// Create ethers provider and signer
|
|
18
15
|
const ethersProvider = new ethers.BrowserProvider(provider);
|
|
19
|
-
const signer = await ethersProvider.getSigner(request.from);
|
|
20
16
|
// Verify network hasn't changed
|
|
21
17
|
const network = await ethersProvider.getNetwork();
|
|
22
18
|
if (Number(network.chainId) !== chainId) {
|
|
23
19
|
throw new Error('Network changed during transaction setup');
|
|
24
20
|
}
|
|
25
|
-
// Build transaction
|
|
26
|
-
const
|
|
27
|
-
to: request.to,
|
|
28
|
-
value: request.amount,
|
|
21
|
+
// Build transaction options
|
|
22
|
+
const txOptions = {
|
|
29
23
|
...this.formatGasConfig(request.gasConfig)
|
|
30
|
-
}
|
|
31
|
-
//
|
|
32
|
-
|
|
33
|
-
|
|
24
|
+
};
|
|
25
|
+
// Add value for payable functions
|
|
26
|
+
if (request.value) {
|
|
27
|
+
txOptions.value = request.value;
|
|
28
|
+
}
|
|
29
|
+
const iface = new ethers.Interface(request.abi);
|
|
30
|
+
const data = iface.encodeFunctionData(request.functionName, request.args || []);
|
|
31
|
+
const txRequest = {
|
|
32
|
+
to: request.contractAddress,
|
|
33
|
+
data,
|
|
34
|
+
value: request.value ?? 0n,
|
|
35
|
+
...txOptions
|
|
36
|
+
};
|
|
37
|
+
return txRequest;
|
|
34
38
|
}
|
|
35
39
|
catch (error) {
|
|
36
40
|
parseError(error);
|
|
37
41
|
}
|
|
38
42
|
}
|
|
39
|
-
|
|
40
|
-
* Send smart contract transaction (including ERC-20 transfers)
|
|
41
|
-
*/
|
|
42
|
-
async sendContractCall(provider, request) {
|
|
43
|
+
async buildNativeTransfer(provider, request) {
|
|
43
44
|
try {
|
|
44
45
|
// Get current chain ID
|
|
45
46
|
const chainIdHex = await provider.request({
|
|
46
47
|
method: 'eth_chainId'
|
|
47
48
|
});
|
|
48
49
|
const chainId = parseInt(chainIdHex, 16);
|
|
49
|
-
// Create ethers provider
|
|
50
|
+
// Create ethers provider
|
|
50
51
|
const ethersProvider = new ethers.BrowserProvider(provider);
|
|
51
|
-
const signer = await ethersProvider.getSigner(request.from);
|
|
52
52
|
// Verify network hasn't changed
|
|
53
53
|
const network = await ethersProvider.getNetwork();
|
|
54
54
|
if (Number(network.chainId) !== chainId) {
|
|
55
55
|
throw new Error('Network changed during transaction setup');
|
|
56
56
|
}
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
const txOptions = {
|
|
57
|
+
return {
|
|
58
|
+
to: request.to,
|
|
59
|
+
value: request.amount,
|
|
61
60
|
...this.formatGasConfig(request.gasConfig)
|
|
62
61
|
};
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
parseError(error);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Send native token transfer (ETH, BNB, MATIC, etc.)
|
|
69
|
+
*/
|
|
70
|
+
async sendNativeTransfer(provider, request) {
|
|
71
|
+
try {
|
|
72
|
+
// Build transaction
|
|
73
|
+
const tx = await this.buildNativeTransfer(provider, request);
|
|
74
|
+
// Create ethers provider and signer
|
|
75
|
+
const ethersProvider = new ethers.BrowserProvider(provider);
|
|
76
|
+
const signer = await ethersProvider.getSigner(request.from);
|
|
77
|
+
// Send transaction
|
|
78
|
+
const response = await signer.sendTransaction(tx);
|
|
79
|
+
// Wait for confirmation
|
|
80
|
+
const receipt = await response.wait();
|
|
81
|
+
return receipt ? receipt.hash : '';
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
parseError(error);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Send smart contract transaction (including ERC-20 transfers)
|
|
89
|
+
*/
|
|
90
|
+
async sendContractCall(provider, request) {
|
|
91
|
+
try {
|
|
92
|
+
// Build transaction
|
|
93
|
+
const tx = await this.buildContractCall(provider, request);
|
|
94
|
+
// Create ethers provider and signer
|
|
95
|
+
const ethersProvider = new ethers.BrowserProvider(provider);
|
|
96
|
+
const signer = await ethersProvider.getSigner(request.from);
|
|
97
|
+
// Send transaction
|
|
98
|
+
const response = await signer.sendTransaction(tx);
|
|
73
99
|
// Wait for confirmation
|
|
74
|
-
const receipt = await
|
|
100
|
+
const receipt = await response.wait();
|
|
75
101
|
return receipt ? receipt.hash : '';
|
|
76
102
|
}
|
|
77
103
|
catch (error) {
|
|
@@ -83,9 +109,41 @@ export class EthereumTransactionService {
|
|
|
83
109
|
*/
|
|
84
110
|
async sendBatch(provider, request) {
|
|
85
111
|
try {
|
|
112
|
+
// Prepare calls
|
|
113
|
+
const calls = await Promise.all(request.calls.map(async (tx) => {
|
|
114
|
+
if ('contractAddress' in tx && 'abi' in tx) {
|
|
115
|
+
// Contract call
|
|
116
|
+
const result = await this.buildContractCall(provider, tx);
|
|
117
|
+
return {
|
|
118
|
+
to: result.to ?? '',
|
|
119
|
+
value: '0x' + (result.value ?? 0n).toString(16),
|
|
120
|
+
data: result.data
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
else if ('amount' in tx && typeof tx.amount === 'bigint') {
|
|
124
|
+
// Native transfer
|
|
125
|
+
const result = await this.buildNativeTransfer(provider, tx);
|
|
126
|
+
return {
|
|
127
|
+
to: result.to ?? '',
|
|
128
|
+
value: '0x' + (result.value ?? 0n).toString(16)
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
throw new Error('Invalid transaction request type');
|
|
133
|
+
}
|
|
134
|
+
}));
|
|
135
|
+
// Create ethers provider
|
|
86
136
|
const ethersProvider = new ethers.BrowserProvider(provider);
|
|
87
137
|
// Send batch transaction
|
|
88
|
-
const response = await ethersProvider.send('wallet_sendCalls', [
|
|
138
|
+
const response = await ethersProvider.send('wallet_sendCalls', [
|
|
139
|
+
{
|
|
140
|
+
version: request.version,
|
|
141
|
+
from: request.from,
|
|
142
|
+
chainId: request.chainId,
|
|
143
|
+
atomicRequired: request.atomicRequired,
|
|
144
|
+
calls: calls
|
|
145
|
+
}
|
|
146
|
+
]);
|
|
89
147
|
// Poll for completion
|
|
90
148
|
let result;
|
|
91
149
|
do {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ethereum-transaction-service.js","sourceRoot":"","sources":["../../src/services/ethereum-transaction-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAU/B,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"ethereum-transaction-service.js","sourceRoot":"","sources":["../../src/services/ethereum-transaction-service.ts"],"names":[],"mappings":"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"}
|
package/dist/services/index.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
export { StorageService } from './storage-service';
|
|
2
|
-
export { EthereumWalletService } from './ethereum-wallet-service';
|
|
3
|
-
export { SolanaWalletService } from './solana-wallet-service';
|
|
2
|
+
export { EthereumWalletService } from './ethereum/ethereum-wallet-service';
|
|
3
|
+
export { SolanaWalletService } from './solana/solana-wallet-service';
|
|
4
4
|
export { ConnectionManager } from './connection-manager';
|
|
5
5
|
export { SignatureService } from './signature-service';
|
|
6
6
|
export { TransactionService } from './transaction-service';
|
|
7
|
-
export { EthereumTransactionService } from './ethereum-transaction-service';
|
|
7
|
+
export { EthereumTransactionService } from './ethereum/ethereum-transaction-service';
|
|
8
8
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAA;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAA;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAC1D,OAAO,EAAE,0BAA0B,EAAE,MAAM,yCAAyC,CAAA"}
|
package/dist/services/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
export { StorageService } from './storage-service';
|
|
2
|
-
export { EthereumWalletService } from './ethereum-wallet-service';
|
|
3
|
-
export { SolanaWalletService } from './solana-wallet-service';
|
|
2
|
+
export { EthereumWalletService } from './ethereum/ethereum-wallet-service';
|
|
3
|
+
export { SolanaWalletService } from './solana/solana-wallet-service';
|
|
4
4
|
export { ConnectionManager } from './connection-manager';
|
|
5
5
|
export { SignatureService } from './signature-service';
|
|
6
6
|
export { TransactionService } from './transaction-service';
|
|
7
|
-
export { EthereumTransactionService } from './ethereum-transaction-service';
|
|
7
|
+
export { EthereumTransactionService } from './ethereum/ethereum-transaction-service';
|
|
8
8
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAA;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAA;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAC1D,OAAO,EAAE,0BAA0B,EAAE,MAAM,yCAAyC,CAAA"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { PublicKey, TransactionInstruction, VersionedTransaction } from '@solana/web3.js';
|
|
2
|
+
import type { SolanaTransactionRequest } from '@meshconnect/uwc-types';
|
|
3
|
+
/**
|
|
4
|
+
* Service for handling Solana transaction operations
|
|
5
|
+
*/
|
|
6
|
+
export declare class SolanaTransactionBuilder {
|
|
7
|
+
buildTransferInstructions(request: SolanaTransactionRequest): Promise<TransactionInstruction[]>;
|
|
8
|
+
getVersionedTransaction(feePayer: PublicKey, request: SolanaTransactionRequest): Promise<VersionedTransaction>;
|
|
9
|
+
/**
|
|
10
|
+
* Build native SOL transfer
|
|
11
|
+
*/
|
|
12
|
+
private buildNativeTransferInstruction;
|
|
13
|
+
/**
|
|
14
|
+
* Build SPL Token transfer
|
|
15
|
+
*/
|
|
16
|
+
private buildSplTokenTransferInstructions;
|
|
17
|
+
private buildGenericTransferInstructions;
|
|
18
|
+
private parseLookupTable;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=solana-transaction-builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solana-transaction-builder.d.ts","sourceRoot":"","sources":["../../../src/services/solana/solana-transaction-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,SAAS,EAET,sBAAsB,EAEtB,oBAAoB,EAErB,MAAM,iBAAiB,CAAA;AACxB,OAAO,KAAK,EAKV,wBAAwB,EACzB,MAAM,wBAAwB,CAAA;AAU/B;;GAEG;AACH,qBAAa,wBAAwB;IAC7B,yBAAyB,CAC7B,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,sBAAsB,EAAE,CAAC;IAkB9B,uBAAuB,CAC3B,QAAQ,EAAE,SAAS,EACnB,OAAO,EAAE,wBAAwB;IAanC;;OAEG;IACH,OAAO,CAAC,8BAA8B;IAUtC;;OAEG;YACW,iCAAiC;YA8DjC,gCAAgC;IAiD9C,OAAO,CAAC,gBAAgB,CAqBvB;CACF"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { AddressLookupTableAccount, PublicKey, SystemProgram, TransactionInstruction, TransactionMessage, VersionedTransaction } from '@solana/web3.js';
|
|
2
|
+
import { createTransferCheckedInstruction, createAssociatedTokenAccountIdempotentInstruction, getAssociatedTokenAddress, TOKEN_PROGRAM_ID, TOKEN_2022_PROGRAM_ID } from '@solana/spl-token';
|
|
3
|
+
import { Buffer } from 'buffer';
|
|
4
|
+
/**
|
|
5
|
+
* Service for handling Solana transaction operations
|
|
6
|
+
*/
|
|
7
|
+
export class SolanaTransactionBuilder {
|
|
8
|
+
async buildTransferInstructions(request) {
|
|
9
|
+
if ('tokenMint' in request) {
|
|
10
|
+
return await this.buildSplTokenTransferInstructions(request);
|
|
11
|
+
}
|
|
12
|
+
else if ('instructions' in request) {
|
|
13
|
+
return await this.buildGenericTransferInstructions(request);
|
|
14
|
+
}
|
|
15
|
+
else {
|
|
16
|
+
return [
|
|
17
|
+
this.buildNativeTransferInstruction(request)
|
|
18
|
+
];
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
async getVersionedTransaction(feePayer, request) {
|
|
22
|
+
const lookupTable = this.parseLookupTable(request);
|
|
23
|
+
return new VersionedTransaction(new TransactionMessage({
|
|
24
|
+
payerKey: feePayer,
|
|
25
|
+
recentBlockhash: request.blockhash,
|
|
26
|
+
instructions: await this.buildTransferInstructions(request)
|
|
27
|
+
}).compileToV0Message(lookupTable));
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Build native SOL transfer
|
|
31
|
+
*/
|
|
32
|
+
buildNativeTransferInstruction(request) {
|
|
33
|
+
return SystemProgram.transfer({
|
|
34
|
+
fromPubkey: new PublicKey(request.from),
|
|
35
|
+
toPubkey: new PublicKey(request.to),
|
|
36
|
+
lamports: Number(request.amount)
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Build SPL Token transfer
|
|
41
|
+
*/
|
|
42
|
+
async buildSplTokenTransferInstructions(request) {
|
|
43
|
+
let instructions = [];
|
|
44
|
+
// Create Public Keys
|
|
45
|
+
const mint = new PublicKey(request.tokenMint);
|
|
46
|
+
const from = new PublicKey(request.from);
|
|
47
|
+
const to = new PublicKey(request.to);
|
|
48
|
+
const fromTokenAccount = await getAssociatedTokenAddress(mint, from, false, request.tokenProgram
|
|
49
|
+
? new PublicKey(request.tokenProgram)
|
|
50
|
+
: TOKEN_PROGRAM_ID);
|
|
51
|
+
const toTokenAccount = await getAssociatedTokenAddress(mint, to, false, request.tokenProgram
|
|
52
|
+
? new PublicKey(request.tokenProgram)
|
|
53
|
+
: TOKEN_PROGRAM_ID);
|
|
54
|
+
// Create target associated token account
|
|
55
|
+
instructions.push(createAssociatedTokenAccountIdempotentInstruction(from, toTokenAccount, to, mint, request.tokenProgram
|
|
56
|
+
? new PublicKey(request.tokenProgram)
|
|
57
|
+
: TOKEN_PROGRAM_ID));
|
|
58
|
+
const programId = request.tokenProgram === TOKEN_2022_PROGRAM_ID.toBase58()
|
|
59
|
+
? TOKEN_2022_PROGRAM_ID
|
|
60
|
+
: TOKEN_PROGRAM_ID;
|
|
61
|
+
instructions.push(createTransferCheckedInstruction(fromTokenAccount, mint, toTokenAccount, from, request.amount, request.tokenDecimals, [], programId));
|
|
62
|
+
return instructions;
|
|
63
|
+
}
|
|
64
|
+
async buildGenericTransferInstructions(request) {
|
|
65
|
+
const result = [];
|
|
66
|
+
const instructions = request.instructions;
|
|
67
|
+
for (let instrIndex = 0; instrIndex < instructions.length; instrIndex++) {
|
|
68
|
+
const ix = instructions[instrIndex];
|
|
69
|
+
const programId = new PublicKey(ix.programId);
|
|
70
|
+
const keys = ix.accounts.map((meta, accountIndex) => {
|
|
71
|
+
if (!meta.pubKey) {
|
|
72
|
+
throw new Error(`Account at instruction ${instrIndex}, index ${accountIndex} has no pubKey and is not fillable`);
|
|
73
|
+
}
|
|
74
|
+
const resolvedPubkey = new PublicKey(meta.pubKey);
|
|
75
|
+
return {
|
|
76
|
+
pubkey: resolvedPubkey,
|
|
77
|
+
isSigner: meta.isSigner,
|
|
78
|
+
isWritable: meta.isWritable
|
|
79
|
+
};
|
|
80
|
+
});
|
|
81
|
+
result.push(new TransactionInstruction({
|
|
82
|
+
keys,
|
|
83
|
+
programId,
|
|
84
|
+
data: Buffer.from(ix.data, 'base64')
|
|
85
|
+
}));
|
|
86
|
+
}
|
|
87
|
+
if (request.additionalRequests) {
|
|
88
|
+
const extraInstructions = await Promise.all(request.additionalRequests.map(req => this.buildTransferInstructions(req)));
|
|
89
|
+
result.push(...extraInstructions.flat());
|
|
90
|
+
}
|
|
91
|
+
return result;
|
|
92
|
+
}
|
|
93
|
+
parseLookupTable = (request) => {
|
|
94
|
+
if (!('states' in request)) {
|
|
95
|
+
return [];
|
|
96
|
+
}
|
|
97
|
+
return (request.states ?? []).map(state => {
|
|
98
|
+
const currentState = {
|
|
99
|
+
deactivationSlot: state.deactivationSlot,
|
|
100
|
+
lastExtendedSlot: state.lastExtendedSlot,
|
|
101
|
+
lastExtendedSlotStartIndex: state.lastExtendedStartIndex,
|
|
102
|
+
addresses: [],
|
|
103
|
+
...(state.authority && { authority: new PublicKey(state.authority) })
|
|
104
|
+
};
|
|
105
|
+
return new AddressLookupTableAccount({
|
|
106
|
+
key: new PublicKey(state.key),
|
|
107
|
+
state: currentState
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=solana-transaction-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solana-transaction-builder.js","sourceRoot":"","sources":["../../../src/services/solana/solana-transaction-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { WalletAdapter } from '@solana/wallet-adapter-base';
|
|
2
|
+
import type { NetworkRpcMap, SolanaTransactionRequest } from '@meshconnect/uwc-types';
|
|
3
|
+
/**
|
|
4
|
+
* Service for handling Solana transaction operations
|
|
5
|
+
*/
|
|
6
|
+
export declare class SolanaTransactionService {
|
|
7
|
+
private networkRpcMap;
|
|
8
|
+
private builder;
|
|
9
|
+
constructor(networkRpcMap?: NetworkRpcMap);
|
|
10
|
+
/**
|
|
11
|
+
* Send a transaction for Solana
|
|
12
|
+
*/
|
|
13
|
+
sendTransaction(request: SolanaTransactionRequest, adapter: WalletAdapter): Promise<string>;
|
|
14
|
+
/**
|
|
15
|
+
* Send native SOL transfer
|
|
16
|
+
*/
|
|
17
|
+
private sendNativeTransaction;
|
|
18
|
+
/**
|
|
19
|
+
* Send SPL token transfer
|
|
20
|
+
*/
|
|
21
|
+
private sendSplTokenTransaction;
|
|
22
|
+
/**
|
|
23
|
+
* Send native SOL transfer
|
|
24
|
+
*/
|
|
25
|
+
private sendGenericTransferWithInstructions;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=solana-transaction-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solana-transaction-service.d.ts","sourceRoot":"","sources":["../../../src/services/solana/solana-transaction-service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAChE,OAAO,KAAK,EAEV,aAAa,EAIb,wBAAwB,EACzB,MAAM,wBAAwB,CAAA;AAI/B;;GAEG;AACH,qBAAa,wBAAwB;IACnC,OAAO,CAAC,aAAa,CAAe;IACpC,OAAO,CAAC,OAAO,CAA0B;gBAE7B,aAAa,GAAE,aAAkB;IAK7C;;OAEG;IACG,eAAe,CACnB,OAAO,EAAE,wBAAwB,EACjC,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,CAAC;IA0BlB;;OAEG;YACW,qBAAqB;IA0CnC;;OAEG;YACW,uBAAuB;IA0CrC;;OAEG;YACW,mCAAmC;CAuClD"}
|