@dynamic-labs/multi-wallet 0.11.25 → 0.11.26
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/package.json +2 -1
- package/src/data/wallet-links.json +14 -0
- package/src/multi-wallet.js +2 -0
- package/src/multi-wallet.js.map +1 -1
- package/src/utils/message.d.ts +4 -3
- package/src/utils/message.js +4 -19
- package/src/utils/message.js.map +1 -1
- package/src/wallets/ethereum/BloctoEvm.d.ts +32 -0
- package/src/wallets/ethereum/BloctoEvm.js +138 -0
- package/src/wallets/ethereum/BloctoEvm.js.map +1 -0
- package/src/wallets/wallet-connector.d.ts +2 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dynamic-labs/multi-wallet",
|
|
3
|
-
"version": "0.11.
|
|
3
|
+
"version": "0.11.26",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"registry": "https://registry.npmjs.org"
|
|
6
6
|
},
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
"@solana/web3.js": "^1.50.1",
|
|
13
13
|
"@coinbase/wallet-sdk": "^3.4.0",
|
|
14
14
|
"@walletconnect/client": "^1.8.0",
|
|
15
|
+
"@blocto/sdk": "^0.3.0-beta.2",
|
|
15
16
|
"@walletconnect/ethereum-provider": "^1.7.8",
|
|
16
17
|
"@onflow/fcl": "1.2.1"
|
|
17
18
|
},
|
|
@@ -111,6 +111,20 @@
|
|
|
111
111
|
"disabled": false
|
|
112
112
|
}
|
|
113
113
|
},
|
|
114
|
+
"bloctoevm": {
|
|
115
|
+
"desktop": {
|
|
116
|
+
"chrome": "",
|
|
117
|
+
"firefox": "",
|
|
118
|
+
"brave": "",
|
|
119
|
+
"edge": "",
|
|
120
|
+
"safari": ""
|
|
121
|
+
},
|
|
122
|
+
"mobile": {
|
|
123
|
+
"android": "",
|
|
124
|
+
"ios": "",
|
|
125
|
+
"disabled": false
|
|
126
|
+
}
|
|
127
|
+
},
|
|
114
128
|
"bravesol": {
|
|
115
129
|
"desktop": {
|
|
116
130
|
"chrome": "",
|
package/src/multi-wallet.js
CHANGED
|
@@ -26,6 +26,7 @@ const GameStop_1 = __importDefault(require("./wallets/ethereum/injected/GameStop
|
|
|
26
26
|
const ExodusEvm_1 = __importDefault(require("./wallets/ethereum/injected/ExodusEvm"));
|
|
27
27
|
const ExodusSol_1 = __importDefault(require("./wallets/solana/injected/ExodusSol"));
|
|
28
28
|
const BloctoInjected_1 = __importDefault(require("./wallets/ethereum/injected/BloctoInjected"));
|
|
29
|
+
const BloctoEvm_1 = __importDefault(require("./wallets/ethereum/BloctoEvm"));
|
|
29
30
|
let wallets = [];
|
|
30
31
|
const getSupportedWallets = ({ appLogoUrl, appName, evmNetworks, skipMemo } = {
|
|
31
32
|
appLogoUrl: '',
|
|
@@ -49,6 +50,7 @@ const getSupportedWallets = ({ appLogoUrl, appName, evmNetworks, skipMemo } = {
|
|
|
49
50
|
new slope_1.default(),
|
|
50
51
|
new dapper_1.default({ appLogoUrl, appName }),
|
|
51
52
|
new blocto_1.default({ appLogoUrl, appName }),
|
|
53
|
+
new BloctoEvm_1.default({ evmNetworks }),
|
|
52
54
|
new BloctoInjected_1.default({ evmNetworks }),
|
|
53
55
|
new walletConnect_1.default({ evmNetworks, walletName: 'WalletConnect' }),
|
|
54
56
|
new BraveSol_1.default(),
|
package/src/multi-wallet.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multi-wallet.js","sourceRoot":"","sources":["../../../../packages/multi-wallet/src/multi-wallet.ts"],"names":[],"mappings":";;;;;;AAAA,uEAA+C;AAC/C,6EAAoD;AAEpD,2EAAmD;AACnD,mEAA2C;AAC3C,yEAAiD;AACjD,iEAAyC;AACzC,4EAAoD;AACpD,mEAA2C;AAC3C,mEAA2C;AAE3C,+CAA8D;AAC9D,qDAAqD;AACrD,qEAAkE;AAClE,yDAG+B;AAC/B,uEAA+C;AAC/C,oFAA4D;AAC5D,8EAAsD;AACtD,kFAA0D;AAC1D,8GAAsF;AACtF,oFAA4D;AAC5D,sFAA8D;AAC9D,oFAA4D;AAC5D,gGAAwE;
|
|
1
|
+
{"version":3,"file":"multi-wallet.js","sourceRoot":"","sources":["../../../../packages/multi-wallet/src/multi-wallet.ts"],"names":[],"mappings":"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"}
|
package/src/utils/message.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export interface MessageParameters {
|
|
2
|
-
|
|
2
|
+
blockchain: string;
|
|
3
|
+
chainId?: number;
|
|
3
4
|
domain: string;
|
|
4
5
|
issuedAt?: string;
|
|
5
6
|
nonce: string;
|
|
@@ -8,5 +9,5 @@ export interface MessageParameters {
|
|
|
8
9
|
statement?: string;
|
|
9
10
|
uri: string;
|
|
10
11
|
}
|
|
11
|
-
export declare const generateMessageToSign: ({
|
|
12
|
-
export declare const getEip55Address: (publicKey: string, chainId?:
|
|
12
|
+
export declare const generateMessageToSign: ({ blockchain, domain, chainId, nonce, uri, publicKey, issuedAt, statement, requestId, }: MessageParameters) => string;
|
|
13
|
+
export declare const getEip55Address: (publicKey: string, chainId?: number) => string;
|
package/src/utils/message.js
CHANGED
|
@@ -6,35 +6,20 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.getEip55Address = exports.generateMessageToSign = void 0;
|
|
7
7
|
const utils_1 = require("ethers/lib/utils");
|
|
8
8
|
const console_1 = __importDefault(require("./console"));
|
|
9
|
-
|
|
10
|
-
// https://docs.login.xyz/general-information/siwe-overview/eip-4361
|
|
11
|
-
// TODO:
|
|
12
|
-
// - We might need to add prefix: \x19Ethereum Signed Message:\n<length of message> as per EIP-712
|
|
13
|
-
// - This implementation is missing some of the optional values
|
|
14
|
-
// - The work above and more should be covered in DYN-252
|
|
15
|
-
// internal mapping of blockchain abbrev to full network name
|
|
16
|
-
const networkNames = {
|
|
9
|
+
const fullBlockchainNames = {
|
|
17
10
|
ALGO: 'Algorand',
|
|
18
11
|
ETH: 'Ethereum',
|
|
19
12
|
EVM: 'Ethereum',
|
|
20
13
|
SOL: 'Solana',
|
|
21
14
|
};
|
|
22
|
-
|
|
23
|
-
// this is an ethereum standard, so does not currently support solana
|
|
24
|
-
const chainIds = {
|
|
25
|
-
ETH: '1',
|
|
26
|
-
EVM: '1',
|
|
27
|
-
SOL: undefined,
|
|
28
|
-
};
|
|
29
|
-
const generateMessageToSign = ({ chain, domain, nonce, uri, publicKey, issuedAt = new Date().toISOString(), statement, requestId, }) => {
|
|
15
|
+
const generateMessageToSign = ({ blockchain, domain, chainId, nonce, uri, publicKey, issuedAt = new Date().toISOString(), statement, requestId, }) => {
|
|
30
16
|
// This format follows the sign-in with ethereum (SIWE) standard,
|
|
31
17
|
// but we are using it also for non-ethereum wallets for now (eg. Solana)
|
|
32
18
|
// for more context on format and fields, please see:
|
|
33
19
|
// https://docs.login.xyz/general-information/siwe-overview/eip-4361
|
|
34
|
-
const
|
|
35
|
-
const header = `${domain} wants you to sign in with your ${
|
|
20
|
+
const blockchainName = fullBlockchainNames[blockchain.toUpperCase()];
|
|
21
|
+
const header = `${domain} wants you to sign in with your ${blockchainName} account:`;
|
|
36
22
|
// This is only required for Ethereum-based wallets
|
|
37
|
-
const chainId = chainIds[chain.toUpperCase()];
|
|
38
23
|
const messageAddress = (0, exports.getEip55Address)(publicKey, chainId);
|
|
39
24
|
const prefix = [header, messageAddress].join('\n');
|
|
40
25
|
const prefixWithStatement = `${[prefix, statement].join('\n\n')}\n`;
|
package/src/utils/message.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message.js","sourceRoot":"","sources":["../../../../../packages/multi-wallet/src/utils/message.ts"],"names":[],"mappings":";;;;;;AAAA,4CAA8C;AAE9C,wDAAgC;AAEhC,
|
|
1
|
+
{"version":3,"file":"message.js","sourceRoot":"","sources":["../../../../../packages/multi-wallet/src/utils/message.ts"],"names":[],"mappings":";;;;;;AAAA,4CAA8C;AAE9C,wDAAgC;AAEhC,MAAM,mBAAmB,GAA8B;IACrD,IAAI,EAAE,UAAU;IAChB,GAAG,EAAE,UAAU;IACf,GAAG,EAAE,UAAU;IACf,GAAG,EAAE,QAAQ;CACd,CAAC;AAcK,MAAM,qBAAqB,GAAG,CAAC,EACpC,UAAU,EACV,MAAM,EACN,OAAO,EACP,KAAK,EACL,GAAG,EACH,SAAS,EACT,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EACnC,SAAS,EACT,SAAS,GACS,EAAU,EAAE;IAC9B,iEAAiE;IACjE,yEAAyE;IACzE,qDAAqD;IACrD,oEAAoE;IACpE,MAAM,cAAc,GAAG,mBAAmB,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;IACrE,MAAM,MAAM,GAAG,GAAG,MAAM,mCAAmC,cAAc,WAAW,CAAC;IACrF,mDAAmD;IACnD,MAAM,cAAc,GAAG,IAAA,uBAAe,EAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC3D,MAAM,MAAM,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnD,MAAM,mBAAmB,GAAG,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;IAEpE,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,YAAY,CAAC,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC;IACjC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAChC,IAAI,OAAO,EAAE;QACX,YAAY,CAAC,IAAI,CAAC,aAAa,OAAO,EAAE,CAAC,CAAC;KAC3C;IAED,oEAAoE;IACpE,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAC5C,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAClC,CAAC;IAEF,MAAM,gBAAgB,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;IAE5D,YAAY,CAAC,IAAI,CAAC,UAAU,KAAK,EAAE,CAAC,CAAC;IACrC,YAAY,CAAC,IAAI,CAAC,cAAc,QAAQ,EAAE,CAAC,CAAC;IAC5C,YAAY,CAAC,IAAI,CAAC,oBAAoB,gBAAgB,EAAE,CAAC,CAAC;IAE1D,IAAI,SAAS,EAAE;QACb,YAAY,CAAC,IAAI,CAAC,eAAe,SAAS,EAAE,CAAC,CAAC;KAC/C;IAED,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEvC,OAAO,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAClD,CAAC,CAAC;AA/CW,QAAA,qBAAqB,yBA+ChC;AAEF,4EAA4E;AAC5E,2EAA2E;AAC3E,6CAA6C;AACtC,MAAM,eAAe,GAAG,CAC7B,SAAiB,EACjB,OAAgB,EACR,EAAE;IACV,IAAI;QACF,IAAI,OAAO,EAAE;YACX,OAAO,IAAA,kBAAU,EAAC,SAAS,CAAC,CAAC;SAC9B;KACF;IAAC,OAAO,GAAG,EAAE;QACZ,iBAAO,CAAC,GAAG,CAAC,6CAA6C,SAAS,EAAE,CAAC,CAAC;KACvE;IACD,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAZW,QAAA,eAAe,mBAY1B"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import BloctoSDK from '@blocto/sdk';
|
|
2
|
+
import { Chain, WalletConnector } from '../wallet-connector';
|
|
3
|
+
import { EvmNetwork } from './evm-network';
|
|
4
|
+
declare class BloctoEvm implements WalletConnector {
|
|
5
|
+
private client?;
|
|
6
|
+
name: string;
|
|
7
|
+
evmNetworks: EvmNetwork[];
|
|
8
|
+
canConnectViaQrCode: boolean;
|
|
9
|
+
canConnectViaCustodialService: boolean;
|
|
10
|
+
connectedChain: Chain;
|
|
11
|
+
supportedChains: Chain[];
|
|
12
|
+
chainID: string;
|
|
13
|
+
constructor({ evmNetworks }: {
|
|
14
|
+
evmNetworks: EvmNetwork[];
|
|
15
|
+
});
|
|
16
|
+
private getClient;
|
|
17
|
+
fetchPublicAddress(): Promise<string | undefined>;
|
|
18
|
+
connect(): Promise<void>;
|
|
19
|
+
getBalance(): Promise<string | undefined>;
|
|
20
|
+
getConnectedAccounts(): Promise<string[]>;
|
|
21
|
+
getSigner(): Promise<BloctoSDK>;
|
|
22
|
+
getWeb3Provider(): undefined;
|
|
23
|
+
isInstalledOnBrowser(): boolean;
|
|
24
|
+
proveOwnership(messageToSign: string): Promise<string | undefined>;
|
|
25
|
+
signMessage(messageToSign: string): Promise<string | undefined>;
|
|
26
|
+
supportsNetworkSwitching(): boolean;
|
|
27
|
+
switchNetwork(): Promise<void>;
|
|
28
|
+
setupEventListeners(): void;
|
|
29
|
+
teardownEventListeners(): void;
|
|
30
|
+
endSession?(): Promise<void>;
|
|
31
|
+
}
|
|
32
|
+
export default BloctoEvm;
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
const sdk_1 = __importDefault(require("@blocto/sdk"));
|
|
16
|
+
const utils_1 = require("ethers/lib/utils");
|
|
17
|
+
const ethers_1 = require("ethers");
|
|
18
|
+
const constants_1 = require("../constants");
|
|
19
|
+
//TODO - DYN-1020 Add support for multi-chain-IDs
|
|
20
|
+
class BloctoEvm {
|
|
21
|
+
constructor({ evmNetworks }) {
|
|
22
|
+
this.name = 'bloctoevm';
|
|
23
|
+
this.canConnectViaQrCode = false;
|
|
24
|
+
this.canConnectViaCustodialService = true;
|
|
25
|
+
this.connectedChain = 'EVM';
|
|
26
|
+
this.supportedChains = ['EVM', 'ETH'];
|
|
27
|
+
this.chainID = '0x89'; // Polygon
|
|
28
|
+
//filter out networks that are not supported by Blocto
|
|
29
|
+
this.evmNetworks = evmNetworks;
|
|
30
|
+
}
|
|
31
|
+
// TODO add cache for chainID to switch it
|
|
32
|
+
getClient() {
|
|
33
|
+
if (!this.client) {
|
|
34
|
+
this.client = new sdk_1.default({
|
|
35
|
+
ethereum: {
|
|
36
|
+
chainId: this.chainID,
|
|
37
|
+
//TODO we need to support different RPCs for different networks
|
|
38
|
+
rpc: `https://polygon-mainnet.infura.io/v3/${constants_1.infuraId}`,
|
|
39
|
+
},
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
return this.client;
|
|
43
|
+
}
|
|
44
|
+
fetchPublicAddress() {
|
|
45
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
46
|
+
const client = this.getClient();
|
|
47
|
+
if (client.ethereum) {
|
|
48
|
+
const addresses = yield client.ethereum.request({
|
|
49
|
+
method: 'eth_requestAccounts',
|
|
50
|
+
});
|
|
51
|
+
if (addresses.length > 0) {
|
|
52
|
+
return addresses[0];
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return undefined;
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
connect() {
|
|
59
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
60
|
+
yield this.fetchPublicAddress();
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
//TODO - DYN-1020 Add support for multi-chain
|
|
64
|
+
getBalance() {
|
|
65
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
66
|
+
const address = yield this.fetchPublicAddress();
|
|
67
|
+
if (address) {
|
|
68
|
+
const provider = ethers_1.ethers.getDefaultProvider('matic', {
|
|
69
|
+
infura: constants_1.infuraId,
|
|
70
|
+
});
|
|
71
|
+
const result = yield provider.getBalance(address);
|
|
72
|
+
if (!result)
|
|
73
|
+
return;
|
|
74
|
+
return ethers_1.ethers.utils.formatEther(result);
|
|
75
|
+
}
|
|
76
|
+
return undefined;
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
getConnectedAccounts() {
|
|
80
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
81
|
+
const client = this.getClient();
|
|
82
|
+
let accounts = [];
|
|
83
|
+
if (client.ethereum) {
|
|
84
|
+
accounts = yield client.ethereum.request({ method: 'eth_accounts' });
|
|
85
|
+
}
|
|
86
|
+
return accounts;
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
getSigner() {
|
|
90
|
+
return Promise.resolve(this.getClient());
|
|
91
|
+
}
|
|
92
|
+
getWeb3Provider() {
|
|
93
|
+
return undefined;
|
|
94
|
+
}
|
|
95
|
+
isInstalledOnBrowser() {
|
|
96
|
+
return false;
|
|
97
|
+
}
|
|
98
|
+
proveOwnership(messageToSign) {
|
|
99
|
+
return this.signMessage(messageToSign);
|
|
100
|
+
}
|
|
101
|
+
signMessage(messageToSign) {
|
|
102
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
103
|
+
const client = this.getClient();
|
|
104
|
+
const hexMessageToSign = (0, utils_1.hexlify)((0, utils_1.toUtf8Bytes)(messageToSign));
|
|
105
|
+
let signedMessage;
|
|
106
|
+
if (client.ethereum) {
|
|
107
|
+
signedMessage = yield client.ethereum.request({
|
|
108
|
+
method: 'personal_sign',
|
|
109
|
+
params: [hexMessageToSign],
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
return signedMessage;
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
supportsNetworkSwitching() {
|
|
116
|
+
return false;
|
|
117
|
+
}
|
|
118
|
+
// *********************
|
|
119
|
+
// Unimplemented methods
|
|
120
|
+
// *********************
|
|
121
|
+
// TODO implement as part of DYN-1020
|
|
122
|
+
switchNetwork() {
|
|
123
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
124
|
+
return Promise.resolve();
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
setupEventListeners() {
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
teardownEventListeners() {
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
endSession() {
|
|
134
|
+
return Promise.resolve();
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
exports.default = BloctoEvm;
|
|
138
|
+
//# sourceMappingURL=BloctoEvm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BloctoEvm.js","sourceRoot":"","sources":["../../../../../../packages/multi-wallet/src/wallets/ethereum/BloctoEvm.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ethers } from 'ethers';
|
|
2
2
|
import { Connection } from '@solana/web3.js';
|
|
3
|
+
import BloctoSDK from '@blocto/sdk';
|
|
3
4
|
import { ISolana } from './window';
|
|
4
5
|
import { IMyAlgoSigner } from './algorand/myalgoSigner';
|
|
5
6
|
export declare type Chain = 'ETH' | 'FLOW' | 'SOL' | 'EVM' | 'ALGO';
|
|
@@ -28,7 +29,7 @@ export interface WalletConnector {
|
|
|
28
29
|
fetchPublicAddress(opts?: FetchPublicAddressOpts, nonce?: string): Promise<string | undefined>;
|
|
29
30
|
getBalance(): Promise<string | undefined>;
|
|
30
31
|
getConnectedAccounts(): Promise<string[]>;
|
|
31
|
-
getSigner(): Promise<ethers.providers.JsonRpcSigner | ISolana | IMyAlgoSigner | undefined>;
|
|
32
|
+
getSigner(): Promise<ethers.providers.JsonRpcSigner | ISolana | IMyAlgoSigner | BloctoSDK | undefined>;
|
|
32
33
|
getWeb3Provider(): ethers.providers.Web3Provider | Connection | undefined | void;
|
|
33
34
|
isInstalledOnBrowser(): boolean;
|
|
34
35
|
name: string;
|