@partisiablockchain/blockchain-api-transaction-client 5.203.0 → 5.214.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/package.json
CHANGED
|
@@ -11,6 +11,10 @@ export declare class BlockchainTransactionClient {
|
|
|
11
11
|
private readonly spawnedEventTimeout;
|
|
12
12
|
private readonly currentTime;
|
|
13
13
|
private readonly conditionWaiter;
|
|
14
|
+
/** A cached nonce that is incremented off-chain. Only used if predictNonce is set to true. */
|
|
15
|
+
private predictedNonce;
|
|
16
|
+
/** Predict the nonce locally instead of retrieving nonce from blockchain. */
|
|
17
|
+
private readonly predictNonce;
|
|
14
18
|
/**
|
|
15
19
|
* Default signed transaction vilidity time in milliseconds. This is three minutes in
|
|
16
20
|
* milliseconds.
|
|
@@ -58,9 +62,15 @@ export declare class BlockchainTransactionClient {
|
|
|
58
62
|
* spawned event to be included in a block before timing out. @param currentTime
|
|
59
63
|
* @param currentTime support for injecting custom time
|
|
60
64
|
* @param conditionWaiter support for injecting custom condition waiter
|
|
65
|
+
* @param predictNonce cache nonce and predict the next locally
|
|
61
66
|
* @returns A blockchain transaction client
|
|
62
67
|
*/
|
|
63
|
-
static createForTest(transactionClient: BlockchainClientForTransaction, authentication: SenderAuthentication, transactionValidityDuration: number, spawnedEventTimeout: number, currentTime: () => number, conditionWaiter: ConditionWaiter): BlockchainTransactionClient;
|
|
68
|
+
static createForTest(transactionClient: BlockchainClientForTransaction, authentication: SenderAuthentication, transactionValidityDuration: number, spawnedEventTimeout: number, currentTime: () => number, conditionWaiter: ConditionWaiter, predictNonce: boolean): BlockchainTransactionClient;
|
|
69
|
+
/**
|
|
70
|
+
* Get nonce of authentication. Will use cached version if `this.cacheNonce` is set to `true`.
|
|
71
|
+
* @returns the nonce
|
|
72
|
+
*/
|
|
73
|
+
getNonce(): Promise<number>;
|
|
64
74
|
/**
|
|
65
75
|
* Sign a transaction in preparation for sending it to the blockchain. The signed transaction
|
|
66
76
|
* expires after {@link #transactionValidityDuration} millis or if the nonce of the signer
|
|
@@ -34,13 +34,15 @@ const SignedTransaction_1 = require("./SignedTransaction");
|
|
|
34
34
|
const TransactionTree_1 = require("./TransactionTree");
|
|
35
35
|
/** A client that supports signing, sending and waiting for transactions on the blockchain. */
|
|
36
36
|
class BlockchainTransactionClient {
|
|
37
|
-
constructor(transactionClient, authentication, transactionValidityDuration, spawnedEventTimeout, currentTime, conditionWaiter) {
|
|
37
|
+
constructor(transactionClient, authentication, transactionValidityDuration, spawnedEventTimeout, currentTime, conditionWaiter, cacheNonce) {
|
|
38
38
|
this.authentication = authentication;
|
|
39
39
|
this.transactionClient = transactionClient;
|
|
40
40
|
this.transactionValidityDuration = transactionValidityDuration;
|
|
41
41
|
this.spawnedEventTimeout = spawnedEventTimeout;
|
|
42
42
|
this.currentTime = currentTime;
|
|
43
43
|
this.conditionWaiter = conditionWaiter;
|
|
44
|
+
this.predictNonce = cacheNonce;
|
|
45
|
+
this.predictedNonce = null;
|
|
44
46
|
}
|
|
45
47
|
/**
|
|
46
48
|
* Create a blockchain transaction client.
|
|
@@ -56,7 +58,7 @@ class BlockchainTransactionClient {
|
|
|
56
58
|
const chainControllerApi = new openapi_1.ChainControllerApi(new openapi_1.Configuration({ basePath: baseUrl }));
|
|
57
59
|
const shardControllerApi = new openapi_1.ShardControllerApi(new openapi_1.Configuration({ basePath: baseUrl }));
|
|
58
60
|
const transactionClient = new ShardAndChainControllerTransactionClient_1.ShardAndChainControllerTransactionClient(chainControllerApi, shardControllerApi);
|
|
59
|
-
return new BlockchainTransactionClient(transactionClient, authentication, transactionValidityInMillis !== null && transactionValidityInMillis !== void 0 ? transactionValidityInMillis : this.DEFAULT_TRANSACTION_VALIDITY_DURATION, spawnedEventTimeoutInMillis !== null && spawnedEventTimeoutInMillis !== void 0 ? spawnedEventTimeoutInMillis : this.DEFAULT_SPAWNED_EVENT_TIMEOUT, this.DEFAULT_CURRENT_TIME, ConditionWaiter_1.ConditionWaiterImpl.create());
|
|
61
|
+
return new BlockchainTransactionClient(transactionClient, authentication, transactionValidityInMillis !== null && transactionValidityInMillis !== void 0 ? transactionValidityInMillis : this.DEFAULT_TRANSACTION_VALIDITY_DURATION, spawnedEventTimeoutInMillis !== null && spawnedEventTimeoutInMillis !== void 0 ? spawnedEventTimeoutInMillis : this.DEFAULT_SPAWNED_EVENT_TIMEOUT, this.DEFAULT_CURRENT_TIME, ConditionWaiter_1.ConditionWaiterImpl.create(), false);
|
|
60
62
|
}
|
|
61
63
|
/**
|
|
62
64
|
* Create a blockchain transaction client for a custom API.
|
|
@@ -69,7 +71,7 @@ class BlockchainTransactionClient {
|
|
|
69
71
|
* @returns A blockchain transaction client
|
|
70
72
|
*/
|
|
71
73
|
static createForCustomApi(transactionClient, authentication, transactionValidityInMillis, spawnedEventTimeoutInMillis) {
|
|
72
|
-
return new BlockchainTransactionClient(transactionClient, authentication, transactionValidityInMillis !== null && transactionValidityInMillis !== void 0 ? transactionValidityInMillis : this.DEFAULT_TRANSACTION_VALIDITY_DURATION, spawnedEventTimeoutInMillis !== null && spawnedEventTimeoutInMillis !== void 0 ? spawnedEventTimeoutInMillis : this.DEFAULT_SPAWNED_EVENT_TIMEOUT, this.DEFAULT_CURRENT_TIME, ConditionWaiter_1.ConditionWaiterImpl.create());
|
|
74
|
+
return new BlockchainTransactionClient(transactionClient, authentication, transactionValidityInMillis !== null && transactionValidityInMillis !== void 0 ? transactionValidityInMillis : this.DEFAULT_TRANSACTION_VALIDITY_DURATION, spawnedEventTimeoutInMillis !== null && spawnedEventTimeoutInMillis !== void 0 ? spawnedEventTimeoutInMillis : this.DEFAULT_SPAWNED_EVENT_TIMEOUT, this.DEFAULT_CURRENT_TIME, ConditionWaiter_1.ConditionWaiterImpl.create(), false);
|
|
73
75
|
}
|
|
74
76
|
/**
|
|
75
77
|
* Create a blockchain transaction client used for testing.
|
|
@@ -81,10 +83,24 @@ class BlockchainTransactionClient {
|
|
|
81
83
|
* spawned event to be included in a block before timing out. @param currentTime
|
|
82
84
|
* @param currentTime support for injecting custom time
|
|
83
85
|
* @param conditionWaiter support for injecting custom condition waiter
|
|
86
|
+
* @param predictNonce cache nonce and predict the next locally
|
|
84
87
|
* @returns A blockchain transaction client
|
|
85
88
|
*/
|
|
86
|
-
static createForTest(transactionClient, authentication, transactionValidityDuration, spawnedEventTimeout, currentTime, conditionWaiter) {
|
|
87
|
-
return new BlockchainTransactionClient(transactionClient, authentication, transactionValidityDuration, spawnedEventTimeout, currentTime, conditionWaiter);
|
|
89
|
+
static createForTest(transactionClient, authentication, transactionValidityDuration, spawnedEventTimeout, currentTime, conditionWaiter, predictNonce) {
|
|
90
|
+
return new BlockchainTransactionClient(transactionClient, authentication, transactionValidityDuration, spawnedEventTimeout, currentTime, conditionWaiter, predictNonce);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Get nonce of authentication. Will use cached version if `this.cacheNonce` is set to `true`.
|
|
94
|
+
* @returns the nonce
|
|
95
|
+
*/
|
|
96
|
+
getNonce() {
|
|
97
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
98
|
+
if (!this.predictNonce || this.predictedNonce === null) {
|
|
99
|
+
const sender = this.authentication.getAddress();
|
|
100
|
+
this.predictedNonce = yield this.transactionClient.getNonce(sender);
|
|
101
|
+
}
|
|
102
|
+
return this.predictedNonce;
|
|
103
|
+
});
|
|
88
104
|
}
|
|
89
105
|
/**
|
|
90
106
|
* Sign a transaction in preparation for sending it to the blockchain. The signed transaction
|
|
@@ -97,8 +113,7 @@ class BlockchainTransactionClient {
|
|
|
97
113
|
*/
|
|
98
114
|
sign(transaction, gasCost, applicableUntil) {
|
|
99
115
|
return __awaiter(this, void 0, void 0, function* () {
|
|
100
|
-
const
|
|
101
|
-
const nonce = yield this.transactionClient.getNonce(sender);
|
|
116
|
+
const nonce = yield this.getNonce();
|
|
102
117
|
const chainId = yield this.transactionClient.getChainId();
|
|
103
118
|
let validToTime = this.currentTime() + this.transactionValidityDuration;
|
|
104
119
|
if (applicableUntil !== undefined) {
|
|
@@ -114,10 +129,29 @@ class BlockchainTransactionClient {
|
|
|
114
129
|
*/
|
|
115
130
|
send(signedTransaction) {
|
|
116
131
|
return __awaiter(this, void 0, void 0, function* () {
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
132
|
+
try {
|
|
133
|
+
const bytes = signedTransaction.serialize();
|
|
134
|
+
const serializedTransaction = { payload: bytes.toString("base64") };
|
|
135
|
+
const transactionPointer = yield this.transactionClient.putTransaction(serializedTransaction);
|
|
136
|
+
// Update nonce on a succesful transaction
|
|
137
|
+
this.predictedNonce = signedTransaction.getNonce() + 1;
|
|
138
|
+
return { signedTransaction, transactionPointer };
|
|
139
|
+
}
|
|
140
|
+
catch (error) {
|
|
141
|
+
// Update nonce if nonce is invalid
|
|
142
|
+
if (error instanceof openapi_1.ResponseError) {
|
|
143
|
+
try {
|
|
144
|
+
const body = yield error.response.json();
|
|
145
|
+
if (body.putTransactionErrorType === openapi_1.PutTransactionErrorType.UnexpectedNonce) {
|
|
146
|
+
this.predictedNonce = null;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
catch (error) {
|
|
150
|
+
// ignore error and throw the response error
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
throw error;
|
|
154
|
+
}
|
|
121
155
|
});
|
|
122
156
|
}
|
|
123
157
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BlockchainTransactionClient.js","sourceRoot":"","sources":["../../../src/main/transactionclient/BlockchainTransactionClient.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;GAgBG;;;;;;;;;;;;AAEH,
|
|
1
|
+
{"version":3,"file":"BlockchainTransactionClient.js","sourceRoot":"","sources":["../../../src/main/transactionclient/BlockchainTransactionClient.ts"],"names":[],"mappings":"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"}
|