@swapkit/wallets 3.0.0-beta.2 → 3.0.0-beta.20
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/{chunk-p1kdg37m.js → chunk-38ztynv0.js} +1 -1
- package/dist/{chunk-p1kdg37m.js.map → chunk-38ztynv0.js.map} +1 -1
- package/dist/chunk-4ef2xs46.js +3 -0
- package/dist/chunk-4ef2xs46.js.map +10 -0
- package/dist/chunk-qgv1myym.js +3 -0
- package/dist/chunk-qgv1myym.js.map +10 -0
- package/dist/chunk-s6xqbsy0.js +4 -0
- package/dist/{chunk-czhtd6cy.js.map → chunk-s6xqbsy0.js.map} +3 -3
- package/dist/{chunk-qadd75nn.js → chunk-sygzrjje.js} +2 -2
- package/dist/{chunk-qadd75nn.js.map → chunk-sygzrjje.js.map} +3 -3
- package/dist/chunk-w07sv0jv.js +3 -0
- package/dist/chunk-w07sv0jv.js.map +10 -0
- package/dist/chunk-y0g3prs9.js +3 -0
- package/dist/chunk-y0g3prs9.js.map +10 -0
- package/dist/src/bitget/index.cjs +2 -2
- package/dist/src/bitget/index.cjs.map +3 -3
- package/dist/src/bitget/index.js +2 -2
- package/dist/src/bitget/index.js.map +3 -3
- package/dist/src/coinbase/index.js +1 -1
- package/dist/src/ctrl/index.cjs +2 -2
- package/dist/src/ctrl/index.cjs.map +3 -3
- package/dist/src/ctrl/index.js +2 -2
- package/dist/src/ctrl/index.js.map +3 -3
- package/dist/src/evm-extensions/index.js +1 -1
- package/dist/src/exodus/index.cjs +2 -2
- package/dist/src/exodus/index.cjs.map +3 -3
- package/dist/src/exodus/index.js +2 -2
- package/dist/src/exodus/index.js.map +3 -3
- package/dist/src/index.js +1 -1
- package/dist/src/keepkey/index.cjs +2 -2
- package/dist/src/keepkey/index.cjs.map +4 -4
- package/dist/src/keepkey/index.js +2 -2
- package/dist/src/keepkey/index.js.map +4 -4
- package/dist/src/keepkey-bex/index.js +1 -1
- package/dist/src/keplr/index.js +1 -1
- package/dist/src/keystore/index.cjs +2 -2
- package/dist/src/keystore/index.cjs.map +3 -3
- package/dist/src/keystore/index.js +2 -2
- package/dist/src/keystore/index.js.map +3 -3
- package/dist/src/ledger/index.cjs +3 -3
- package/dist/src/ledger/index.cjs.map +12 -11
- package/dist/src/ledger/index.js +3 -3
- package/dist/src/ledger/index.js.map +12 -11
- package/dist/src/okx/index.cjs +2 -2
- package/dist/src/okx/index.cjs.map +3 -3
- package/dist/src/okx/index.js +2 -2
- package/dist/src/okx/index.js.map +3 -3
- package/dist/src/onekey/index.cjs +2 -2
- package/dist/src/onekey/index.cjs.map +3 -3
- package/dist/src/onekey/index.js +2 -2
- package/dist/src/onekey/index.js.map +3 -3
- package/dist/src/phantom/index.js +1 -1
- package/dist/src/polkadotjs/index.js +1 -1
- package/dist/src/radix/index.js +1 -1
- package/dist/src/talisman/index.js +1 -1
- package/dist/src/trezor/index.cjs +2 -2
- package/dist/src/trezor/index.cjs.map +3 -3
- package/dist/src/trezor/index.js +2 -2
- package/dist/src/trezor/index.js.map +3 -3
- package/dist/src/walletconnect/index.cjs +2 -2
- package/dist/src/walletconnect/index.cjs.map +3 -3
- package/dist/src/walletconnect/index.js +2 -2
- package/dist/src/walletconnect/index.js.map +3 -3
- package/package.json +22 -22
- package/src/bitget/helpers.ts +1 -2
- package/src/cosmostation/index.ts +141 -0
- package/src/ctrl/walletHelpers.ts +82 -70
- package/src/exodus/index.ts +1 -2
- package/src/keepkey/chains/mayachain.ts +1 -1
- package/src/keepkey/chains/thorchain.ts +1 -1
- package/src/keystore/helpers.ts +2 -4
- package/src/ledger/clients/cosmos.ts +2 -2
- package/src/ledger/clients/evm.ts +1 -1
- package/src/ledger/clients/utxo.ts +3 -5
- package/src/ledger/clients/xrp.ts +66 -0
- package/src/ledger/helpers/getLedgerAddress.ts +12 -3
- package/src/ledger/helpers/getLedgerClient.ts +4 -0
- package/src/ledger/helpers/getLedgerTransport.ts +4 -2
- package/src/ledger/index.ts +11 -1
- package/src/ledger/interfaces/CosmosLedgerInterface.ts +1 -1
- package/src/okx/helpers.ts +2 -1
- package/src/onekey/index.ts +1 -1
- package/src/trezor/evmSigner.ts +3 -3
- package/src/trezor/index.ts +14 -4
- package/src/types.ts +3 -0
- package/src/utils.ts +4 -0
- package/src/walletconnect/index.ts +2 -2
- package/dist/chunk-bhfpfqc3.js +0 -3
- package/dist/chunk-bhfpfqc3.js.map +0 -10
- package/dist/chunk-czhtd6cy.js +0 -4
- package/dist/chunk-q81hzyra.js +0 -3
- package/dist/chunk-q81hzyra.js.map +0 -10
|
@@ -51,7 +51,7 @@ class EVMLedgerInterface extends AbstractSigner {
|
|
|
51
51
|
|
|
52
52
|
createTransportAndLedger = async () => {
|
|
53
53
|
const transport = await getLedgerTransport();
|
|
54
|
-
const
|
|
54
|
+
const EthereumApp = (await import("@ledgerhq/hw-app-eth")).default;
|
|
55
55
|
|
|
56
56
|
this.ledgerApp = new EthereumApp(transport);
|
|
57
57
|
};
|
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
getWalletFormatFor,
|
|
8
8
|
} from "@swapkit/helpers";
|
|
9
9
|
import type { UTXOType } from "@swapkit/toolboxes/utxo";
|
|
10
|
-
import type
|
|
10
|
+
import { type Psbt, Transaction } from "bitcoinjs-lib";
|
|
11
11
|
|
|
12
12
|
import { getLedgerTransport } from "../helpers/getLedgerTransport";
|
|
13
13
|
|
|
@@ -22,8 +22,6 @@ const signUTXOTransaction = async (
|
|
|
22
22
|
{ psbt, inputUtxos, btcApp, derivationPath }: Params,
|
|
23
23
|
options?: Partial<CreateTransactionArg>,
|
|
24
24
|
) => {
|
|
25
|
-
const { Transaction } = await import("bitcoinjs-lib");
|
|
26
|
-
|
|
27
25
|
const inputs = inputUtxos.map((item) => {
|
|
28
26
|
const utxoTx = Transaction.fromHex(item.txHex || "");
|
|
29
27
|
const splitTx = btcApp.splitTransaction(utxoTx.toHex(), utxoTx.hasWitnesses());
|
|
@@ -75,7 +73,7 @@ const BaseLedgerUTXO = ({
|
|
|
75
73
|
|
|
76
74
|
async function createTransportWebUSB() {
|
|
77
75
|
transport = await getLedgerTransport();
|
|
78
|
-
const
|
|
76
|
+
const BitcoinApp = (await import("@ledgerhq/hw-app-btc")).default;
|
|
79
77
|
|
|
80
78
|
btcApp = new BitcoinApp({ transport, currency: chain });
|
|
81
79
|
}
|
|
@@ -91,7 +89,7 @@ const BaseLedgerUTXO = ({
|
|
|
91
89
|
return {
|
|
92
90
|
connect: async () => {
|
|
93
91
|
await checkBtcAppAndCreateTransportWebUSB(false);
|
|
94
|
-
const
|
|
92
|
+
const BitcoinApp = (await import("@ledgerhq/hw-app-btc")).default;
|
|
95
93
|
|
|
96
94
|
btcApp = new BitcoinApp({ transport, currency: chain });
|
|
97
95
|
},
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import type Xrp from "@ledgerhq/hw-app-xrp";
|
|
2
|
+
import type Transport from "@ledgerhq/hw-transport";
|
|
3
|
+
import {
|
|
4
|
+
Chain,
|
|
5
|
+
type DerivationPathArray,
|
|
6
|
+
NetworkDerivationPath,
|
|
7
|
+
derivationPathToString,
|
|
8
|
+
} from "@swapkit/helpers";
|
|
9
|
+
import type { Transaction } from "@swapkit/toolboxes/ripple";
|
|
10
|
+
import { encode } from "ripple-binary-codec";
|
|
11
|
+
import type { Payment } from "xrpl";
|
|
12
|
+
import { getLedgerTransport } from "../helpers";
|
|
13
|
+
|
|
14
|
+
const TF_FULLY_CANONICAL_SIG = 2147483648;
|
|
15
|
+
|
|
16
|
+
function cleanTransactionObject(obj: Record<string, any>) {
|
|
17
|
+
const cleaned: Record<string, any> = {};
|
|
18
|
+
for (const key in obj) {
|
|
19
|
+
if (obj[key] !== null && obj[key] !== undefined) {
|
|
20
|
+
cleaned[key] = obj[key];
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return cleaned;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
async function establishConnection(transport: Transport) {
|
|
27
|
+
const { default: Xrp } = await import("@ledgerhq/hw-app-xrp");
|
|
28
|
+
return new Xrp(transport);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function fetchAddressAndPublicKey({
|
|
32
|
+
instance,
|
|
33
|
+
derivationPath,
|
|
34
|
+
}: { instance: Xrp; derivationPath: string }) {
|
|
35
|
+
return instance.getAddress(derivationPath);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export const XRPLedger = async (derivationPath?: DerivationPathArray) => {
|
|
39
|
+
const path = derivationPathToString(derivationPath || NetworkDerivationPath[Chain.Ripple]);
|
|
40
|
+
const transport = await getLedgerTransport();
|
|
41
|
+
const xrpInstance = await establishConnection(transport);
|
|
42
|
+
|
|
43
|
+
const { address, publicKey } = await fetchAddressAndPublicKey({
|
|
44
|
+
instance: xrpInstance,
|
|
45
|
+
derivationPath: path,
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
async function sign(transaction: Payment | Transaction) {
|
|
49
|
+
const { hashes } = await import("@swapkit/toolboxes/ripple");
|
|
50
|
+
const cleanedTxWithPubKey = cleanTransactionObject(transaction);
|
|
51
|
+
const transactionJSON = {
|
|
52
|
+
...cleanedTxWithPubKey,
|
|
53
|
+
Flags: transaction.Flags || TF_FULLY_CANONICAL_SIG,
|
|
54
|
+
SigningPubKey: publicKey.toUpperCase(),
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
const transactionToSignOnLedger = encode(transactionJSON);
|
|
58
|
+
const txnSignature = await xrpInstance.signTransaction(path, transactionToSignOnLedger);
|
|
59
|
+
const tx_blob = encode({ ...transactionJSON, TxnSignature: txnSignature });
|
|
60
|
+
const hash = hashes.hashSignedTx(tx_blob);
|
|
61
|
+
|
|
62
|
+
return { tx_blob, hash };
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
return { address, sign };
|
|
66
|
+
};
|
|
@@ -1,15 +1,19 @@
|
|
|
1
1
|
import { Chain, SwapKitError, WalletOption } from "@swapkit/helpers";
|
|
2
2
|
|
|
3
|
+
import type { XRPLedger } from "../clients/xrp";
|
|
3
4
|
import type { LEDGER_SUPPORTED_CHAINS } from "../index";
|
|
4
5
|
import type { CosmosLedgerClients, EVMLedgerClients, UTXOLedgerClients } from "../types";
|
|
5
6
|
import type { getLedgerClient } from "./getLedgerClient";
|
|
6
7
|
|
|
7
|
-
export const getLedgerAddress = async
|
|
8
|
+
export const getLedgerAddress = async <
|
|
9
|
+
T extends (typeof LEDGER_SUPPORTED_CHAINS)[number],
|
|
10
|
+
L extends Awaited<ReturnType<typeof getLedgerClient<T>>>,
|
|
11
|
+
>({
|
|
8
12
|
chain,
|
|
9
13
|
ledgerClient,
|
|
10
14
|
}: {
|
|
11
|
-
chain:
|
|
12
|
-
ledgerClient:
|
|
15
|
+
chain: T;
|
|
16
|
+
ledgerClient: L;
|
|
13
17
|
}) => {
|
|
14
18
|
if (!ledgerClient) return "";
|
|
15
19
|
|
|
@@ -40,6 +44,11 @@ export const getLedgerAddress = async ({
|
|
|
40
44
|
|
|
41
45
|
return chain === Chain.BitcoinCash ? address.replace("bitcoincash:", "") : address;
|
|
42
46
|
}
|
|
47
|
+
|
|
48
|
+
case Chain.Ripple: {
|
|
49
|
+
return (ledgerClient as Awaited<ReturnType<typeof XRPLedger>>).address;
|
|
50
|
+
}
|
|
51
|
+
|
|
43
52
|
default:
|
|
44
53
|
throw new SwapKitError("wallet_chain_not_supported", { wallet: WalletOption.LEDGER, chain });
|
|
45
54
|
}
|
|
@@ -18,6 +18,7 @@ import {
|
|
|
18
18
|
DogecoinLedger,
|
|
19
19
|
LitecoinLedger,
|
|
20
20
|
} from "../clients/utxo";
|
|
21
|
+
import { XRPLedger } from "../clients/xrp";
|
|
21
22
|
|
|
22
23
|
type LedgerSignerMap = {
|
|
23
24
|
[Chain.Arbitrum]: ReturnType<typeof ArbitrumLedger>;
|
|
@@ -33,6 +34,7 @@ type LedgerSignerMap = {
|
|
|
33
34
|
[Chain.Litecoin]: ReturnType<typeof LitecoinLedger>;
|
|
34
35
|
[Chain.Optimism]: ReturnType<typeof OptimismLedger>;
|
|
35
36
|
[Chain.Polygon]: ReturnType<typeof PolygonLedger>;
|
|
37
|
+
[Chain.Ripple]: ReturnType<typeof XRPLedger>;
|
|
36
38
|
[Chain.THORChain]: THORChainLedger;
|
|
37
39
|
};
|
|
38
40
|
|
|
@@ -60,6 +62,8 @@ export const getLedgerClient = async <T extends LedgerSupportedChain>({
|
|
|
60
62
|
return DogecoinLedger(derivationPath) as LedgerSignerMap[T];
|
|
61
63
|
case Chain.Litecoin:
|
|
62
64
|
return LitecoinLedger(derivationPath) as LedgerSignerMap[T];
|
|
65
|
+
case Chain.Ripple:
|
|
66
|
+
return XRPLedger(derivationPath) as LedgerSignerMap[T];
|
|
63
67
|
|
|
64
68
|
case Chain.Arbitrum:
|
|
65
69
|
case Chain.Avalanche:
|
|
@@ -20,7 +20,9 @@ const getLedgerDevices = async () => {
|
|
|
20
20
|
const existingDevices = devices.filter((d) => d.vendorId === ledgerUSBVendorId);
|
|
21
21
|
if (existingDevices.length > 0) return existingDevices[0];
|
|
22
22
|
|
|
23
|
-
return navigatorUsb?.requestDevice({
|
|
23
|
+
return navigatorUsb?.requestDevice({
|
|
24
|
+
filters: [{ vendorId: ledgerUSBVendorId }],
|
|
25
|
+
});
|
|
24
26
|
};
|
|
25
27
|
|
|
26
28
|
export const getLedgerTransport = async () => {
|
|
@@ -57,7 +59,7 @@ export const getLedgerTransport = async () => {
|
|
|
57
59
|
throw new SwapKitError("wallet_ledger_connection_claimed", error);
|
|
58
60
|
}
|
|
59
61
|
|
|
60
|
-
const
|
|
62
|
+
const Transport = (await import("@ledgerhq/hw-transport-webusb")).default;
|
|
61
63
|
const isSupported = await Transport.isSupported();
|
|
62
64
|
if (!isSupported) throw new Error("WebUSB not supported");
|
|
63
65
|
|
package/src/ledger/index.ts
CHANGED
|
@@ -32,6 +32,7 @@ export const ledgerWallet = createWallet({
|
|
|
32
32
|
Chain.Litecoin,
|
|
33
33
|
Chain.Optimism,
|
|
34
34
|
Chain.Polygon,
|
|
35
|
+
Chain.Ripple,
|
|
35
36
|
Chain.THORChain,
|
|
36
37
|
],
|
|
37
38
|
walletType: WalletOption.LEDGER,
|
|
@@ -183,7 +184,7 @@ async function getWalletMethods({
|
|
|
183
184
|
case Chain.THORChain: {
|
|
184
185
|
const { SignMode } = await import("cosmjs-types/cosmos/tx/signing/v1beta1/signing.js");
|
|
185
186
|
const { TxRaw } = await import("cosmjs-types/cosmos/tx/v1beta1/tx.js");
|
|
186
|
-
const { encodePubkey, makeAuthInfoBytes } = await import("@cosmjs/proto-signing");
|
|
187
|
+
const { encodePubkey, makeAuthInfoBytes } = (await import("@cosmjs/proto-signing")).default;
|
|
187
188
|
const {
|
|
188
189
|
createStargateClient,
|
|
189
190
|
buildEncodedTxBody,
|
|
@@ -267,6 +268,15 @@ async function getWalletMethods({
|
|
|
267
268
|
return { ...toolbox, address, deposit, transfer, signMessage };
|
|
268
269
|
}
|
|
269
270
|
|
|
271
|
+
case Chain.Ripple: {
|
|
272
|
+
const { getRippleToolbox } = await import("@swapkit/toolboxes/ripple");
|
|
273
|
+
const signer = await getLedgerClient({ chain, derivationPath });
|
|
274
|
+
const address = signer.address;
|
|
275
|
+
const toolbox = await getRippleToolbox({ signer });
|
|
276
|
+
|
|
277
|
+
return { ...toolbox, address };
|
|
278
|
+
}
|
|
279
|
+
|
|
270
280
|
default:
|
|
271
281
|
throw new Error("Unsupported chain");
|
|
272
282
|
}
|
|
@@ -32,7 +32,7 @@ export abstract class CosmosLedgerInterface {
|
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
case "cosmos": {
|
|
35
|
-
const
|
|
35
|
+
const CosmosApp = (await import("@ledgerhq/hw-app-cosmos")).default;
|
|
36
36
|
this.ledgerApp =
|
|
37
37
|
forceReconnect || !this.ledgerApp ? new CosmosApp(this.transport) : this.ledgerApp;
|
|
38
38
|
}
|
package/src/okx/helpers.ts
CHANGED
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
prepareNetworkSwitch,
|
|
7
7
|
switchEVMWalletNetwork,
|
|
8
8
|
} from "@swapkit/helpers";
|
|
9
|
+
import { Psbt } from "bitcoinjs-lib";
|
|
9
10
|
import type { Eip1193Provider } from "ethers";
|
|
10
11
|
|
|
11
12
|
const cosmosTransfer =
|
|
@@ -81,7 +82,7 @@ export async function getWalletMethods(chain: Chain) {
|
|
|
81
82
|
if (!(window.okxwallet && "bitcoin" in window.okxwallet)) {
|
|
82
83
|
throw new Error("No bitcoin okxwallet found");
|
|
83
84
|
}
|
|
84
|
-
|
|
85
|
+
|
|
85
86
|
const { getUtxoToolbox } = await import("@swapkit/toolboxes/utxo");
|
|
86
87
|
|
|
87
88
|
const { bitcoin: wallet } = window.okxwallet;
|
package/src/onekey/index.ts
CHANGED
|
@@ -9,6 +9,7 @@ import {
|
|
|
9
9
|
filterSupportedChains,
|
|
10
10
|
prepareNetworkSwitch,
|
|
11
11
|
} from "@swapkit/helpers";
|
|
12
|
+
import { Psbt } from "bitcoinjs-lib";
|
|
12
13
|
import type {
|
|
13
14
|
BitcoinProvider,
|
|
14
15
|
GetAddressOptions,
|
|
@@ -27,7 +28,6 @@ async function getWalletMethodsForExtension(chain: Chain) {
|
|
|
27
28
|
});
|
|
28
29
|
}
|
|
29
30
|
|
|
30
|
-
const { Psbt } = await import("bitcoinjs-lib");
|
|
31
31
|
const { getUtxoToolbox } = await import("@swapkit/toolboxes/utxo");
|
|
32
32
|
const {
|
|
33
33
|
signTransaction: satsSignTransaction,
|
package/src/trezor/evmSigner.ts
CHANGED
|
@@ -35,7 +35,7 @@ export async function getEVMSigner({ chain, derivationPath, provider }: TrezorEV
|
|
|
35
35
|
|
|
36
36
|
getAddress = async () => {
|
|
37
37
|
if (!this.address) {
|
|
38
|
-
const
|
|
38
|
+
const TrezorConnect = (await import("@trezor/connect-web")).default;
|
|
39
39
|
|
|
40
40
|
const result = await TrezorConnect.ethereumGetAddress({
|
|
41
41
|
path: derivationPathToString(this.derivationPath),
|
|
@@ -56,7 +56,7 @@ export async function getEVMSigner({ chain, derivationPath, provider }: TrezorEV
|
|
|
56
56
|
};
|
|
57
57
|
|
|
58
58
|
signMessage = async (message: string) => {
|
|
59
|
-
const
|
|
59
|
+
const TrezorConnect = (await import("@trezor/connect-web")).default;
|
|
60
60
|
|
|
61
61
|
const result = await TrezorConnect.ethereumSignMessage({
|
|
62
62
|
path: derivationPathToString(this.derivationPath),
|
|
@@ -107,7 +107,7 @@ export async function getEVMSigner({ chain, derivationPath, provider }: TrezorEV
|
|
|
107
107
|
throw new SwapKitError({ errorKey: "wallet_missing_params", info: { gasPrice } });
|
|
108
108
|
}
|
|
109
109
|
|
|
110
|
-
const
|
|
110
|
+
const TrezorConnect = (await import("@trezor/connect-web")).default;
|
|
111
111
|
const { toHexString } = await import("@swapkit/toolboxes/evm");
|
|
112
112
|
const { Transaction } = await import("ethers");
|
|
113
113
|
|
package/src/trezor/index.ts
CHANGED
|
@@ -68,7 +68,7 @@ async function getTrezorWallet<T extends Chain>({
|
|
|
68
68
|
const coin = chain.toLowerCase();
|
|
69
69
|
|
|
70
70
|
const getAddress = async (path: DerivationPathArray = derivationPath) => {
|
|
71
|
-
const
|
|
71
|
+
const TrezorConnect = (await import("@trezor/connect-web")).default;
|
|
72
72
|
const { success, payload } = await TrezorConnect.getAddress({
|
|
73
73
|
path: derivationPathToString(path),
|
|
74
74
|
coin,
|
|
@@ -95,7 +95,7 @@ async function getTrezorWallet<T extends Chain>({
|
|
|
95
95
|
const address = await getAddress();
|
|
96
96
|
|
|
97
97
|
const signTransaction = async (psbt: Psbt, inputs: UTXOType[], memo = "") => {
|
|
98
|
-
const
|
|
98
|
+
const TrezorConnect = (await import("@trezor/connect-web")).default;
|
|
99
99
|
const address_n = derivationPath.map((pathElement, index) =>
|
|
100
100
|
index < 3 ? ((pathElement as number) | 0x80000000) >>> 0 : (pathElement as number),
|
|
101
101
|
);
|
|
@@ -229,11 +229,21 @@ export const trezorWallet = createWallet({
|
|
|
229
229
|
});
|
|
230
230
|
}
|
|
231
231
|
|
|
232
|
-
const
|
|
232
|
+
const TrezorConnect = (await import("@trezor/connect-web")).default;
|
|
233
233
|
const { success } = await TrezorConnect.getDeviceState();
|
|
234
234
|
|
|
235
235
|
if (!success) {
|
|
236
|
-
const
|
|
236
|
+
const trezorConfig = SKConfig.get("integrations").trezor;
|
|
237
|
+
const manifest = trezorConfig
|
|
238
|
+
? {
|
|
239
|
+
...trezorConfig,
|
|
240
|
+
appName: (trezorConfig as any).appName || "SwapKit",
|
|
241
|
+
}
|
|
242
|
+
: {
|
|
243
|
+
appUrl: "",
|
|
244
|
+
email: "",
|
|
245
|
+
appName: "SwapKit",
|
|
246
|
+
};
|
|
237
247
|
TrezorConnect.init({ lazyLoad: true, manifest });
|
|
238
248
|
}
|
|
239
249
|
|
package/src/types.ts
CHANGED
|
@@ -12,6 +12,7 @@ import type { BrowserProvider, Eip1193Provider } from "ethers";
|
|
|
12
12
|
import type { SubstrateInjectedExtension } from "@swapkit/toolboxes/substrate";
|
|
13
13
|
import type { bitgetWallet } from "./bitget";
|
|
14
14
|
import type { coinbaseWallet } from "./coinbase";
|
|
15
|
+
import type { cosmostationWallet } from "./cosmostation";
|
|
15
16
|
import type { ctrlWallet } from "./ctrl";
|
|
16
17
|
import type { evmWallet } from "./evm-extensions";
|
|
17
18
|
import type { exodusWallet } from "./exodus";
|
|
@@ -34,6 +35,7 @@ export type SKWallets = {
|
|
|
34
35
|
[WalletOption.BRAVE]: typeof evmWallet;
|
|
35
36
|
[WalletOption.COINBASE_MOBILE]: typeof coinbaseWallet;
|
|
36
37
|
[WalletOption.COINBASE_WEB]: typeof evmWallet;
|
|
38
|
+
[WalletOption.COSMOSTATION]: typeof cosmostationWallet;
|
|
37
39
|
[WalletOption.CTRL]: typeof ctrlWallet;
|
|
38
40
|
[WalletOption.EIP6963]: typeof evmWallet;
|
|
39
41
|
[WalletOption.EXODUS]: typeof exodusWallet;
|
|
@@ -64,6 +66,7 @@ export type SKWalletsSupportedChains = {
|
|
|
64
66
|
[WalletOption.BRAVE]: typeof evmWallet.connectEVMWallet.supportedChains;
|
|
65
67
|
[WalletOption.COINBASE_MOBILE]: typeof coinbaseWallet.connectCoinbaseWallet.supportedChains;
|
|
66
68
|
[WalletOption.COINBASE_WEB]: typeof evmWallet.connectEVMWallet.supportedChains;
|
|
69
|
+
[WalletOption.COSMOSTATION]: typeof cosmostationWallet.connectCosmostation.supportedChains;
|
|
67
70
|
[WalletOption.CTRL]: typeof ctrlWallet.connectCtrl.supportedChains;
|
|
68
71
|
[WalletOption.EIP6963]: typeof evmWallet.connectEVMWallet.supportedChains;
|
|
69
72
|
[WalletOption.EXODUS]: typeof exodusWallet.connectExodusWallet.supportedChains;
|
package/src/utils.ts
CHANGED
|
@@ -25,6 +25,10 @@ export async function loadWallet<W extends WalletOption>(walletOption: W): Promi
|
|
|
25
25
|
async () => (await import("./walletconnect")).walletconnectWallet,
|
|
26
26
|
)
|
|
27
27
|
.with(WalletOption.KEPLR, WalletOption.LEAP, async () => (await import("./keplr")).keplrWallet)
|
|
28
|
+
.with(
|
|
29
|
+
WalletOption.COSMOSTATION,
|
|
30
|
+
async () => (await import("./cosmostation")).cosmostationWallet,
|
|
31
|
+
)
|
|
28
32
|
.with(
|
|
29
33
|
WalletOption.BRAVE,
|
|
30
34
|
WalletOption.COINBASE_WEB,
|
|
@@ -121,8 +121,8 @@ async function getToolbox<T extends (typeof WC_SUPPORTED_CHAINS)[number]>({
|
|
|
121
121
|
case Chain.THORChain: {
|
|
122
122
|
const { SignMode } = await import("cosmjs-types/cosmos/tx/signing/v1beta1/signing.js");
|
|
123
123
|
const { TxRaw } = await import("cosmjs-types/cosmos/tx/v1beta1/tx.js");
|
|
124
|
-
const { encodePubkey, makeAuthInfoBytes } = await import("@cosmjs/proto-signing");
|
|
125
|
-
const { makeSignDoc } = await import("@cosmjs/amino");
|
|
124
|
+
const { encodePubkey, makeAuthInfoBytes } = (await import("@cosmjs/proto-signing")).default;
|
|
125
|
+
const { makeSignDoc } = (await import("@cosmjs/amino")).default;
|
|
126
126
|
const {
|
|
127
127
|
getCosmosToolbox,
|
|
128
128
|
buildAminoMsg,
|
package/dist/chunk-bhfpfqc3.js
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
var j=require("@swapkit/helpers");async function w({chain:A,derivationPath:O,provider:W}){let{AbstractSigner:k,Signature:N}=await import("ethers");class X extends k{address;chain;derivationPath;provider;constructor({chain:q,derivationPath:B,provider:D}){super(D);this.address="",this.chain=q,this.derivationPath=B,this.provider=D}getAddress=async()=>{if(!this.address){let{default:q}=await import("@trezor/connect-web"),B=await q.ethereumGetAddress({path:j.derivationPathToString(this.derivationPath),showOnTrezor:!0});if(!B.success)throw new j.SwapKitError({errorKey:"wallet_trezor_failed_to_get_address",info:{...B,chain:this.chain,derivationPath:this.derivationPath}});this.address=B.payload.address}return this.address};signMessage=async(q)=>{let{default:B}=await import("@trezor/connect-web"),D=await B.ethereumSignMessage({path:j.derivationPathToString(this.derivationPath),message:q});if(!D.success)throw new j.SwapKitError({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{...D,message:q,chain:this.chain,derivationPath:this.derivationPath}});return D.payload.signature};signTypedData(){throw new Error("Not implemented")}signTransaction=async({to:q,gasLimit:B,value:D,data:f,nonce:_,maxFeePerGas:R,maxPriorityFeePerGas:U,gasPrice:V})=>{if(!q)throw new j.SwapKitError({errorKey:"wallet_missing_params",info:{to:q}});if(!B)throw new j.SwapKitError({errorKey:"wallet_missing_params",info:{gasLimit:B}});let Q=R&&U;if(Q&&!R)throw new j.SwapKitError({errorKey:"wallet_missing_params",info:{maxFeePerGas:R}});if(Q&&!U)throw new j.SwapKitError({errorKey:"wallet_missing_params",info:{maxPriorityFeePerGas:U}});if(!(Q||V))throw new j.SwapKitError({errorKey:"wallet_missing_params",info:{gasPrice:V}});let{default:H}=await import("@trezor/connect-web"),{toHexString:J}=await import("@swapkit/toolboxes/evm"),{Transaction:I}=await import("ethers"),L=Q?{maxFeePerGas:J(BigInt(R?.toString()||0)),maxPriorityFeePerGas:J(BigInt(U?.toString()||0))}:V&&{gasPrice:J(BigInt(V?.toString()||0))}||{gasPrice:"0x0"},b=J(BigInt(_||await this.provider.getTransactionCount(await this.getAddress(),"pending"))),Y={chainId:Number.parseInt(j.ChainToChainId[this.chain]),to:q.toString(),value:J(BigInt(D?.toString()||0)),gasLimit:J(BigInt(B?.toString()||0)),nonce:b,data:f?.toString()||"0x",...L},{success:C,payload:Z}=await H.ethereumSignTransaction({path:j.derivationPathToString(this.derivationPath),transaction:Y});if(!C)throw new j.SwapKitError({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{...Z,chain:this.chain,derivationPath:this.derivationPath}});let{r:K,s:u,v:z}=Z,y=N.from({r:K,s:u,v:new j.SwapKitNumber(BigInt(z)).getBaseValue("number")}),$=I.from({...Y,nonce:Number.parseInt(Y.nonce,16),type:Q?2:0,signature:y}).serialized;if(!$)throw new j.SwapKitError({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:this.chain,derivationPath:this.derivationPath}});return $};connect=(q)=>{if(!q)throw new j.SwapKitError({errorKey:"wallet_provider_not_found",info:{wallet:j.WalletOption.TREZOR,chain:this.chain,derivationPath:this.derivationPath}});return new X({chain:this.chain,derivationPath:this.derivationPath,provider:q})}}return new X({chain:A,derivationPath:O,provider:W})}
|
|
2
|
-
|
|
3
|
-
//# debugId=F889E83D9CD533AF64756E2164756E21
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/trezor/evmSigner.ts"],
|
|
4
|
-
"sourcesContent": [
|
|
5
|
-
"import {\n type Chain,\n ChainToChainId,\n type DerivationPathArray,\n SwapKitError,\n SwapKitNumber,\n WalletOption,\n derivationPathToString,\n} from \"@swapkit/helpers\";\nimport type { JsonRpcProvider, Provider, TransactionRequest } from \"ethers\";\n\ntype TrezorEVMSignerParams = {\n chain: Chain;\n derivationPath: DerivationPathArray;\n provider: Provider | JsonRpcProvider;\n};\n\nexport async function getEVMSigner({ chain, derivationPath, provider }: TrezorEVMSignerParams) {\n const { AbstractSigner, Signature } = await import(\"ethers\");\n\n class TrezorSigner extends AbstractSigner {\n address: string;\n chain: Chain;\n derivationPath: DerivationPathArray;\n readonly provider: Provider | JsonRpcProvider;\n\n constructor({ chain, derivationPath, provider }: TrezorEVMSignerParams) {\n super(provider);\n\n this.address = \"\";\n this.chain = chain;\n this.derivationPath = derivationPath;\n this.provider = provider;\n }\n\n getAddress = async () => {\n if (!this.address) {\n const { default: TrezorConnect } = await import(\"@trezor/connect-web\");\n\n const result = await TrezorConnect.ethereumGetAddress({\n path: derivationPathToString(this.derivationPath),\n showOnTrezor: true,\n });\n\n if (!result.success) {\n throw new SwapKitError({\n errorKey: \"wallet_trezor_failed_to_get_address\",\n info: { ...result, chain: this.chain, derivationPath: this.derivationPath },\n });\n }\n\n this.address = result.payload.address;\n }\n\n return this.address;\n };\n\n signMessage = async (message: string) => {\n const { default: TrezorConnect } = await import(\"@trezor/connect-web\");\n\n const result = await TrezorConnect.ethereumSignMessage({\n path: derivationPathToString(this.derivationPath),\n message,\n });\n\n if (!result.success) {\n throw new SwapKitError({\n errorKey: \"wallet_trezor_failed_to_sign_transaction\",\n info: { ...result, message, chain: this.chain, derivationPath: this.derivationPath },\n });\n }\n\n return result.payload.signature;\n };\n\n signTypedData(): Promise<string> {\n throw new Error(\"Not implemented\");\n }\n\n signTransaction = async ({\n to,\n gasLimit,\n value,\n data,\n nonce,\n maxFeePerGas,\n maxPriorityFeePerGas,\n gasPrice,\n // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: any: refactor\n }: TransactionRequest) => {\n if (!to) throw new SwapKitError({ errorKey: \"wallet_missing_params\", info: { to } });\n if (!gasLimit)\n throw new SwapKitError({ errorKey: \"wallet_missing_params\", info: { gasLimit } });\n\n const isEIP1559 = maxFeePerGas && maxPriorityFeePerGas;\n\n if (isEIP1559 && !maxFeePerGas) {\n throw new SwapKitError({ errorKey: \"wallet_missing_params\", info: { maxFeePerGas } });\n }\n if (isEIP1559 && !maxPriorityFeePerGas) {\n throw new SwapKitError({\n errorKey: \"wallet_missing_params\",\n info: { maxPriorityFeePerGas },\n });\n }\n if (!(isEIP1559 || gasPrice)) {\n throw new SwapKitError({ errorKey: \"wallet_missing_params\", info: { gasPrice } });\n }\n\n const { default: TrezorConnect } = await import(\"@trezor/connect-web\");\n const { toHexString } = await import(\"@swapkit/toolboxes/evm\");\n const { Transaction } = await import(\"ethers\");\n\n const additionalFields = isEIP1559\n ? {\n maxFeePerGas: toHexString(BigInt(maxFeePerGas?.toString() || 0)),\n maxPriorityFeePerGas: toHexString(BigInt(maxPriorityFeePerGas?.toString() || 0)),\n }\n : (gasPrice && { gasPrice: toHexString(BigInt(gasPrice?.toString() || 0)) }) || {\n gasPrice: \"0x0\",\n };\n\n const hexifiedNonce = toHexString(\n BigInt(\n nonce || (await this.provider.getTransactionCount(await this.getAddress(), \"pending\")),\n ),\n );\n\n const formattedTx = {\n chainId: Number.parseInt(ChainToChainId[this.chain]),\n to: to.toString(),\n value: toHexString(BigInt(value?.toString() || 0)),\n gasLimit: toHexString(BigInt(gasLimit?.toString() || 0)),\n nonce: hexifiedNonce,\n data: data?.toString() || \"0x\",\n ...additionalFields,\n };\n\n const { success, payload } = await TrezorConnect.ethereumSignTransaction({\n path: derivationPathToString(this.derivationPath),\n transaction: formattedTx,\n });\n\n if (!success) {\n throw new SwapKitError({\n errorKey: \"wallet_trezor_failed_to_sign_transaction\",\n info: { ...payload, chain: this.chain, derivationPath: this.derivationPath },\n });\n }\n\n const { r, s, v } = payload;\n\n const signature = Signature.from({\n r,\n s,\n v: new SwapKitNumber(BigInt(v)).getBaseValue(\"number\"),\n });\n\n const serializedTx = Transaction.from({\n ...formattedTx,\n nonce: Number.parseInt(formattedTx.nonce, 16),\n type: isEIP1559 ? 2 : 0,\n signature,\n }).serialized;\n\n if (!serializedTx) {\n throw new SwapKitError({\n errorKey: \"wallet_trezor_failed_to_sign_transaction\",\n info: { chain: this.chain, derivationPath: this.derivationPath },\n });\n }\n\n return serializedTx;\n };\n\n connect = (provider: Provider | null) => {\n if (!provider) {\n throw new SwapKitError({\n errorKey: \"wallet_provider_not_found\",\n info: {\n wallet: WalletOption.TREZOR,\n chain: this.chain,\n derivationPath: this.derivationPath,\n },\n });\n }\n\n return new TrezorSigner({\n chain: this.chain,\n derivationPath: this.derivationPath,\n provider,\n });\n };\n }\n\n return new TrezorSigner({ chain, derivationPath, provider });\n}\n"
|
|
6
|
-
],
|
|
7
|
-
"mappings": "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",
|
|
8
|
-
"debugId": "F889E83D9CD533AF64756E2164756E21",
|
|
9
|
-
"names": []
|
|
10
|
-
}
|
package/dist/chunk-czhtd6cy.js
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{c as a,d as e}from"./chunk-p1kdg37m.js";import{WalletOption as t}from"@swapkit/helpers";function r(i){let l=Object.keys(i)?.[0]||"";return i?.[l]?.supportedChains||[]}async function p(i){let{match:l}=await import("ts-pattern");return await l(i).with(t.COINBASE_MOBILE,async()=>(await import("./src/coinbase/index.js")).coinbaseWallet).with(t.BITGET,async()=>(await import("./src/bitget/index.js")).bitgetWallet).with(t.CTRL,async()=>(await import("./src/ctrl/index.js")).ctrlWallet).with(t.OKX,async()=>(await import("./src/okx/index.js")).okxWallet).with(t.ONEKEY,async()=>(await import("./src/onekey/index.js")).onekeyWallet).with(t.EXODUS,async()=>(await import("./src/exodus/index.js")).exodusWallet).with(t.KEEPKEY,async()=>(await import("./src/keepkey/index.js")).keepkeyWallet).with(t.KEEPKEY_BEX,async()=>(await import("./src/keepkey-bex/index.js")).keepkeyBexWallet).with(t.WALLETCONNECT,async()=>(await import("./src/walletconnect/index.js")).walletconnectWallet).with(t.KEPLR,t.LEAP,async()=>(await import("./src/keplr/index.js")).keplrWallet).with(t.BRAVE,t.COINBASE_WEB,t.EIP6963,t.METAMASK,t.OKX_MOBILE,t.TRUSTWALLET_WEB,async()=>(await import("./src/evm-extensions/index.js")).evmWallet).with(t.KEYSTORE,async()=>(await import("./src/keystore/index.js")).keystoreWallet).with(t.TREZOR,async()=>(await import("./src/trezor/index.js")).trezorWallet).with(t.LEDGER,t.LEDGER_LIVE,async()=>(await import("./src/ledger/index.js")).ledgerWallet).with(t.PHANTOM,async()=>(await import("./src/phantom/index.js")).phantomWallet).with(t.POLKADOT_JS,async()=>(await import("./src/polkadotjs/index.js")).polkadotWallet).with(t.RADIX_WALLET,async()=>(await import("./src/radix/index.js")).radixWallet).with(t.TALISMAN,async()=>(await import("./src/talisman/index.js")).talismanWallet).exhaustive()}
|
|
2
|
-
export{r as a,p as b};
|
|
3
|
-
|
|
4
|
-
//# debugId=40B36BBD4009778C64756E2164756E21
|
package/dist/chunk-q81hzyra.js
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import{c as M,d as Q}from"./chunk-p1kdg37m.js";import{ChainToChainId as G,SwapKitError as B,SwapKitNumber as h,WalletOption as F,derivationPathToString as $}from"@swapkit/helpers";async function l({chain:W,derivationPath:k,provider:N}){let{AbstractSigner:f,Signature:_}=await import("ethers");class Y extends f{address;chain;derivationPath;provider;constructor({chain:j,derivationPath:q,provider:D}){super(D);this.address="",this.chain=j,this.derivationPath=q,this.provider=D}getAddress=async()=>{if(!this.address){let{default:j}=await import("@trezor/connect-web"),q=await j.ethereumGetAddress({path:$(this.derivationPath),showOnTrezor:!0});if(!q.success)throw new B({errorKey:"wallet_trezor_failed_to_get_address",info:{...q,chain:this.chain,derivationPath:this.derivationPath}});this.address=q.payload.address}return this.address};signMessage=async(j)=>{let{default:q}=await import("@trezor/connect-web"),D=await q.ethereumSignMessage({path:$(this.derivationPath),message:j});if(!D.success)throw new B({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{...D,message:j,chain:this.chain,derivationPath:this.derivationPath}});return D.payload.signature};signTypedData(){throw new Error("Not implemented")}signTransaction=async({to:j,gasLimit:q,value:D,data:H,nonce:I,maxFeePerGas:U,maxPriorityFeePerGas:V,gasPrice:X})=>{if(!j)throw new B({errorKey:"wallet_missing_params",info:{to:j}});if(!q)throw new B({errorKey:"wallet_missing_params",info:{gasLimit:q}});let R=U&&V;if(R&&!U)throw new B({errorKey:"wallet_missing_params",info:{maxFeePerGas:U}});if(R&&!V)throw new B({errorKey:"wallet_missing_params",info:{maxPriorityFeePerGas:V}});if(!(R||X))throw new B({errorKey:"wallet_missing_params",info:{gasPrice:X}});let{default:L}=await import("@trezor/connect-web"),{toHexString:J}=await import("@swapkit/toolboxes/evm"),{Transaction:b}=await import("ethers"),C=R?{maxFeePerGas:J(BigInt(U?.toString()||0)),maxPriorityFeePerGas:J(BigInt(V?.toString()||0))}:X&&{gasPrice:J(BigInt(X?.toString()||0))}||{gasPrice:"0x0"},K=J(BigInt(I||await this.provider.getTransactionCount(await this.getAddress(),"pending"))),Z={chainId:Number.parseInt(G[this.chain]),to:j.toString(),value:J(BigInt(D?.toString()||0)),gasLimit:J(BigInt(q?.toString()||0)),nonce:K,data:H?.toString()||"0x",...C},{success:u,payload:A}=await L.ethereumSignTransaction({path:$(this.derivationPath),transaction:Z});if(!u)throw new B({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{...A,chain:this.chain,derivationPath:this.derivationPath}});let{r:z,s:y,v:w}=A,E=_.from({r:z,s:y,v:new h(BigInt(w)).getBaseValue("number")}),O=b.from({...Z,nonce:Number.parseInt(Z.nonce,16),type:R?2:0,signature:E}).serialized;if(!O)throw new B({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:this.chain,derivationPath:this.derivationPath}});return O};connect=(j)=>{if(!j)throw new B({errorKey:"wallet_provider_not_found",info:{wallet:F.TREZOR,chain:this.chain,derivationPath:this.derivationPath}});return new Y({chain:this.chain,derivationPath:this.derivationPath,provider:j})}}return new Y({chain:W,derivationPath:k,provider:N})}export{l as getEVMSigner};
|
|
2
|
-
|
|
3
|
-
//# debugId=5C76B7C3B8034EA464756E2164756E21
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/trezor/evmSigner.ts"],
|
|
4
|
-
"sourcesContent": [
|
|
5
|
-
"import {\n type Chain,\n ChainToChainId,\n type DerivationPathArray,\n SwapKitError,\n SwapKitNumber,\n WalletOption,\n derivationPathToString,\n} from \"@swapkit/helpers\";\nimport type { JsonRpcProvider, Provider, TransactionRequest } from \"ethers\";\n\ntype TrezorEVMSignerParams = {\n chain: Chain;\n derivationPath: DerivationPathArray;\n provider: Provider | JsonRpcProvider;\n};\n\nexport async function getEVMSigner({ chain, derivationPath, provider }: TrezorEVMSignerParams) {\n const { AbstractSigner, Signature } = await import(\"ethers\");\n\n class TrezorSigner extends AbstractSigner {\n address: string;\n chain: Chain;\n derivationPath: DerivationPathArray;\n readonly provider: Provider | JsonRpcProvider;\n\n constructor({ chain, derivationPath, provider }: TrezorEVMSignerParams) {\n super(provider);\n\n this.address = \"\";\n this.chain = chain;\n this.derivationPath = derivationPath;\n this.provider = provider;\n }\n\n getAddress = async () => {\n if (!this.address) {\n const { default: TrezorConnect } = await import(\"@trezor/connect-web\");\n\n const result = await TrezorConnect.ethereumGetAddress({\n path: derivationPathToString(this.derivationPath),\n showOnTrezor: true,\n });\n\n if (!result.success) {\n throw new SwapKitError({\n errorKey: \"wallet_trezor_failed_to_get_address\",\n info: { ...result, chain: this.chain, derivationPath: this.derivationPath },\n });\n }\n\n this.address = result.payload.address;\n }\n\n return this.address;\n };\n\n signMessage = async (message: string) => {\n const { default: TrezorConnect } = await import(\"@trezor/connect-web\");\n\n const result = await TrezorConnect.ethereumSignMessage({\n path: derivationPathToString(this.derivationPath),\n message,\n });\n\n if (!result.success) {\n throw new SwapKitError({\n errorKey: \"wallet_trezor_failed_to_sign_transaction\",\n info: { ...result, message, chain: this.chain, derivationPath: this.derivationPath },\n });\n }\n\n return result.payload.signature;\n };\n\n signTypedData(): Promise<string> {\n throw new Error(\"Not implemented\");\n }\n\n signTransaction = async ({\n to,\n gasLimit,\n value,\n data,\n nonce,\n maxFeePerGas,\n maxPriorityFeePerGas,\n gasPrice,\n // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: any: refactor\n }: TransactionRequest) => {\n if (!to) throw new SwapKitError({ errorKey: \"wallet_missing_params\", info: { to } });\n if (!gasLimit)\n throw new SwapKitError({ errorKey: \"wallet_missing_params\", info: { gasLimit } });\n\n const isEIP1559 = maxFeePerGas && maxPriorityFeePerGas;\n\n if (isEIP1559 && !maxFeePerGas) {\n throw new SwapKitError({ errorKey: \"wallet_missing_params\", info: { maxFeePerGas } });\n }\n if (isEIP1559 && !maxPriorityFeePerGas) {\n throw new SwapKitError({\n errorKey: \"wallet_missing_params\",\n info: { maxPriorityFeePerGas },\n });\n }\n if (!(isEIP1559 || gasPrice)) {\n throw new SwapKitError({ errorKey: \"wallet_missing_params\", info: { gasPrice } });\n }\n\n const { default: TrezorConnect } = await import(\"@trezor/connect-web\");\n const { toHexString } = await import(\"@swapkit/toolboxes/evm\");\n const { Transaction } = await import(\"ethers\");\n\n const additionalFields = isEIP1559\n ? {\n maxFeePerGas: toHexString(BigInt(maxFeePerGas?.toString() || 0)),\n maxPriorityFeePerGas: toHexString(BigInt(maxPriorityFeePerGas?.toString() || 0)),\n }\n : (gasPrice && { gasPrice: toHexString(BigInt(gasPrice?.toString() || 0)) }) || {\n gasPrice: \"0x0\",\n };\n\n const hexifiedNonce = toHexString(\n BigInt(\n nonce || (await this.provider.getTransactionCount(await this.getAddress(), \"pending\")),\n ),\n );\n\n const formattedTx = {\n chainId: Number.parseInt(ChainToChainId[this.chain]),\n to: to.toString(),\n value: toHexString(BigInt(value?.toString() || 0)),\n gasLimit: toHexString(BigInt(gasLimit?.toString() || 0)),\n nonce: hexifiedNonce,\n data: data?.toString() || \"0x\",\n ...additionalFields,\n };\n\n const { success, payload } = await TrezorConnect.ethereumSignTransaction({\n path: derivationPathToString(this.derivationPath),\n transaction: formattedTx,\n });\n\n if (!success) {\n throw new SwapKitError({\n errorKey: \"wallet_trezor_failed_to_sign_transaction\",\n info: { ...payload, chain: this.chain, derivationPath: this.derivationPath },\n });\n }\n\n const { r, s, v } = payload;\n\n const signature = Signature.from({\n r,\n s,\n v: new SwapKitNumber(BigInt(v)).getBaseValue(\"number\"),\n });\n\n const serializedTx = Transaction.from({\n ...formattedTx,\n nonce: Number.parseInt(formattedTx.nonce, 16),\n type: isEIP1559 ? 2 : 0,\n signature,\n }).serialized;\n\n if (!serializedTx) {\n throw new SwapKitError({\n errorKey: \"wallet_trezor_failed_to_sign_transaction\",\n info: { chain: this.chain, derivationPath: this.derivationPath },\n });\n }\n\n return serializedTx;\n };\n\n connect = (provider: Provider | null) => {\n if (!provider) {\n throw new SwapKitError({\n errorKey: \"wallet_provider_not_found\",\n info: {\n wallet: WalletOption.TREZOR,\n chain: this.chain,\n derivationPath: this.derivationPath,\n },\n });\n }\n\n return new TrezorSigner({\n chain: this.chain,\n derivationPath: this.derivationPath,\n provider,\n });\n };\n }\n\n return new TrezorSigner({ chain, derivationPath, provider });\n}\n"
|
|
6
|
-
],
|
|
7
|
-
"mappings": "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",
|
|
8
|
-
"debugId": "5C76B7C3B8034EA464756E2164756E21",
|
|
9
|
-
"names": []
|
|
10
|
-
}
|