@dydxprotocol/v4-client-js 1.17.0 → 1.19.0
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/CHANGELOG.md +2 -2
- package/build/examples/websocket_orderbook_example.d.ts +1 -0
- package/build/examples/websocket_orderbook_example.js +196 -0
- package/build/src/clients/modules/local-wallet.d.ts +4 -4
- package/build/src/clients/modules/local-wallet.js +1 -1
- package/build/src/clients/modules/signer.d.ts +3 -3
- package/build/src/clients/modules/signer.js +18 -8
- package/build/tsconfig.tsbuildinfo +1 -1
- package/examples/websocket_orderbook_example.ts +239 -0
- package/package.json +1 -1
- package/src/clients/modules/local-wallet.ts +4 -4
- package/src/clients/modules/signer.ts +33 -12
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
# [1.
|
|
1
|
+
# [1.19.0](https://github.com/dydxprotocol/v4-clients/compare/v4-client-js@1.18.0...v4-client-js@1.19.0) (2025-02-18)
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
### Features
|
|
5
5
|
|
|
6
|
-
*
|
|
6
|
+
* support amino and direct signer types ([#332](https://github.com/dydxprotocol/v4-clients/issues/332)) ([8c07023](https://github.com/dydxprotocol/v4-clients/commit/8c07023462fdaecec3c13dade28f2a87e2b8dba5))
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
4
|
+
/* eslint-disable no-param-reassign */
|
|
5
|
+
const constants_1 = require("../src/clients/constants");
|
|
6
|
+
const socket_client_1 = require("../src/clients/socket-client");
|
|
7
|
+
function test() {
|
|
8
|
+
let orderBookBidList = [];
|
|
9
|
+
let orderBookAskList = [];
|
|
10
|
+
const mySocket = new socket_client_1.SocketClient(constants_1.Network.mainnet().indexerConfig, () => {
|
|
11
|
+
console.log('socket opened');
|
|
12
|
+
mySocket.subscribeToOrderbook('ETH-USD');
|
|
13
|
+
}, () => {
|
|
14
|
+
console.log('socket closed');
|
|
15
|
+
}, (message) => {
|
|
16
|
+
try {
|
|
17
|
+
if (typeof message.data === 'string') {
|
|
18
|
+
const jsonString = message.data;
|
|
19
|
+
const parsingData = JSON.parse(jsonString);
|
|
20
|
+
const messageId = parsingData.message_id;
|
|
21
|
+
const orderBookDataList = parsingData.contents;
|
|
22
|
+
if (orderBookDataList instanceof Array) {
|
|
23
|
+
// common orderBook data;
|
|
24
|
+
[orderBookBidList, orderBookAskList] = updateOrderBook(orderBookDataList, orderBookBidList, orderBookAskList, messageId);
|
|
25
|
+
// sort
|
|
26
|
+
orderBookBidList = sortByNthElementDesc(orderBookBidList, 0);
|
|
27
|
+
orderBookAskList = sortByNthElementAsc(orderBookAskList, 0);
|
|
28
|
+
// resolving crossed orderBook
|
|
29
|
+
if (orderBookBidList.length > 0 &&
|
|
30
|
+
orderBookAskList.length > 0 &&
|
|
31
|
+
orderBookBidList[0][0] >= orderBookAskList[0][0]) {
|
|
32
|
+
[orderBookBidList, orderBookAskList] = resolveCrossedOrderBook(orderBookBidList, orderBookAskList);
|
|
33
|
+
}
|
|
34
|
+
printOrderBook(orderBookBidList, orderBookAskList);
|
|
35
|
+
if (orderBookBidList.length > 300) {
|
|
36
|
+
orderBookBidList.splice(50);
|
|
37
|
+
}
|
|
38
|
+
if (orderBookAskList.length > 300) {
|
|
39
|
+
orderBookAskList.splice(50);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
else if (orderBookDataList !== null && orderBookDataList !== undefined) {
|
|
43
|
+
// initial OrderBook data
|
|
44
|
+
setInitialOrderBook(orderBookDataList, orderBookBidList, orderBookAskList, messageId);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
catch (e) {
|
|
49
|
+
console.error('Error parsing JSON message:', e);
|
|
50
|
+
}
|
|
51
|
+
}, (event) => {
|
|
52
|
+
console.error('Encountered error:', event.message);
|
|
53
|
+
});
|
|
54
|
+
mySocket.connect();
|
|
55
|
+
}
|
|
56
|
+
const sortByNthElementAsc = (arr, n) => {
|
|
57
|
+
return arr.sort((a, b) => {
|
|
58
|
+
if (a[n] < b[n])
|
|
59
|
+
return -1;
|
|
60
|
+
if (a[n] > b[n])
|
|
61
|
+
return 1;
|
|
62
|
+
return 0;
|
|
63
|
+
});
|
|
64
|
+
};
|
|
65
|
+
const sortByNthElementDesc = (arr, n) => {
|
|
66
|
+
return arr.sort((a, b) => {
|
|
67
|
+
if (a[n] > b[n])
|
|
68
|
+
return -1;
|
|
69
|
+
if (a[n] < b[n])
|
|
70
|
+
return 1;
|
|
71
|
+
return 0;
|
|
72
|
+
});
|
|
73
|
+
};
|
|
74
|
+
const printOrderBook = (orderBookBidList, orderBookAskList) => {
|
|
75
|
+
// print
|
|
76
|
+
console.log(`OrderBook for ETH-USD:`);
|
|
77
|
+
console.log(`Price Qty`);
|
|
78
|
+
for (let i = 4; i > -1; i--) {
|
|
79
|
+
const priceStr = String(orderBookAskList[i][0]);
|
|
80
|
+
const spaces = createSpaces(10 - priceStr.length);
|
|
81
|
+
console.log(`${priceStr}${spaces}${orderBookAskList[i][1]}`);
|
|
82
|
+
}
|
|
83
|
+
console.log('---------------------');
|
|
84
|
+
for (let i = 0; i < 5; i++) {
|
|
85
|
+
const priceStr = String(orderBookBidList[i][0]);
|
|
86
|
+
const spaces = createSpaces(10 - priceStr.length);
|
|
87
|
+
console.log(`${priceStr}${spaces}${orderBookBidList[i][1]}`);
|
|
88
|
+
}
|
|
89
|
+
console.log('');
|
|
90
|
+
};
|
|
91
|
+
function createSpaces(count) {
|
|
92
|
+
if (count <= 0) {
|
|
93
|
+
return '';
|
|
94
|
+
}
|
|
95
|
+
let spaces = '';
|
|
96
|
+
for (let i = 0; i < count; i++) {
|
|
97
|
+
spaces += ' ';
|
|
98
|
+
}
|
|
99
|
+
return spaces;
|
|
100
|
+
}
|
|
101
|
+
const resolveCrossedOrderBook = (orderBookBidList, orderBookAskList) => {
|
|
102
|
+
while (orderBookBidList[0][0] >= orderBookAskList[0][0]) {
|
|
103
|
+
if (orderBookBidList[0][2] < orderBookAskList[0][2]) {
|
|
104
|
+
orderBookBidList.shift();
|
|
105
|
+
}
|
|
106
|
+
else if (orderBookBidList[0][2] > orderBookAskList[0][2]) {
|
|
107
|
+
orderBookAskList.shift();
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
if (orderBookBidList[0][1] > orderBookAskList[0][1]) {
|
|
111
|
+
orderBookBidList[0][1] -= orderBookAskList[0][1];
|
|
112
|
+
orderBookAskList.shift();
|
|
113
|
+
}
|
|
114
|
+
else if (orderBookBidList[0][1] < orderBookAskList[0][1]) {
|
|
115
|
+
orderBookAskList[0][1] -= orderBookBidList[0][1];
|
|
116
|
+
orderBookBidList.shift();
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
orderBookAskList.shift();
|
|
120
|
+
orderBookBidList.shift();
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return [orderBookBidList, orderBookAskList];
|
|
125
|
+
};
|
|
126
|
+
const setInitialOrderBook = (orderBookDataList, orderBookBidList, orderBookAskList, messageId) => {
|
|
127
|
+
orderBookDataList.bids.forEach((item) => {
|
|
128
|
+
orderBookBidList.push([Number(item.price), Number(item.size), messageId]);
|
|
129
|
+
});
|
|
130
|
+
orderBookDataList.asks.forEach((item) => {
|
|
131
|
+
orderBookAskList.push([Number(item.price), Number(item.size), messageId]);
|
|
132
|
+
});
|
|
133
|
+
};
|
|
134
|
+
const updateOrderBook = (orderBookDataList, orderBookBidList, orderBookAskList, messageId) => {
|
|
135
|
+
orderBookDataList.forEach((entry) => {
|
|
136
|
+
if (entry.bids !== null && entry.bids !== undefined) {
|
|
137
|
+
const flattened = entry.bids.reduce((acc, val) => acc.concat(val), []);
|
|
138
|
+
const entryBidPrice = Number(flattened[0]);
|
|
139
|
+
const entryBidSize = Number(flattened[1]);
|
|
140
|
+
// remove prices with zero Qty
|
|
141
|
+
if (entryBidSize === 0) {
|
|
142
|
+
for (let i = orderBookBidList.length - 1; i >= 0; i--) {
|
|
143
|
+
if (orderBookBidList[i][0] === entryBidPrice) {
|
|
144
|
+
orderBookBidList.splice(i, 1);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
// The price that already exists in the order book is modified only Qty
|
|
150
|
+
if (orderBookBidList.some((innerArray) => innerArray[0] === entryBidPrice)) {
|
|
151
|
+
orderBookBidList.forEach((item, index) => {
|
|
152
|
+
if (item[0] === entryBidPrice) {
|
|
153
|
+
orderBookBidList[index][1] = entryBidSize;
|
|
154
|
+
orderBookBidList[index][2] = messageId;
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
// Add new data to order book
|
|
160
|
+
orderBookBidList.push([entryBidPrice, entryBidSize, messageId]);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
if (entry.asks !== null && entry.asks !== undefined) {
|
|
165
|
+
const flattened = entry.asks.reduce((acc, val) => acc.concat(val), []);
|
|
166
|
+
const entryAskPrice = Number(flattened[0]);
|
|
167
|
+
const entryAskSize = Number(flattened[1]);
|
|
168
|
+
if (entryAskSize === 0) {
|
|
169
|
+
// remove prices with zero Qty
|
|
170
|
+
for (let i = orderBookAskList.length - 1; i >= 0; i--) {
|
|
171
|
+
if (orderBookAskList[i][0] === entryAskPrice) {
|
|
172
|
+
orderBookAskList.splice(i, 1);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
// The price that already exists in the order book is modified only Qty
|
|
178
|
+
if (orderBookAskList.some((innerArray) => innerArray[0] === entryAskPrice)) {
|
|
179
|
+
orderBookAskList.forEach((item, index) => {
|
|
180
|
+
if (item[0] === entryAskPrice) {
|
|
181
|
+
orderBookAskList[index][1] = entryAskSize;
|
|
182
|
+
orderBookAskList[index][2] = messageId;
|
|
183
|
+
}
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
// Add new data to order book
|
|
188
|
+
orderBookAskList.push([entryAskPrice, entryAskSize, messageId]);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
});
|
|
193
|
+
return [orderBookBidList, orderBookAskList];
|
|
194
|
+
};
|
|
195
|
+
test();
|
|
196
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vic29ja2V0X29yZGVyYm9va19leGFtcGxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vZXhhbXBsZXMvd2Vic29ja2V0X29yZGVyYm9va19leGFtcGxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsdURBQXVEO0FBQ3ZELHNDQUFzQztBQUN0Qyx3REFBbUQ7QUFDbkQsZ0VBQTREO0FBRTVELFNBQVMsSUFBSTtJQUNYLElBQUksZ0JBQWdCLEdBQStCLEVBQUUsQ0FBQztJQUN0RCxJQUFJLGdCQUFnQixHQUErQixFQUFFLENBQUM7SUFFdEQsTUFBTSxRQUFRLEdBQUcsSUFBSSw0QkFBWSxDQUMvQixtQkFBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLGFBQWEsRUFDL0IsR0FBRyxFQUFFO1FBQ0gsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUU3QixRQUFRLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDM0MsQ0FBQyxFQUNELEdBQUcsRUFBRTtRQUNILE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDL0IsQ0FBQyxFQUNELENBQUMsT0FBTyxFQUFFLEVBQUU7UUFDVixJQUFJO1lBQ0YsSUFBSSxPQUFPLE9BQU8sQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFO2dCQUNwQyxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO2dCQUNoQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUMzQyxNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUMsVUFBVSxDQUFDO2dCQUN6QyxNQUFNLGlCQUFpQixHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUM7Z0JBRS9DLElBQUksaUJBQWlCLFlBQVksS0FBSyxFQUFFO29CQUN0Qyx5QkFBeUI7b0JBQ3pCLENBQUMsZ0JBQWdCLEVBQUUsZ0JBQWdCLENBQUMsR0FBRyxlQUFlLENBQ3BELGlC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
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Secp256k1Pubkey, StdFee } from '@cosmjs/amino';
|
|
2
|
-
import { AccountData, EncodeObject,
|
|
2
|
+
import { AccountData, EncodeObject, OfflineSigner } from '@cosmjs/proto-signing';
|
|
3
3
|
import { TransactionOptions } from '../types';
|
|
4
4
|
import { TransactionSigner } from './signer';
|
|
5
5
|
export default class LocalWallet {
|
|
@@ -7,10 +7,10 @@ export default class LocalWallet {
|
|
|
7
7
|
address?: string;
|
|
8
8
|
pubKey?: Secp256k1Pubkey;
|
|
9
9
|
signer?: TransactionSigner;
|
|
10
|
-
offlineSigner?:
|
|
11
|
-
static fromOfflineSigner(signer:
|
|
10
|
+
offlineSigner?: OfflineSigner;
|
|
11
|
+
static fromOfflineSigner(signer: OfflineSigner): Promise<LocalWallet>;
|
|
12
12
|
static fromMnemonic(mnemonic: string, prefix?: string): Promise<LocalWallet>;
|
|
13
|
-
setSigner(signer:
|
|
13
|
+
setSigner(signer: OfflineSigner): Promise<void>;
|
|
14
14
|
setMnemonic(mnemonic: string, prefix?: string): Promise<void>;
|
|
15
15
|
signTransaction(messages: EncodeObject[], transactionOptions: TransactionOptions, fee?: StdFee, memo?: string): Promise<Uint8Array>;
|
|
16
16
|
}
|
|
@@ -45,4 +45,4 @@ class LocalWallet {
|
|
|
45
45
|
}
|
|
46
46
|
}
|
|
47
47
|
exports.default = LocalWallet;
|
|
48
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtd2FsbGV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NsaWVudHMvbW9kdWxlcy9sb2NhbC13YWxsZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSx5Q0FBK0U7QUFDL0UseURBSytCO0FBQy9CLCtDQUF5RDtBQUN6RCxnREFBd0I7QUFDeEIsNERBQWtDO0FBRWxDLDhDQUFtRDtBQUVuRCxxQ0FBNkM7QUFFN0Msb0VBQW9FO0FBQ3BFLG9CQUFRLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxjQUFJLENBQUM7QUFDMUIsb0JBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUVyQixNQUFxQixXQUFXO0lBTzlCLE1BQU0sQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsTUFBcUI7UUFDbEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUNqQyxNQUFNLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDL0IsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLFFBQWdCLEVBQUUsTUFBZTtRQUN6RCxNQUFNLE1BQU0sR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQ2pDLE1BQU0sTUFBTSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDM0MsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBcUI7UUFDbkMsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUM7UUFDNUIsTUFBTSxjQUFjLEdBQUcsTUFBTSxnQ0FBcUIsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFO1lBQ2pFLFFBQVEsRUFBRSxJQUFBLDJCQUFnQixHQUFFO1NBQzdCLENBQUMsQ0FBQztRQUNILE1BQU0sV0FBVyxHQUFHLE1BQU0sTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQy9DLE1BQU0sWUFBWSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUUsQ0FBQztRQUNyQyxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsT0FBTyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUM7UUFDcEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFBLDZCQUFxQixFQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksMEJBQWlCLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUVELEtBQUssQ0FBQyxXQUFXLENBQUMsUUFBZ0IsRUFBRSxNQUFlO1FBQ2pELE1BQU0sTUFBTSxHQUFHLE1BQU0sdUNBQXVCLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDaEYsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFTSxLQUFLLENBQUMsZUFBZSxDQUMxQixRQUF3QixFQUN4QixrQkFBc0MsRUFDdEMsR0FBWSxFQUNaLE9BQWUsRUFBRTtRQUVqQixPQUFPLElBQUksQ0FBQyxNQUFPLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxrQkFBa0IsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM1RixDQUFDO0NBQ0Y7QUE3Q0QsOEJBNkNDIn0=
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { Secp256k1Pubkey } from '@cosmjs/amino';
|
|
2
|
-
import { EncodeObject,
|
|
2
|
+
import { EncodeObject, OfflineSigner } from '@cosmjs/proto-signing';
|
|
3
3
|
import { SigningStargateClient, StdFee } from '@cosmjs/stargate';
|
|
4
4
|
import { TransactionOptions } from '../types';
|
|
5
5
|
export declare class TransactionSigner {
|
|
6
6
|
readonly address: string;
|
|
7
7
|
readonly stargateSigningClient: SigningStargateClient;
|
|
8
|
-
readonly offlineSigner:
|
|
9
|
-
constructor(address: string, stargateSigningClient: SigningStargateClient, offlineSigner:
|
|
8
|
+
readonly offlineSigner: OfflineSigner;
|
|
9
|
+
constructor(address: string, stargateSigningClient: SigningStargateClient, offlineSigner: OfflineSigner);
|
|
10
10
|
/**
|
|
11
11
|
* @description Get the encoded signed transaction or the promise is rejected if
|
|
12
12
|
* no fee can be set for the transaction.
|
|
@@ -70,14 +70,24 @@ class TransactionSigner {
|
|
|
70
70
|
const signDoc = (0, proto_signing_1.makeSignDoc)(txBodyBytes, authInfoBytes, transactionOptions.chainId, transactionOptions.accountNumber);
|
|
71
71
|
// Use OfflineSigner to sign the transaction
|
|
72
72
|
const signerAddress = this.address;
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
73
|
+
if ((0, proto_signing_1.isOfflineDirectSigner)(this.offlineSigner)) {
|
|
74
|
+
const { signed, signature } = await this.offlineSigner.signDirect(signerAddress, signDoc);
|
|
75
|
+
const txRaw = tx_2.TxRaw.fromPartial({
|
|
76
|
+
bodyBytes: signed.bodyBytes,
|
|
77
|
+
authInfoBytes: signed.authInfoBytes,
|
|
78
|
+
signatures: [(0, encoding_1.fromBase64)(signature.signature)],
|
|
79
|
+
});
|
|
80
|
+
return Uint8Array.from(tx_2.TxRaw.encode(txRaw).finish());
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
const rawTx = await this.stargateSigningClient.sign(this.address, messages, fee, memo, {
|
|
84
|
+
accountNumber: transactionOptions.accountNumber,
|
|
85
|
+
sequence: transactionOptions.sequence,
|
|
86
|
+
chainId: transactionOptions.chainId,
|
|
87
|
+
});
|
|
88
|
+
return Uint8Array.from(tx_2.TxRaw.encode(rawTx).finish());
|
|
89
|
+
}
|
|
80
90
|
}
|
|
81
91
|
}
|
|
82
92
|
exports.TransactionSigner = TransactionSigner;
|
|
83
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
93
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NsaWVudHMvbW9kdWxlcy9zaWduZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsK0NBQThDO0FBQzlDLHVDQUFxQztBQUNyQyx5REFPK0I7QUFFL0IsdUZBQTZGO0FBQzdGLDBEQUFrRTtBQUNsRSwwREFBdUQ7QUFDdkQsZ0RBQXdCO0FBQ3hCLDREQUFrQztBQUVsQyw4Q0FBbUQ7QUFHbkQsb0VBQW9FO0FBQ3BFLHFFQUFxRTtBQUNyRSx3RUFBd0U7QUFDeEUsa0VBQWtFO0FBQ2xFLG9CQUFRLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxjQUFJLENBQUM7QUFDMUIsb0JBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUVyQixNQUFhLGlCQUFpQjtJQUs1QixZQUNFLE9BQWUsRUFDZixxQkFBNEMsRUFDNUMsYUFBNEI7UUFFNUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLHFCQUFxQixHQUFHLHFCQUFxQixDQUFDO1FBQ25ELElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxLQUFLLENBQUMsZUFBZSxDQUNuQixRQUF3QixFQUN4QixrQkFBc0MsRUFDdEMsR0FBWSxFQUNaLE9BQWUsRUFBRSxFQUNqQixTQUEyQjs7UUFFM0IsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNSLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztTQUM1QztRQUVELE1BQU0sUUFBUSxHQUFHLElBQUEsMkJBQWdCLEdBQUUsQ0FBQztRQUVwQyxzQkFBc0I7UUFDdEIsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRXpF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
|