@1llet.xyz/erc4337-gasless-sdk 0.4.35 → 0.4.37
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/index.d.mts +14 -3
- package/dist/index.d.ts +14 -3
- package/dist/index.js +193 -134
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +192 -131
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
+
import * as StellarSdk from 'stellar-sdk';
|
|
2
|
+
import { Networks } from 'stellar-sdk';
|
|
1
3
|
import { gnosis, optimism, baseSepolia, base, avalanche, worldchain, monad, polygon, arbitrum, bsc, unichain } from 'viem/chains';
|
|
2
4
|
import { createPublicClient, http, createWalletClient, decodeErrorResult, maxUint256, encodeFunctionData, encodeAbiParameters, keccak256, padHex } from 'viem';
|
|
3
5
|
import { privateKeyToAccount } from 'viem/accounts';
|
|
4
|
-
import * as StellarSdk from 'stellar-sdk';
|
|
5
|
-
import { Networks } from 'stellar-sdk';
|
|
6
6
|
import axios from 'axios';
|
|
7
7
|
import { OpenAPI, QuoteRequest, OneClickService } from '@defuse-protocol/one-click-sdk-typescript';
|
|
8
8
|
|
|
@@ -15,6 +15,149 @@ var __export = (target, all) => {
|
|
|
15
15
|
for (var name in all)
|
|
16
16
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
17
17
|
};
|
|
18
|
+
var STELLAR;
|
|
19
|
+
var init_Stellar = __esm({
|
|
20
|
+
"src/chains/NoEvm/Stellar.ts"() {
|
|
21
|
+
STELLAR = {
|
|
22
|
+
assets: [
|
|
23
|
+
{
|
|
24
|
+
name: "USDC",
|
|
25
|
+
decimals: 7,
|
|
26
|
+
address: "GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN",
|
|
27
|
+
coingeckoId: "usd-coin"
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
name: "XLM",
|
|
31
|
+
decimals: 7,
|
|
32
|
+
address: "native",
|
|
33
|
+
coingeckoId: "stellar"
|
|
34
|
+
}
|
|
35
|
+
],
|
|
36
|
+
nonEvm: {
|
|
37
|
+
networkPassphrase: Networks.PUBLIC,
|
|
38
|
+
serverURL: "https://horizon.stellar.org"
|
|
39
|
+
},
|
|
40
|
+
crossChainInformation: {
|
|
41
|
+
circleInformation: {
|
|
42
|
+
supportCirclePaymaster: false,
|
|
43
|
+
aproxFromFee: 0
|
|
44
|
+
},
|
|
45
|
+
nearIntentInformation: {
|
|
46
|
+
support: true,
|
|
47
|
+
assetsId: [
|
|
48
|
+
{
|
|
49
|
+
assetId: "nep245:v2_1.omni.hot.tg:1100_111bzQBB65GxAPAVoxqmMcgYo5oS3txhqs1Uh1cgahKQUeTUq1TJu",
|
|
50
|
+
name: "USDC",
|
|
51
|
+
decimals: 7
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
assetId: "nep245:v2_1.omni.hot.tg:1100_111bzQBB5v7AhLyPMDwS8uJgQV24KaAPXtwyVWu2KXbbfQU6NXRCz",
|
|
55
|
+
name: "XLM",
|
|
56
|
+
decimals: 6
|
|
57
|
+
}
|
|
58
|
+
],
|
|
59
|
+
needMemo: true
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
// src/services/StellarService.ts
|
|
67
|
+
var StellarService_exports = {};
|
|
68
|
+
__export(StellarService_exports, {
|
|
69
|
+
StellarService: () => StellarService
|
|
70
|
+
});
|
|
71
|
+
var StellarService;
|
|
72
|
+
var init_StellarService = __esm({
|
|
73
|
+
"src/services/StellarService.ts"() {
|
|
74
|
+
init_Stellar();
|
|
75
|
+
StellarService = class {
|
|
76
|
+
constructor() {
|
|
77
|
+
if (!STELLAR.nonEvm?.serverURL || !STELLAR.nonEvm?.networkPassphrase) {
|
|
78
|
+
throw new Error("Stellar Non-EVM config missing or incomplete");
|
|
79
|
+
}
|
|
80
|
+
this.server = new StellarSdk.Horizon.Server(STELLAR.nonEvm.serverURL);
|
|
81
|
+
this.network = STELLAR.nonEvm.networkPassphrase;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Get balance for a specific token (or all if not specified)
|
|
85
|
+
* Returns string representation
|
|
86
|
+
*/
|
|
87
|
+
async getBalance(address, tokenName = "XLM") {
|
|
88
|
+
try {
|
|
89
|
+
const account = await this.server.loadAccount(address);
|
|
90
|
+
const assetDef = STELLAR.assets.find((a) => a.name === tokenName);
|
|
91
|
+
if (!assetDef) throw new Error(`Asset ${tokenName} not configured`);
|
|
92
|
+
const isNative = assetDef.address === "native";
|
|
93
|
+
const balanceLine = account.balances.find((b) => {
|
|
94
|
+
if (isNative) {
|
|
95
|
+
return b.asset_type === "native";
|
|
96
|
+
}
|
|
97
|
+
return b.asset_code === tokenName && b.asset_issuer === assetDef.address;
|
|
98
|
+
});
|
|
99
|
+
return balanceLine ? balanceLine.balance : "0";
|
|
100
|
+
} catch (e) {
|
|
101
|
+
if (e.response && e.response.status === 404) {
|
|
102
|
+
return "0";
|
|
103
|
+
}
|
|
104
|
+
throw e;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Build and Sign a Transfer Transaction
|
|
109
|
+
*/
|
|
110
|
+
async buildTransferXdr(senderPk, recipient, amount, tokenName = "XLM", memo) {
|
|
111
|
+
const keypair = StellarSdk.Keypair.fromSecret(senderPk);
|
|
112
|
+
const sourceAddress = keypair.publicKey();
|
|
113
|
+
let account;
|
|
114
|
+
try {
|
|
115
|
+
account = await this.server.loadAccount(sourceAddress);
|
|
116
|
+
} catch (e) {
|
|
117
|
+
throw new Error(`Stellar Account ${sourceAddress} not valid or not active.`);
|
|
118
|
+
}
|
|
119
|
+
const asset = this.getAsset(tokenName);
|
|
120
|
+
const txBuilder = new StellarSdk.TransactionBuilder(account, {
|
|
121
|
+
fee: StellarSdk.BASE_FEE,
|
|
122
|
+
networkPassphrase: this.network
|
|
123
|
+
});
|
|
124
|
+
txBuilder.addOperation(StellarSdk.Operation.payment({
|
|
125
|
+
destination: recipient,
|
|
126
|
+
asset,
|
|
127
|
+
amount
|
|
128
|
+
}));
|
|
129
|
+
if (memo) {
|
|
130
|
+
txBuilder.addMemo(StellarSdk.Memo.text(memo));
|
|
131
|
+
}
|
|
132
|
+
txBuilder.setTimeout(30);
|
|
133
|
+
const builtTx = txBuilder.build();
|
|
134
|
+
builtTx.sign(keypair);
|
|
135
|
+
return builtTx.toXDR();
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Submit Signed XDR
|
|
139
|
+
*/
|
|
140
|
+
async submitXdr(xdr) {
|
|
141
|
+
const tx = StellarSdk.TransactionBuilder.fromXDR(xdr, this.network);
|
|
142
|
+
return this.server.submitTransaction(tx);
|
|
143
|
+
}
|
|
144
|
+
getAsset(tokenName) {
|
|
145
|
+
const assetDef = STELLAR.assets.find((a) => a.name === tokenName);
|
|
146
|
+
if (!assetDef) {
|
|
147
|
+
if (tokenName === "XLM") return StellarSdk.Asset.native();
|
|
148
|
+
throw new Error(`Asset ${tokenName} not found in configuration`);
|
|
149
|
+
}
|
|
150
|
+
if (assetDef.address === "native") {
|
|
151
|
+
return StellarSdk.Asset.native();
|
|
152
|
+
}
|
|
153
|
+
return new StellarSdk.Asset(assetDef.name, assetDef.address);
|
|
154
|
+
}
|
|
155
|
+
getKeypair(pk) {
|
|
156
|
+
return StellarSdk.Keypair.fromSecret(pk);
|
|
157
|
+
}
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
});
|
|
18
161
|
|
|
19
162
|
// src/constants/facilitator.ts
|
|
20
163
|
var facilitator_exports = {};
|
|
@@ -1108,7 +1251,22 @@ var BASE_SEPOLIA = {
|
|
|
1108
1251
|
factoryAddress: "0x9406Cc6185a346906296840746125a0E44976454"
|
|
1109
1252
|
// Paymaster optional
|
|
1110
1253
|
}};
|
|
1254
|
+
|
|
1255
|
+
// src/chains.ts
|
|
1256
|
+
init_Stellar();
|
|
1111
1257
|
function mapToSDKConfig(data) {
|
|
1258
|
+
if (data.nonEvm) {
|
|
1259
|
+
return {
|
|
1260
|
+
chain: { id: 9e3, name: "Stellar" },
|
|
1261
|
+
// Custom ID for Stellar
|
|
1262
|
+
tokens: data.assets.map((a) => ({
|
|
1263
|
+
symbol: a.name,
|
|
1264
|
+
decimals: a.decimals,
|
|
1265
|
+
address: a.address
|
|
1266
|
+
// Valid address string
|
|
1267
|
+
}))
|
|
1268
|
+
};
|
|
1269
|
+
}
|
|
1112
1270
|
if (!data.evm) throw new Error("Non-EVM config used in EVM SDK");
|
|
1113
1271
|
return {
|
|
1114
1272
|
chain: data.evm.chain,
|
|
@@ -1128,11 +1286,13 @@ var BASE_MAINNET = mapToSDKConfig(BASE);
|
|
|
1128
1286
|
var OPTIMISM_MAINNET = mapToSDKConfig(OPTIMISM);
|
|
1129
1287
|
var GNOSIS_MAINNET = mapToSDKConfig(GNOSIS);
|
|
1130
1288
|
var BASE_SEPOLIA2 = mapToSDKConfig(BASE_SEPOLIA);
|
|
1289
|
+
var STELLAR_TESTNET = mapToSDKConfig(STELLAR);
|
|
1131
1290
|
var CHAIN_CONFIGS = {
|
|
1132
1291
|
[base.id]: BASE_MAINNET,
|
|
1133
1292
|
[baseSepolia.id]: BASE_SEPOLIA2,
|
|
1134
1293
|
[gnosis.id]: GNOSIS_MAINNET,
|
|
1135
|
-
[optimism.id]: OPTIMISM_MAINNET
|
|
1294
|
+
[optimism.id]: OPTIMISM_MAINNET,
|
|
1295
|
+
9e3: STELLAR_TESTNET
|
|
1136
1296
|
};
|
|
1137
1297
|
|
|
1138
1298
|
// src/constants/chains.ts
|
|
@@ -1142,136 +1302,13 @@ var CHAIN_ID_TO_KEY = {
|
|
|
1142
1302
|
"100": "Gnosis",
|
|
1143
1303
|
"10": "Optimism",
|
|
1144
1304
|
"11155420": "Optimism",
|
|
1145
|
-
"42161": "Arbitrum"
|
|
1146
|
-
|
|
1147
|
-
var STELLAR = {
|
|
1148
|
-
assets: [
|
|
1149
|
-
{
|
|
1150
|
-
name: "USDC",
|
|
1151
|
-
decimals: 7,
|
|
1152
|
-
address: "GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN",
|
|
1153
|
-
coingeckoId: "usd-coin"
|
|
1154
|
-
},
|
|
1155
|
-
{
|
|
1156
|
-
name: "XLM",
|
|
1157
|
-
decimals: 7,
|
|
1158
|
-
address: "native",
|
|
1159
|
-
coingeckoId: "stellar"
|
|
1160
|
-
}
|
|
1161
|
-
],
|
|
1162
|
-
nonEvm: {
|
|
1163
|
-
networkPassphrase: Networks.PUBLIC,
|
|
1164
|
-
serverURL: "https://horizon.stellar.org"
|
|
1165
|
-
},
|
|
1166
|
-
crossChainInformation: {
|
|
1167
|
-
circleInformation: {
|
|
1168
|
-
supportCirclePaymaster: false,
|
|
1169
|
-
aproxFromFee: 0
|
|
1170
|
-
},
|
|
1171
|
-
nearIntentInformation: {
|
|
1172
|
-
support: true,
|
|
1173
|
-
assetsId: [
|
|
1174
|
-
{
|
|
1175
|
-
assetId: "nep245:v2_1.omni.hot.tg:1100_111bzQBB65GxAPAVoxqmMcgYo5oS3txhqs1Uh1cgahKQUeTUq1TJu",
|
|
1176
|
-
name: "USDC",
|
|
1177
|
-
decimals: 7
|
|
1178
|
-
},
|
|
1179
|
-
{
|
|
1180
|
-
assetId: "nep245:v2_1.omni.hot.tg:1100_111bzQBB5v7AhLyPMDwS8uJgQV24KaAPXtwyVWu2KXbbfQU6NXRCz",
|
|
1181
|
-
name: "XLM",
|
|
1182
|
-
decimals: 6
|
|
1183
|
-
}
|
|
1184
|
-
],
|
|
1185
|
-
needMemo: true
|
|
1186
|
-
}
|
|
1187
|
-
}
|
|
1305
|
+
"42161": "Arbitrum",
|
|
1306
|
+
"9000": "Stellar"
|
|
1188
1307
|
};
|
|
1189
1308
|
|
|
1190
|
-
// src/
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
if (!STELLAR.nonEvm?.serverURL || !STELLAR.nonEvm?.networkPassphrase) {
|
|
1194
|
-
throw new Error("Stellar Non-EVM config missing or incomplete");
|
|
1195
|
-
}
|
|
1196
|
-
this.server = new StellarSdk.Horizon.Server(STELLAR.nonEvm.serverURL);
|
|
1197
|
-
this.network = STELLAR.nonEvm.networkPassphrase;
|
|
1198
|
-
}
|
|
1199
|
-
/**
|
|
1200
|
-
* Get balance for a specific token (or all if not specified)
|
|
1201
|
-
* Returns string representation
|
|
1202
|
-
*/
|
|
1203
|
-
async getBalance(address, tokenName = "XLM") {
|
|
1204
|
-
try {
|
|
1205
|
-
const account = await this.server.loadAccount(address);
|
|
1206
|
-
const assetDef = STELLAR.assets.find((a) => a.name === tokenName);
|
|
1207
|
-
if (!assetDef) throw new Error(`Asset ${tokenName} not configured`);
|
|
1208
|
-
const isNative = assetDef.address === "native";
|
|
1209
|
-
const balanceLine = account.balances.find((b) => {
|
|
1210
|
-
if (isNative) {
|
|
1211
|
-
return b.asset_type === "native";
|
|
1212
|
-
}
|
|
1213
|
-
return b.asset_code === tokenName && b.asset_issuer === assetDef.address;
|
|
1214
|
-
});
|
|
1215
|
-
return balanceLine ? balanceLine.balance : "0";
|
|
1216
|
-
} catch (e) {
|
|
1217
|
-
if (e.response && e.response.status === 404) {
|
|
1218
|
-
return "0";
|
|
1219
|
-
}
|
|
1220
|
-
throw e;
|
|
1221
|
-
}
|
|
1222
|
-
}
|
|
1223
|
-
/**
|
|
1224
|
-
* Build and Sign a Transfer Transaction
|
|
1225
|
-
*/
|
|
1226
|
-
async buildTransferXdr(senderPk, recipient, amount, tokenName = "XLM", memo) {
|
|
1227
|
-
const keypair = StellarSdk.Keypair.fromSecret(senderPk);
|
|
1228
|
-
const sourceAddress = keypair.publicKey();
|
|
1229
|
-
let account;
|
|
1230
|
-
try {
|
|
1231
|
-
account = await this.server.loadAccount(sourceAddress);
|
|
1232
|
-
} catch (e) {
|
|
1233
|
-
throw new Error(`Stellar Account ${sourceAddress} not valid or not active.`);
|
|
1234
|
-
}
|
|
1235
|
-
const asset = this.getAsset(tokenName);
|
|
1236
|
-
const txBuilder = new StellarSdk.TransactionBuilder(account, {
|
|
1237
|
-
fee: StellarSdk.BASE_FEE,
|
|
1238
|
-
networkPassphrase: this.network
|
|
1239
|
-
});
|
|
1240
|
-
txBuilder.addOperation(StellarSdk.Operation.payment({
|
|
1241
|
-
destination: recipient,
|
|
1242
|
-
asset,
|
|
1243
|
-
amount
|
|
1244
|
-
}));
|
|
1245
|
-
if (memo) {
|
|
1246
|
-
txBuilder.addMemo(StellarSdk.Memo.text(memo));
|
|
1247
|
-
}
|
|
1248
|
-
txBuilder.setTimeout(30);
|
|
1249
|
-
const builtTx = txBuilder.build();
|
|
1250
|
-
builtTx.sign(keypair);
|
|
1251
|
-
return builtTx.toXDR();
|
|
1252
|
-
}
|
|
1253
|
-
/**
|
|
1254
|
-
* Submit Signed XDR
|
|
1255
|
-
*/
|
|
1256
|
-
async submitXdr(xdr) {
|
|
1257
|
-
const tx = StellarSdk.TransactionBuilder.fromXDR(xdr, this.network);
|
|
1258
|
-
return this.server.submitTransaction(tx);
|
|
1259
|
-
}
|
|
1260
|
-
getAsset(tokenName) {
|
|
1261
|
-
const assetDef = STELLAR.assets.find((a) => a.name === tokenName);
|
|
1262
|
-
if (!assetDef) {
|
|
1263
|
-
if (tokenName === "XLM") return StellarSdk.Asset.native();
|
|
1264
|
-
throw new Error(`Asset ${tokenName} not found in configuration`);
|
|
1265
|
-
}
|
|
1266
|
-
if (assetDef.address === "native") {
|
|
1267
|
-
return StellarSdk.Asset.native();
|
|
1268
|
-
}
|
|
1269
|
-
return new StellarSdk.Asset(assetDef.name, assetDef.address);
|
|
1270
|
-
}
|
|
1271
|
-
getKeypair(pk) {
|
|
1272
|
-
return StellarSdk.Keypair.fromSecret(pk);
|
|
1273
|
-
}
|
|
1274
|
-
};
|
|
1309
|
+
// src/index.ts
|
|
1310
|
+
init_StellarService();
|
|
1311
|
+
init_Stellar();
|
|
1275
1312
|
|
|
1276
1313
|
// src/services/cctp.ts
|
|
1277
1314
|
init_facilitator();
|
|
@@ -1641,6 +1678,9 @@ var WORLD_CHAIN = {
|
|
|
1641
1678
|
nearIntentInformation: null
|
|
1642
1679
|
}
|
|
1643
1680
|
};
|
|
1681
|
+
|
|
1682
|
+
// src/chains/index.ts
|
|
1683
|
+
init_Stellar();
|
|
1644
1684
|
var Monad = {
|
|
1645
1685
|
assets: [
|
|
1646
1686
|
{
|
|
@@ -2073,6 +2113,7 @@ async function executeCCTPBridge(sourceChain, amount, crossChainConfig, facilita
|
|
|
2073
2113
|
}
|
|
2074
2114
|
};
|
|
2075
2115
|
}
|
|
2116
|
+
init_StellarService();
|
|
2076
2117
|
OpenAPI.BASE = "https://1click.chaindefuser.com";
|
|
2077
2118
|
var NearStrategy = class {
|
|
2078
2119
|
constructor() {
|
|
@@ -2112,6 +2153,26 @@ var NearStrategy = class {
|
|
|
2112
2153
|
}
|
|
2113
2154
|
if (depositTxHash) {
|
|
2114
2155
|
console.log(`[NearStrategy] Verifying deposit hash: ${depositTxHash}`);
|
|
2156
|
+
if (sourceChain === "Stellar") {
|
|
2157
|
+
try {
|
|
2158
|
+
const { StellarService: StellarService2 } = await Promise.resolve().then(() => (init_StellarService(), StellarService_exports));
|
|
2159
|
+
const stellarService = new StellarService2();
|
|
2160
|
+
const tx = await stellarService.server.transactions().transaction(depositTxHash).call();
|
|
2161
|
+
if (tx.successful) {
|
|
2162
|
+
return {
|
|
2163
|
+
success: true,
|
|
2164
|
+
transactionHash: depositTxHash,
|
|
2165
|
+
netAmount: amount,
|
|
2166
|
+
data: { completed: true }
|
|
2167
|
+
};
|
|
2168
|
+
} else {
|
|
2169
|
+
return { success: false, errorReason: "Stellar Transaction Failed" };
|
|
2170
|
+
}
|
|
2171
|
+
} catch (e) {
|
|
2172
|
+
console.error("Stellar Verification Error", e);
|
|
2173
|
+
return { success: false, errorReason: `Stellar Verification Failed: ${e.message}` };
|
|
2174
|
+
}
|
|
2175
|
+
}
|
|
2115
2176
|
const { createPublicClient: createPublicClient3, http: http3 } = await import('viem');
|
|
2116
2177
|
const { FACILITATOR_NETWORKS: FACILITATOR_NETWORKS2 } = await Promise.resolve().then(() => (init_facilitator(), facilitator_exports));
|
|
2117
2178
|
const networkConfig = FACILITATOR_NETWORKS2[sourceChain];
|