viem 2.29.4 → 2.30.0-canary-20250516131545
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 +5 -1
- package/_cjs/actions/wallet/getCallsStatus.js +37 -4
- package/_cjs/actions/wallet/getCallsStatus.js.map +1 -1
- package/_cjs/actions/wallet/sendCalls.js +55 -1
- package/_cjs/actions/wallet/sendCalls.js.map +1 -1
- package/_cjs/errors/version.js +1 -1
- package/_cjs/errors/version.js.map +1 -1
- package/_esm/actions/wallet/getCallsStatus.js +37 -4
- package/_esm/actions/wallet/getCallsStatus.js.map +1 -1
- package/_esm/actions/wallet/sendCalls.js +56 -1
- package/_esm/actions/wallet/sendCalls.js.map +1 -1
- package/_esm/errors/version.js +1 -1
- package/_esm/errors/version.js.map +1 -1
- package/_types/actions/wallet/getCallsStatus.d.ts.map +1 -1
- package/_types/actions/wallet/sendCalls.d.ts +2 -0
- package/_types/actions/wallet/sendCalls.d.ts.map +1 -1
- package/_types/errors/version.d.ts +1 -1
- package/_types/errors/version.d.ts.map +1 -1
- package/actions/wallet/getCallsStatus.ts +47 -4
- package/actions/wallet/sendCalls.ts +76 -1
- package/errors/version.ts +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
@@ -1,6 +1,10 @@
|
|
1
1
|
# viem
|
2
2
|
|
3
|
-
## 2.
|
3
|
+
## 2.30.0-canary-20250516131545
|
4
|
+
|
5
|
+
### Minor Changes
|
6
|
+
|
7
|
+
- [#3648](https://github.com/wevm/viem/pull/3648) [`67325506b69305fcdef769eb15266c4e819302b1`](https://github.com/wevm/viem/commit/67325506b69305fcdef769eb15266c4e819302b1) Thanks [@jxom](https://github.com/jxom)! - Added `experimental_fallback` property to `sendCalls` for wallets that do not support EIP-5792 (falls back to `eth_sendTransaction`).
|
4
8
|
|
5
9
|
### Patch Changes
|
6
10
|
|
@@ -1,13 +1,46 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.getCallsStatus = getCallsStatus;
|
4
|
+
const slice_js_1 = require("../../utils/data/slice.js");
|
5
|
+
const trim_js_1 = require("../../utils/data/trim.js");
|
4
6
|
const fromHex_js_1 = require("../../utils/encoding/fromHex.js");
|
5
7
|
const transactionReceipt_js_1 = require("../../utils/formatters/transactionReceipt.js");
|
8
|
+
const sendCalls_js_1 = require("./sendCalls.js");
|
6
9
|
async function getCallsStatus(client, parameters) {
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
10
|
+
async function getStatus(id) {
|
11
|
+
const isTransactions = id.endsWith(sendCalls_js_1.fallbackMagicIdentifier.slice(2));
|
12
|
+
if (isTransactions) {
|
13
|
+
const chainId = (0, trim_js_1.trim)((0, slice_js_1.sliceHex)(id, -64, -32));
|
14
|
+
const hashes = (0, slice_js_1.sliceHex)(id, 0, -64)
|
15
|
+
.slice(2)
|
16
|
+
.match(/.{1,64}/g);
|
17
|
+
const receipts = await Promise.all(hashes.map((hash) => client.request({
|
18
|
+
method: 'eth_getTransactionReceipt',
|
19
|
+
params: [`0x${hash}`],
|
20
|
+
}, { dedupe: true })));
|
21
|
+
const status = (() => {
|
22
|
+
if (receipts.some((r) => r === null))
|
23
|
+
return 100;
|
24
|
+
if (receipts.every((r) => r?.status === '0x1'))
|
25
|
+
return 200;
|
26
|
+
if (receipts.every((r) => r?.status === '0x0'))
|
27
|
+
return 500;
|
28
|
+
return 600;
|
29
|
+
})();
|
30
|
+
return {
|
31
|
+
atomic: false,
|
32
|
+
chainId: (0, fromHex_js_1.hexToNumber)(chainId),
|
33
|
+
receipts: receipts.filter(Boolean),
|
34
|
+
status,
|
35
|
+
version: '2.0.0',
|
36
|
+
};
|
37
|
+
}
|
38
|
+
return client.request({
|
39
|
+
method: 'wallet_getCallsStatus',
|
40
|
+
params: [id],
|
41
|
+
});
|
42
|
+
}
|
43
|
+
const { atomic = false, chainId, receipts, version = '2.0.0', ...response } = await getStatus(parameters.id);
|
11
44
|
const [status, statusCode] = (() => {
|
12
45
|
const statusCode = response.status;
|
13
46
|
if (statusCode >= 100 && statusCode < 200)
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"getCallsStatus.js","sourceRoot":"","sources":["../../../actions/wallet/getCallsStatus.ts"],"names":[],"mappings":";;
|
1
|
+
{"version":3,"file":"getCallsStatus.js","sourceRoot":"","sources":["../../../actions/wallet/getCallsStatus.ts"],"names":[],"mappings":"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"}
|
@@ -1,13 +1,20 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.fallbackMagicIdentifier = void 0;
|
3
4
|
exports.sendCalls = sendCalls;
|
4
5
|
const parseAccount_js_1 = require("../../accounts/utils/parseAccount.js");
|
5
6
|
const account_js_1 = require("../../errors/account.js");
|
7
|
+
const base_js_1 = require("../../errors/base.js");
|
8
|
+
const rpc_js_1 = require("../../errors/rpc.js");
|
6
9
|
const encodeFunctionData_js_1 = require("../../utils/abi/encodeFunctionData.js");
|
10
|
+
const concat_js_1 = require("../../utils/data/concat.js");
|
11
|
+
const fromHex_js_1 = require("../../utils/encoding/fromHex.js");
|
7
12
|
const toHex_js_1 = require("../../utils/encoding/toHex.js");
|
8
13
|
const getTransactionError_js_1 = require("../../utils/errors/getTransactionError.js");
|
14
|
+
const sendTransaction_js_1 = require("./sendTransaction.js");
|
15
|
+
exports.fallbackMagicIdentifier = '0x5792579257925792579257925792579257925792579257925792579257925792';
|
9
16
|
async function sendCalls(client, parameters) {
|
10
|
-
const { account: account_ = client.account, capabilities, chain = client.chain, forceAtomic = false, id, version = '2.0.0', } = parameters;
|
17
|
+
const { account: account_ = client.account, capabilities, chain = client.chain, experimental_fallback, forceAtomic = false, id, version = '2.0.0', } = parameters;
|
11
18
|
if (typeof account_ === 'undefined')
|
12
19
|
throw new account_js_1.AccountNotFoundError({
|
13
20
|
docsPath: '/docs/actions/wallet/sendCalls',
|
@@ -48,6 +55,53 @@ async function sendCalls(client, parameters) {
|
|
48
55
|
return response;
|
49
56
|
}
|
50
57
|
catch (err) {
|
58
|
+
const error = err;
|
59
|
+
if (experimental_fallback &&
|
60
|
+
(error.name === 'MethodNotFoundRpcError' ||
|
61
|
+
error.name === 'MethodNotSupportedRpcError' ||
|
62
|
+
error.details
|
63
|
+
.toLowerCase()
|
64
|
+
.includes('does not exist / is not available') ||
|
65
|
+
error.details.toLowerCase().includes('missing or invalid. request()') ||
|
66
|
+
error.details
|
67
|
+
.toLowerCase()
|
68
|
+
.includes('did not match any variant of untagged enum'))) {
|
69
|
+
if (capabilities) {
|
70
|
+
const hasNonOptionalCapability = Object.values(capabilities).some((capability) => !capability.optional);
|
71
|
+
if (hasNonOptionalCapability) {
|
72
|
+
const message = 'non-optional `capabilities` are not supported on fallback to `eth_sendTransaction`.';
|
73
|
+
throw new rpc_js_1.UnsupportedNonOptionalCapabilityError(new base_js_1.BaseError(message, {
|
74
|
+
details: message,
|
75
|
+
}));
|
76
|
+
}
|
77
|
+
}
|
78
|
+
if (forceAtomic && calls.length > 1) {
|
79
|
+
const message = '`forceAtomic` is not supported on fallback to `eth_sendTransaction`.';
|
80
|
+
throw new rpc_js_1.AtomicityNotSupportedError(new base_js_1.BaseError(message, {
|
81
|
+
details: message,
|
82
|
+
}));
|
83
|
+
}
|
84
|
+
const promises = [];
|
85
|
+
for (const call of calls) {
|
86
|
+
const promise = (0, sendTransaction_js_1.sendTransaction)(client, {
|
87
|
+
account,
|
88
|
+
chain,
|
89
|
+
data: call.data,
|
90
|
+
to: call.to,
|
91
|
+
value: call.value ? (0, fromHex_js_1.hexToBigInt)(call.value) : undefined,
|
92
|
+
});
|
93
|
+
promises.push(promise);
|
94
|
+
await new Promise((resolve) => setTimeout(resolve, 32));
|
95
|
+
}
|
96
|
+
const hashes = await Promise.all(promises);
|
97
|
+
return {
|
98
|
+
id: (0, concat_js_1.concat)([
|
99
|
+
...hashes,
|
100
|
+
(0, toHex_js_1.numberToHex)(chain.id, { size: 32 }),
|
101
|
+
exports.fallbackMagicIdentifier,
|
102
|
+
]),
|
103
|
+
};
|
104
|
+
}
|
51
105
|
throw (0, getTransactionError_js_1.getTransactionError)(err, {
|
52
106
|
...parameters,
|
53
107
|
account,
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"sendCalls.js","sourceRoot":"","sources":["../../../actions/wallet/sendCalls.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"sendCalls.js","sourceRoot":"","sources":["../../../actions/wallet/sendCalls.ts"],"names":[],"mappings":";;;AAqFA,8BAoIC;AAxND,0EAAmE;AAGnE,wDAA8D;AAC9D,kDAAgD;AAChD,gDAG4B;AAS5B,iFAA0E;AAE1E,0DAAmD;AACnD,gEAA6D;AAC7D,4DAA2D;AAC3D,sFAA+E;AAC/E,6DAAsD;AAEzC,QAAA,uBAAuB,GAClC,oEAAoE,CAAA;AA0D/D,KAAK,UAAU,SAAS,CAM7B,MAAyC,EACzC,UAAqE;IAErE,MAAM,EACJ,OAAO,EAAE,QAAQ,GAAG,MAAM,CAAC,OAAO,EAClC,YAAY,EACZ,KAAK,GAAG,MAAM,CAAC,KAAK,EACpB,qBAAqB,EACrB,WAAW,GAAG,KAAK,EACnB,EAAE,EACF,OAAO,GAAG,OAAO,GAClB,GAAG,UAAU,CAAA;IAEd,IAAI,OAAO,QAAQ,KAAK,WAAW;QACjC,MAAM,IAAI,iCAAoB,CAAC;YAC7B,QAAQ,EAAE,gCAAgC;SAC3C,CAAC,CAAA;IACJ,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAA,8BAAY,EAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAExD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAc,EAAE,EAAE;QACpD,MAAM,IAAI,GAAG,KAAa,CAAA;QAE1B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG;YACnB,CAAC,CAAC,IAAA,0CAAkB,EAAC;gBACjB,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,IAAI,EAAE,IAAI,CAAC,IAAI;aAChB,CAAC;YACJ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAA;QAEb,OAAO;YACL,IAAI;YACJ,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAA,sBAAW,EAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;SACxD,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CACnC;YACE,MAAM,EAAE,kBAAkB;YAC1B,MAAM,EAAE;gBACN;oBACE,cAAc,EAAE,WAAW;oBAC3B,KAAK;oBACL,YAAY;oBACZ,OAAO,EAAE,IAAA,sBAAW,EAAC,KAAM,CAAC,EAAE,CAAC;oBAC/B,IAAI,EAAE,OAAO,EAAE,OAAO;oBACtB,EAAE;oBACF,OAAO;iBACR;aACF;SACF,EACD,EAAE,UAAU,EAAE,CAAC,EAAE,CAClB,CAAA;QACD,IAAI,OAAO,QAAQ,KAAK,QAAQ;YAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAA;QACzD,OAAO,QAAiB,CAAA;IAC1B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,KAAK,GAAG,GAAgB,CAAA;QAI9B,IACE,qBAAqB;YACrB,CAAC,KAAK,CAAC,IAAI,KAAK,wBAAwB;gBACtC,KAAK,CAAC,IAAI,KAAK,4BAA4B;gBAC3C,KAAK,CAAC,OAAO;qBACV,WAAW,EAAE;qBACb,QAAQ,CAAC,mCAAmC,CAAC;gBAChD,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;gBACrE,KAAK,CAAC,OAAO;qBACV,WAAW,EAAE;qBACb,QAAQ,CAAC,4CAA4C,CAAC,CAAC,EAC5D,CAAC;YACD,IAAI,YAAY,EAAE,CAAC;gBACjB,MAAM,wBAAwB,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAC/D,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,QAAQ,CACrC,CAAA;gBACD,IAAI,wBAAwB,EAAE,CAAC;oBAC7B,MAAM,OAAO,GACX,qFAAqF,CAAA;oBACvF,MAAM,IAAI,8CAAqC,CAC7C,IAAI,mBAAS,CAAC,OAAO,EAAE;wBACrB,OAAO,EAAE,OAAO;qBACjB,CAAC,CACH,CAAA;gBACH,CAAC;YACH,CAAC;YACD,IAAI,WAAW,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpC,MAAM,OAAO,GACX,sEAAsE,CAAA;gBACxE,MAAM,IAAI,mCAA0B,CAClC,IAAI,mBAAS,CAAC,OAAO,EAAE;oBACrB,OAAO,EAAE,OAAO;iBACjB,CAAC,CACH,CAAA;YACH,CAAC;YAED,MAAM,QAAQ,GAAmB,EAAE,CAAA;YACnC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,OAAO,GAAG,IAAA,oCAAe,EAAC,MAAM,EAAE;oBACtC,OAAO;oBACP,KAAK;oBACL,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,EAAE,EAAE,IAAI,CAAC,EAAE;oBACX,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAA,wBAAW,EAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;iBACxD,CAAC,CAAA;gBACF,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;gBACtB,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAA;YACzD,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;YAC1C,OAAO;gBACL,EAAE,EAAE,IAAA,kBAAM,EAAC;oBACT,GAAG,MAAM;oBACT,IAAA,sBAAW,EAAC,KAAM,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;oBACpC,+BAAuB;iBACxB,CAAC;aACH,CAAA;QACH,CAAC;QAED,MAAM,IAAA,4CAAmB,EAAC,GAAgB,EAAE;YAC1C,GAAG,UAAU;YACb,OAAO;YACP,KAAK,EAAE,UAAU,CAAC,KAAM;SACzB,CAAC,CAAA;IACJ,CAAC;AACH,CAAC"}
|
package/_cjs/errors/version.js
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../errors/version.ts"],"names":[],"mappings":";;;AAAa,QAAA,OAAO,GAAG,
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../errors/version.ts"],"names":[],"mappings":";;;AAAa,QAAA,OAAO,GAAG,8BAA8B,CAAA"}
|
@@ -1,5 +1,8 @@
|
|
1
|
+
import { sliceHex } from '../../utils/data/slice.js';
|
2
|
+
import { trim } from '../../utils/data/trim.js';
|
1
3
|
import { hexToBigInt, hexToNumber } from '../../utils/encoding/fromHex.js';
|
2
4
|
import { receiptStatuses } from '../../utils/formatters/transactionReceipt.js';
|
5
|
+
import { fallbackMagicIdentifier } from './sendCalls.js';
|
3
6
|
/**
|
4
7
|
* Returns the status of a call batch that was sent via `sendCalls`.
|
5
8
|
*
|
@@ -21,10 +24,40 @@ import { receiptStatuses } from '../../utils/formatters/transactionReceipt.js';
|
|
21
24
|
* const { receipts, status } = await getCallsStatus(client, { id: '0xdeadbeef' })
|
22
25
|
*/
|
23
26
|
export async function getCallsStatus(client, parameters) {
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
27
|
+
async function getStatus(id) {
|
28
|
+
const isTransactions = id.endsWith(fallbackMagicIdentifier.slice(2));
|
29
|
+
if (isTransactions) {
|
30
|
+
const chainId = trim(sliceHex(id, -64, -32));
|
31
|
+
const hashes = sliceHex(id, 0, -64)
|
32
|
+
.slice(2)
|
33
|
+
.match(/.{1,64}/g);
|
34
|
+
const receipts = await Promise.all(hashes.map((hash) => client.request({
|
35
|
+
method: 'eth_getTransactionReceipt',
|
36
|
+
params: [`0x${hash}`],
|
37
|
+
}, { dedupe: true })));
|
38
|
+
const status = (() => {
|
39
|
+
if (receipts.some((r) => r === null))
|
40
|
+
return 100; // pending
|
41
|
+
if (receipts.every((r) => r?.status === '0x1'))
|
42
|
+
return 200; // success
|
43
|
+
if (receipts.every((r) => r?.status === '0x0'))
|
44
|
+
return 500; // complete failure
|
45
|
+
return 600; // partial failure
|
46
|
+
})();
|
47
|
+
return {
|
48
|
+
atomic: false,
|
49
|
+
chainId: hexToNumber(chainId),
|
50
|
+
receipts: receipts.filter(Boolean),
|
51
|
+
status,
|
52
|
+
version: '2.0.0',
|
53
|
+
};
|
54
|
+
}
|
55
|
+
return client.request({
|
56
|
+
method: 'wallet_getCallsStatus',
|
57
|
+
params: [id],
|
58
|
+
});
|
59
|
+
}
|
60
|
+
const { atomic = false, chainId, receipts, version = '2.0.0', ...response } = await getStatus(parameters.id);
|
28
61
|
const [status, statusCode] = (() => {
|
29
62
|
const statusCode = response.status;
|
30
63
|
if (statusCode >= 100 && statusCode < 200)
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"getCallsStatus.js","sourceRoot":"","sources":["../../../actions/wallet/getCallsStatus.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"getCallsStatus.js","sourceRoot":"","sources":["../../../actions/wallet/getCallsStatus.ts"],"names":[],"mappings":"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"}
|
@@ -1,8 +1,14 @@
|
|
1
1
|
import { parseAccount } from '../../accounts/utils/parseAccount.js';
|
2
2
|
import { AccountNotFoundError } from '../../errors/account.js';
|
3
|
+
import { BaseError } from '../../errors/base.js';
|
4
|
+
import { AtomicityNotSupportedError, UnsupportedNonOptionalCapabilityError, } from '../../errors/rpc.js';
|
3
5
|
import { encodeFunctionData } from '../../utils/abi/encodeFunctionData.js';
|
6
|
+
import { concat } from '../../utils/data/concat.js';
|
7
|
+
import { hexToBigInt } from '../../utils/encoding/fromHex.js';
|
4
8
|
import { numberToHex } from '../../utils/encoding/toHex.js';
|
5
9
|
import { getTransactionError } from '../../utils/errors/getTransactionError.js';
|
10
|
+
import { sendTransaction } from './sendTransaction.js';
|
11
|
+
export const fallbackMagicIdentifier = '0x5792579257925792579257925792579257925792579257925792579257925792';
|
6
12
|
/**
|
7
13
|
* Requests the connected wallet to send a batch of calls.
|
8
14
|
*
|
@@ -36,7 +42,7 @@ import { getTransactionError } from '../../utils/errors/getTransactionError.js';
|
|
36
42
|
* })
|
37
43
|
*/
|
38
44
|
export async function sendCalls(client, parameters) {
|
39
|
-
const { account: account_ = client.account, capabilities, chain = client.chain, forceAtomic = false, id, version = '2.0.0', } = parameters;
|
45
|
+
const { account: account_ = client.account, capabilities, chain = client.chain, experimental_fallback, forceAtomic = false, id, version = '2.0.0', } = parameters;
|
40
46
|
if (typeof account_ === 'undefined')
|
41
47
|
throw new AccountNotFoundError({
|
42
48
|
docsPath: '/docs/actions/wallet/sendCalls',
|
@@ -77,6 +83,55 @@ export async function sendCalls(client, parameters) {
|
|
77
83
|
return response;
|
78
84
|
}
|
79
85
|
catch (err) {
|
86
|
+
const error = err;
|
87
|
+
// If the transport does not support EIP-5792, fall back to
|
88
|
+
// `eth_sendTransaction`.
|
89
|
+
if (experimental_fallback &&
|
90
|
+
(error.name === 'MethodNotFoundRpcError' ||
|
91
|
+
error.name === 'MethodNotSupportedRpcError' ||
|
92
|
+
error.details
|
93
|
+
.toLowerCase()
|
94
|
+
.includes('does not exist / is not available') ||
|
95
|
+
error.details.toLowerCase().includes('missing or invalid. request()') ||
|
96
|
+
error.details
|
97
|
+
.toLowerCase()
|
98
|
+
.includes('did not match any variant of untagged enum'))) {
|
99
|
+
if (capabilities) {
|
100
|
+
const hasNonOptionalCapability = Object.values(capabilities).some((capability) => !capability.optional);
|
101
|
+
if (hasNonOptionalCapability) {
|
102
|
+
const message = 'non-optional `capabilities` are not supported on fallback to `eth_sendTransaction`.';
|
103
|
+
throw new UnsupportedNonOptionalCapabilityError(new BaseError(message, {
|
104
|
+
details: message,
|
105
|
+
}));
|
106
|
+
}
|
107
|
+
}
|
108
|
+
if (forceAtomic && calls.length > 1) {
|
109
|
+
const message = '`forceAtomic` is not supported on fallback to `eth_sendTransaction`.';
|
110
|
+
throw new AtomicityNotSupportedError(new BaseError(message, {
|
111
|
+
details: message,
|
112
|
+
}));
|
113
|
+
}
|
114
|
+
const promises = [];
|
115
|
+
for (const call of calls) {
|
116
|
+
const promise = sendTransaction(client, {
|
117
|
+
account,
|
118
|
+
chain,
|
119
|
+
data: call.data,
|
120
|
+
to: call.to,
|
121
|
+
value: call.value ? hexToBigInt(call.value) : undefined,
|
122
|
+
});
|
123
|
+
promises.push(promise);
|
124
|
+
await new Promise((resolve) => setTimeout(resolve, 32));
|
125
|
+
}
|
126
|
+
const hashes = await Promise.all(promises);
|
127
|
+
return {
|
128
|
+
id: concat([
|
129
|
+
...hashes,
|
130
|
+
numberToHex(chain.id, { size: 32 }),
|
131
|
+
fallbackMagicIdentifier,
|
132
|
+
]),
|
133
|
+
};
|
134
|
+
}
|
80
135
|
throw getTransactionError(err, {
|
81
136
|
...parameters,
|
82
137
|
account,
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"sendCalls.js","sourceRoot":"","sources":["../../../actions/wallet/sendCalls.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAA;AAGnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;
|
1
|
+
{"version":3,"file":"sendCalls.js","sourceRoot":"","sources":["../../../actions/wallet/sendCalls.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAA;AAGnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAChD,OAAO,EACL,0BAA0B,EAC1B,qCAAqC,GACtC,MAAM,qBAAqB,CAAA;AAS5B,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAA;AAE1E,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAA;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAA;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAA;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAEtD,MAAM,CAAC,MAAM,uBAAuB,GAClC,oEAAoE,CAAA;AA0BtE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAM7B,MAAyC,EACzC,UAAqE;IAErE,MAAM,EACJ,OAAO,EAAE,QAAQ,GAAG,MAAM,CAAC,OAAO,EAClC,YAAY,EACZ,KAAK,GAAG,MAAM,CAAC,KAAK,EACpB,qBAAqB,EACrB,WAAW,GAAG,KAAK,EACnB,EAAE,EACF,OAAO,GAAG,OAAO,GAClB,GAAG,UAAU,CAAA;IAEd,IAAI,OAAO,QAAQ,KAAK,WAAW;QACjC,MAAM,IAAI,oBAAoB,CAAC;YAC7B,QAAQ,EAAE,gCAAgC;SAC3C,CAAC,CAAA;IACJ,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAExD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAc,EAAE,EAAE;QACpD,MAAM,IAAI,GAAG,KAAa,CAAA;QAE1B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG;YACnB,CAAC,CAAC,kBAAkB,CAAC;gBACjB,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,IAAI,EAAE,IAAI,CAAC,IAAI;aAChB,CAAC;YACJ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAA;QAEb,OAAO;YACL,IAAI;YACJ,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;SACxD,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CACnC;YACE,MAAM,EAAE,kBAAkB;YAC1B,MAAM,EAAE;gBACN;oBACE,cAAc,EAAE,WAAW;oBAC3B,KAAK;oBACL,YAAY;oBACZ,OAAO,EAAE,WAAW,CAAC,KAAM,CAAC,EAAE,CAAC;oBAC/B,IAAI,EAAE,OAAO,EAAE,OAAO;oBACtB,EAAE;oBACF,OAAO;iBACR;aACF;SACF,EACD,EAAE,UAAU,EAAE,CAAC,EAAE,CAClB,CAAA;QACD,IAAI,OAAO,QAAQ,KAAK,QAAQ;YAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAA;QACzD,OAAO,QAAiB,CAAA;IAC1B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,KAAK,GAAG,GAAgB,CAAA;QAE9B,2DAA2D;QAC3D,yBAAyB;QACzB,IACE,qBAAqB;YACrB,CAAC,KAAK,CAAC,IAAI,KAAK,wBAAwB;gBACtC,KAAK,CAAC,IAAI,KAAK,4BAA4B;gBAC3C,KAAK,CAAC,OAAO;qBACV,WAAW,EAAE;qBACb,QAAQ,CAAC,mCAAmC,CAAC;gBAChD,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;gBACrE,KAAK,CAAC,OAAO;qBACV,WAAW,EAAE;qBACb,QAAQ,CAAC,4CAA4C,CAAC,CAAC,EAC5D,CAAC;YACD,IAAI,YAAY,EAAE,CAAC;gBACjB,MAAM,wBAAwB,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAC/D,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,QAAQ,CACrC,CAAA;gBACD,IAAI,wBAAwB,EAAE,CAAC;oBAC7B,MAAM,OAAO,GACX,qFAAqF,CAAA;oBACvF,MAAM,IAAI,qCAAqC,CAC7C,IAAI,SAAS,CAAC,OAAO,EAAE;wBACrB,OAAO,EAAE,OAAO;qBACjB,CAAC,CACH,CAAA;gBACH,CAAC;YACH,CAAC;YACD,IAAI,WAAW,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpC,MAAM,OAAO,GACX,sEAAsE,CAAA;gBACxE,MAAM,IAAI,0BAA0B,CAClC,IAAI,SAAS,CAAC,OAAO,EAAE;oBACrB,OAAO,EAAE,OAAO;iBACjB,CAAC,CACH,CAAA;YACH,CAAC;YAED,MAAM,QAAQ,GAAmB,EAAE,CAAA;YACnC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,EAAE;oBACtC,OAAO;oBACP,KAAK;oBACL,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,EAAE,EAAE,IAAI,CAAC,EAAE;oBACX,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;iBACxD,CAAC,CAAA;gBACF,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;gBACtB,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAA;YACzD,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;YAC1C,OAAO;gBACL,EAAE,EAAE,MAAM,CAAC;oBACT,GAAG,MAAM;oBACT,WAAW,CAAC,KAAM,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;oBACpC,uBAAuB;iBACxB,CAAC;aACH,CAAA;QACH,CAAC;QAED,MAAM,mBAAmB,CAAC,GAAgB,EAAE;YAC1C,GAAG,UAAU;YACb,OAAO;YACP,KAAK,EAAE,UAAU,CAAC,KAAM;SACzB,CAAC,CAAA;IACJ,CAAC;AACH,CAAC"}
|
package/_esm/errors/version.js
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
export const version = '2.
|
1
|
+
export const version = '2.30.0-canary-20250516131545';
|
2
2
|
//# sourceMappingURL=version.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../errors/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../errors/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,8BAA8B,CAAA"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"getCallsStatus.d.ts","sourceRoot":"","sources":["../../../actions/wallet/getCallsStatus.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAA;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6CAA6C,CAAA;AAC5E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AACrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AACtE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AACjD,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,wBAAwB,CAAA;
|
1
|
+
{"version":3,"file":"getCallsStatus.d.ts","sourceRoot":"","sources":["../../../actions/wallet/getCallsStatus.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAA;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6CAA6C,CAAA;AAC5E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AACrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AACtE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AACjD,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,wBAAwB,CAAA;AAG5E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AAOnE,MAAM,MAAM,wBAAwB,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAAA;AAErD,MAAM,MAAM,wBAAwB,GAAG,QAAQ,CAC7C,IAAI,CACF,8BAA8B,CAC5B,mBAAmB,CAAC,gBAAgB,EAAE,YAAY,CAAC,EACnD,MAAM,EACN,MAAM,EACN,SAAS,GAAG,UAAU,CACvB,EACD,QAAQ,CACT,GAAG;IACF,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAA;CACtD,CACF,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG,gBAAgB,GAAG,SAAS,CAAA;AAElE;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,cAAc,CAClC,KAAK,SAAS,KAAK,GAAG,SAAS,EAC/B,OAAO,SAAS,OAAO,GAAG,SAAS,GAAG,SAAS,EAE/C,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,EACzC,UAAU,EAAE,wBAAwB,GACnC,OAAO,CAAC,wBAAwB,CAAC,CA+EnC"}
|
@@ -9,10 +9,12 @@ import type { Chain, DeriveChain } from '../../types/chain.js';
|
|
9
9
|
import type { WalletSendCallsParameters } from '../../types/eip1193.js';
|
10
10
|
import type { Prettify } from '../../types/utils.js';
|
11
11
|
import type { RequestErrorType } from '../../utils/buildRequest.js';
|
12
|
+
export declare const fallbackMagicIdentifier = "0x5792579257925792579257925792579257925792579257925792579257925792";
|
12
13
|
export type SendCallsParameters<chain extends Chain | undefined = Chain | undefined, account extends Account | undefined = Account | undefined, chainOverride extends Chain | undefined = Chain | undefined, calls extends readonly unknown[] = readonly unknown[], _chain extends Chain | undefined = DeriveChain<chain, chainOverride>> = {
|
13
14
|
chain?: chainOverride | Chain | undefined;
|
14
15
|
calls: Calls<Narrow<calls>>;
|
15
16
|
capabilities?: ExtractCapabilities<'sendCalls', 'Request'> | undefined;
|
17
|
+
experimental_fallback?: boolean | undefined;
|
16
18
|
forceAtomic?: boolean | undefined;
|
17
19
|
id?: string | undefined;
|
18
20
|
version?: WalletSendCallsParameters[number]['version'] | undefined;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"sendCalls.d.ts","sourceRoot":"","sources":["../../../actions/wallet/sendCalls.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAE9C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAA;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6CAA6C,CAAA;
|
1
|
+
{"version":3,"file":"sendCalls.d.ts","sourceRoot":"","sources":["../../../actions/wallet/sendCalls.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAE9C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAA;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6CAA6C,CAAA;AAO5E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,KAAK,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAC1E,OAAO,KAAK,EAAQ,KAAK,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AACtE,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAC9D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAA;AAEvE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAEpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AAOnE,eAAO,MAAM,uBAAuB,uEACkC,CAAA;AAEtE,MAAM,MAAM,mBAAmB,CAC7B,KAAK,SAAS,KAAK,GAAG,SAAS,GAAG,KAAK,GAAG,SAAS,EACnD,OAAO,SAAS,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,EACzD,aAAa,SAAS,KAAK,GAAG,SAAS,GAAG,KAAK,GAAG,SAAS,EAC3D,KAAK,SAAS,SAAS,OAAO,EAAE,GAAG,SAAS,OAAO,EAAE,EAErD,MAAM,SAAS,KAAK,GAAG,SAAS,GAAG,WAAW,CAAC,KAAK,EAAE,aAAa,CAAC,IAClE;IACF,KAAK,CAAC,EAAE,aAAa,GAAG,KAAK,GAAG,SAAS,CAAA;IACzC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;IAC3B,YAAY,CAAC,EAAE,mBAAmB,CAAC,WAAW,EAAE,SAAS,CAAC,GAAG,SAAS,CAAA;IACtE,qBAAqB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IAC3C,WAAW,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IACjC,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACvB,OAAO,CAAC,EAAE,yBAAyB,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,GAAG,SAAS,CAAA;CACnE,GAAG,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;AAE/D,MAAM,MAAM,mBAAmB,GAAG,QAAQ,CAAC;IACzC,YAAY,CAAC,EAAE,mBAAmB,CAAC,WAAW,EAAE,YAAY,CAAC,GAAG,SAAS,CAAA;IACzE,EAAE,EAAE,MAAM,CAAA;CACX,CAAC,CAAA;AAEF,MAAM,MAAM,kBAAkB,GAAG,gBAAgB,GAAG,SAAS,CAAA;AAE7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAsB,SAAS,CAC7B,KAAK,CAAC,KAAK,SAAS,SAAS,OAAO,EAAE,EACtC,KAAK,SAAS,KAAK,GAAG,SAAS,EAC/B,OAAO,SAAS,OAAO,GAAG,SAAS,GAAG,SAAS,EAC/C,aAAa,SAAS,KAAK,GAAG,SAAS,GAAG,SAAS,EAEnD,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,EACzC,UAAU,EAAE,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,CAAC,GACpE,OAAO,CAAC,mBAAmB,CAAC,CA4H9B"}
|
@@ -1,2 +1,2 @@
|
|
1
|
-
export declare const version = "2.
|
1
|
+
export declare const version = "2.30.0-canary-20250516131545";
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../errors/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../errors/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,iCAAiC,CAAA"}
|
@@ -5,10 +5,15 @@ import type { Account } from '../../types/account.js'
|
|
5
5
|
import type { ExtractCapabilities } from '../../types/capabilities.js'
|
6
6
|
import type { Chain } from '../../types/chain.js'
|
7
7
|
import type { WalletGetCallsStatusReturnType } from '../../types/eip1193.js'
|
8
|
+
import type { Hex } from '../../types/misc.js'
|
9
|
+
import type { RpcTransactionReceipt } from '../../types/rpc.js'
|
8
10
|
import type { Prettify } from '../../types/utils.js'
|
9
11
|
import type { RequestErrorType } from '../../utils/buildRequest.js'
|
12
|
+
import { sliceHex } from '../../utils/data/slice.js'
|
13
|
+
import { trim } from '../../utils/data/trim.js'
|
10
14
|
import { hexToBigInt, hexToNumber } from '../../utils/encoding/fromHex.js'
|
11
15
|
import { receiptStatuses } from '../../utils/formatters/transactionReceipt.js'
|
16
|
+
import { fallbackMagicIdentifier } from './sendCalls.js'
|
12
17
|
|
13
18
|
export type GetCallsStatusParameters = { id: string }
|
14
19
|
|
@@ -56,16 +61,54 @@ export async function getCallsStatus<
|
|
56
61
|
client: Client<Transport, chain, account>,
|
57
62
|
parameters: GetCallsStatusParameters,
|
58
63
|
): Promise<GetCallsStatusReturnType> {
|
64
|
+
async function getStatus(id: Hex) {
|
65
|
+
const isTransactions = id.endsWith(fallbackMagicIdentifier.slice(2))
|
66
|
+
if (isTransactions) {
|
67
|
+
const chainId = trim(sliceHex(id, -64, -32))
|
68
|
+
const hashes = sliceHex(id, 0, -64)
|
69
|
+
.slice(2)
|
70
|
+
.match(/.{1,64}/g)
|
71
|
+
|
72
|
+
const receipts = await Promise.all(
|
73
|
+
hashes!.map((hash) =>
|
74
|
+
client.request(
|
75
|
+
{
|
76
|
+
method: 'eth_getTransactionReceipt',
|
77
|
+
params: [`0x${hash}`],
|
78
|
+
},
|
79
|
+
{ dedupe: true },
|
80
|
+
),
|
81
|
+
),
|
82
|
+
)
|
83
|
+
|
84
|
+
const status = (() => {
|
85
|
+
if (receipts.some((r) => r === null)) return 100 // pending
|
86
|
+
if (receipts.every((r) => r?.status === '0x1')) return 200 // success
|
87
|
+
if (receipts.every((r) => r?.status === '0x0')) return 500 // complete failure
|
88
|
+
return 600 // partial failure
|
89
|
+
})()
|
90
|
+
|
91
|
+
return {
|
92
|
+
atomic: false,
|
93
|
+
chainId: hexToNumber(chainId),
|
94
|
+
receipts: receipts.filter(Boolean) as RpcTransactionReceipt[],
|
95
|
+
status,
|
96
|
+
version: '2.0.0',
|
97
|
+
}
|
98
|
+
}
|
99
|
+
return client.request({
|
100
|
+
method: 'wallet_getCallsStatus',
|
101
|
+
params: [id],
|
102
|
+
})
|
103
|
+
}
|
104
|
+
|
59
105
|
const {
|
60
106
|
atomic = false,
|
61
107
|
chainId,
|
62
108
|
receipts,
|
63
109
|
version = '2.0.0',
|
64
110
|
...response
|
65
|
-
} = await
|
66
|
-
method: 'wallet_getCallsStatus',
|
67
|
-
params: [parameters.id],
|
68
|
-
})
|
111
|
+
} = await getStatus(parameters.id as Hex)
|
69
112
|
const [status, statusCode] = (() => {
|
70
113
|
const statusCode = response.status
|
71
114
|
if (statusCode >= 100 && statusCode < 200)
|
@@ -3,18 +3,29 @@ import { parseAccount } from '../../accounts/utils/parseAccount.js'
|
|
3
3
|
import type { Client } from '../../clients/createClient.js'
|
4
4
|
import type { Transport } from '../../clients/transports/createTransport.js'
|
5
5
|
import { AccountNotFoundError } from '../../errors/account.js'
|
6
|
-
import
|
6
|
+
import { BaseError } from '../../errors/base.js'
|
7
|
+
import {
|
8
|
+
AtomicityNotSupportedError,
|
9
|
+
UnsupportedNonOptionalCapabilityError,
|
10
|
+
} from '../../errors/rpc.js'
|
7
11
|
import type { ErrorType } from '../../errors/utils.js'
|
8
12
|
import type { Account, GetAccountParameter } from '../../types/account.js'
|
9
13
|
import type { Call, Calls } from '../../types/calls.js'
|
10
14
|
import type { ExtractCapabilities } from '../../types/capabilities.js'
|
11
15
|
import type { Chain, DeriveChain } from '../../types/chain.js'
|
12
16
|
import type { WalletSendCallsParameters } from '../../types/eip1193.js'
|
17
|
+
import type { Hex } from '../../types/misc.js'
|
13
18
|
import type { Prettify } from '../../types/utils.js'
|
14
19
|
import { encodeFunctionData } from '../../utils/abi/encodeFunctionData.js'
|
15
20
|
import type { RequestErrorType } from '../../utils/buildRequest.js'
|
21
|
+
import { concat } from '../../utils/data/concat.js'
|
22
|
+
import { hexToBigInt } from '../../utils/encoding/fromHex.js'
|
16
23
|
import { numberToHex } from '../../utils/encoding/toHex.js'
|
17
24
|
import { getTransactionError } from '../../utils/errors/getTransactionError.js'
|
25
|
+
import { sendTransaction } from './sendTransaction.js'
|
26
|
+
|
27
|
+
export const fallbackMagicIdentifier =
|
28
|
+
'0x5792579257925792579257925792579257925792579257925792579257925792'
|
18
29
|
|
19
30
|
export type SendCallsParameters<
|
20
31
|
chain extends Chain | undefined = Chain | undefined,
|
@@ -27,6 +38,7 @@ export type SendCallsParameters<
|
|
27
38
|
chain?: chainOverride | Chain | undefined
|
28
39
|
calls: Calls<Narrow<calls>>
|
29
40
|
capabilities?: ExtractCapabilities<'sendCalls', 'Request'> | undefined
|
41
|
+
experimental_fallback?: boolean | undefined
|
30
42
|
forceAtomic?: boolean | undefined
|
31
43
|
id?: string | undefined
|
32
44
|
version?: WalletSendCallsParameters[number]['version'] | undefined
|
@@ -84,6 +96,7 @@ export async function sendCalls<
|
|
84
96
|
account: account_ = client.account,
|
85
97
|
capabilities,
|
86
98
|
chain = client.chain,
|
99
|
+
experimental_fallback,
|
87
100
|
forceAtomic = false,
|
88
101
|
id,
|
89
102
|
version = '2.0.0',
|
@@ -134,6 +147,68 @@ export async function sendCalls<
|
|
134
147
|
if (typeof response === 'string') return { id: response }
|
135
148
|
return response as never
|
136
149
|
} catch (err) {
|
150
|
+
const error = err as BaseError
|
151
|
+
|
152
|
+
// If the transport does not support EIP-5792, fall back to
|
153
|
+
// `eth_sendTransaction`.
|
154
|
+
if (
|
155
|
+
experimental_fallback &&
|
156
|
+
(error.name === 'MethodNotFoundRpcError' ||
|
157
|
+
error.name === 'MethodNotSupportedRpcError' ||
|
158
|
+
error.details
|
159
|
+
.toLowerCase()
|
160
|
+
.includes('does not exist / is not available') ||
|
161
|
+
error.details.toLowerCase().includes('missing or invalid. request()') ||
|
162
|
+
error.details
|
163
|
+
.toLowerCase()
|
164
|
+
.includes('did not match any variant of untagged enum'))
|
165
|
+
) {
|
166
|
+
if (capabilities) {
|
167
|
+
const hasNonOptionalCapability = Object.values(capabilities).some(
|
168
|
+
(capability) => !capability.optional,
|
169
|
+
)
|
170
|
+
if (hasNonOptionalCapability) {
|
171
|
+
const message =
|
172
|
+
'non-optional `capabilities` are not supported on fallback to `eth_sendTransaction`.'
|
173
|
+
throw new UnsupportedNonOptionalCapabilityError(
|
174
|
+
new BaseError(message, {
|
175
|
+
details: message,
|
176
|
+
}),
|
177
|
+
)
|
178
|
+
}
|
179
|
+
}
|
180
|
+
if (forceAtomic && calls.length > 1) {
|
181
|
+
const message =
|
182
|
+
'`forceAtomic` is not supported on fallback to `eth_sendTransaction`.'
|
183
|
+
throw new AtomicityNotSupportedError(
|
184
|
+
new BaseError(message, {
|
185
|
+
details: message,
|
186
|
+
}),
|
187
|
+
)
|
188
|
+
}
|
189
|
+
|
190
|
+
const promises: Promise<Hex>[] = []
|
191
|
+
for (const call of calls) {
|
192
|
+
const promise = sendTransaction(client, {
|
193
|
+
account,
|
194
|
+
chain,
|
195
|
+
data: call.data,
|
196
|
+
to: call.to,
|
197
|
+
value: call.value ? hexToBigInt(call.value) : undefined,
|
198
|
+
})
|
199
|
+
promises.push(promise)
|
200
|
+
await new Promise((resolve) => setTimeout(resolve, 32))
|
201
|
+
}
|
202
|
+
const hashes = await Promise.all(promises)
|
203
|
+
return {
|
204
|
+
id: concat([
|
205
|
+
...hashes,
|
206
|
+
numberToHex(chain!.id, { size: 32 }),
|
207
|
+
fallbackMagicIdentifier,
|
208
|
+
]),
|
209
|
+
}
|
210
|
+
}
|
211
|
+
|
137
212
|
throw getTransactionError(err as BaseError, {
|
138
213
|
...parameters,
|
139
214
|
account,
|
package/errors/version.ts
CHANGED
@@ -1 +1 @@
|
|
1
|
-
export const version = '2.
|
1
|
+
export const version = '2.30.0-canary-20250516131545'
|