@talken/talkenkit 2.4.30 → 2.5.1
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/{AbcCredentialManager-DDHLW2IH.js → AbcCredentialManager-5W3B7GI4.js} +1 -1
- package/dist/{abcWallet-TLGPQAMU.js → abcWallet-O5IRLUXL.js} +2 -2
- package/dist/{chunk-ALBABQ53.js → chunk-PN6K4CMZ.js} +4 -1
- package/dist/{chunk-MI7TNBED.js → chunk-UHZL3WSM.js} +709 -86
- package/dist/components/TransactionResultModal/TransactionResultModal.css.d.ts +17 -0
- package/dist/components/TransactionResultModal/TransactionResultModal.d.ts +9 -0
- package/dist/index.css +138 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +1344 -980
- package/dist/providers/TransactionResultProvider/TransactionResultContext.d.ts +6 -0
- package/dist/providers/TransactionResultProvider/TransactionResultProvider.d.ts +7 -0
- package/dist/providers/TransactionResultProvider/TransactionResultSingleton.d.ts +16 -0
- package/dist/providers/TransactionResultProvider/index.d.ts +4 -0
- package/dist/providers/TransactionResultProvider/types.d.ts +14 -0
- package/dist/wallets/walletConnectors/abcWallet/AbcCredentialManager.js +2 -2
- package/dist/wallets/walletConnectors/abcWallet/AbcEvmAutoConnector.js +2 -2
- package/dist/wallets/walletConnectors/abcWallet/abcAccessKeyProvider.d.ts +69 -0
- package/dist/wallets/walletConnectors/abcWallet/abcAccessKeyProvider.js +11 -0
- package/dist/wallets/walletConnectors/abcWallet/abcBitcoinConnector.js +3 -3
- package/dist/wallets/walletConnectors/abcWallet/abcBitcoinProvider.js +3 -3
- package/dist/wallets/walletConnectors/abcWallet/abcConnector.js +8 -6
- package/dist/wallets/walletConnectors/abcWallet/abcProvider.d.ts +8 -0
- package/dist/wallets/walletConnectors/abcWallet/abcProvider.js +5 -4
- package/dist/wallets/walletConnectors/abcWallet/abcSolanaProvider.d.ts +1 -0
- package/dist/wallets/walletConnectors/abcWallet/abcSolanaProvider.js +8 -8
- package/dist/wallets/walletConnectors/abcWallet/abcSolanaWalletAdapter.js +3 -3
- package/dist/wallets/walletConnectors/abcWallet/abcTronProvider.d.ts +1 -0
- package/dist/wallets/walletConnectors/abcWallet/abcTronProvider.js +3 -3
- package/dist/wallets/walletConnectors/abcWallet/abcWallet.d.ts +7 -0
- package/dist/wallets/walletConnectors/abcWallet/abcWallet.js +9 -7
- package/dist/wallets/walletConnectors/abcWallet/api/ConfigApi.js +2 -2
- package/dist/wallets/walletConnectors/abcWallet/api/TalkenApiClient.d.ts +25 -0
- package/dist/wallets/walletConnectors/abcWallet/api/TalkenApiClient.js +3 -3
- package/dist/wallets/walletConnectors/abcWallet/api/TokenApi.js +2 -2
- package/dist/wallets/walletConnectors/abcWallet/api/WalletscanApi.js +3 -3
- package/dist/wallets/walletConnectors/abcWallet/api/index.js +9 -9
- package/dist/wallets/walletConnectors/abcWallet/constants.d.ts +3 -0
- package/dist/wallets/walletConnectors/abcWallet/constants.js +1 -1
- package/dist/wallets/walletConnectors/abcWallet/index.d.ts +1 -1
- package/dist/wallets/walletConnectors/abcWallet/index.js +35 -33
- package/dist/wallets/walletConnectors/abcWallet/sessionUtils.js +2 -2
- package/dist/wallets/walletConnectors/abcWallet/types.d.ts +11 -0
- package/dist/wallets/walletConnectors/abcWallet/utils.js +2 -2
- package/dist/wallets/walletConnectors/abcWallet/walletGeneration.js +3 -3
- package/dist/wallets/walletConnectors/{chunk-VDWJ3NQ5.js → chunk-25ZDAJ3L.js} +1 -1
- package/dist/wallets/walletConnectors/chunk-4JZPP3S7.js +380 -0
- package/dist/wallets/walletConnectors/{chunk-HHZ3JZRH.js → chunk-4YEALKXG.js} +74 -14
- package/dist/wallets/walletConnectors/{chunk-IN3HEGZM.js → chunk-645DT4TS.js} +46 -5
- package/dist/wallets/walletConnectors/{chunk-XNA5NIFE.js → chunk-6TAU7OQK.js} +7 -4
- package/dist/wallets/walletConnectors/{chunk-MO2AXXLI.js → chunk-FKI5AZVH.js} +1 -1
- package/dist/wallets/walletConnectors/{chunk-JADQLTFW.js → chunk-H2AZTZMM.js} +1 -1
- package/dist/wallets/walletConnectors/{chunk-NULM3THX.js → chunk-HWRZGGGN.js} +1 -1
- package/dist/wallets/walletConnectors/{chunk-BHEVY4QY.js → chunk-KIYXONNH.js} +35 -2
- package/dist/wallets/walletConnectors/{chunk-NU3ITJNK.js → chunk-L6FCF3FH.js} +94 -736
- package/dist/wallets/walletConnectors/{chunk-ACLPF2UW.js → chunk-LIGH2LEU.js} +1 -1
- package/dist/wallets/walletConnectors/chunk-OASBABPG.js +746 -0
- package/dist/wallets/walletConnectors/{chunk-A66MTFML.js → chunk-PF65YS3T.js} +1 -1
- package/dist/wallets/walletConnectors/{chunk-6WF4SXLB.js → chunk-QKK3OPQA.js} +1 -1
- package/dist/wallets/walletConnectors/{chunk-3LF7FVL6.js → chunk-RGYZNNB6.js} +1 -1
- package/dist/wallets/walletConnectors/{chunk-DPTDOCWL.js → chunk-RX2VOIUB.js} +4 -1
- package/dist/wallets/walletConnectors/{chunk-YV6IZWGE.js → chunk-URS2KVYK.js} +45 -2
- package/dist/wallets/walletConnectors/{chunk-BXH3GDX5.js → chunk-YKFI6ZGM.js} +1 -1
- package/dist/wallets/walletConnectors/index.js +47 -45
- package/package.json +1 -1
- package/dist/wallets/walletConnectors/chunk-CABLJOMU.js +0 -194
- package/dist/wallets/walletConnectors/chunk-J3YPHDHM.js +0 -827
- package/dist/wallets/walletConnectors/chunk-J566FC7T.js +0 -54
- package/dist/wallets/walletConnectors/chunk-OHQXPSR6.js +0 -300
- package/dist/wallets/walletConnectors/chunk-OMOYFHBT.js +0 -1485
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
TALKEN_API_ENDPOINTS,
|
|
8
8
|
TOKEN_EXPIRY,
|
|
9
9
|
getCredentialManager
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-PN6K4CMZ.js";
|
|
11
11
|
|
|
12
12
|
// src/wallets/walletConnectors/abcWallet/abcWallet.ts
|
|
13
13
|
import { setTalkenApiClient as setTalkenApiClient2 } from "@talken/talkenkit";
|
|
@@ -16,10 +16,6 @@ import { setTalkenApiClient as setTalkenApiClient2 } from "@talken/talkenkit";
|
|
|
16
16
|
import { getTalkenApiClient as getTalkenApiClient3 } from "@talken/talkenkit";
|
|
17
17
|
import { createConnector } from "wagmi";
|
|
18
18
|
|
|
19
|
-
// src/wallets/walletConnectors/abcWallet/abcProvider.ts
|
|
20
|
-
import { getTalkenApiClient } from "@talken/talkenkit";
|
|
21
|
-
import { parseGwei } from "viem";
|
|
22
|
-
|
|
23
19
|
// src/config/networks.ts
|
|
24
20
|
var NetworkType = /* @__PURE__ */ ((NetworkType2) => {
|
|
25
21
|
NetworkType2["EVM"] = "EVM";
|
|
@@ -1051,8 +1047,381 @@ function numberToHex(num) {
|
|
|
1051
1047
|
return `0x${num.toString(16)}`;
|
|
1052
1048
|
}
|
|
1053
1049
|
|
|
1054
|
-
// src/wallets/walletConnectors/abcWallet/
|
|
1050
|
+
// src/wallets/walletConnectors/abcWallet/abcAccessKeyProvider.ts
|
|
1055
1051
|
var EventEmitter = class {
|
|
1052
|
+
constructor() {
|
|
1053
|
+
this.events = /* @__PURE__ */ new Map();
|
|
1054
|
+
}
|
|
1055
|
+
on(event, listener) {
|
|
1056
|
+
if (!this.events.has(event))
|
|
1057
|
+
this.events.set(event, []);
|
|
1058
|
+
this.events.get(event).push(listener);
|
|
1059
|
+
return this;
|
|
1060
|
+
}
|
|
1061
|
+
off(event, listener) {
|
|
1062
|
+
const listeners = this.events.get(event);
|
|
1063
|
+
if (listeners) {
|
|
1064
|
+
const idx = listeners.indexOf(listener);
|
|
1065
|
+
if (idx !== -1)
|
|
1066
|
+
listeners.splice(idx, 1);
|
|
1067
|
+
}
|
|
1068
|
+
return this;
|
|
1069
|
+
}
|
|
1070
|
+
removeListener(event, listener) {
|
|
1071
|
+
return this.off(event, listener);
|
|
1072
|
+
}
|
|
1073
|
+
emit(event, ...args) {
|
|
1074
|
+
const listeners = this.events.get(event);
|
|
1075
|
+
if (listeners) {
|
|
1076
|
+
for (const listener of listeners)
|
|
1077
|
+
listener(...args);
|
|
1078
|
+
return true;
|
|
1079
|
+
}
|
|
1080
|
+
return false;
|
|
1081
|
+
}
|
|
1082
|
+
removeAllListeners(event) {
|
|
1083
|
+
if (event)
|
|
1084
|
+
this.events.delete(event);
|
|
1085
|
+
else
|
|
1086
|
+
this.events.clear();
|
|
1087
|
+
return this;
|
|
1088
|
+
}
|
|
1089
|
+
};
|
|
1090
|
+
var ErrorCode = {
|
|
1091
|
+
USER_REJECTED: 4001,
|
|
1092
|
+
UNAUTHORIZED: 4100,
|
|
1093
|
+
UNSUPPORTED_METHOD: 4200,
|
|
1094
|
+
DISCONNECTED: 4900,
|
|
1095
|
+
INVALID_PARAMS: -32602,
|
|
1096
|
+
INTERNAL_ERROR: -32603
|
|
1097
|
+
};
|
|
1098
|
+
var ProviderRpcError = class extends Error {
|
|
1099
|
+
constructor(code, message, data) {
|
|
1100
|
+
super(message);
|
|
1101
|
+
this.code = code;
|
|
1102
|
+
this.data = data;
|
|
1103
|
+
this.name = "ProviderRpcError";
|
|
1104
|
+
}
|
|
1105
|
+
};
|
|
1106
|
+
var AbcAccessKeyProvider = class extends EventEmitter {
|
|
1107
|
+
constructor(accessKey, apiBaseUrl) {
|
|
1108
|
+
super();
|
|
1109
|
+
this.wallet = null;
|
|
1110
|
+
this.chainId = 1;
|
|
1111
|
+
this.connected = false;
|
|
1112
|
+
this.accessKey = accessKey;
|
|
1113
|
+
this.apiBaseUrl = apiBaseUrl || (typeof window !== "undefined" ? window.__TALKEN_API_URL__ || "" : "");
|
|
1114
|
+
}
|
|
1115
|
+
// ── Wallet management ─────────────────────────────────────
|
|
1116
|
+
setWallet(wallet) {
|
|
1117
|
+
this.wallet = wallet;
|
|
1118
|
+
this.chainId = wallet.chainId || 1;
|
|
1119
|
+
this.connected = true;
|
|
1120
|
+
}
|
|
1121
|
+
clearWallet() {
|
|
1122
|
+
this.wallet = null;
|
|
1123
|
+
this.connected = false;
|
|
1124
|
+
}
|
|
1125
|
+
isConnected() {
|
|
1126
|
+
return this.connected && !!this.wallet;
|
|
1127
|
+
}
|
|
1128
|
+
getWallet() {
|
|
1129
|
+
return this.wallet;
|
|
1130
|
+
}
|
|
1131
|
+
getChainId() {
|
|
1132
|
+
return this.chainId;
|
|
1133
|
+
}
|
|
1134
|
+
setAccessKey(key) {
|
|
1135
|
+
this.accessKey = key;
|
|
1136
|
+
}
|
|
1137
|
+
// ── EIP-1193 request ──────────────────────────────────────
|
|
1138
|
+
async request(args) {
|
|
1139
|
+
const { method, params } = args;
|
|
1140
|
+
switch (method) {
|
|
1141
|
+
case "eth_requestAccounts":
|
|
1142
|
+
case "eth_accounts":
|
|
1143
|
+
return this.wallet ? [this.wallet.address] : [];
|
|
1144
|
+
case "eth_chainId":
|
|
1145
|
+
return numberToHex(this.chainId);
|
|
1146
|
+
case "wallet_switchEthereumChain": {
|
|
1147
|
+
const p = params?.[0];
|
|
1148
|
+
if (p?.chainId) {
|
|
1149
|
+
this.chainId = hexToNumber(p.chainId);
|
|
1150
|
+
this.emit("chainChanged", numberToHex(this.chainId));
|
|
1151
|
+
}
|
|
1152
|
+
return null;
|
|
1153
|
+
}
|
|
1154
|
+
case "eth_sendTransaction":
|
|
1155
|
+
return this.sendTransaction(params);
|
|
1156
|
+
case "personal_sign":
|
|
1157
|
+
return this.personalSign(params);
|
|
1158
|
+
case "eth_signTypedData":
|
|
1159
|
+
case "eth_signTypedData_v4":
|
|
1160
|
+
return this.signTypedData(params);
|
|
1161
|
+
case "eth_signAuthorization":
|
|
1162
|
+
return this.signAuthorization(params);
|
|
1163
|
+
case "eth_estimateGas":
|
|
1164
|
+
return this.estimateGas(params);
|
|
1165
|
+
case "eth_getTransactionCount":
|
|
1166
|
+
return this.getTransactionCount(params);
|
|
1167
|
+
case "eth_call":
|
|
1168
|
+
return this.ethCall(params);
|
|
1169
|
+
case "eth_getBalance":
|
|
1170
|
+
return this.getBalance(params);
|
|
1171
|
+
case "wallet_getCapabilities":
|
|
1172
|
+
return {
|
|
1173
|
+
supportsTypedDataV4: true,
|
|
1174
|
+
supports7702Authorization: true,
|
|
1175
|
+
supports5792Batch: false,
|
|
1176
|
+
supportsPaymasterService: false,
|
|
1177
|
+
supportsPermit2RelayHints: true,
|
|
1178
|
+
walletType: "abc-embedded"
|
|
1179
|
+
};
|
|
1180
|
+
default:
|
|
1181
|
+
throw new ProviderRpcError(
|
|
1182
|
+
ErrorCode.UNSUPPORTED_METHOD,
|
|
1183
|
+
`Method not supported: ${method}`
|
|
1184
|
+
);
|
|
1185
|
+
}
|
|
1186
|
+
}
|
|
1187
|
+
// ── Signing (same endpoints as AbcEvmProvider, no PIN) ────
|
|
1188
|
+
/**
|
|
1189
|
+
* Send transaction via POST /wallet/tx/evm
|
|
1190
|
+
* PIN/email auto-injected server-side from access-key delegated credentials.
|
|
1191
|
+
*/
|
|
1192
|
+
async sendTransaction(params) {
|
|
1193
|
+
this.ensureWallet();
|
|
1194
|
+
const tx = params?.[0];
|
|
1195
|
+
if (!tx) {
|
|
1196
|
+
throw new ProviderRpcError(
|
|
1197
|
+
ErrorCode.INVALID_PARAMS,
|
|
1198
|
+
"Missing transaction params"
|
|
1199
|
+
);
|
|
1200
|
+
}
|
|
1201
|
+
if (!tx.to) {
|
|
1202
|
+
throw new ProviderRpcError(
|
|
1203
|
+
ErrorCode.INVALID_PARAMS,
|
|
1204
|
+
"Contract deployment (missing `to`) is not supported in access-key mode"
|
|
1205
|
+
);
|
|
1206
|
+
}
|
|
1207
|
+
const chainKey = getChainKey(this.chainId);
|
|
1208
|
+
const hexValue = tx.value || "0x0";
|
|
1209
|
+
const amountWei = BigInt(hexValue).toString();
|
|
1210
|
+
const result = await this.apiPost("/wallet/tx/evm", {
|
|
1211
|
+
chainKey,
|
|
1212
|
+
to: tx.to,
|
|
1213
|
+
amountWei,
|
|
1214
|
+
data: tx.data || "0x",
|
|
1215
|
+
...tx.gas && { gasLimit: tx.gas },
|
|
1216
|
+
...tx.gasLimit && { gasLimit: tx.gasLimit },
|
|
1217
|
+
...tx.maxFeePerGas && { maxFeePerGas: tx.maxFeePerGas },
|
|
1218
|
+
...tx.maxPriorityFeePerGas && {
|
|
1219
|
+
maxPriorityFeePerGas: tx.maxPriorityFeePerGas
|
|
1220
|
+
}
|
|
1221
|
+
// No pin, no email — auto-injected by enrichWithDelegatedCredentials
|
|
1222
|
+
});
|
|
1223
|
+
return result?.txHash || result?.hash;
|
|
1224
|
+
}
|
|
1225
|
+
/**
|
|
1226
|
+
* Personal sign via POST /wallet/sign/evm/personal
|
|
1227
|
+
*/
|
|
1228
|
+
async personalSign(params) {
|
|
1229
|
+
const wallet = this.ensureWallet();
|
|
1230
|
+
const p = params;
|
|
1231
|
+
if (!Array.isArray(p) || p.length < 2) {
|
|
1232
|
+
throw new ProviderRpcError(
|
|
1233
|
+
ErrorCode.INVALID_PARAMS,
|
|
1234
|
+
"Invalid personal_sign params"
|
|
1235
|
+
);
|
|
1236
|
+
}
|
|
1237
|
+
const [message, address] = p;
|
|
1238
|
+
if (address && address.toLowerCase() !== wallet.address.toLowerCase()) {
|
|
1239
|
+
throw new ProviderRpcError(
|
|
1240
|
+
ErrorCode.UNAUTHORIZED,
|
|
1241
|
+
`Address mismatch: requested ${address}, connected ${wallet.address}`
|
|
1242
|
+
);
|
|
1243
|
+
}
|
|
1244
|
+
const network = getNetworkName(this.chainId);
|
|
1245
|
+
const result = await this.apiPost("/wallet/sign/evm/personal", {
|
|
1246
|
+
network,
|
|
1247
|
+
message,
|
|
1248
|
+
address: wallet.address
|
|
1249
|
+
// No pin — auto-injected
|
|
1250
|
+
});
|
|
1251
|
+
return result?.signature ?? result?.serializedTx ?? "";
|
|
1252
|
+
}
|
|
1253
|
+
/**
|
|
1254
|
+
* Sign typed data via POST /wallet/sign/evm/typed
|
|
1255
|
+
*/
|
|
1256
|
+
async signTypedData(params) {
|
|
1257
|
+
const wallet = this.ensureWallet();
|
|
1258
|
+
const p = params;
|
|
1259
|
+
if (!Array.isArray(p) || p.length < 2) {
|
|
1260
|
+
throw new ProviderRpcError(
|
|
1261
|
+
ErrorCode.INVALID_PARAMS,
|
|
1262
|
+
"Invalid signTypedData params"
|
|
1263
|
+
);
|
|
1264
|
+
}
|
|
1265
|
+
const [address, typedData] = p;
|
|
1266
|
+
if (address && address.toLowerCase() !== wallet.address.toLowerCase()) {
|
|
1267
|
+
throw new ProviderRpcError(
|
|
1268
|
+
ErrorCode.UNAUTHORIZED,
|
|
1269
|
+
`Address mismatch: requested ${address}, connected ${wallet.address}`
|
|
1270
|
+
);
|
|
1271
|
+
}
|
|
1272
|
+
const network = getNetworkName(this.chainId);
|
|
1273
|
+
const result = await this.apiPost("/wallet/sign/evm/typed", {
|
|
1274
|
+
network,
|
|
1275
|
+
typedData: typeof typedData === "string" ? typedData : JSON.stringify(typedData)
|
|
1276
|
+
// No pin — auto-injected
|
|
1277
|
+
});
|
|
1278
|
+
return result?.signature;
|
|
1279
|
+
}
|
|
1280
|
+
/**
|
|
1281
|
+
* Sign EIP-7702 authorization via POST /wallet/sign/authorization
|
|
1282
|
+
* Params: [address, authorization] — matches PIN mode (abcProvider.ts)
|
|
1283
|
+
*/
|
|
1284
|
+
async signAuthorization(params) {
|
|
1285
|
+
const wallet = this.ensureWallet();
|
|
1286
|
+
const p = params;
|
|
1287
|
+
if (!Array.isArray(p) || p.length < 2) {
|
|
1288
|
+
throw new ProviderRpcError(
|
|
1289
|
+
ErrorCode.INVALID_PARAMS,
|
|
1290
|
+
"Expected [address, authorization]"
|
|
1291
|
+
);
|
|
1292
|
+
}
|
|
1293
|
+
const [address, auth] = p;
|
|
1294
|
+
if (address && address.toLowerCase() !== wallet.address.toLowerCase()) {
|
|
1295
|
+
throw new ProviderRpcError(
|
|
1296
|
+
ErrorCode.UNAUTHORIZED,
|
|
1297
|
+
`Address mismatch: requested ${address}, connected ${wallet.address}`
|
|
1298
|
+
);
|
|
1299
|
+
}
|
|
1300
|
+
if (!auth) {
|
|
1301
|
+
throw new ProviderRpcError(
|
|
1302
|
+
ErrorCode.INVALID_PARAMS,
|
|
1303
|
+
"Missing authorization object"
|
|
1304
|
+
);
|
|
1305
|
+
}
|
|
1306
|
+
const network = getNetworkName(this.chainId);
|
|
1307
|
+
const result = await this.apiPost("/wallet/sign/authorization", {
|
|
1308
|
+
network,
|
|
1309
|
+
authorization: {
|
|
1310
|
+
chainId: auth.chainId,
|
|
1311
|
+
address: auth.address,
|
|
1312
|
+
nonce: auth.nonce?.toString()
|
|
1313
|
+
}
|
|
1314
|
+
// No pin — auto-injected
|
|
1315
|
+
});
|
|
1316
|
+
return result?.authorization || result;
|
|
1317
|
+
}
|
|
1318
|
+
// ── Helpers ───────────────────────────────────────────────
|
|
1319
|
+
ensureWallet() {
|
|
1320
|
+
if (!this.wallet) {
|
|
1321
|
+
throw new ProviderRpcError(
|
|
1322
|
+
ErrorCode.UNAUTHORIZED,
|
|
1323
|
+
"Wallet not connected"
|
|
1324
|
+
);
|
|
1325
|
+
}
|
|
1326
|
+
return this.wallet;
|
|
1327
|
+
}
|
|
1328
|
+
/** GET /wallet/address/balance — API uses `network` param (WaaS network name) */
|
|
1329
|
+
async getBalance(params) {
|
|
1330
|
+
const p = params;
|
|
1331
|
+
const address = p?.[0] || this.wallet?.address;
|
|
1332
|
+
const network = getNetworkName(this.chainId);
|
|
1333
|
+
const result = await this.apiGet(
|
|
1334
|
+
`/wallet/address/balance?network=${network}&address=${address}`
|
|
1335
|
+
);
|
|
1336
|
+
return result?.balance ?? "0x0";
|
|
1337
|
+
}
|
|
1338
|
+
/** GET /wallet/nonce — API uses `network` param (WaaS network name) */
|
|
1339
|
+
async getTransactionCount(params) {
|
|
1340
|
+
const p = params;
|
|
1341
|
+
const address = p?.[0] || this.wallet?.address;
|
|
1342
|
+
const network = getNetworkName(this.chainId);
|
|
1343
|
+
const result = await this.apiGet(
|
|
1344
|
+
`/wallet/nonce?network=${network}&address=${address}`
|
|
1345
|
+
);
|
|
1346
|
+
const nonce = result?.nonce ?? 0;
|
|
1347
|
+
return `0x${Number(nonce).toString(16)}`;
|
|
1348
|
+
}
|
|
1349
|
+
/** POST /wallet/contract/eth-call */
|
|
1350
|
+
async ethCall(params) {
|
|
1351
|
+
const p = params;
|
|
1352
|
+
const tx = p?.[0];
|
|
1353
|
+
const network = getNetworkName(this.chainId);
|
|
1354
|
+
const result = await this.apiPost("/wallet/contract/eth-call", {
|
|
1355
|
+
network,
|
|
1356
|
+
to: tx?.to,
|
|
1357
|
+
data: tx?.data,
|
|
1358
|
+
from: tx?.from || this.wallet?.address
|
|
1359
|
+
});
|
|
1360
|
+
return result?.result ?? result?.data ?? "0x";
|
|
1361
|
+
}
|
|
1362
|
+
/** POST /wallet/tx/evm with dry-run for gas estimation */
|
|
1363
|
+
async estimateGas(params) {
|
|
1364
|
+
const p = params;
|
|
1365
|
+
const tx = p?.[0];
|
|
1366
|
+
try {
|
|
1367
|
+
const result = await this.apiPost("/wallet/contract/eth-call", {
|
|
1368
|
+
network: getNetworkName(this.chainId),
|
|
1369
|
+
to: tx?.to,
|
|
1370
|
+
data: tx?.data,
|
|
1371
|
+
from: tx?.from || this.wallet?.address,
|
|
1372
|
+
value: tx?.value,
|
|
1373
|
+
estimateGas: true
|
|
1374
|
+
});
|
|
1375
|
+
return result?.gasEstimate ?? result?.gas ?? "0x5208";
|
|
1376
|
+
} catch {
|
|
1377
|
+
return "0x5208";
|
|
1378
|
+
}
|
|
1379
|
+
}
|
|
1380
|
+
async apiGet(path) {
|
|
1381
|
+
const url = `${this.apiBaseUrl}${path}`;
|
|
1382
|
+
const res = await fetch(url, {
|
|
1383
|
+
headers: { "X-Access-Key": this.accessKey }
|
|
1384
|
+
});
|
|
1385
|
+
if (!res.ok) {
|
|
1386
|
+
const err = await res.json().catch(() => ({ message: res.statusText }));
|
|
1387
|
+
throw new ProviderRpcError(
|
|
1388
|
+
ErrorCode.INTERNAL_ERROR,
|
|
1389
|
+
err?.error?.message || err?.message || `API error: ${res.status}`
|
|
1390
|
+
);
|
|
1391
|
+
}
|
|
1392
|
+
const json = await res.json();
|
|
1393
|
+
return json?.data || json;
|
|
1394
|
+
}
|
|
1395
|
+
async apiPost(path, body) {
|
|
1396
|
+
const url = `${this.apiBaseUrl}${path}`;
|
|
1397
|
+
const res = await fetch(url, {
|
|
1398
|
+
method: "POST",
|
|
1399
|
+
headers: {
|
|
1400
|
+
"Content-Type": "application/json",
|
|
1401
|
+
"X-Access-Key": this.accessKey
|
|
1402
|
+
},
|
|
1403
|
+
body: JSON.stringify(body)
|
|
1404
|
+
});
|
|
1405
|
+
if (!res.ok) {
|
|
1406
|
+
const err = await res.json().catch(() => ({ message: res.statusText }));
|
|
1407
|
+
throw new ProviderRpcError(
|
|
1408
|
+
ErrorCode.INTERNAL_ERROR,
|
|
1409
|
+
err?.error?.message || err?.message || `API error: ${res.status}`
|
|
1410
|
+
);
|
|
1411
|
+
}
|
|
1412
|
+
const json = await res.json();
|
|
1413
|
+
return json?.data || json;
|
|
1414
|
+
}
|
|
1415
|
+
};
|
|
1416
|
+
|
|
1417
|
+
// src/wallets/walletConnectors/abcWallet/abcProvider.ts
|
|
1418
|
+
import {
|
|
1419
|
+
getShowPendingTransaction,
|
|
1420
|
+
getTalkenApiClient,
|
|
1421
|
+
getUpdateTransactionResult
|
|
1422
|
+
} from "@talken/talkenkit";
|
|
1423
|
+
import { parseGwei } from "viem";
|
|
1424
|
+
var EventEmitter2 = class {
|
|
1056
1425
|
constructor() {
|
|
1057
1426
|
this.events = /* @__PURE__ */ new Map();
|
|
1058
1427
|
}
|
|
@@ -1095,7 +1464,7 @@ var EventEmitter = class {
|
|
|
1095
1464
|
return this;
|
|
1096
1465
|
}
|
|
1097
1466
|
};
|
|
1098
|
-
var
|
|
1467
|
+
var ProviderRpcError2 = class extends Error {
|
|
1099
1468
|
constructor(code, message, data) {
|
|
1100
1469
|
super(message);
|
|
1101
1470
|
this.code = code;
|
|
@@ -1103,7 +1472,7 @@ var ProviderRpcError = class extends Error {
|
|
|
1103
1472
|
this.name = "ProviderRpcError";
|
|
1104
1473
|
}
|
|
1105
1474
|
};
|
|
1106
|
-
var
|
|
1475
|
+
var ErrorCode2 = {
|
|
1107
1476
|
USER_REJECTED: 4001,
|
|
1108
1477
|
UNAUTHORIZED: 4100,
|
|
1109
1478
|
UNSUPPORTED_METHOD: 4200,
|
|
@@ -1112,7 +1481,7 @@ var ErrorCode = {
|
|
|
1112
1481
|
INVALID_PARAMS: -32602,
|
|
1113
1482
|
INTERNAL_ERROR: -32603
|
|
1114
1483
|
};
|
|
1115
|
-
var AbcEvmProvider = class extends
|
|
1484
|
+
var AbcEvmProvider = class extends EventEmitter2 {
|
|
1116
1485
|
constructor(talkenApi) {
|
|
1117
1486
|
super();
|
|
1118
1487
|
this.wallet = null;
|
|
@@ -1152,7 +1521,7 @@ var AbcEvmProvider = class extends EventEmitter {
|
|
|
1152
1521
|
this.wallet = null;
|
|
1153
1522
|
this.connected = false;
|
|
1154
1523
|
this.emit("disconnect", {
|
|
1155
|
-
code:
|
|
1524
|
+
code: ErrorCode2.DISCONNECTED,
|
|
1156
1525
|
message: "User disconnected"
|
|
1157
1526
|
});
|
|
1158
1527
|
this.emit("accountsChanged", []);
|
|
@@ -1174,8 +1543,8 @@ var AbcEvmProvider = class extends EventEmitter {
|
|
|
1174
1543
|
getTalkenApiClientOrThrow() {
|
|
1175
1544
|
const api = this.talkenApi || getTalkenApiClient();
|
|
1176
1545
|
if (!api) {
|
|
1177
|
-
throw new
|
|
1178
|
-
|
|
1546
|
+
throw new ProviderRpcError2(
|
|
1547
|
+
ErrorCode2.INTERNAL_ERROR,
|
|
1179
1548
|
"TalkenApiClient not initialized"
|
|
1180
1549
|
);
|
|
1181
1550
|
}
|
|
@@ -1216,8 +1585,8 @@ var AbcEvmProvider = class extends EventEmitter {
|
|
|
1216
1585
|
console.warn(
|
|
1217
1586
|
"[AbcProvider] Cannot refresh signing credentials \u2014 PIN hash or email missing"
|
|
1218
1587
|
);
|
|
1219
|
-
throw new
|
|
1220
|
-
|
|
1588
|
+
throw new ProviderRpcError2(
|
|
1589
|
+
ErrorCode2.UNAUTHORIZED,
|
|
1221
1590
|
"Session expired. Please reconnect and verify your PIN."
|
|
1222
1591
|
);
|
|
1223
1592
|
}
|
|
@@ -1295,23 +1664,25 @@ var AbcEvmProvider = class extends EventEmitter {
|
|
|
1295
1664
|
return this.eth_getTransactionCount(
|
|
1296
1665
|
Array.isArray(params) ? params : []
|
|
1297
1666
|
);
|
|
1298
|
-
case "eth_blockNumber":
|
|
1299
1667
|
case "eth_call":
|
|
1300
|
-
|
|
1668
|
+
return this.eth_call(params);
|
|
1301
1669
|
case "eth_getBalance":
|
|
1670
|
+
return this.eth_getBalance(params);
|
|
1671
|
+
case "eth_blockNumber":
|
|
1672
|
+
case "eth_gasPrice":
|
|
1302
1673
|
case "eth_getBlockByHash":
|
|
1303
1674
|
case "eth_getBlockByNumber":
|
|
1304
1675
|
case "eth_getCode":
|
|
1305
1676
|
case "eth_getStorageAt":
|
|
1306
1677
|
case "eth_getTransactionByHash":
|
|
1307
1678
|
case "eth_getTransactionReceipt":
|
|
1308
|
-
throw new
|
|
1309
|
-
|
|
1679
|
+
throw new ProviderRpcError2(
|
|
1680
|
+
ErrorCode2.UNSUPPORTED_METHOD,
|
|
1310
1681
|
`Method ${method} should be handled by RPC provider`
|
|
1311
1682
|
);
|
|
1312
1683
|
default:
|
|
1313
|
-
throw new
|
|
1314
|
-
|
|
1684
|
+
throw new ProviderRpcError2(
|
|
1685
|
+
ErrorCode2.UNSUPPORTED_METHOD,
|
|
1315
1686
|
`Method ${method} not supported`
|
|
1316
1687
|
);
|
|
1317
1688
|
}
|
|
@@ -1321,8 +1692,8 @@ var AbcEvmProvider = class extends EventEmitter {
|
|
|
1321
1692
|
*/
|
|
1322
1693
|
async eth_requestAccounts() {
|
|
1323
1694
|
if (!this.wallet) {
|
|
1324
|
-
throw new
|
|
1325
|
-
|
|
1695
|
+
throw new ProviderRpcError2(
|
|
1696
|
+
ErrorCode2.UNAUTHORIZED,
|
|
1326
1697
|
"Wallet not connected"
|
|
1327
1698
|
);
|
|
1328
1699
|
}
|
|
@@ -1348,14 +1719,14 @@ var AbcEvmProvider = class extends EventEmitter {
|
|
|
1348
1719
|
*/
|
|
1349
1720
|
async eth_sendTransaction(params) {
|
|
1350
1721
|
if (!this.wallet) {
|
|
1351
|
-
throw new
|
|
1352
|
-
|
|
1722
|
+
throw new ProviderRpcError2(
|
|
1723
|
+
ErrorCode2.UNAUTHORIZED,
|
|
1353
1724
|
"Wallet not connected"
|
|
1354
1725
|
);
|
|
1355
1726
|
}
|
|
1356
1727
|
if (!Array.isArray(params) || params.length === 0) {
|
|
1357
|
-
throw new
|
|
1358
|
-
|
|
1728
|
+
throw new ProviderRpcError2(
|
|
1729
|
+
ErrorCode2.INVALID_PARAMS,
|
|
1359
1730
|
"Invalid transaction params"
|
|
1360
1731
|
);
|
|
1361
1732
|
}
|
|
@@ -1406,25 +1777,35 @@ var AbcEvmProvider = class extends EventEmitter {
|
|
|
1406
1777
|
if (isContractDeployment) {
|
|
1407
1778
|
tx.to = "0x";
|
|
1408
1779
|
} else if (!tx.to) {
|
|
1409
|
-
throw new
|
|
1410
|
-
|
|
1780
|
+
throw new ProviderRpcError2(
|
|
1781
|
+
ErrorCode2.INVALID_PARAMS,
|
|
1411
1782
|
'Transaction must have "to" field'
|
|
1412
1783
|
);
|
|
1413
1784
|
}
|
|
1414
1785
|
const pinHash = getCredentialManager().getPinHash();
|
|
1415
1786
|
if (!pinHash) {
|
|
1416
|
-
throw new
|
|
1417
|
-
|
|
1787
|
+
throw new ProviderRpcError2(
|
|
1788
|
+
ErrorCode2.INTERNAL_ERROR,
|
|
1418
1789
|
"PIN hash not found. Please login again."
|
|
1419
1790
|
);
|
|
1420
1791
|
}
|
|
1421
1792
|
const hexValue = tx.value || "0x0";
|
|
1422
1793
|
const amountWei = BigInt(hexValue).toString();
|
|
1423
1794
|
const email = this.getRecoveryEmail();
|
|
1795
|
+
const chainKey = getChainKey(this.chainId);
|
|
1796
|
+
const showPending = getShowPendingTransaction();
|
|
1797
|
+
if (showPending) {
|
|
1798
|
+
showPending({
|
|
1799
|
+
txHash: "",
|
|
1800
|
+
network: chainKey,
|
|
1801
|
+
chain: "evm",
|
|
1802
|
+
explorerUrl: void 0
|
|
1803
|
+
});
|
|
1804
|
+
}
|
|
1424
1805
|
const api = this.getTalkenApiClientOrThrow();
|
|
1425
1806
|
const result = await this.withSigningCredentialRetry(
|
|
1426
1807
|
() => api.evm.sendTransaction({
|
|
1427
|
-
chainKey
|
|
1808
|
+
chainKey,
|
|
1428
1809
|
to: tx.to,
|
|
1429
1810
|
amountWei,
|
|
1430
1811
|
pin: pinHash,
|
|
@@ -1432,9 +1813,20 @@ var AbcEvmProvider = class extends EventEmitter {
|
|
|
1432
1813
|
gasLimit: tx.gas || tx.gasLimit,
|
|
1433
1814
|
maxFeePerGas: tx.maxFeePerGas,
|
|
1434
1815
|
maxPriorityFeePerGas: tx.maxPriorityFeePerGas,
|
|
1816
|
+
waitForReceipt: true,
|
|
1435
1817
|
...email && { email }
|
|
1436
1818
|
})
|
|
1437
1819
|
);
|
|
1820
|
+
const updateResult = getUpdateTransactionResult();
|
|
1821
|
+
if (updateResult) {
|
|
1822
|
+
updateResult({
|
|
1823
|
+
txHash: result.txHash,
|
|
1824
|
+
network: chainKey,
|
|
1825
|
+
chain: "evm",
|
|
1826
|
+
receipt: result.receipt ?? null,
|
|
1827
|
+
explorerUrl: getExplorerTxUrl(this.chainId, result.txHash)
|
|
1828
|
+
});
|
|
1829
|
+
}
|
|
1438
1830
|
return result.txHash;
|
|
1439
1831
|
}
|
|
1440
1832
|
/**
|
|
@@ -1442,14 +1834,14 @@ var AbcEvmProvider = class extends EventEmitter {
|
|
|
1442
1834
|
*/
|
|
1443
1835
|
async eth_signTransaction(params) {
|
|
1444
1836
|
if (!this.wallet) {
|
|
1445
|
-
throw new
|
|
1446
|
-
|
|
1837
|
+
throw new ProviderRpcError2(
|
|
1838
|
+
ErrorCode2.UNAUTHORIZED,
|
|
1447
1839
|
"Wallet not connected"
|
|
1448
1840
|
);
|
|
1449
1841
|
}
|
|
1450
1842
|
if (!Array.isArray(params) || params.length === 0) {
|
|
1451
|
-
throw new
|
|
1452
|
-
|
|
1843
|
+
throw new ProviderRpcError2(
|
|
1844
|
+
ErrorCode2.INVALID_PARAMS,
|
|
1453
1845
|
"Invalid transaction params"
|
|
1454
1846
|
);
|
|
1455
1847
|
}
|
|
@@ -1509,15 +1901,15 @@ var AbcEvmProvider = class extends EventEmitter {
|
|
|
1509
1901
|
async personal_sign(params) {
|
|
1510
1902
|
if (!this.wallet) {
|
|
1511
1903
|
console.error("[AbcProvider] \u274C Wallet not connected");
|
|
1512
|
-
throw new
|
|
1513
|
-
|
|
1904
|
+
throw new ProviderRpcError2(
|
|
1905
|
+
ErrorCode2.UNAUTHORIZED,
|
|
1514
1906
|
"Wallet not connected"
|
|
1515
1907
|
);
|
|
1516
1908
|
}
|
|
1517
1909
|
if (!Array.isArray(params) || params.length < 2) {
|
|
1518
1910
|
console.error("[AbcProvider] \u274C Invalid params:", params);
|
|
1519
|
-
throw new
|
|
1520
|
-
|
|
1911
|
+
throw new ProviderRpcError2(
|
|
1912
|
+
ErrorCode2.INVALID_PARAMS,
|
|
1521
1913
|
"Invalid personal_sign params"
|
|
1522
1914
|
);
|
|
1523
1915
|
}
|
|
@@ -1525,8 +1917,8 @@ var AbcEvmProvider = class extends EventEmitter {
|
|
|
1525
1917
|
const [message, address] = params;
|
|
1526
1918
|
if (address.toLowerCase() !== this.wallet.address.toLowerCase()) {
|
|
1527
1919
|
console.error("[AbcProvider] \u274C Address mismatch");
|
|
1528
|
-
throw new
|
|
1529
|
-
|
|
1920
|
+
throw new ProviderRpcError2(
|
|
1921
|
+
ErrorCode2.INVALID_PARAMS,
|
|
1530
1922
|
"Address does not match connected wallet"
|
|
1531
1923
|
);
|
|
1532
1924
|
}
|
|
@@ -1550,8 +1942,8 @@ var AbcEvmProvider = class extends EventEmitter {
|
|
|
1550
1942
|
*/
|
|
1551
1943
|
async eth_sign(params) {
|
|
1552
1944
|
if (!Array.isArray(params) || params.length < 2) {
|
|
1553
|
-
throw new
|
|
1554
|
-
|
|
1945
|
+
throw new ProviderRpcError2(
|
|
1946
|
+
ErrorCode2.INVALID_PARAMS,
|
|
1555
1947
|
"Invalid eth_sign params"
|
|
1556
1948
|
);
|
|
1557
1949
|
}
|
|
@@ -1563,22 +1955,22 @@ var AbcEvmProvider = class extends EventEmitter {
|
|
|
1563
1955
|
*/
|
|
1564
1956
|
async eth_signTypedData(params) {
|
|
1565
1957
|
if (!this.wallet) {
|
|
1566
|
-
throw new
|
|
1567
|
-
|
|
1958
|
+
throw new ProviderRpcError2(
|
|
1959
|
+
ErrorCode2.UNAUTHORIZED,
|
|
1568
1960
|
"Wallet not connected"
|
|
1569
1961
|
);
|
|
1570
1962
|
}
|
|
1571
1963
|
if (!Array.isArray(params) || params.length < 2) {
|
|
1572
|
-
throw new
|
|
1573
|
-
|
|
1964
|
+
throw new ProviderRpcError2(
|
|
1965
|
+
ErrorCode2.INVALID_PARAMS,
|
|
1574
1966
|
"Invalid signTypedData params"
|
|
1575
1967
|
);
|
|
1576
1968
|
}
|
|
1577
1969
|
await this.callInterceptor("eth_signTypedData_v4", params);
|
|
1578
1970
|
const [address, typedData] = params;
|
|
1579
1971
|
if (address.toLowerCase() !== this.wallet.address.toLowerCase()) {
|
|
1580
|
-
throw new
|
|
1581
|
-
|
|
1972
|
+
throw new ProviderRpcError2(
|
|
1973
|
+
ErrorCode2.INVALID_PARAMS,
|
|
1582
1974
|
"Address does not match connected wallet"
|
|
1583
1975
|
);
|
|
1584
1976
|
}
|
|
@@ -1615,27 +2007,27 @@ var AbcEvmProvider = class extends EventEmitter {
|
|
|
1615
2007
|
*/
|
|
1616
2008
|
async eth_signAuthorization(params) {
|
|
1617
2009
|
if (!this.wallet) {
|
|
1618
|
-
throw new
|
|
1619
|
-
|
|
2010
|
+
throw new ProviderRpcError2(
|
|
2011
|
+
ErrorCode2.UNAUTHORIZED,
|
|
1620
2012
|
"Wallet not connected"
|
|
1621
2013
|
);
|
|
1622
2014
|
}
|
|
1623
2015
|
if (!Array.isArray(params) || params.length < 2) {
|
|
1624
|
-
throw new
|
|
1625
|
-
|
|
2016
|
+
throw new ProviderRpcError2(
|
|
2017
|
+
ErrorCode2.INVALID_PARAMS,
|
|
1626
2018
|
"Invalid signAuthorization params"
|
|
1627
2019
|
);
|
|
1628
2020
|
}
|
|
1629
2021
|
const [address, authorization] = params;
|
|
1630
2022
|
if (address.toLowerCase() !== this.wallet.address.toLowerCase()) {
|
|
1631
|
-
throw new
|
|
1632
|
-
|
|
2023
|
+
throw new ProviderRpcError2(
|
|
2024
|
+
ErrorCode2.INVALID_PARAMS,
|
|
1633
2025
|
"Address does not match connected wallet"
|
|
1634
2026
|
);
|
|
1635
2027
|
}
|
|
1636
2028
|
if (!authorization?.address || authorization.chainId == null || authorization.nonce == null) {
|
|
1637
|
-
throw new
|
|
1638
|
-
|
|
2029
|
+
throw new ProviderRpcError2(
|
|
2030
|
+
ErrorCode2.INVALID_PARAMS,
|
|
1639
2031
|
"Authorization payload is incomplete"
|
|
1640
2032
|
);
|
|
1641
2033
|
}
|
|
@@ -1666,8 +2058,8 @@ var AbcEvmProvider = class extends EventEmitter {
|
|
|
1666
2058
|
*/
|
|
1667
2059
|
async wallet_switchEthereumChain(params) {
|
|
1668
2060
|
if (!Array.isArray(params) || params.length === 0) {
|
|
1669
|
-
throw new
|
|
1670
|
-
|
|
2061
|
+
throw new ProviderRpcError2(
|
|
2062
|
+
ErrorCode2.INVALID_PARAMS,
|
|
1671
2063
|
"Invalid switchEthereumChain params"
|
|
1672
2064
|
);
|
|
1673
2065
|
}
|
|
@@ -1696,8 +2088,8 @@ var AbcEvmProvider = class extends EventEmitter {
|
|
|
1696
2088
|
async eth_getTransactionCount(params) {
|
|
1697
2089
|
const address = params[0]?.toLowerCase();
|
|
1698
2090
|
if (!address) {
|
|
1699
|
-
throw new
|
|
1700
|
-
|
|
2091
|
+
throw new ProviderRpcError2(
|
|
2092
|
+
ErrorCode2.INVALID_PARAMS,
|
|
1701
2093
|
"Missing address parameter"
|
|
1702
2094
|
);
|
|
1703
2095
|
}
|
|
@@ -1718,8 +2110,8 @@ var AbcEvmProvider = class extends EventEmitter {
|
|
|
1718
2110
|
"[AbcEvmProvider] \u274C Failed to get transaction count from ABC WaaS:",
|
|
1719
2111
|
error
|
|
1720
2112
|
);
|
|
1721
|
-
throw new
|
|
1722
|
-
|
|
2113
|
+
throw new ProviderRpcError2(
|
|
2114
|
+
ErrorCode2.INTERNAL_ERROR,
|
|
1723
2115
|
`Failed to get transaction count: ${error instanceof Error ? error.message : String(error)}`
|
|
1724
2116
|
);
|
|
1725
2117
|
}
|
|
@@ -1730,15 +2122,15 @@ var AbcEvmProvider = class extends EventEmitter {
|
|
|
1730
2122
|
*/
|
|
1731
2123
|
async eth_estimateGas(params) {
|
|
1732
2124
|
if (!Array.isArray(params) || params.length === 0) {
|
|
1733
|
-
throw new
|
|
1734
|
-
|
|
2125
|
+
throw new ProviderRpcError2(
|
|
2126
|
+
ErrorCode2.INVALID_PARAMS,
|
|
1735
2127
|
"Invalid estimateGas params"
|
|
1736
2128
|
);
|
|
1737
2129
|
}
|
|
1738
2130
|
const tx = params[0];
|
|
1739
2131
|
if (!tx.to) {
|
|
1740
|
-
throw new
|
|
1741
|
-
|
|
2132
|
+
throw new ProviderRpcError2(
|
|
2133
|
+
ErrorCode2.INVALID_PARAMS,
|
|
1742
2134
|
'Transaction must have "to" field'
|
|
1743
2135
|
);
|
|
1744
2136
|
}
|
|
@@ -1765,6 +2157,60 @@ var AbcEvmProvider = class extends EventEmitter {
|
|
|
1765
2157
|
return "0x5208";
|
|
1766
2158
|
}
|
|
1767
2159
|
}
|
|
2160
|
+
/**
|
|
2161
|
+
* Execute read-only eth_call via talken-api
|
|
2162
|
+
*/
|
|
2163
|
+
async eth_call(params) {
|
|
2164
|
+
const p = Array.isArray(params) ? params : [];
|
|
2165
|
+
const tx = p[0];
|
|
2166
|
+
if (!tx?.to || !tx?.data) {
|
|
2167
|
+
throw new ProviderRpcError2(
|
|
2168
|
+
ErrorCode2.INVALID_PARAMS,
|
|
2169
|
+
"eth_call requires to and data"
|
|
2170
|
+
);
|
|
2171
|
+
}
|
|
2172
|
+
try {
|
|
2173
|
+
const api = this.getTalkenApiClientOrThrow();
|
|
2174
|
+
const response = await api.evm.ethCall({
|
|
2175
|
+
network: getNetworkName(this.chainId),
|
|
2176
|
+
to: tx.to,
|
|
2177
|
+
data: tx.data,
|
|
2178
|
+
from: tx.from || this.wallet?.address
|
|
2179
|
+
});
|
|
2180
|
+
return response?.result ?? response?.data ?? "0x";
|
|
2181
|
+
} catch (error) {
|
|
2182
|
+
throw new ProviderRpcError2(
|
|
2183
|
+
ErrorCode2.INTERNAL_ERROR,
|
|
2184
|
+
`eth_call failed: ${error instanceof Error ? error.message : String(error)}`
|
|
2185
|
+
);
|
|
2186
|
+
}
|
|
2187
|
+
}
|
|
2188
|
+
/**
|
|
2189
|
+
* Get native balance via talken-api
|
|
2190
|
+
*/
|
|
2191
|
+
async eth_getBalance(params) {
|
|
2192
|
+
const p = Array.isArray(params) ? params : [];
|
|
2193
|
+
const address = p[0] || this.wallet?.address;
|
|
2194
|
+
if (!address) {
|
|
2195
|
+
throw new ProviderRpcError2(
|
|
2196
|
+
ErrorCode2.INVALID_PARAMS,
|
|
2197
|
+
"Missing address parameter"
|
|
2198
|
+
);
|
|
2199
|
+
}
|
|
2200
|
+
try {
|
|
2201
|
+
const api = this.getTalkenApiClientOrThrow();
|
|
2202
|
+
const response = await api.evm.getBalance(
|
|
2203
|
+
getNetworkName(this.chainId),
|
|
2204
|
+
address
|
|
2205
|
+
);
|
|
2206
|
+
return response?.balance ?? "0x0";
|
|
2207
|
+
} catch (error) {
|
|
2208
|
+
throw new ProviderRpcError2(
|
|
2209
|
+
ErrorCode2.INTERNAL_ERROR,
|
|
2210
|
+
`eth_getBalance failed: ${error instanceof Error ? error.message : String(error)}`
|
|
2211
|
+
);
|
|
2212
|
+
}
|
|
2213
|
+
}
|
|
1768
2214
|
/**
|
|
1769
2215
|
* Check if connected
|
|
1770
2216
|
*/
|
|
@@ -2143,6 +2589,21 @@ var TalkenEvmModule = class {
|
|
|
2143
2589
|
const qs = new URLSearchParams({ network, address }).toString();
|
|
2144
2590
|
return this.client.get(`${TALKEN_API_ENDPOINTS.NONCE}?${qs}`);
|
|
2145
2591
|
}
|
|
2592
|
+
/**
|
|
2593
|
+
* Get native balance for address
|
|
2594
|
+
* GET /wallet/address/balance?network=&address=
|
|
2595
|
+
*/
|
|
2596
|
+
async getBalance(network, address) {
|
|
2597
|
+
const qs = new URLSearchParams({ network, address }).toString();
|
|
2598
|
+
return this.client.get(`${TALKEN_API_ENDPOINTS.ADDRESS_BALANCE}?${qs}`);
|
|
2599
|
+
}
|
|
2600
|
+
/**
|
|
2601
|
+
* Execute read-only eth_call
|
|
2602
|
+
* POST /wallet/contract/eth-call { network, to, data, from? }
|
|
2603
|
+
*/
|
|
2604
|
+
async ethCall(params) {
|
|
2605
|
+
return this.client.post(TALKEN_API_ENDPOINTS.ETH_CALL, params);
|
|
2606
|
+
}
|
|
2146
2607
|
};
|
|
2147
2608
|
var TalkenSolanaModule = class {
|
|
2148
2609
|
constructor(client) {
|
|
@@ -2314,6 +2775,24 @@ var TalkenTronModule = class {
|
|
|
2314
2775
|
params
|
|
2315
2776
|
);
|
|
2316
2777
|
}
|
|
2778
|
+
/**
|
|
2779
|
+
* Get TRON account info (balance, resource, permissions)
|
|
2780
|
+
* GET /wallet/tron?mode=account&network=&address=
|
|
2781
|
+
*/
|
|
2782
|
+
async getAccount(network, address) {
|
|
2783
|
+
return this.client.get(
|
|
2784
|
+
`${TALKEN_API_ENDPOINTS.TRON_UTIL}?mode=account&network=${encodeURIComponent(network)}&address=${encodeURIComponent(address)}`
|
|
2785
|
+
);
|
|
2786
|
+
}
|
|
2787
|
+
/**
|
|
2788
|
+
* Get TRC20 token balance
|
|
2789
|
+
* GET /wallet/tron?mode=trc20Balance&network=&address=&contractAddress=
|
|
2790
|
+
*/
|
|
2791
|
+
async getTrc20Balance(network, address, contractAddress) {
|
|
2792
|
+
return this.client.get(
|
|
2793
|
+
`${TALKEN_API_ENDPOINTS.TRON_UTIL}?mode=trc20Balance&network=${encodeURIComponent(network)}&address=${encodeURIComponent(address)}&contractAddress=${encodeURIComponent(contractAddress)}`
|
|
2794
|
+
);
|
|
2795
|
+
}
|
|
2317
2796
|
};
|
|
2318
2797
|
var TalkenWalletscanModule = class {
|
|
2319
2798
|
constructor(client) {
|
|
@@ -2722,7 +3201,11 @@ function abcConnector(options) {
|
|
|
2722
3201
|
defaultChainId: config.defaultChainId
|
|
2723
3202
|
});
|
|
2724
3203
|
setTalkenApiClient(talkenApi);
|
|
2725
|
-
const
|
|
3204
|
+
const isAccessKeyMode = !!config.accessKey;
|
|
3205
|
+
const provider = isAccessKeyMode ? new AbcAccessKeyProvider(
|
|
3206
|
+
config.accessKey,
|
|
3207
|
+
resolveTalkenApiUrl(config.talkenApiUrl)
|
|
3208
|
+
) : createAbcEvmProvider(talkenApi);
|
|
2726
3209
|
let accountsChangedHandler;
|
|
2727
3210
|
let chainChangedHandler;
|
|
2728
3211
|
let disconnectHandler;
|
|
@@ -2739,13 +3222,59 @@ function abcConnector(options) {
|
|
|
2739
3222
|
if (!authState || !authState.isAuthenticated || !authState.wallet) {
|
|
2740
3223
|
throw new Error("ABC_LOGIN_REQUIRED");
|
|
2741
3224
|
}
|
|
2742
|
-
|
|
2743
|
-
|
|
2744
|
-
|
|
2745
|
-
|
|
2746
|
-
|
|
2747
|
-
|
|
2748
|
-
|
|
3225
|
+
if (isAccessKeyMode) {
|
|
3226
|
+
let w = authState.wallet;
|
|
3227
|
+
if (!w.uid || !w.sessionId) {
|
|
3228
|
+
try {
|
|
3229
|
+
const apiUrl = resolveTalkenApiUrl(config.talkenApiUrl);
|
|
3230
|
+
const res = await fetch(`${apiUrl}/wallet/mpc`, {
|
|
3231
|
+
method: "POST",
|
|
3232
|
+
headers: {
|
|
3233
|
+
"Content-Type": "application/json",
|
|
3234
|
+
"X-Access-Key": config.accessKey
|
|
3235
|
+
},
|
|
3236
|
+
body: JSON.stringify({ action: "info" })
|
|
3237
|
+
});
|
|
3238
|
+
const data = await res.json();
|
|
3239
|
+
const acct = data?.data?.accounts?.[0] || data?.data;
|
|
3240
|
+
if (acct?.ethAddress || acct?.address) {
|
|
3241
|
+
w = {
|
|
3242
|
+
address: acct.ethAddress || acct.address || w.address,
|
|
3243
|
+
chainId: w.chainId || config.defaultChainId || 1,
|
|
3244
|
+
uid: acct.uid || data?.data?.uid || "",
|
|
3245
|
+
sessionId: acct.sid || acct.sessionId || "",
|
|
3246
|
+
keyId: acct.keyId || (acct.wid != null ? String(acct.wid) : "") || (data?.data?.wid != null ? String(data.data.wid) : ""),
|
|
3247
|
+
encryptedShare: acct.encryptedShare || acct.pvencstr || "",
|
|
3248
|
+
sid: acct.sid || "",
|
|
3249
|
+
type: "evm",
|
|
3250
|
+
email: authState.user?.email || acct.email || data?.data?.email || ""
|
|
3251
|
+
};
|
|
3252
|
+
saveAuthState({ ...authState, wallet: w });
|
|
3253
|
+
}
|
|
3254
|
+
} catch (_) {
|
|
3255
|
+
}
|
|
3256
|
+
}
|
|
3257
|
+
const fullWallet = {
|
|
3258
|
+
address: w.address,
|
|
3259
|
+
chainId: w.chainId || config.defaultChainId || 1,
|
|
3260
|
+
uid: w.uid || "",
|
|
3261
|
+
sessionId: w.sessionId || "",
|
|
3262
|
+
keyId: w.keyId || "",
|
|
3263
|
+
encryptedShare: w.encryptedShare || "",
|
|
3264
|
+
sid: w.sid || "",
|
|
3265
|
+
type: "evm",
|
|
3266
|
+
email: w.email || authState.user?.email || ""
|
|
3267
|
+
};
|
|
3268
|
+
provider.setWallet(fullWallet);
|
|
3269
|
+
} else {
|
|
3270
|
+
provider.setWallet(authState.wallet);
|
|
3271
|
+
if (authState.accessToken && authState.refreshToken && authState.expiresAt) {
|
|
3272
|
+
talkenApi.setTokens(
|
|
3273
|
+
authState.accessToken,
|
|
3274
|
+
authState.refreshToken,
|
|
3275
|
+
authState.expiresAt
|
|
3276
|
+
);
|
|
3277
|
+
}
|
|
2749
3278
|
}
|
|
2750
3279
|
const accounts = await provider.request({
|
|
2751
3280
|
method: "eth_requestAccounts"
|
|
@@ -2866,6 +3395,13 @@ function abcConnector(options) {
|
|
|
2866
3395
|
*/
|
|
2867
3396
|
async isAuthorized() {
|
|
2868
3397
|
try {
|
|
3398
|
+
if (isAccessKeyMode) {
|
|
3399
|
+
if (provider.isConnected())
|
|
3400
|
+
return true;
|
|
3401
|
+
const hasKey = !!config.accessKey || typeof localStorage !== "undefined" && !!localStorage.getItem("talken_ak");
|
|
3402
|
+
const authState2 = loadAuthState();
|
|
3403
|
+
return hasKey && !!authState2?.wallet?.address;
|
|
3404
|
+
}
|
|
2869
3405
|
const authState = loadAuthState();
|
|
2870
3406
|
if (!authState || !authState.isAuthenticated) {
|
|
2871
3407
|
return false;
|
|
@@ -2976,6 +3512,7 @@ var abcWallet = (specificOptions) => ({ projectId }) => {
|
|
|
2976
3512
|
debug: specificOptions?.environment === "development"
|
|
2977
3513
|
});
|
|
2978
3514
|
setTalkenApiClient2(talkenApi);
|
|
3515
|
+
const accessKey = specificOptions?.accessKey || (typeof localStorage !== "undefined" ? localStorage.getItem("talken_ak") : null) || null;
|
|
2979
3516
|
const config = {
|
|
2980
3517
|
talkenApiUrl,
|
|
2981
3518
|
apiKey: specificOptions?.apiKey,
|
|
@@ -2985,7 +3522,8 @@ var abcWallet = (specificOptions) => ({ projectId }) => {
|
|
|
2985
3522
|
defaultChainId: specificOptions?.defaultChainId,
|
|
2986
3523
|
defaultSolanaNetwork: specificOptions?.defaultSolanaNetwork,
|
|
2987
3524
|
defaultBitcoinNetwork: specificOptions?.defaultBitcoinNetwork,
|
|
2988
|
-
projectId
|
|
3525
|
+
projectId,
|
|
3526
|
+
...accessKey && { accessKey }
|
|
2989
3527
|
};
|
|
2990
3528
|
return {
|
|
2991
3529
|
id: ABC_WALLET_METADATA.id,
|
|
@@ -2998,6 +3536,7 @@ var abcWallet = (specificOptions) => ({ projectId }) => {
|
|
|
2998
3536
|
// No download URLs for embedded wallet
|
|
2999
3537
|
downloadUrls: void 0,
|
|
3000
3538
|
// Create connector - wrapper function required by Wallet type
|
|
3539
|
+
// If accessKey exists, abcConnector will use AbcAccessKeyProvider internally
|
|
3001
3540
|
createConnector: (_walletDetails) => abcConnector({ config }),
|
|
3002
3541
|
// Embedded wallet always available
|
|
3003
3542
|
hidden: () => false
|
|
@@ -3527,7 +4066,7 @@ import { getTalkenApiClient as getTalkenApiClient10 } from "@talken/talkenkit";
|
|
|
3527
4066
|
function isTalkenApiClient(client) {
|
|
3528
4067
|
return typeof client?.bitcoin?.getUtxos === "function";
|
|
3529
4068
|
}
|
|
3530
|
-
var
|
|
4069
|
+
var EventEmitter3 = class {
|
|
3531
4070
|
constructor() {
|
|
3532
4071
|
this.events = /* @__PURE__ */ new Map();
|
|
3533
4072
|
}
|
|
@@ -3600,7 +4139,7 @@ var BITCOIN_NETWORKS = {
|
|
|
3600
4139
|
explorer: "https://blockstream.info/testnet"
|
|
3601
4140
|
}
|
|
3602
4141
|
};
|
|
3603
|
-
var AbcBitcoinProvider = class extends
|
|
4142
|
+
var AbcBitcoinProvider = class extends EventEmitter3 {
|
|
3604
4143
|
constructor(client) {
|
|
3605
4144
|
super();
|
|
3606
4145
|
this.wallet = null;
|
|
@@ -4371,7 +4910,11 @@ function createAbcBitcoinConnector(config) {
|
|
|
4371
4910
|
}
|
|
4372
4911
|
|
|
4373
4912
|
// src/wallets/walletConnectors/abcWallet/abcSolanaProvider.ts
|
|
4374
|
-
import {
|
|
4913
|
+
import {
|
|
4914
|
+
getShowPendingTransaction as getShowPendingTransaction2,
|
|
4915
|
+
getTalkenApiClient as getTalkenApiClient12,
|
|
4916
|
+
getUpdateTransactionResult as getUpdateTransactionResult2
|
|
4917
|
+
} from "@talken/talkenkit";
|
|
4375
4918
|
|
|
4376
4919
|
// src/utils/apiClientFactory.ts
|
|
4377
4920
|
function createWalletscanApi() {
|
|
@@ -4391,7 +4934,7 @@ function createSolanaApi() {
|
|
|
4391
4934
|
}
|
|
4392
4935
|
|
|
4393
4936
|
// src/wallets/walletConnectors/abcWallet/abcSolanaProvider.ts
|
|
4394
|
-
var
|
|
4937
|
+
var EventEmitter4 = class {
|
|
4395
4938
|
constructor() {
|
|
4396
4939
|
this.events = /* @__PURE__ */ new Map();
|
|
4397
4940
|
}
|
|
@@ -4450,7 +4993,7 @@ var SolanaProviderError = class extends Error {
|
|
|
4450
4993
|
this.name = "SolanaProviderError";
|
|
4451
4994
|
}
|
|
4452
4995
|
};
|
|
4453
|
-
var AbcSolanaProvider = class extends
|
|
4996
|
+
var AbcSolanaProvider = class extends EventEmitter4 {
|
|
4454
4997
|
constructor(talkenApi) {
|
|
4455
4998
|
super();
|
|
4456
4999
|
this.wallet = null;
|
|
@@ -4707,6 +5250,15 @@ var AbcSolanaProvider = class extends EventEmitter3 {
|
|
|
4707
5250
|
});
|
|
4708
5251
|
const api = this.getTalkenApiClientOrThrow();
|
|
4709
5252
|
const apiNetwork = this.wallet.network === "solana" ? "solana" : "solana_devnet";
|
|
5253
|
+
const showPending = getShowPendingTransaction2();
|
|
5254
|
+
if (showPending) {
|
|
5255
|
+
showPending({
|
|
5256
|
+
txHash: "",
|
|
5257
|
+
network: apiNetwork,
|
|
5258
|
+
chain: "solana",
|
|
5259
|
+
explorerUrl: void 0
|
|
5260
|
+
});
|
|
5261
|
+
}
|
|
4710
5262
|
if (params.mintAddress) {
|
|
4711
5263
|
const walletscanApi = createWalletscanApi();
|
|
4712
5264
|
const tokenMeta = await walletscanApi.getContractTokenWithTimeout({
|
|
@@ -4722,9 +5274,11 @@ var AbcSolanaProvider = class extends EventEmitter3 {
|
|
|
4722
5274
|
amount: String(rawAmount),
|
|
4723
5275
|
decimals,
|
|
4724
5276
|
network: apiNetwork,
|
|
4725
|
-
pin: pinHash
|
|
5277
|
+
pin: pinHash,
|
|
5278
|
+
waitForConfirmation: true
|
|
4726
5279
|
});
|
|
4727
5280
|
console.log("[AbcSolanaProvider] SPL transfer result:", result2);
|
|
5281
|
+
this.updateTransactionResult(result2, apiNetwork);
|
|
4728
5282
|
return { signature: result2.txHash };
|
|
4729
5283
|
}
|
|
4730
5284
|
const { LAMPORTS_PER_SOL } = await import("@solana/web3.js");
|
|
@@ -4739,9 +5293,11 @@ var AbcSolanaProvider = class extends EventEmitter3 {
|
|
|
4739
5293
|
toAddress: params.toAddress,
|
|
4740
5294
|
amountLamports: String(amountLamports),
|
|
4741
5295
|
network: apiNetwork,
|
|
4742
|
-
pin: pinHash
|
|
5296
|
+
pin: pinHash,
|
|
5297
|
+
waitForConfirmation: true
|
|
4743
5298
|
});
|
|
4744
5299
|
console.log("[AbcSolanaProvider] native transfer result:", result);
|
|
5300
|
+
this.updateTransactionResult(result, apiNetwork);
|
|
4745
5301
|
return { signature: result.txHash };
|
|
4746
5302
|
} catch (error) {
|
|
4747
5303
|
console.error("[AbcSolanaProvider] transfer FAILED:", {
|
|
@@ -4814,10 +5370,38 @@ var AbcSolanaProvider = class extends EventEmitter3 {
|
|
|
4814
5370
|
);
|
|
4815
5371
|
}
|
|
4816
5372
|
}
|
|
5373
|
+
updateTransactionResult(result, network) {
|
|
5374
|
+
const updateResult = getUpdateTransactionResult2();
|
|
5375
|
+
if (!updateResult)
|
|
5376
|
+
return;
|
|
5377
|
+
let receipt = result.receipt;
|
|
5378
|
+
if (!receipt && result.confirmation) {
|
|
5379
|
+
const data = result.confirmation?.data?.result ?? result.confirmation?.result ?? result.confirmation;
|
|
5380
|
+
const slot = data?.slot;
|
|
5381
|
+
const meta = data?.meta;
|
|
5382
|
+
receipt = {
|
|
5383
|
+
status: meta?.err === null ? 1 : 0,
|
|
5384
|
+
blockNumber: slot ?? null,
|
|
5385
|
+
gasUsed: meta?.fee != null ? String(meta.fee) : null
|
|
5386
|
+
};
|
|
5387
|
+
}
|
|
5388
|
+
const cluster = network.includes("devnet") ? "?cluster=devnet" : "";
|
|
5389
|
+
updateResult({
|
|
5390
|
+
txHash: result.txHash,
|
|
5391
|
+
network,
|
|
5392
|
+
chain: "solana",
|
|
5393
|
+
receipt,
|
|
5394
|
+
explorerUrl: `https://explorer.solana.com/tx/${result.txHash}${cluster}`
|
|
5395
|
+
});
|
|
5396
|
+
}
|
|
4817
5397
|
};
|
|
4818
5398
|
|
|
4819
5399
|
// src/wallets/walletConnectors/abcWallet/abcTronProvider.ts
|
|
4820
|
-
import {
|
|
5400
|
+
import {
|
|
5401
|
+
getShowPendingTransaction as getShowPendingTransaction3,
|
|
5402
|
+
getTalkenApiClient as getTalkenApiClient13,
|
|
5403
|
+
getUpdateTransactionResult as getUpdateTransactionResult3
|
|
5404
|
+
} from "@talken/talkenkit";
|
|
4821
5405
|
import { keccak256 } from "viem";
|
|
4822
5406
|
function isTalkenApiClient2(client) {
|
|
4823
5407
|
return typeof client?.tron?.transferTrx === "function";
|
|
@@ -4851,7 +5435,7 @@ var TRON_NETWORKS = {
|
|
|
4851
5435
|
explorer: "https://nile.tronscan.org"
|
|
4852
5436
|
}
|
|
4853
5437
|
};
|
|
4854
|
-
var
|
|
5438
|
+
var EventEmitter5 = class {
|
|
4855
5439
|
constructor() {
|
|
4856
5440
|
this.events = /* @__PURE__ */ new Map();
|
|
4857
5441
|
}
|
|
@@ -4891,7 +5475,7 @@ var EventEmitter4 = class {
|
|
|
4891
5475
|
return this;
|
|
4892
5476
|
}
|
|
4893
5477
|
};
|
|
4894
|
-
var AbcTronProvider = class extends
|
|
5478
|
+
var AbcTronProvider = class extends EventEmitter5 {
|
|
4895
5479
|
constructor(client) {
|
|
4896
5480
|
super();
|
|
4897
5481
|
this.wallet = null;
|
|
@@ -5138,6 +5722,7 @@ ${msgBytes.length}`
|
|
|
5138
5722
|
toAddress: params.toAddress,
|
|
5139
5723
|
amountSun: amountRaw,
|
|
5140
5724
|
pin: pinHash,
|
|
5725
|
+
waitForConfirmation: true,
|
|
5141
5726
|
...email && { email }
|
|
5142
5727
|
} : {
|
|
5143
5728
|
kind: "trc20",
|
|
@@ -5147,10 +5732,21 @@ ${msgBytes.length}`
|
|
|
5147
5732
|
amount: amountRaw,
|
|
5148
5733
|
feeLimit: params.feeLimit,
|
|
5149
5734
|
pin: pinHash,
|
|
5735
|
+
waitForConfirmation: true,
|
|
5150
5736
|
...email && { email }
|
|
5151
5737
|
};
|
|
5738
|
+
const showPending = getShowPendingTransaction3();
|
|
5739
|
+
if (showPending) {
|
|
5740
|
+
showPending({
|
|
5741
|
+
txHash: "",
|
|
5742
|
+
network: this.network.type,
|
|
5743
|
+
chain: "tron",
|
|
5744
|
+
explorerUrl: void 0
|
|
5745
|
+
});
|
|
5746
|
+
}
|
|
5152
5747
|
const result = await api.tron.transferTrx(request);
|
|
5153
5748
|
const txHash = result.txHash;
|
|
5749
|
+
this.updateTransactionResult(result);
|
|
5154
5750
|
console.log(
|
|
5155
5751
|
`[TronProvider] \u2705 ${txType === "NATIVE" ? "TRX" : "TRC-20"} transaction complete via TalkenApiClient:`,
|
|
5156
5752
|
txHash
|
|
@@ -5197,6 +5793,33 @@ ${msgBytes.length}`
|
|
|
5197
5793
|
network: this.network.type
|
|
5198
5794
|
};
|
|
5199
5795
|
}
|
|
5796
|
+
updateTransactionResult(result) {
|
|
5797
|
+
const updateResult = getUpdateTransactionResult3();
|
|
5798
|
+
if (!updateResult)
|
|
5799
|
+
return;
|
|
5800
|
+
let receipt = result.receipt;
|
|
5801
|
+
if (!receipt && result.confirmation) {
|
|
5802
|
+
const conf = result.confirmation;
|
|
5803
|
+
const info = conf?.info ?? conf;
|
|
5804
|
+
const tx = conf?.transaction ?? conf;
|
|
5805
|
+
const blockNumber = info?.blockNumber ?? info?.result?.blockNumber ?? null;
|
|
5806
|
+
const rcpt = info?.receipt ?? info?.result?.receipt;
|
|
5807
|
+
const ret = tx?.ret ?? tx?.result?.ret;
|
|
5808
|
+
const contractRet = Array.isArray(ret) ? ret[0]?.contractRet : void 0;
|
|
5809
|
+
receipt = {
|
|
5810
|
+
status: contractRet === "SUCCESS" ? 1 : contractRet ? 0 : null,
|
|
5811
|
+
blockNumber,
|
|
5812
|
+
gasUsed: rcpt?.energy_usage_total != null ? String(rcpt.energy_usage_total) : null
|
|
5813
|
+
};
|
|
5814
|
+
}
|
|
5815
|
+
updateResult({
|
|
5816
|
+
txHash: result.txHash,
|
|
5817
|
+
network: this.network.type,
|
|
5818
|
+
chain: "tron",
|
|
5819
|
+
receipt,
|
|
5820
|
+
explorerUrl: `${this.network.explorer}/#/transaction/${result.txHash}`
|
|
5821
|
+
});
|
|
5822
|
+
}
|
|
5200
5823
|
};
|
|
5201
5824
|
|
|
5202
5825
|
// src/wallets/walletConnectors/abcWallet/walletGeneration.ts
|