@cityofzion/bs-solana 3.0.1 → 3.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/BSSolana.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { TBSAccount, TGetLedgerTransport, IBlockchainDataService, IExchangeDataService, IExplorerService, INftDataService, ITokenService, TBSNetwork, TBSToken, TTransferParam, TPingNetworkResponse } from '@cityofzion/blockchain-service';
|
|
1
|
+
import { TBSAccount, TGetLedgerTransport, IBlockchainDataService, IExchangeDataService, IExplorerService, INftDataService, ITokenService, TBSNetwork, TBSToken, TTransferParam, TPingNetworkResponse, type IWalletConnectService } from '@cityofzion/blockchain-service';
|
|
2
2
|
import solanaSDK from '@solana/web3.js';
|
|
3
3
|
import { Web3LedgerServiceSolana } from './services/ledger/Web3LedgerServiceSolana';
|
|
4
4
|
import { IBSSolana, TBSSolanaNetworkId } from './types';
|
|
@@ -21,8 +21,10 @@ export declare class BSSolana<N extends string = string> implements IBSSolana<N>
|
|
|
21
21
|
nftDataService: INftDataService;
|
|
22
22
|
explorerService: IExplorerService;
|
|
23
23
|
tokenService: ITokenService;
|
|
24
|
+
walletConnectService: IWalletConnectService<N>;
|
|
24
25
|
connection: solanaSDK.Connection;
|
|
25
26
|
constructor(name: N, network?: TBSNetwork<TBSSolanaNetworkId>, getLedgerTransport?: TGetLedgerTransport<N>);
|
|
27
|
+
generateKeyPairFromKey(key: string): solanaSDK.Keypair;
|
|
26
28
|
setNetwork(network: TBSNetwork<TBSSolanaNetworkId>): void;
|
|
27
29
|
pingNode(url: string): Promise<TPingNetworkResponse>;
|
|
28
30
|
validateAddress(address: string): boolean;
|
package/dist/BSSolana.js
CHANGED
|
@@ -49,7 +49,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
49
49
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
50
50
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
51
51
|
};
|
|
52
|
-
var _BSSolana_instances,
|
|
52
|
+
var _BSSolana_instances, _BSSolana_signTransaction, _BSSolana_buildTransferParams;
|
|
53
53
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
54
54
|
exports.BSSolana = void 0;
|
|
55
55
|
const blockchain_service_1 = require("@cityofzion/blockchain-service");
|
|
@@ -65,6 +65,7 @@ const SolScanESSolana_1 = require("./services/explorer/SolScanESSolana");
|
|
|
65
65
|
const MoralisEDSSolana_1 = require("./services/exchange/MoralisEDSSolana");
|
|
66
66
|
const TokenServiceSolana_1 = require("./services/token/TokenServiceSolana");
|
|
67
67
|
const axios_1 = __importDefault(require("axios"));
|
|
68
|
+
const WalletConnectServiceSolana_1 = require("./services/wallet-connect/WalletConnectServiceSolana");
|
|
68
69
|
const KEY_BYTES_LENGTH = 64;
|
|
69
70
|
class BSSolana {
|
|
70
71
|
constructor(name, network, getLedgerTransport) {
|
|
@@ -81,6 +82,16 @@ class BSSolana {
|
|
|
81
82
|
this.defaultNetwork = BSSolanaConstants_1.BSSolanaConstants.MAINNET_NETWORK;
|
|
82
83
|
this.setNetwork(network !== null && network !== void 0 ? network : this.defaultNetwork);
|
|
83
84
|
}
|
|
85
|
+
generateKeyPairFromKey(key) {
|
|
86
|
+
let keyBuffer;
|
|
87
|
+
try {
|
|
88
|
+
keyBuffer = bs58_1.default.decode(key);
|
|
89
|
+
}
|
|
90
|
+
catch (_a) {
|
|
91
|
+
keyBuffer = Uint8Array.from(key.split(',').map(Number));
|
|
92
|
+
}
|
|
93
|
+
return web3_js_1.default.Keypair.fromSecretKey(keyBuffer);
|
|
94
|
+
}
|
|
84
95
|
setNetwork(network) {
|
|
85
96
|
const rpcNetworkUrls = BSSolanaConstants_1.BSSolanaConstants.RPC_LIST_BY_NETWORK_ID[network.id] || [];
|
|
86
97
|
const isValidNetwork = blockchain_service_1.BSUtilsHelper.validateNetwork(network, this.availableNetworks, rpcNetworkUrls);
|
|
@@ -94,6 +105,7 @@ class BSSolana {
|
|
|
94
105
|
this.nftDataService = new RpcNDSSolana_1.RpcNDSSolana(this);
|
|
95
106
|
this.explorerService = new SolScanESSolana_1.SolScanESSolana(this);
|
|
96
107
|
this.exchangeDataService = new MoralisEDSSolana_1.MoralisEDSSolana(this);
|
|
108
|
+
this.walletConnectService = new WalletConnectServiceSolana_1.WalletConnectServiceSolana(this);
|
|
97
109
|
this.connection = new web3_js_1.default.Connection(this.network.url);
|
|
98
110
|
}
|
|
99
111
|
// This method is done manually because we need to ensure that the request is aborted after timeout
|
|
@@ -151,7 +163,7 @@ class BSSolana {
|
|
|
151
163
|
};
|
|
152
164
|
}
|
|
153
165
|
generateAccountFromKey(key) {
|
|
154
|
-
const keypair =
|
|
166
|
+
const keypair = this.generateKeyPairFromKey(key);
|
|
155
167
|
const address = keypair.publicKey.toBase58();
|
|
156
168
|
const base58Key = bs58_1.default.encode(keypair.secretKey);
|
|
157
169
|
return {
|
|
@@ -203,16 +215,7 @@ class BSSolana {
|
|
|
203
215
|
}
|
|
204
216
|
}
|
|
205
217
|
exports.BSSolana = BSSolana;
|
|
206
|
-
_BSSolana_instances = new WeakSet(),
|
|
207
|
-
let keyBuffer;
|
|
208
|
-
try {
|
|
209
|
-
keyBuffer = bs58_1.default.decode(key);
|
|
210
|
-
}
|
|
211
|
-
catch (_a) {
|
|
212
|
-
keyBuffer = Uint8Array.from(key.split(',').map(Number));
|
|
213
|
-
}
|
|
214
|
-
return web3_js_1.default.Keypair.fromSecretKey(keyBuffer);
|
|
215
|
-
}, _BSSolana_signTransaction = function _BSSolana_signTransaction(transaction, senderAccount) {
|
|
218
|
+
_BSSolana_instances = new WeakSet(), _BSSolana_signTransaction = function _BSSolana_signTransaction(transaction, senderAccount) {
|
|
216
219
|
return __awaiter(this, void 0, void 0, function* () {
|
|
217
220
|
if (senderAccount.isHardware) {
|
|
218
221
|
if (!this.ledgerService.getLedgerTransport)
|
|
@@ -222,7 +225,7 @@ _BSSolana_instances = new WeakSet(), _BSSolana_generateKeyPairFromKey = function
|
|
|
222
225
|
const transport = yield this.ledgerService.getLedgerTransport(senderAccount);
|
|
223
226
|
return yield this.ledgerService.signTransaction(transport, transaction, senderAccount);
|
|
224
227
|
}
|
|
225
|
-
transaction.sign(
|
|
228
|
+
transaction.sign(this.generateKeyPairFromKey(senderAccount.key));
|
|
226
229
|
return transaction.serialize();
|
|
227
230
|
});
|
|
228
231
|
}, _BSSolana_buildTransferParams = function _BSSolana_buildTransferParams(param) {
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { type IWalletConnectService, type TWalletConnectServiceRequestMethodParams } from '@cityofzion/blockchain-service';
|
|
2
|
+
import type { IBSSolana, TBSSolanaNetworkId } from '../../types';
|
|
3
|
+
export declare class WalletConnectServiceSolana<N extends string> implements IWalletConnectService<N> {
|
|
4
|
+
#private;
|
|
5
|
+
static networkIdByNetworkType: Record<TBSSolanaNetworkId, string>;
|
|
6
|
+
readonly namespace = "solana";
|
|
7
|
+
readonly chain: string;
|
|
8
|
+
readonly supportedMethods: string[];
|
|
9
|
+
readonly supportedEvents: string[];
|
|
10
|
+
readonly calculableMethods: string[];
|
|
11
|
+
readonly autoApproveMethods: string[];
|
|
12
|
+
constructor(service: IBSSolana<N>);
|
|
13
|
+
[methodName: string]: any;
|
|
14
|
+
solana_getAccounts(args: TWalletConnectServiceRequestMethodParams<N>): Promise<{
|
|
15
|
+
pubkey: string;
|
|
16
|
+
}[]>;
|
|
17
|
+
solana_requestAccounts(args: TWalletConnectServiceRequestMethodParams<N>): Promise<{
|
|
18
|
+
pubkey: string;
|
|
19
|
+
}[]>;
|
|
20
|
+
solana_signMessage(args: TWalletConnectServiceRequestMethodParams<N>): Promise<{
|
|
21
|
+
signature: string;
|
|
22
|
+
}>;
|
|
23
|
+
solana_signTransaction(args: TWalletConnectServiceRequestMethodParams<N>): Promise<{
|
|
24
|
+
transaction: string;
|
|
25
|
+
}>;
|
|
26
|
+
solana_signAllTransactions(args: TWalletConnectServiceRequestMethodParams<N>): Promise<{
|
|
27
|
+
transactions: any;
|
|
28
|
+
}>;
|
|
29
|
+
solana_signAndSendTransaction(args: TWalletConnectServiceRequestMethodParams<N>): Promise<{
|
|
30
|
+
signature: string;
|
|
31
|
+
}>;
|
|
32
|
+
calculateRequestFee(args: TWalletConnectServiceRequestMethodParams<N>): Promise<string>;
|
|
33
|
+
}
|
|
@@ -0,0 +1,167 @@
|
|
|
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 __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
12
|
+
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
13
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
14
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
15
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
16
|
+
};
|
|
17
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
18
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
19
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
20
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
21
|
+
};
|
|
22
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
23
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
24
|
+
};
|
|
25
|
+
var _WalletConnectServiceSolana_instances, _WalletConnectServiceSolana_service, _WalletConnectServiceSolana_parseTransaction, _WalletConnectServiceSolana_signTransaction;
|
|
26
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
27
|
+
exports.WalletConnectServiceSolana = void 0;
|
|
28
|
+
const blockchain_service_1 = require("@cityofzion/blockchain-service");
|
|
29
|
+
const crypto_1 = require("crypto");
|
|
30
|
+
const web3_js_1 = require("@solana/web3.js");
|
|
31
|
+
const bs58_1 = __importDefault(require("bs58"));
|
|
32
|
+
class WalletConnectServiceSolana {
|
|
33
|
+
constructor(service) {
|
|
34
|
+
_WalletConnectServiceSolana_instances.add(this);
|
|
35
|
+
this.namespace = 'solana';
|
|
36
|
+
this.supportedMethods = [];
|
|
37
|
+
this.supportedEvents = [];
|
|
38
|
+
this.calculableMethods = [];
|
|
39
|
+
this.autoApproveMethods = [];
|
|
40
|
+
_WalletConnectServiceSolana_service.set(this, void 0);
|
|
41
|
+
__classPrivateFieldSet(this, _WalletConnectServiceSolana_service, service, "f");
|
|
42
|
+
const networkId = WalletConnectServiceSolana.networkIdByNetworkType[__classPrivateFieldGet(this, _WalletConnectServiceSolana_service, "f").network.type];
|
|
43
|
+
this.chain = `${this.namespace}:${networkId}`;
|
|
44
|
+
}
|
|
45
|
+
solana_getAccounts(args) {
|
|
46
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
47
|
+
const keypair = __classPrivateFieldGet(this, _WalletConnectServiceSolana_service, "f").generateKeyPairFromKey(args.account.key);
|
|
48
|
+
return [{ pubkey: keypair.publicKey.toBase58() }];
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
solana_requestAccounts(args) {
|
|
52
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
53
|
+
return yield this.solana_getAccounts(args);
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
solana_signMessage(args) {
|
|
57
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
58
|
+
if (typeof args.params.message !== 'string' || typeof args.params.pubKey !== 'string') {
|
|
59
|
+
throw new Error('Invalid params');
|
|
60
|
+
}
|
|
61
|
+
if (args.params.pubKey !== args.account.address) {
|
|
62
|
+
throw new Error('Public key does not match account address');
|
|
63
|
+
}
|
|
64
|
+
const messageBytes = bs58_1.default.decode(args.params.message);
|
|
65
|
+
const keypair = __classPrivateFieldGet(this, _WalletConnectServiceSolana_service, "f").generateKeyPairFromKey(args.account.key);
|
|
66
|
+
const seed = keypair.secretKey.slice(0, 32);
|
|
67
|
+
const privateKey = (0, crypto_1.createPrivateKey)({
|
|
68
|
+
key: Buffer.concat([Buffer.from('302e020100300506032b657004220420', 'hex'), seed]),
|
|
69
|
+
format: 'der',
|
|
70
|
+
type: 'pkcs8',
|
|
71
|
+
});
|
|
72
|
+
const signature = (0, crypto_1.sign)(null, messageBytes, privateKey);
|
|
73
|
+
return { signature: bs58_1.default.encode(signature) };
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
solana_signTransaction(args) {
|
|
77
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
78
|
+
if (typeof args.params.transaction !== 'string') {
|
|
79
|
+
throw new Error('Invalid params');
|
|
80
|
+
}
|
|
81
|
+
const transaction = __classPrivateFieldGet(this, _WalletConnectServiceSolana_instances, "m", _WalletConnectServiceSolana_signTransaction).call(this, args.params.transaction, args.account);
|
|
82
|
+
return { transaction: transaction.serialize().toString('base64') };
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
solana_signAllTransactions(args) {
|
|
86
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
87
|
+
if (!Array.isArray(args.params.transactions)) {
|
|
88
|
+
throw new Error('Invalid params');
|
|
89
|
+
}
|
|
90
|
+
const signedTransactions = args.params.transactions.map((transaction) => __classPrivateFieldGet(this, _WalletConnectServiceSolana_instances, "m", _WalletConnectServiceSolana_signTransaction).call(this, transaction, args.account).serialize().toString('base64'));
|
|
91
|
+
return {
|
|
92
|
+
transactions: signedTransactions,
|
|
93
|
+
};
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
solana_signAndSendTransaction(args) {
|
|
97
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
98
|
+
var _a;
|
|
99
|
+
if (typeof args.params.transaction !== 'string') {
|
|
100
|
+
throw new Error('Invalid params');
|
|
101
|
+
}
|
|
102
|
+
const options = (_a = args.params.sendOptions) !== null && _a !== void 0 ? _a : {};
|
|
103
|
+
const signedTransaction = __classPrivateFieldGet(this, _WalletConnectServiceSolana_instances, "m", _WalletConnectServiceSolana_signTransaction).call(this, args.params.transaction, args.account);
|
|
104
|
+
const signature = yield __classPrivateFieldGet(this, _WalletConnectServiceSolana_service, "f").connection.sendRawTransaction(signedTransaction.serialize(), {
|
|
105
|
+
maxRetries: options.maxRetries,
|
|
106
|
+
preflightCommitment: options.preflightCommitment,
|
|
107
|
+
minContextSlot: options.minContextSlot,
|
|
108
|
+
skipPreflight: options.skipPreflight,
|
|
109
|
+
});
|
|
110
|
+
return { signature };
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
calculateRequestFee(args) {
|
|
114
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
115
|
+
if (typeof args.params.transaction !== 'string') {
|
|
116
|
+
throw new Error('Invalid params');
|
|
117
|
+
}
|
|
118
|
+
const transaction = __classPrivateFieldGet(this, _WalletConnectServiceSolana_instances, "m", _WalletConnectServiceSolana_parseTransaction).call(this, args.params.transaction);
|
|
119
|
+
let message;
|
|
120
|
+
if (transaction instanceof web3_js_1.Transaction) {
|
|
121
|
+
const { blockhash } = yield __classPrivateFieldGet(this, _WalletConnectServiceSolana_service, "f").connection.getLatestBlockhash();
|
|
122
|
+
transaction.recentBlockhash = blockhash;
|
|
123
|
+
message = transaction.compileMessage();
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
message = transaction.message;
|
|
127
|
+
}
|
|
128
|
+
const fee = yield __classPrivateFieldGet(this, _WalletConnectServiceSolana_service, "f").connection.getFeeForMessage(message);
|
|
129
|
+
if (!fee.value) {
|
|
130
|
+
throw new Error('Failed to calculate fee');
|
|
131
|
+
}
|
|
132
|
+
const feeBn = blockchain_service_1.BSBigNumberHelper.fromDecimals(fee.value, __classPrivateFieldGet(this, _WalletConnectServiceSolana_service, "f").feeToken.decimals);
|
|
133
|
+
return blockchain_service_1.BSBigNumberHelper.toNumber(feeBn).toString();
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
exports.WalletConnectServiceSolana = WalletConnectServiceSolana;
|
|
138
|
+
_WalletConnectServiceSolana_service = new WeakMap(), _WalletConnectServiceSolana_instances = new WeakSet(), _WalletConnectServiceSolana_parseTransaction = function _WalletConnectServiceSolana_parseTransaction(encodedTransaction) {
|
|
139
|
+
const buffer = Buffer.from(encodedTransaction, 'base64');
|
|
140
|
+
let transaction;
|
|
141
|
+
// Versioned tx starts with version byte >= 0x80
|
|
142
|
+
if (buffer[0] & 0x80) {
|
|
143
|
+
transaction = web3_js_1.VersionedTransaction.deserialize(buffer);
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
transaction = web3_js_1.Transaction.from(buffer);
|
|
147
|
+
}
|
|
148
|
+
return transaction;
|
|
149
|
+
}, _WalletConnectServiceSolana_signTransaction = function _WalletConnectServiceSolana_signTransaction(encodedTransaction, account) {
|
|
150
|
+
const transaction = __classPrivateFieldGet(this, _WalletConnectServiceSolana_instances, "m", _WalletConnectServiceSolana_parseTransaction).call(this, encodedTransaction);
|
|
151
|
+
const keypair = __classPrivateFieldGet(this, _WalletConnectServiceSolana_service, "f").generateKeyPairFromKey(account.key);
|
|
152
|
+
// Versioned tx starts with version byte >= 0x80
|
|
153
|
+
if (transaction instanceof web3_js_1.VersionedTransaction) {
|
|
154
|
+
transaction.sign([keypair]);
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
if (transaction.feePayer && transaction.feePayer.toBase58() !== keypair.publicKey.toBase58()) {
|
|
158
|
+
throw new Error('Fee payer does not match account address');
|
|
159
|
+
}
|
|
160
|
+
transaction.partialSign(keypair);
|
|
161
|
+
}
|
|
162
|
+
return transaction;
|
|
163
|
+
};
|
|
164
|
+
WalletConnectServiceSolana.networkIdByNetworkType = {
|
|
165
|
+
'mainnet-beta': '5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp',
|
|
166
|
+
devnet: 'EtWTRABZaYq6iMfeYKouRu166VU2xqa1',
|
|
167
|
+
};
|
package/dist/types.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import type { IBlockchainService, IBSWithExplorer, IBSWithFee, IBSWithLedger, IBSWithNameService, IBSWithNft, TBSNetworkId } from '@cityofzion/blockchain-service';
|
|
1
|
+
import type { IBlockchainService, IBSWithExplorer, IBSWithFee, IBSWithLedger, IBSWithNameService, IBSWithNft, IBSWithWalletConnect, TBSNetworkId } from '@cityofzion/blockchain-service';
|
|
2
2
|
import type solanaSDK from '@solana/web3.js';
|
|
3
3
|
export type TBSSolanaNetworkId = TBSNetworkId<'mainnet-beta' | 'devnet'>;
|
|
4
|
-
export interface IBSSolana<N extends string = string> extends IBlockchainService<N, TBSSolanaNetworkId>, IBSWithFee<N>, IBSWithNameService, IBSWithLedger<N>, IBSWithNft, IBSWithExplorer {
|
|
4
|
+
export interface IBSSolana<N extends string = string> extends IBlockchainService<N, TBSSolanaNetworkId>, IBSWithFee<N>, IBSWithNameService, IBSWithLedger<N>, IBSWithNft, IBSWithExplorer, IBSWithWalletConnect<N> {
|
|
5
5
|
connection: solanaSDK.Connection;
|
|
6
|
+
generateKeyPairFromKey(key: string): solanaSDK.Keypair;
|
|
6
7
|
}
|
|
7
8
|
export type TMetaplexAssetByOwnerResponse = {
|
|
8
9
|
jsonrpc: string;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cityofzion/bs-solana",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.2",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"repository": "https://github.com/CityOfZion/blockchain-services",
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
"@ledgerhq/hw-transport": "~6.32.0",
|
|
22
22
|
"@metaplex-foundation/js": "~0.20.1",
|
|
23
23
|
"date-fns": "~4.1.0",
|
|
24
|
-
"@cityofzion/blockchain-service": "3.0.
|
|
24
|
+
"@cityofzion/blockchain-service": "3.0.2"
|
|
25
25
|
},
|
|
26
26
|
"devDependencies": {
|
|
27
27
|
"@ledgerhq/hw-transport-node-hid": "~6.30.0",
|