@polymeshassociation/polymesh-sdk 31.0.0 → 31.1.0-beta.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/.yarn/install-state.gz +0 -0
- package/CHANGELOG.md +2 -136
- package/api/client/AccountManagement.d.ts +48 -0
- package/api/client/AccountManagement.d.ts.map +1 -1
- package/api/client/AccountManagement.js +38 -0
- package/api/client/AccountManagement.js.map +1 -1
- package/api/client/Network.d.ts +79 -2
- package/api/client/Network.d.ts.map +1 -1
- package/api/client/Network.js +143 -12
- package/api/client/Network.js.map +1 -1
- package/api/client/types.d.ts +6 -0
- package/api/client/types.d.ts.map +1 -1
- package/api/client/types.js +6 -0
- package/api/client/types.js.map +1 -1
- package/api/entities/Account/index.d.ts +35 -1
- package/api/entities/Account/index.d.ts.map +1 -1
- package/api/entities/Account/index.js +89 -0
- package/api/entities/Account/index.js.map +1 -1
- package/api/entities/Account/types.d.ts +60 -1
- package/api/entities/Account/types.d.ts.map +1 -1
- package/api/entities/Account/types.js +25 -1
- package/api/entities/Account/types.js.map +1 -1
- package/api/entities/Asset/NonFungible/NftCollection.js +2 -2
- package/api/entities/Asset/NonFungible/NftCollection.js.map +1 -1
- package/api/procedures/issueNft.d.ts +1 -0
- package/api/procedures/issueNft.d.ts.map +1 -1
- package/api/procedures/issueNft.js +24 -6
- package/api/procedures/issueNft.js.map +1 -1
- package/api/procedures/toggleEvmAccountMapping.d.ts +18 -0
- package/api/procedures/toggleEvmAccountMapping.d.ts.map +1 -0
- package/api/procedures/toggleEvmAccountMapping.js +80 -0
- package/api/procedures/toggleEvmAccountMapping.js.map +1 -0
- package/api/procedures/types.d.ts +44 -0
- package/api/procedures/types.d.ts.map +1 -1
- package/api/procedures/types.js.map +1 -1
- package/base/Context.d.ts +33 -0
- package/base/Context.d.ts.map +1 -1
- package/base/Context.js +59 -1
- package/base/Context.js.map +1 -1
- package/base/PolymeshTransactionBase.d.ts +199 -3
- package/base/PolymeshTransactionBase.d.ts.map +1 -1
- package/base/PolymeshTransactionBase.js +595 -137
- package/base/PolymeshTransactionBase.js.map +1 -1
- package/base/Procedure.d.ts.map +1 -1
- package/base/Procedure.js +2 -0
- package/base/Procedure.js.map +1 -1
- package/base/ethTransaction.d.ts +222 -0
- package/base/ethTransaction.d.ts.map +1 -0
- package/base/ethTransaction.js +317 -0
- package/base/ethTransaction.js.map +1 -0
- package/base/types.d.ts +66 -1
- package/base/types.d.ts.map +1 -1
- package/base/types.js.map +1 -1
- package/base/utils.d.ts +60 -11
- package/base/utils.d.ts.map +1 -1
- package/base/utils.js +328 -45
- package/base/utils.js.map +1 -1
- package/internal.d.ts +1 -0
- package/internal.d.ts.map +1 -1
- package/internal.js +4 -2
- package/internal.js.map +1 -1
- package/npm-package/polymeshassociation-polymesh-sdk-31.1.0-beta.2.tgz +0 -0
- package/package.json +2 -2
- package/types/internal.d.ts +38 -1
- package/types/internal.d.ts.map +1 -1
- package/types/internal.js.map +1 -1
- package/utils/eth.d.ts +63 -0
- package/utils/eth.d.ts.map +1 -0
- package/utils/eth.js +209 -0
- package/utils/eth.js.map +1 -0
- package/utils/internal.d.ts +19 -1
- package/utils/internal.d.ts.map +1 -1
- package/utils/internal.js +34 -0
- package/utils/internal.js.map +1 -1
- package/utils/typeguards.d.ts +10 -0
- package/utils/typeguards.d.ts.map +1 -1
- package/utils/typeguards.js +11 -0
- package/utils/typeguards.js.map +1 -1
- package/npm-package/polymeshassociation-polymesh-sdk-31.0.0.tgz +0 -0
|
@@ -0,0 +1,317 @@
|
|
|
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
|
+
exports.getEthSubmissionStrategy = getEthSubmissionStrategy;
|
|
16
|
+
exports.supportsEip1559 = supportsEip1559;
|
|
17
|
+
exports.dryRunEthTransaction = dryRunEthTransaction;
|
|
18
|
+
exports.buildEthTransactionRequest = buildEthTransactionRequest;
|
|
19
|
+
exports.buildDetachedEthTransactionRequest = buildDetachedEthTransactionRequest;
|
|
20
|
+
exports.calculateEthGasFee = calculateEthGasFee;
|
|
21
|
+
exports.getNativeToEthRatio = getNativeToEthRatio;
|
|
22
|
+
exports.ethTransactKeccakMatcher = ethTransactKeccakMatcher;
|
|
23
|
+
exports.buildSdkBroadcastSubmission = buildSdkBroadcastSubmission;
|
|
24
|
+
exports.buildWalletBroadcastSubmission = buildWalletBroadcastSubmission;
|
|
25
|
+
const util_crypto_1 = require("@polkadot/util-crypto");
|
|
26
|
+
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
27
|
+
const utils_1 = require("../base/utils");
|
|
28
|
+
const internal_1 = require("../internal");
|
|
29
|
+
const types_1 = require("../types");
|
|
30
|
+
const conversion_1 = require("../utils/conversion");
|
|
31
|
+
const eth_1 = require("../utils/eth");
|
|
32
|
+
/**
|
|
33
|
+
* @hidden
|
|
34
|
+
*
|
|
35
|
+
* Resolve how to submit for the given signer, from the methods it actually implements.
|
|
36
|
+
*
|
|
37
|
+
* `signTransaction` wins when a signer implements both, since it lets the SDK keep control of the
|
|
38
|
+
* nonce and of the full submission lifecycle
|
|
39
|
+
*
|
|
40
|
+
* @note the returned method is bound to the signer. Callers have to destructure it to narrow the
|
|
41
|
+
* optional property, which would otherwise silently drop `this` for any signer implementing the
|
|
42
|
+
* interface with ordinary class methods rather than arrow function properties
|
|
43
|
+
*
|
|
44
|
+
* @throws if the signer implements neither method
|
|
45
|
+
*/
|
|
46
|
+
function getEthSubmissionStrategy(ethSigner) {
|
|
47
|
+
const { signTransaction, sendTransaction } = ethSigner;
|
|
48
|
+
if (signTransaction) {
|
|
49
|
+
return { mode: 'sdkBroadcast', signTransaction: signTransaction.bind(ethSigner) };
|
|
50
|
+
}
|
|
51
|
+
if (sendTransaction) {
|
|
52
|
+
return { mode: 'walletBroadcast', sendTransaction: sendTransaction.bind(ethSigner) };
|
|
53
|
+
}
|
|
54
|
+
throw new internal_1.PolymeshError({
|
|
55
|
+
code: types_1.ErrorCode.General,
|
|
56
|
+
message: 'The attached Ethereum signer implements neither signTransaction nor sendTransaction, so it cannot submit a transaction. Please report this to the Polymesh team',
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* @hidden
|
|
61
|
+
*
|
|
62
|
+
* Whether to build an EIP-1559 (type 2) transaction for the given signer. Defaults to `true`, so
|
|
63
|
+
* a signer only has to declare the capability when it *cannot* encode type 2
|
|
64
|
+
*/
|
|
65
|
+
function supportsEip1559(ethSigner) {
|
|
66
|
+
var _a;
|
|
67
|
+
return (_a = ethSigner.capabilities.eip1559) !== null && _a !== void 0 ? _a : true;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* @hidden
|
|
71
|
+
*
|
|
72
|
+
* `0x`-prefixed, minimal (no leading zeros) hex "quantity" encoding, as used throughout the
|
|
73
|
+
* Ethereum JSON-RPC spec for `gas`, `gasPrice`, `chainId`, `nonce`, etc
|
|
74
|
+
*/
|
|
75
|
+
function toQuantityHex(value) {
|
|
76
|
+
return `0x${value.integerValue(bignumber_js_1.default.ROUND_FLOOR).toString(16)}`;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* @hidden
|
|
80
|
+
*
|
|
81
|
+
* Perform the mandatory dry run pre-flight for a Polymesh call carried through the
|
|
82
|
+
* `revive` pallet's sentinel address. This is the SDK's only pre-flight signal, and doing it
|
|
83
|
+
* over the Substrate connection means a structured error arrives before the wallet is ever
|
|
84
|
+
* consulted
|
|
85
|
+
*
|
|
86
|
+
* Split out from {@link buildEthTransactionRequest} so that fee estimation
|
|
87
|
+
* ({@link base/PolymeshTransactionBase!PolymeshTransactionBase.getTotalFees | getTotalFees}) can
|
|
88
|
+
* use it without requiring an {@link EthSigner} to be attached
|
|
89
|
+
*
|
|
90
|
+
* @throws the parsed dry run error (via {@link utils/eth!parseEthTransactError}) if the dry run itself fails
|
|
91
|
+
*/
|
|
92
|
+
function dryRunEthTransaction(context, signingAddress, composedTx) {
|
|
93
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
94
|
+
const { polymeshApi: { call }, } = context;
|
|
95
|
+
const from = (0, eth_1.ethAddressFromSs58)(signingAddress, context.ss58Format);
|
|
96
|
+
const [to, gasPriceRaw] = yield Promise.all([
|
|
97
|
+
context.getEthRuntimePalletsAddress(),
|
|
98
|
+
call.reviveApi.gasPrice(),
|
|
99
|
+
]);
|
|
100
|
+
const chainId = context.getEthChainId();
|
|
101
|
+
const calldata = composedTx.method.toHex();
|
|
102
|
+
const gasPrice = new bignumber_js_1.default(gasPriceRaw.toString());
|
|
103
|
+
const dryRun = yield call.reviveApi.ethTransactWithConfig({
|
|
104
|
+
from,
|
|
105
|
+
to,
|
|
106
|
+
input: { data: calldata },
|
|
107
|
+
value: 0,
|
|
108
|
+
}, {});
|
|
109
|
+
if (dryRun.isErr) {
|
|
110
|
+
throw (0, eth_1.parseEthTransactError)(dryRun.asErr, context);
|
|
111
|
+
}
|
|
112
|
+
const { ethGas: rawEthGasCodec } = dryRun.asOk;
|
|
113
|
+
const rawEthGas = new bignumber_js_1.default(rawEthGasCodec.toString());
|
|
114
|
+
return { from: from, to: to, calldata, rawEthGas, gasPrice, chainId };
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* @hidden
|
|
119
|
+
*
|
|
120
|
+
* Build the {@link EthTransactionRequest} that carries a Polymesh runtime call through the
|
|
121
|
+
* `revive` pallet's sentinel address, performing the mandatory dry run pre-flight along the
|
|
122
|
+
* way
|
|
123
|
+
*
|
|
124
|
+
* @throws
|
|
125
|
+
* - the parsed dry run error (via {@link utils/eth!parseEthTransactError}) if the dry run itself fails
|
|
126
|
+
* - `ValidationError` if `nonce` is passed while the signer can only broadcast, and so owns the
|
|
127
|
+
* nonce itself
|
|
128
|
+
*/
|
|
129
|
+
function buildEthTransactionRequest(params) {
|
|
130
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
131
|
+
const { context, signingAddress, composedTx, ethSigner, nonce: nonceOverride, gasMultiplier = new bignumber_js_1.default(1), } = params;
|
|
132
|
+
const { mode } = getEthSubmissionStrategy(ethSigner);
|
|
133
|
+
if (mode === 'walletBroadcast' && nonceOverride) {
|
|
134
|
+
throw new internal_1.PolymeshError({
|
|
135
|
+
code: types_1.ErrorCode.ValidationError,
|
|
136
|
+
message: 'The nonce cannot be set explicitly when the Ethereum signer broadcasts the transaction itself. The wallet is responsible for nonce management in this mode',
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
const { from, to, calldata, rawEthGas, gasPrice, chainId } = yield dryRunEthTransaction(context, signingAddress, composedTx);
|
|
140
|
+
const gasToUse = bignumber_js_1.default.max(rawEthGas.multipliedBy(gasMultiplier).integerValue(bignumber_js_1.default.ROUND_CEIL), rawEthGas);
|
|
141
|
+
let nonce;
|
|
142
|
+
if (mode === 'sdkBroadcast') {
|
|
143
|
+
if (nonceOverride) {
|
|
144
|
+
nonce = toQuantityHex(nonceOverride);
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
const { polymeshApi: { call }, } = context;
|
|
148
|
+
const onChainNonce = yield call.reviveApi.nonce(from);
|
|
149
|
+
nonce = toQuantityHex(new bignumber_js_1.default(onChainNonce.toString()));
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
const eip1559 = supportsEip1559(ethSigner);
|
|
153
|
+
const request = Object.assign(Object.assign({ from,
|
|
154
|
+
to, data: calldata, value: '0x0', gas: toQuantityHex(gasToUse), chainId: toQuantityHex(chainId) }, (nonce ? { nonce } : {})), (eip1559
|
|
155
|
+
? {
|
|
156
|
+
type: '0x2',
|
|
157
|
+
maxFeePerGas: toQuantityHex(gasPrice),
|
|
158
|
+
maxPriorityFeePerGas: toQuantityHex(new bignumber_js_1.default(0)),
|
|
159
|
+
}
|
|
160
|
+
: {
|
|
161
|
+
type: '0x0',
|
|
162
|
+
gasPrice: toQuantityHex(gasPrice),
|
|
163
|
+
}));
|
|
164
|
+
return { request, rawEthGas, gasPrice };
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* @hidden
|
|
169
|
+
*
|
|
170
|
+
* Build an {@link EthTransactionRequest} for detached/custody signing
|
|
171
|
+
* ({@link base/PolymeshTransactionBase!PolymeshTransactionBase.toEthSignablePayload | toEthSignablePayload}),
|
|
172
|
+
* where there is no {@link EthSigner} attached to consult for routing. The nonce is always
|
|
173
|
+
* resolved (either the caller's `ProcedureOpts.nonce`, or fetched on-chain), since a detached
|
|
174
|
+
* signer cannot own the nonce the way a broadcasting wallet does
|
|
175
|
+
*/
|
|
176
|
+
function buildDetachedEthTransactionRequest(context, signingAddress, composedTx, eip1559, nonceOverride) {
|
|
177
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
178
|
+
const { from, to, calldata, rawEthGas, gasPrice, chainId } = yield dryRunEthTransaction(context, signingAddress, composedTx);
|
|
179
|
+
let nonce;
|
|
180
|
+
if (nonceOverride) {
|
|
181
|
+
nonce = toQuantityHex(nonceOverride);
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
const { polymeshApi: { call }, } = context;
|
|
185
|
+
const onChainNonce = yield call.reviveApi.nonce(from);
|
|
186
|
+
nonce = toQuantityHex(new bignumber_js_1.default(onChainNonce.toString()));
|
|
187
|
+
}
|
|
188
|
+
return Object.assign({ from,
|
|
189
|
+
to, data: calldata, value: '0x0', gas: toQuantityHex(rawEthGas), chainId: toQuantityHex(chainId), nonce }, (eip1559
|
|
190
|
+
? {
|
|
191
|
+
type: '0x2',
|
|
192
|
+
maxFeePerGas: toQuantityHex(gasPrice),
|
|
193
|
+
maxPriorityFeePerGas: toQuantityHex(new bignumber_js_1.default(0)),
|
|
194
|
+
}
|
|
195
|
+
: {
|
|
196
|
+
type: '0x0',
|
|
197
|
+
gasPrice: toQuantityHex(gasPrice),
|
|
198
|
+
}));
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* @hidden
|
|
203
|
+
*
|
|
204
|
+
* Derive the network fee for a transaction submitted through the `revive` pallet's sentinel
|
|
205
|
+
* address:
|
|
206
|
+
*
|
|
207
|
+
* ```
|
|
208
|
+
* feeInBaseUnits = ethGas * gasPrice / nativeToEthRatio
|
|
209
|
+
* ```
|
|
210
|
+
*
|
|
211
|
+
* The result is returned as a **display POLYX value**, i.e. shifted down by the chain's 6
|
|
212
|
+
* decimals, so that it is directly comparable with everything else in `PayingAccountFees` —
|
|
213
|
+
* protocol fees and Account balances both arrive that way, via `balanceToBigNumber`. Returning
|
|
214
|
+
* base units here would make the Ethereum path report fees 10^6 too large, and every fee check
|
|
215
|
+
* against a balance would fail
|
|
216
|
+
*
|
|
217
|
+
* @note the rounding is applied to whole base units *before* the shift, since a fee cannot be a
|
|
218
|
+
* fraction of a base unit
|
|
219
|
+
* @note this is a slight, safe overestimate of the fee the chain actually charges — measured at
|
|
220
|
+
* 1.008-1.011x. It does **not** include protocol fees, which are charged separately and must
|
|
221
|
+
* still be summed in by the caller
|
|
222
|
+
*/
|
|
223
|
+
function calculateEthGasFee(rawEthGas, gasPrice, nativeToEthRatio) {
|
|
224
|
+
return rawEthGas
|
|
225
|
+
.multipliedBy(gasPrice)
|
|
226
|
+
.dividedBy(nativeToEthRatio)
|
|
227
|
+
.integerValue(bignumber_js_1.default.ROUND_CEIL)
|
|
228
|
+
.shiftedBy(-6);
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* @hidden
|
|
232
|
+
*
|
|
233
|
+
* Retrieve `consts.revive.nativeToEthRatio` as a `BigNumber`
|
|
234
|
+
*/
|
|
235
|
+
function getNativeToEthRatio(context) {
|
|
236
|
+
return (0, conversion_1.u64ToBigNumber)(context.polymeshApi.consts.revive.nativeToEthRatio);
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* @hidden
|
|
240
|
+
*
|
|
241
|
+
* Build the predicate that correlates an Ethereum transaction hash (returned by a broadcasting
|
|
242
|
+
* wallet's `sendTransaction`) to the Substrate extrinsic that carries it:
|
|
243
|
+
*
|
|
244
|
+
* ```
|
|
245
|
+
* extrinsic.method.section === 'revive' &&
|
|
246
|
+
* extrinsic.method.method === 'ethTransact' &&
|
|
247
|
+
* keccakAsHex(extrinsic.args[0].toU8a(true)) === ethTxHash
|
|
248
|
+
* ```
|
|
249
|
+
*
|
|
250
|
+
* This is deterministic, not a heuristic: the Ethereum transaction hash is `keccak256` of the raw
|
|
251
|
+
* signed transaction, and those exact bytes are the `payload` argument of the `revive.ethTransact`
|
|
252
|
+
* extrinsic recorded in the block — byte-identical, including in blocks carrying several
|
|
253
|
+
* Ethereum extrinsics
|
|
254
|
+
*/
|
|
255
|
+
function ethTransactKeccakMatcher(ethTxHash) {
|
|
256
|
+
const normalizedHash = ethTxHash.toLowerCase();
|
|
257
|
+
return (extrinsic) => {
|
|
258
|
+
if (extrinsic.method.section !== 'revive' || extrinsic.method.method !== 'ethTransact') {
|
|
259
|
+
return false;
|
|
260
|
+
}
|
|
261
|
+
const [payload] = extrinsic.args;
|
|
262
|
+
if (!payload) {
|
|
263
|
+
return false;
|
|
264
|
+
}
|
|
265
|
+
return (0, util_crypto_1.keccakAsHex)(payload.toU8a(true)).toLowerCase() === normalizedHash;
|
|
266
|
+
};
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* @hidden
|
|
270
|
+
*
|
|
271
|
+
* The SDK holds the raw signed bytes and submits them itself via
|
|
272
|
+
* `api.tx.revive.ethTransact(raw)`. Since this is a *bare* (unsigned) extrinsic — the
|
|
273
|
+
* signature is embedded in the Ethereum payload itself — it is broadcast with `.send()`
|
|
274
|
+
* rather than `.signAndSend()`, exactly like the offline-signed path in
|
|
275
|
+
* `Network.submitTransaction`. From here on, the lifecycle is identical to the native path:
|
|
276
|
+
* same `ISubmittableResult` status transitions, same `outer.hash` semantics
|
|
277
|
+
*/
|
|
278
|
+
function buildSdkBroadcastSubmission(context, rawSignedTx) {
|
|
279
|
+
const outer = context.polymeshApi.tx.revive.ethTransact(rawSignedTx);
|
|
280
|
+
return {
|
|
281
|
+
subscription: {
|
|
282
|
+
subscribe: callback => outer.send(callback),
|
|
283
|
+
getTxHash: () => outer.hash.toString(),
|
|
284
|
+
},
|
|
285
|
+
polling: {
|
|
286
|
+
send: () => __awaiter(this, void 0, void 0, function* () {
|
|
287
|
+
const txHash = yield outer.send();
|
|
288
|
+
return { txHash: txHash.toString(), matcher: (0, utils_1.extrinsicHashMatcher)(txHash) };
|
|
289
|
+
}),
|
|
290
|
+
},
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* @hidden
|
|
295
|
+
*
|
|
296
|
+
* The wallet signs AND broadcasts, returning the Ethereum transaction hash.
|
|
297
|
+
* The SDK never submits anything itself here, so there is no extrinsic-status subscription
|
|
298
|
+
* channel to attach to — the only way to locate the result is to scan blocks for the matching
|
|
299
|
+
* `revive.ethTransact` extrinsic (via {@link ethTransactKeccakMatcher}).
|
|
300
|
+
*
|
|
301
|
+
* The block scan is shared with the native path rather than duplicated: the same
|
|
302
|
+
* {@link ExtrinsicMatcher} drives both, so there is one implementation and one set of tests
|
|
303
|
+
*
|
|
304
|
+
* @param sendTransaction - the signer's `sendTransaction`, resolved by the caller. Taking the
|
|
305
|
+
* bound method rather than the signer is what makes this total: reaching here at all means
|
|
306
|
+
* {@link getEthSubmissionStrategy} found the method, so there is no "signer said it could broadcast
|
|
307
|
+
* but cannot" case left to guard against
|
|
308
|
+
*/
|
|
309
|
+
function buildWalletBroadcastSubmission(sendTransaction, request) {
|
|
310
|
+
return {
|
|
311
|
+
send: () => __awaiter(this, void 0, void 0, function* () {
|
|
312
|
+
const ethTxHash = yield sendTransaction(request);
|
|
313
|
+
return { txHash: ethTxHash, matcher: ethTransactKeccakMatcher(ethTxHash) };
|
|
314
|
+
}),
|
|
315
|
+
};
|
|
316
|
+
}
|
|
317
|
+
//# sourceMappingURL=ethTransaction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ethTransaction.js","sourceRoot":"","sources":["../../src/base/ethTransaction.ts"],"names":[],"mappings":"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"}
|
package/base/types.d.ts
CHANGED
|
@@ -1,17 +1,60 @@
|
|
|
1
1
|
import { SignerPayloadJSON, SignerPayloadRaw, TypeDef } from '@polkadot/types/types';
|
|
2
2
|
import { HexString } from '@polkadot/util/types';
|
|
3
|
+
import { EthTransactionRequest } from '@polymeshassociation/signing-manager-types';
|
|
3
4
|
import BigNumber from 'bignumber.js';
|
|
4
5
|
import { PolymeshError as PolymeshErrorClass } from '../base/PolymeshError';
|
|
5
6
|
import { PolymeshTransaction as PolymeshTransactionClass } from '../base/PolymeshTransaction';
|
|
6
7
|
import { PolymeshTransactionBatch as PolymeshTransactionBatchClass } from '../base/PolymeshTransactionBatch';
|
|
7
8
|
import { Account } from '../internal';
|
|
8
|
-
import { Fees, TxData } from '../types';
|
|
9
|
+
import { Fees, TxData, TxTag } from '../types';
|
|
9
10
|
/**
|
|
10
11
|
* Apply the {@link TxData} type to all args in an array
|
|
11
12
|
*/
|
|
12
13
|
export type MapTxData<ArgsArray extends unknown[][]> = {
|
|
13
14
|
[K in keyof ArgsArray]: ArgsArray[K] extends unknown[] ? TxData<ArgsArray[K]> : never;
|
|
14
15
|
};
|
|
16
|
+
/**
|
|
17
|
+
* Handle to a transaction that has been broadcast but is not being tracked. Returned by
|
|
18
|
+
* {@link base/PolymeshTransactionBase!PolymeshTransactionBase.broadcast | transaction.broadcast},
|
|
19
|
+
* which is `run` split at its natural seam: the transaction is on its way to the chain, and
|
|
20
|
+
* whether to wait for it is now the caller's decision
|
|
21
|
+
*/
|
|
22
|
+
export interface TransactionBroadcastHandle<ReturnValue> {
|
|
23
|
+
/**
|
|
24
|
+
* the hash the transaction can be looked up by. Normally the Substrate extrinsic hash, but the
|
|
25
|
+
* Ethereum transaction hash when an Ethereum wallet broadcast it, since that is the handle the
|
|
26
|
+
* user has and can find in a block explorer
|
|
27
|
+
*/
|
|
28
|
+
txHash: string;
|
|
29
|
+
/**
|
|
30
|
+
* the Ethereum transaction hash, set only when an Ethereum wallet broadcast the transaction
|
|
31
|
+
* itself. `undefined` otherwise
|
|
32
|
+
*/
|
|
33
|
+
ethTxHash?: string;
|
|
34
|
+
/**
|
|
35
|
+
* the block height the search for this transaction has to start from. Persist this alongside
|
|
36
|
+
* `txHash` to resume tracking later via
|
|
37
|
+
* {@link api/client/Network!Network.watchTransaction | network.watchTransaction}, for example
|
|
38
|
+
* after a page reload, when `watch` itself is long gone
|
|
39
|
+
*/
|
|
40
|
+
startingBlock: BigNumber;
|
|
41
|
+
/**
|
|
42
|
+
* Wait for the transaction to be included in a finalized block and return the same value
|
|
43
|
+
* `run` would have returned
|
|
44
|
+
*
|
|
45
|
+
* Safe to retry if it times out — nothing is resubmitted, the search simply resumes. Calling it
|
|
46
|
+
* while a previous call is still in flight throws
|
|
47
|
+
*
|
|
48
|
+
* @param opts.timeout - milliseconds to wait before giving up. Overrides `submission.watchTimeout`
|
|
49
|
+
* from the Procedure options. Defaults to waiting indefinitely
|
|
50
|
+
*
|
|
51
|
+
* @throws `TransactionTimeout` if the transaction is not found in time. The transaction was still
|
|
52
|
+
* broadcast and may yet be included — this reports only that the SDK stopped looking
|
|
53
|
+
*/
|
|
54
|
+
watch: (opts?: {
|
|
55
|
+
timeout?: number;
|
|
56
|
+
}) => Promise<ReturnValue>;
|
|
57
|
+
}
|
|
15
58
|
export declare enum TransactionStatus {
|
|
16
59
|
/**
|
|
17
60
|
* the transaction is prepped to run
|
|
@@ -193,4 +236,26 @@ export type TransactionPayloadInput = TransactionPayload | TransactionPayload['p
|
|
|
193
236
|
export type PolymeshTransaction<ReturnValue = unknown, TransformedReturnValue = ReturnValue, Args extends unknown[] | [] = unknown[]> = PolymeshTransactionClass<ReturnValue, TransformedReturnValue, Args>;
|
|
194
237
|
export type PolymeshTransactionBatch<ReturnValue = unknown, TransformedReturnValue = ReturnValue, Args extends unknown[][] = unknown[][]> = PolymeshTransactionBatchClass<ReturnValue, TransformedReturnValue, Args>;
|
|
195
238
|
export type PolymeshError = PolymeshErrorClass;
|
|
239
|
+
export { EthSigner, EthSignerCapabilities, EthSigningManager, } from '@polymeshassociation/signing-manager-types';
|
|
240
|
+
export { EthTransactionRequest };
|
|
241
|
+
/**
|
|
242
|
+
* A representation of an Ethereum transaction intended for offline/detached signing, along with
|
|
243
|
+
* the decoded call for display
|
|
244
|
+
*/
|
|
245
|
+
export interface EthTransactionPayload {
|
|
246
|
+
/**
|
|
247
|
+
* the parameters that would be passed to `EthSigner.signTransaction` / `sendTransaction`
|
|
248
|
+
*
|
|
249
|
+
* @note every field is 0x-prefixed hex, never a number or bigint. ethers and viem both need it
|
|
250
|
+
* converted first — `@polymeshassociation/eth-signing-manager` exports `toEthersTransaction` /
|
|
251
|
+
* `toViemTransaction` for that, usable without the manager itself
|
|
252
|
+
*/
|
|
253
|
+
transaction: EthTransactionRequest;
|
|
254
|
+
/** the transaction tag identifying the underlying Polymesh call */
|
|
255
|
+
tag: TxTag;
|
|
256
|
+
/** argument metadata for the underlying Polymesh call */
|
|
257
|
+
args: TransactionArgument[];
|
|
258
|
+
/** additional information attached to the payload, such as IDs or memos about the transaction */
|
|
259
|
+
metadata: Record<string, string>;
|
|
260
|
+
}
|
|
196
261
|
//# sourceMappingURL=types.d.ts.map
|
package/base/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/base/types.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AACrF,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,SAAS,MAAM,cAAc,CAAC;AAErC,OAAO,EAAE,aAAa,IAAI,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC3E,OAAO,EAAE,mBAAmB,IAAI,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAC7F,OAAO,EAAE,wBAAwB,IAAI,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AAC5G,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/base/types.ts"],"names":[],"mappings":"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"}
|
package/base/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/base/types.ts"],"names":[],"mappings":";AAAA,+DAA+D;;;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/base/types.ts"],"names":[],"mappings":";AAAA,+DAA+D;;;AAgE/D,IAAY,iBAsCX;AAtCD,WAAY,iBAAiB;IAC3B;;OAEG;IACH,kCAAa,CAAA;IACb;;OAEG;IACH,8CAAyB,CAAA;IACzB;;OAEG;IACH,wCAAmB,CAAA;IACnB;;OAEG;IACH,wCAAmB,CAAA;IACnB;;OAEG;IACH,sCAAiB,CAAA;IACjB;;OAEG;IACH,0CAAqB,CAAA;IACrB;;OAEG;IACH,4CAAuB,CAAA;IACvB;;OAEG;IACH,sCAAiB,CAAA;IACjB;;;OAGG;IACH,wCAAmB,CAAA;AACrB,CAAC,EAtCW,iBAAiB,iCAAjB,iBAAiB,QAsC5B;AAED,IAAY,uBAeX;AAfD,WAAY,uBAAuB;IACjC,sCAAW,CAAA;IACX,8CAAmB,CAAA;IACnB,wCAAa,CAAA;IACb,8CAAmB,CAAA;IACnB,4CAAiB,CAAA;IACjB,8CAAmB,CAAA;IACnB,wCAAa,CAAA;IACb,0CAAe,CAAA;IACf,0CAAe,CAAA;IACf,oDAAyB,CAAA;IACzB,gDAAqB,CAAA;IACrB,4CAAiB,CAAA;IACjB,8CAAmB,CAAA;IACnB,wCAAa,CAAA;AACf,CAAC,EAfW,uBAAuB,uCAAvB,uBAAuB,QAelC;AA0CD;;GAEG;AACH,IAAY,iBAmBX;AAnBD,WAAY,iBAAiB;IAC3B;;OAEG;IACH,wCAAmB,CAAA;IACnB;;;;OAIG;IACH,oCAAe,CAAA;IACf;;OAEG;IACH,sCAAiB,CAAA;IACjB;;OAEG;IACH,wDAAmC,CAAA;AACrC,CAAC,EAnBW,iBAAiB,iCAAjB,iBAAiB,QAmB5B"}
|
package/base/utils.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { SubmittableResult } from '@polkadot/api';
|
|
2
|
+
import { GenericExtrinsic } from '@polkadot/types';
|
|
2
3
|
import { DispatchError, Hash } from '@polkadot/types/interfaces';
|
|
3
4
|
import { SpRuntimeDispatchError } from '../../node_modules/@polymeshassociation/polymesh-types/polkadot/types-lookup';
|
|
4
|
-
import { TypeDef } from '@polkadot/types/types';
|
|
5
|
+
import { ISubmittableResult, TypeDef } from '@polkadot/types/types';
|
|
5
6
|
import { BigNumber } from 'bignumber.js';
|
|
6
7
|
import { Context, PolymeshError } from '../internal';
|
|
7
8
|
import { TransactionArgument, TxTag } from '../types';
|
|
@@ -11,25 +12,73 @@ export declare const dispatchErrorToMessage: (error: SpRuntimeDispatchError | Di
|
|
|
11
12
|
* @hidden
|
|
12
13
|
*/
|
|
13
14
|
export declare const handleExtrinsicFailure: (error: SpRuntimeDispatchError, data?: Record<string, unknown>) => PolymeshError;
|
|
14
|
-
export declare const handleTransactionSubmissionError: (err: Error) => PolymeshError;
|
|
15
15
|
/**
|
|
16
16
|
* @hidden
|
|
17
17
|
*
|
|
18
|
-
*
|
|
18
|
+
* Inspect a transaction receipt for an on-chain failure and return the corresponding error, or
|
|
19
|
+
* `undefined` if the transaction succeeded
|
|
20
|
+
*
|
|
21
|
+
* Two distinct failure shapes feed into the same {@link handleExtrinsicFailure}:
|
|
22
|
+
*
|
|
23
|
+
* - `system.ExtrinsicFailed`, the native path's failure signal
|
|
24
|
+
* - `revive.EthExtrinsicRevert`, emitted instead on the Ethereum signing path. There, the outer
|
|
25
|
+
* `revive.ethTransact` extrinsic still emits `system.ExtrinsicSuccess` even when the inner
|
|
26
|
+
* dispatch failed, so this check must run (and take priority) before the receipt is otherwise
|
|
27
|
+
* treated as a success
|
|
28
|
+
*/
|
|
29
|
+
export declare const getExtrinsicFailure: (receipt: ISubmittableResult) => PolymeshError | undefined;
|
|
30
|
+
export declare const handleTransactionSubmissionError: (err: Error) => PolymeshError;
|
|
31
|
+
/**
|
|
32
|
+
* @hidden
|
|
19
33
|
*
|
|
20
|
-
*
|
|
34
|
+
* Predicate used to recognize a submitted transaction within a block's body. The native path
|
|
35
|
+
* matches on the extrinsic hash, while Ethereum signed transactions match on the keccak hash
|
|
36
|
+
* of the `revive.ethTransact` payload (since the extrinsic itself is unsigned and its hash is
|
|
37
|
+
* not known to the wallet that broadcast it)
|
|
38
|
+
*/
|
|
39
|
+
export type ExtrinsicMatcher = (extrinsic: GenericExtrinsic) => boolean;
|
|
40
|
+
/**
|
|
41
|
+
* @hidden
|
|
21
42
|
*
|
|
22
|
-
*
|
|
43
|
+
* Build a matcher that recognizes an extrinsic by its hash. This is the native submission path
|
|
44
|
+
*/
|
|
45
|
+
export declare const extrinsicHashMatcher: (txHash: Hash) => ExtrinsicMatcher;
|
|
46
|
+
/**
|
|
47
|
+
* @hidden
|
|
23
48
|
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
* @param context
|
|
27
|
-
* @param pollOptions Controls max time to poll, defaults should be OK (finalization takes ~15 seconds)
|
|
28
|
-
* @returns
|
|
49
|
+
* Where a transaction was found, reported as soon as it is included in a block — before that
|
|
50
|
+
* block is finalized
|
|
29
51
|
*/
|
|
30
|
-
export
|
|
52
|
+
export interface TransactionInclusionInfo {
|
|
53
|
+
blockHash: string;
|
|
54
|
+
blockNumber: BigNumber;
|
|
55
|
+
txIndex: number;
|
|
56
|
+
}
|
|
57
|
+
export declare const pollForTransactionFinalization: (matcher: ExtrinsicMatcher, startingBlock: BigNumber, context: Context, pollOptions?: {
|
|
31
58
|
delayMs: number;
|
|
32
59
|
maxAttempts: number;
|
|
60
|
+
}, onInBlock?: (info: TransactionInclusionInfo) => void) => Promise<SubmittableResult>;
|
|
61
|
+
/**
|
|
62
|
+
* @hidden
|
|
63
|
+
*
|
|
64
|
+
* Locate a submitted transaction by subscribing to the chain's blocks, rather than polling for
|
|
65
|
+
* them. Preferred whenever the connection supports subscriptions: inclusion is reported the
|
|
66
|
+
* moment the block arrives instead of on the next poll tick, and it removes a repeating
|
|
67
|
+
* `getHeader`/`getBlock` cycle per in-flight transaction
|
|
68
|
+
*
|
|
69
|
+
* Two independent scans run off two subscriptions:
|
|
70
|
+
*
|
|
71
|
+
* - **new heads** are advisory. They exist only to report inclusion early, via `onInBlock`. A
|
|
72
|
+
* block seen here may still be re-organised away, which is harmless because nothing but a
|
|
73
|
+
* progress callback depends on it
|
|
74
|
+
* - **finalized heads** are authoritative. The resolved result always comes from a finalized
|
|
75
|
+
* block, so a re-org cannot produce a wrong result — the transaction simply will not be found
|
|
76
|
+
* at that height on the canonical chain, and the scan continues
|
|
77
|
+
*
|
|
78
|
+
* @throws if the transaction is not found within `maxFinalizedBlocks` finalized blocks
|
|
79
|
+
*/
|
|
80
|
+
export declare const subscribeForTransactionFinalization: (matcher: ExtrinsicMatcher, startingBlock: BigNumber, context: Context, onInBlock?: (info: TransactionInclusionInfo) => void, { maxFinalizedBlocks }?: {
|
|
81
|
+
maxFinalizedBlocks: number;
|
|
33
82
|
}) => Promise<SubmittableResult>;
|
|
34
83
|
/**
|
|
35
84
|
* @hidden
|
package/base/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/base/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/base/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAmB,MAAM,iBAAiB,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAuB,MAAM,4BAA4B,CAAC;AACtF,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAiB,OAAO,EAAe,MAAM,uBAAuB,CAAC;AAEhG,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzC,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAOL,mBAAmB,EAEnB,KAAK,EAEN,MAAM,SAAS,CAAC;AA8CjB,eAAO,MAAM,WAAW,GAAI,SAAS,OAAO,EAAE,MAAM,MAAM,KAAG,mBAsF5D,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAAI,OAAO,sBAAsB,GAAG,aAAa,KAAG,MAyCtF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,sBAAsB,GACjC,OAAO,sBAAsB,EAC7B,OAAO,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC7B,aAKF,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,mBAAmB,GAAI,SAAS,kBAAkB,KAAG,aAAa,GAAG,SAmBjF,CAAC;AA0BF,eAAO,MAAM,gCAAgC,GAAI,KAAK,KAAK,KAAG,aAY7D,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,SAAS,EAAE,gBAAgB,KAAK,OAAO,CAAC;AAgBxE;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,GAAI,QAAQ,IAAI,KAAG,gBAEnD,CAAC;AAEF;;;;;GAKG;AACH,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,SAAS,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;CACjB;AA8JD,eAAO,MAAM,8BAA8B,GACzC,SAAS,gBAAgB,EACzB,eAAe,SAAS,EACxB,SAAS,OAAO,EAChB;;;CAAkC,EAClC,YAAY,CAAC,IAAI,EAAE,wBAAwB,KAAK,IAAI,KACnD,OAAO,CAAC,iBAAiB,CAsE3B,CAAC;AASF;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,mCAAmC,GAC9C,SAAS,gBAAgB,EACzB,eAAe,SAAS,EACxB,SAAS,OAAO,EAChB,YAAY,CAAC,IAAI,EAAE,wBAAwB,KAAK,IAAI,EACpD;;CAAqD,KACpD,OAAO,CAAC,iBAAiB,CAwH3B,CAAC;AAYF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAAI,KAAK,KAAK,KAAG,OAE/C,CAAC"}
|