@bananapus/nana-sdk-core 3.5.1 → 4.0.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/bin/wallet-check.mjs +489 -0
- package/dist/cjs/actions/suckerPairs.d.ts +5 -3
- package/dist/cjs/actions/suckerPairs.d.ts.map +1 -1
- package/dist/cjs/actions/suckerPairs.js +6 -26
- package/dist/cjs/actions/suckerPairs.js.map +1 -1
- package/dist/cjs/pause.d.ts +2 -0
- package/dist/cjs/pause.d.ts.map +1 -1
- package/dist/cjs/pause.js +17 -0
- package/dist/cjs/pause.js.map +1 -1
- package/dist/cjs/review/confirm.d.ts +52 -0
- package/dist/cjs/review/confirm.d.ts.map +1 -0
- package/dist/cjs/review/confirm.js +88 -0
- package/dist/cjs/review/confirm.js.map +1 -0
- package/dist/cjs/review/contractWrite.d.ts +5 -3
- package/dist/cjs/review/contractWrite.d.ts.map +1 -1
- package/dist/cjs/review/contractWrite.js +8 -7
- package/dist/cjs/review/contractWrite.js.map +1 -1
- package/dist/cjs/review/decode.d.ts +19 -1
- package/dist/cjs/review/decode.d.ts.map +1 -1
- package/dist/cjs/review/decode.js +30 -11
- package/dist/cjs/review/decode.js.map +1 -1
- package/dist/cjs/review/decodeCall.d.ts +21 -0
- package/dist/cjs/review/decodeCall.d.ts.map +1 -0
- package/dist/cjs/review/decodeCall.js +183 -0
- package/dist/cjs/review/decodeCall.js.map +1 -0
- package/dist/cjs/review/heldWrite.d.ts.map +1 -1
- package/dist/cjs/review/heldWrite.js +5 -4
- package/dist/cjs/review/heldWrite.js.map +1 -1
- package/dist/cjs/review/index.d.ts +11 -0
- package/dist/cjs/review/index.d.ts.map +1 -1
- package/dist/cjs/review/index.js +24 -0
- package/dist/cjs/review/index.js.map +1 -1
- package/dist/cjs/review/intents.d.ts +10 -0
- package/dist/cjs/review/intents.d.ts.map +1 -1
- package/dist/cjs/review/intents.js +13 -0
- package/dist/cjs/review/intents.js.map +1 -1
- package/dist/cjs/review/lineError.d.ts +34 -0
- package/dist/cjs/review/lineError.d.ts.map +1 -0
- package/dist/cjs/review/lineError.js +42 -0
- package/dist/cjs/review/lineError.js.map +1 -0
- package/dist/cjs/review/messages.d.ts +15 -3
- package/dist/cjs/review/messages.d.ts.map +1 -1
- package/dist/cjs/review/messages.js +16 -4
- package/dist/cjs/review/messages.js.map +1 -1
- package/dist/cjs/review/model.d.ts +149 -0
- package/dist/cjs/review/model.d.ts.map +1 -0
- package/dist/cjs/review/model.js +750 -0
- package/dist/cjs/review/model.js.map +1 -0
- package/dist/cjs/review/plan.d.ts +63 -0
- package/dist/cjs/review/plan.d.ts.map +1 -0
- package/dist/cjs/review/plan.js +149 -0
- package/dist/cjs/review/plan.js.map +1 -0
- package/dist/cjs/review/react/index.d.ts +1 -0
- package/dist/cjs/review/react/index.d.ts.map +1 -1
- package/dist/cjs/review/react/index.js +1 -0
- package/dist/cjs/review/react/index.js.map +1 -1
- package/dist/cjs/review/react/useReviewedRun.d.ts +96 -0
- package/dist/cjs/review/react/useReviewedRun.d.ts.map +1 -0
- package/dist/cjs/review/react/useReviewedRun.js +261 -0
- package/dist/cjs/review/react/useReviewedRun.js.map +1 -0
- package/dist/cjs/review/receipt.d.ts +4 -1
- package/dist/cjs/review/receipt.d.ts.map +1 -1
- package/dist/cjs/review/receipt.js +7 -3
- package/dist/cjs/review/receipt.js.map +1 -1
- package/dist/cjs/review/relayr.d.ts +13 -4
- package/dist/cjs/review/relayr.d.ts.map +1 -1
- package/dist/cjs/review/relayr.js +51 -8
- package/dist/cjs/review/relayr.js.map +1 -1
- package/dist/cjs/review/relayrSend.d.ts +135 -0
- package/dist/cjs/review/relayrSend.d.ts.map +1 -0
- package/dist/cjs/review/relayrSend.js +943 -0
- package/dist/cjs/review/relayrSend.js.map +1 -0
- package/dist/cjs/review/reviewQueue.d.ts +10 -9
- package/dist/cjs/review/reviewQueue.d.ts.map +1 -1
- package/dist/cjs/review/reviewQueue.js +19 -29
- package/dist/cjs/review/reviewQueue.js.map +1 -1
- package/dist/cjs/review/reviewRequests.d.ts +86 -0
- package/dist/cjs/review/reviewRequests.d.ts.map +1 -0
- package/dist/cjs/review/reviewRequests.js +266 -0
- package/dist/cjs/review/reviewRequests.js.map +1 -0
- package/dist/cjs/review/safeRelayr.d.ts +3 -1
- package/dist/cjs/review/safeRelayr.d.ts.map +1 -1
- package/dist/cjs/review/safeRelayr.js +5 -1
- package/dist/cjs/review/safeRelayr.js.map +1 -1
- package/dist/cjs/review/safeSend.d.ts +69 -0
- package/dist/cjs/review/safeSend.d.ts.map +1 -0
- package/dist/cjs/review/safeSend.js +308 -0
- package/dist/cjs/review/safeSend.js.map +1 -0
- package/dist/cjs/review/send.d.ts +241 -0
- package/dist/cjs/review/send.d.ts.map +1 -0
- package/dist/cjs/review/send.js +1017 -0
- package/dist/cjs/review/send.js.map +1 -0
- package/dist/cjs/review/sequence.d.ts +77 -0
- package/dist/cjs/review/sequence.d.ts.map +1 -0
- package/dist/cjs/review/sequence.js +232 -0
- package/dist/cjs/review/sequence.js.map +1 -0
- package/dist/cjs/review/sign.d.ts +109 -0
- package/dist/cjs/review/sign.d.ts.map +1 -0
- package/dist/cjs/review/sign.js +374 -0
- package/dist/cjs/review/sign.js.map +1 -0
- package/dist/cjs/review/simulation.d.ts +41 -2
- package/dist/cjs/review/simulation.d.ts.map +1 -1
- package/dist/cjs/review/simulation.js +99 -29
- package/dist/cjs/review/simulation.js.map +1 -1
- package/dist/cjs/review/transaction-message.d.ts +13 -0
- package/dist/cjs/review/transaction-message.d.ts.map +1 -1
- package/dist/cjs/review/transaction-message.js +25 -0
- package/dist/cjs/review/transaction-message.js.map +1 -1
- package/dist/cjs/review/transactionReview.d.ts +27 -19
- package/dist/cjs/review/transactionReview.d.ts.map +1 -1
- package/dist/cjs/review/transactionReview.js +22 -63
- package/dist/cjs/review/transactionReview.js.map +1 -1
- package/dist/cjs/review/wallet.d.ts +82 -0
- package/dist/cjs/review/wallet.d.ts.map +1 -0
- package/dist/cjs/review/wallet.js +157 -0
- package/dist/cjs/review/wallet.js.map +1 -0
- package/dist/cjs/review/writeHold.d.ts +100 -12
- package/dist/cjs/review/writeHold.d.ts.map +1 -1
- package/dist/cjs/review/writeHold.js +61 -13
- package/dist/cjs/review/writeHold.js.map +1 -1
- package/dist/cjs/review/writeRecovery.d.ts +6 -1
- package/dist/cjs/review/writeRecovery.d.ts.map +1 -1
- package/dist/cjs/review/writeRecovery.js +108 -40
- package/dist/cjs/review/writeRecovery.js.map +1 -1
- package/dist/cjs/safeService.d.ts +27 -4
- package/dist/cjs/safeService.d.ts.map +1 -1
- package/dist/cjs/safeService.js +120 -3
- package/dist/cjs/safeService.js.map +1 -1
- package/dist/cjs/testing.d.ts +24 -0
- package/dist/cjs/testing.d.ts.map +1 -1
- package/dist/cjs/testing.js +26 -1
- package/dist/cjs/testing.js.map +1 -1
- package/dist/cjs/v6/defifa.d.ts.map +1 -1
- package/dist/cjs/v6/defifa.js +24 -23
- package/dist/cjs/v6/defifa.js.map +1 -1
- package/dist/cjs/v6/executionErrors.d.ts.map +1 -1
- package/dist/cjs/v6/executionErrors.js +3 -2
- package/dist/cjs/v6/executionErrors.js.map +1 -1
- package/dist/cjs/v6/pay.d.ts +25 -7
- package/dist/cjs/v6/pay.d.ts.map +1 -1
- package/dist/cjs/v6/pay.js +168 -40
- package/dist/cjs/v6/pay.js.map +1 -1
- package/dist/cjs/v6/suckers.d.ts +30 -0
- package/dist/cjs/v6/suckers.d.ts.map +1 -1
- package/dist/cjs/v6/suckers.js +69 -5
- package/dist/cjs/v6/suckers.js.map +1 -1
- package/dist/esm/actions/suckerPairs.d.ts +5 -3
- package/dist/esm/actions/suckerPairs.d.ts.map +1 -1
- package/dist/esm/actions/suckerPairs.js +7 -27
- package/dist/esm/actions/suckerPairs.js.map +1 -1
- package/dist/esm/pause.d.ts +2 -0
- package/dist/esm/pause.d.ts.map +1 -1
- package/dist/esm/pause.js +16 -0
- package/dist/esm/pause.js.map +1 -1
- package/dist/esm/review/confirm.d.ts +52 -0
- package/dist/esm/review/confirm.d.ts.map +1 -0
- package/dist/esm/review/confirm.js +83 -0
- package/dist/esm/review/confirm.js.map +1 -0
- package/dist/esm/review/contractWrite.d.ts +5 -3
- package/dist/esm/review/contractWrite.d.ts.map +1 -1
- package/dist/esm/review/contractWrite.js +8 -7
- package/dist/esm/review/contractWrite.js.map +1 -1
- package/dist/esm/review/decode.d.ts +19 -1
- package/dist/esm/review/decode.d.ts.map +1 -1
- package/dist/esm/review/decode.js +29 -14
- package/dist/esm/review/decode.js.map +1 -1
- package/dist/esm/review/decodeCall.d.ts +21 -0
- package/dist/esm/review/decodeCall.d.ts.map +1 -0
- package/dist/esm/review/decodeCall.js +180 -0
- package/dist/esm/review/decodeCall.js.map +1 -0
- package/dist/esm/review/heldWrite.d.ts.map +1 -1
- package/dist/esm/review/heldWrite.js +5 -4
- package/dist/esm/review/heldWrite.js.map +1 -1
- package/dist/esm/review/index.d.ts +11 -0
- package/dist/esm/review/index.d.ts.map +1 -1
- package/dist/esm/review/index.js +11 -0
- package/dist/esm/review/index.js.map +1 -1
- package/dist/esm/review/intents.d.ts +10 -0
- package/dist/esm/review/intents.d.ts.map +1 -1
- package/dist/esm/review/intents.js +12 -0
- package/dist/esm/review/intents.js.map +1 -1
- package/dist/esm/review/lineError.d.ts +34 -0
- package/dist/esm/review/lineError.d.ts.map +1 -0
- package/dist/esm/review/lineError.js +36 -0
- package/dist/esm/review/lineError.js.map +1 -0
- package/dist/esm/review/messages.d.ts +15 -3
- package/dist/esm/review/messages.d.ts.map +1 -1
- package/dist/esm/review/messages.js +15 -3
- package/dist/esm/review/messages.js.map +1 -1
- package/dist/esm/review/model.d.ts +149 -0
- package/dist/esm/review/model.d.ts.map +1 -0
- package/dist/esm/review/model.js +746 -0
- package/dist/esm/review/model.js.map +1 -0
- package/dist/esm/review/plan.d.ts +63 -0
- package/dist/esm/review/plan.d.ts.map +1 -0
- package/dist/esm/review/plan.js +141 -0
- package/dist/esm/review/plan.js.map +1 -0
- package/dist/esm/review/react/index.d.ts +1 -0
- package/dist/esm/review/react/index.d.ts.map +1 -1
- package/dist/esm/review/react/index.js +1 -0
- package/dist/esm/review/react/index.js.map +1 -1
- package/dist/esm/review/react/useReviewedRun.d.ts +96 -0
- package/dist/esm/review/react/useReviewedRun.d.ts.map +1 -0
- package/dist/esm/review/react/useReviewedRun.js +257 -0
- package/dist/esm/review/react/useReviewedRun.js.map +1 -0
- package/dist/esm/review/receipt.d.ts +4 -1
- package/dist/esm/review/receipt.d.ts.map +1 -1
- package/dist/esm/review/receipt.js +6 -2
- package/dist/esm/review/receipt.js.map +1 -1
- package/dist/esm/review/relayr.d.ts +13 -4
- package/dist/esm/review/relayr.d.ts.map +1 -1
- package/dist/esm/review/relayr.js +50 -8
- package/dist/esm/review/relayr.js.map +1 -1
- package/dist/esm/review/relayrSend.d.ts +135 -0
- package/dist/esm/review/relayrSend.d.ts.map +1 -0
- package/dist/esm/review/relayrSend.js +934 -0
- package/dist/esm/review/relayrSend.js.map +1 -0
- package/dist/esm/review/reviewQueue.d.ts +10 -9
- package/dist/esm/review/reviewQueue.d.ts.map +1 -1
- package/dist/esm/review/reviewQueue.js +17 -26
- package/dist/esm/review/reviewQueue.js.map +1 -1
- package/dist/esm/review/reviewRequests.d.ts +86 -0
- package/dist/esm/review/reviewRequests.d.ts.map +1 -0
- package/dist/esm/review/reviewRequests.js +263 -0
- package/dist/esm/review/reviewRequests.js.map +1 -0
- package/dist/esm/review/safeRelayr.d.ts +3 -1
- package/dist/esm/review/safeRelayr.d.ts.map +1 -1
- package/dist/esm/review/safeRelayr.js +5 -1
- package/dist/esm/review/safeRelayr.js.map +1 -1
- package/dist/esm/review/safeSend.d.ts +69 -0
- package/dist/esm/review/safeSend.d.ts.map +1 -0
- package/dist/esm/review/safeSend.js +303 -0
- package/dist/esm/review/safeSend.js.map +1 -0
- package/dist/esm/review/send.d.ts +241 -0
- package/dist/esm/review/send.d.ts.map +1 -0
- package/dist/esm/review/send.js +1011 -0
- package/dist/esm/review/send.js.map +1 -0
- package/dist/esm/review/sequence.d.ts +77 -0
- package/dist/esm/review/sequence.d.ts.map +1 -0
- package/dist/esm/review/sequence.js +223 -0
- package/dist/esm/review/sequence.js.map +1 -0
- package/dist/esm/review/sign.d.ts +109 -0
- package/dist/esm/review/sign.d.ts.map +1 -0
- package/dist/esm/review/sign.js +368 -0
- package/dist/esm/review/sign.js.map +1 -0
- package/dist/esm/review/simulation.d.ts +41 -2
- package/dist/esm/review/simulation.d.ts.map +1 -1
- package/dist/esm/review/simulation.js +95 -29
- package/dist/esm/review/simulation.js.map +1 -1
- package/dist/esm/review/transaction-message.d.ts +13 -0
- package/dist/esm/review/transaction-message.d.ts.map +1 -1
- package/dist/esm/review/transaction-message.js +23 -0
- package/dist/esm/review/transaction-message.js.map +1 -1
- package/dist/esm/review/transactionReview.d.ts +27 -19
- package/dist/esm/review/transactionReview.d.ts.map +1 -1
- package/dist/esm/review/transactionReview.js +19 -56
- package/dist/esm/review/transactionReview.js.map +1 -1
- package/dist/esm/review/wallet.d.ts +82 -0
- package/dist/esm/review/wallet.d.ts.map +1 -0
- package/dist/esm/review/wallet.js +150 -0
- package/dist/esm/review/wallet.js.map +1 -0
- package/dist/esm/review/writeHold.d.ts +100 -12
- package/dist/esm/review/writeHold.d.ts.map +1 -1
- package/dist/esm/review/writeHold.js +59 -13
- package/dist/esm/review/writeHold.js.map +1 -1
- package/dist/esm/review/writeRecovery.d.ts +6 -1
- package/dist/esm/review/writeRecovery.d.ts.map +1 -1
- package/dist/esm/review/writeRecovery.js +111 -43
- package/dist/esm/review/writeRecovery.js.map +1 -1
- package/dist/esm/safeService.d.ts +27 -4
- package/dist/esm/safeService.d.ts.map +1 -1
- package/dist/esm/safeService.js +119 -4
- package/dist/esm/safeService.js.map +1 -1
- package/dist/esm/testing.d.ts +24 -0
- package/dist/esm/testing.d.ts.map +1 -1
- package/dist/esm/testing.js +23 -1
- package/dist/esm/testing.js.map +1 -1
- package/dist/esm/v6/defifa.d.ts.map +1 -1
- package/dist/esm/v6/defifa.js +24 -23
- package/dist/esm/v6/defifa.js.map +1 -1
- package/dist/esm/v6/executionErrors.d.ts.map +1 -1
- package/dist/esm/v6/executionErrors.js +3 -2
- package/dist/esm/v6/executionErrors.js.map +1 -1
- package/dist/esm/v6/pay.d.ts +25 -7
- package/dist/esm/v6/pay.d.ts.map +1 -1
- package/dist/esm/v6/pay.js +166 -39
- package/dist/esm/v6/pay.js.map +1 -1
- package/dist/esm/v6/suckers.d.ts +30 -0
- package/dist/esm/v6/suckers.d.ts.map +1 -1
- package/dist/esm/v6/suckers.js +67 -5
- package/dist/esm/v6/suckers.js.map +1 -1
- package/package.json +11 -2
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.TRANSACTION_SIMULATION_MAX_RETURN_BYTES = exports.TRANSACTION_SIMULATION_GAS = void 0;
|
|
3
|
+
exports.SIMULATION_NO_ANSWER_LINE = exports.REVERT_UNKNOWN_LINE = exports.TRANSACTION_SIMULATION_MAX_RETURN_BYTES = exports.TRANSACTION_SIMULATION_GAS = void 0;
|
|
4
4
|
exports.simulateStateChangingTransaction = simulateStateChangingTransaction;
|
|
5
|
+
exports.revertReason = revertReason;
|
|
6
|
+
exports.revertDetail = revertDetail;
|
|
7
|
+
exports.isRevert = isRevert;
|
|
8
|
+
exports.simulationFailure = simulationFailure;
|
|
5
9
|
exports.simulateCallSequence = simulateCallSequence;
|
|
6
10
|
const viem_1 = require("viem");
|
|
11
|
+
const executionErrors_js_1 = require("../v6/executionErrors.js");
|
|
12
|
+
const lineError_js_1 = require("./lineError.js");
|
|
7
13
|
/** A generous explicit gas ceiling for a reviewed state-changing preflight. */
|
|
8
14
|
exports.TRANSACTION_SIMULATION_GAS = 10000000n;
|
|
9
15
|
/** The most return data a preflight hands back to a caller that decodes it. */
|
|
@@ -18,45 +24,99 @@ exports.TRANSACTION_SIMULATION_MAX_RETURN_BYTES = 4_096;
|
|
|
18
24
|
* `blockNumber` to simulate on the block a prerequisite (an approval, say) was
|
|
19
25
|
* mined in, instead of `latest` on a node that may lag behind it.
|
|
20
26
|
*/
|
|
21
|
-
async function simulateStateChangingTransaction(client, { from, to, data, value = 0n, gas = exports.TRANSACTION_SIMULATION_GAS, blockNumber, maxReturnBytes = exports.TRANSACTION_SIMULATION_MAX_RETURN_BYTES, }) {
|
|
27
|
+
async function simulateStateChangingTransaction(client, { from, to, data, value = 0n, gas = exports.TRANSACTION_SIMULATION_GAS, blockNumber, maxReturnBytes = exports.TRANSACTION_SIMULATION_MAX_RETURN_BYTES, balance, }) {
|
|
22
28
|
if (gas <= 0n) {
|
|
23
|
-
throw new
|
|
29
|
+
throw new lineError_js_1.ReviewLineError("Transaction simulation gas must be positive.");
|
|
24
30
|
}
|
|
25
31
|
if (!Number.isSafeInteger(maxReturnBytes) || maxReturnBytes < 0) {
|
|
26
|
-
throw new
|
|
32
|
+
throw new lineError_js_1.ReviewLineError("Transaction simulation needs a return data limit.");
|
|
27
33
|
}
|
|
28
34
|
// A raw request bypasses call()/simulateContract(), whose behavior can
|
|
29
35
|
// inherit a client-level CCIP-read policy.
|
|
36
|
+
const call = {
|
|
37
|
+
from,
|
|
38
|
+
to,
|
|
39
|
+
data,
|
|
40
|
+
value: (0, viem_1.numberToHex)(value),
|
|
41
|
+
gas: (0, viem_1.numberToHex)(gas),
|
|
42
|
+
};
|
|
43
|
+
const block = blockNumber === undefined ? "latest" : (0, viem_1.numberToHex)(blockNumber);
|
|
30
44
|
const result = await client.request({
|
|
31
45
|
method: "eth_call",
|
|
32
|
-
params:
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
to,
|
|
36
|
-
data,
|
|
37
|
-
value: (0, viem_1.numberToHex)(value),
|
|
38
|
-
gas: (0, viem_1.numberToHex)(gas),
|
|
39
|
-
},
|
|
40
|
-
blockNumber === undefined ? "latest" : (0, viem_1.numberToHex)(blockNumber),
|
|
41
|
-
],
|
|
46
|
+
params: balance === undefined
|
|
47
|
+
? [call, block]
|
|
48
|
+
: [call, block, { [from]: { balance: (0, viem_1.numberToHex)(balance) } }],
|
|
42
49
|
});
|
|
43
50
|
if (typeof result !== "string" || !/^0x(?:[0-9a-f]{2})*$/iu.test(result)) {
|
|
44
|
-
throw new
|
|
51
|
+
throw new lineError_js_1.ReviewLineError("Transaction simulation returned malformed data.");
|
|
45
52
|
}
|
|
46
53
|
if ((result.length - 2) / 2 > maxReturnBytes) {
|
|
47
|
-
throw new
|
|
54
|
+
throw new lineError_js_1.ReviewLineError("Transaction simulation returned too much data.");
|
|
48
55
|
}
|
|
49
56
|
return result;
|
|
50
57
|
}
|
|
58
|
+
/** The line for a revert whose reason the SDK does not know. */
|
|
59
|
+
exports.REVERT_UNKNOWN_LINE = "This transaction would fail. Check the amounts and try again.";
|
|
60
|
+
/** The line for a simulation the node did not answer. */
|
|
61
|
+
exports.SIMULATION_NO_ANSWER_LINE = "The node did not answer the simulation.";
|
|
62
|
+
/**
|
|
63
|
+
* Why a call reverted, when the SDK knows the revert: a payment revert's
|
|
64
|
+
* plain line ({@link decodePayFailure}). Null otherwise. Error text (viem's
|
|
65
|
+
* `shortMessage`, a node's message) is never read: it can quote a request or
|
|
66
|
+
* its URL.
|
|
67
|
+
*/
|
|
68
|
+
function revertReason(error) {
|
|
69
|
+
return (0, executionErrors_js_1.decodePayFailure)(error)?.message ?? null;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* A failed simulation's one-line reason: {@link revertReason}, or a fixed
|
|
73
|
+
* line, {@link REVERT_UNKNOWN_LINE} for a revert and
|
|
74
|
+
* {@link SIMULATION_NO_ANSWER_LINE} otherwise. Never the error's own text.
|
|
75
|
+
*/
|
|
51
76
|
function revertDetail(error) {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
77
|
+
return (revertReason(error) ??
|
|
78
|
+
(isRevert(error) ? exports.REVERT_UNKNOWN_LINE : exports.SIMULATION_NO_ANSWER_LINE));
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Whether a failed simulation is the call reverting, not the node failing:
|
|
82
|
+
* EIP-1474 code 3, viem's contract-revert errors, or the node's own text
|
|
83
|
+
* saying it reverted, in the error's first eight causes. A viem error is read
|
|
84
|
+
* by its `details`, since its `message` quotes the request.
|
|
85
|
+
*/
|
|
86
|
+
function isRevert(error) {
|
|
87
|
+
let current = error;
|
|
88
|
+
for (let depth = 0; depth < 8 && current && typeof current === "object"; depth += 1) {
|
|
89
|
+
const item = current;
|
|
90
|
+
if (item.code === 3 ||
|
|
91
|
+
item.name === "ContractFunctionRevertedError" ||
|
|
92
|
+
item.name === "RawContractError" ||
|
|
93
|
+
item.name === "ExecutionRevertedError" ||
|
|
94
|
+
// A failed call that returned no revert data.
|
|
95
|
+
item.name === "ContractFunctionZeroDataError" ||
|
|
96
|
+
item.name === "AbiDecodingZeroDataError") {
|
|
97
|
+
return true;
|
|
98
|
+
}
|
|
99
|
+
// A wrapper that carries its cause (simulateCallSequence's, which names
|
|
100
|
+
// the call) is read through that cause, never by its own text.
|
|
101
|
+
const text = typeof item.details === "string"
|
|
102
|
+
? item.details
|
|
103
|
+
: typeof item.shortMessage === "string" || "cause" in item
|
|
104
|
+
? undefined
|
|
105
|
+
: item.message;
|
|
106
|
+
if (typeof text === "string" && /revert/i.test(text))
|
|
107
|
+
return true;
|
|
108
|
+
current = item.cause;
|
|
56
109
|
}
|
|
57
|
-
return
|
|
58
|
-
|
|
59
|
-
|
|
110
|
+
return false;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* The error a failed simulation throws, with the answer as its cause: the
|
|
114
|
+
* SDK's own line (a {@link ReviewLineError}) for a revert, decoded or not; a
|
|
115
|
+
* plain error, which `errorLine` shows as the network line, for a node that
|
|
116
|
+
* did not answer.
|
|
117
|
+
*/
|
|
118
|
+
function simulationFailure(text, cause) {
|
|
119
|
+
return Object.defineProperty(isRevert(cause) ? new lineError_js_1.ReviewLineError(text) : new Error(text), "cause", { value: cause, configurable: true, writable: true });
|
|
60
120
|
}
|
|
61
121
|
/** Node text saying the method itself is missing: "method not found", "Unsupported method: eth_simulateV1". */
|
|
62
122
|
function namesMissingMethod(text) {
|
|
@@ -98,12 +158,20 @@ function simulationUnsupported(error) {
|
|
|
98
158
|
* {@link simulateStateChangingTransaction}; the dependent ones are left to the
|
|
99
159
|
* executing wallet's own simulation. `chainName` names the chain in errors.
|
|
100
160
|
*/
|
|
101
|
-
async function simulateCallSequence(client, { from, calls, chainName, }) {
|
|
161
|
+
async function simulateCallSequence(client, { from, calls, chainName, balance, }) {
|
|
102
162
|
let sequence;
|
|
103
163
|
try {
|
|
104
164
|
const simulated = await client.simulateCalls({
|
|
105
165
|
account: from,
|
|
106
|
-
calls: calls.map(({ to, data, value }) => ({
|
|
166
|
+
calls: calls.map(({ to, data, value, gas }) => ({
|
|
167
|
+
to,
|
|
168
|
+
data,
|
|
169
|
+
value,
|
|
170
|
+
...(gas === undefined ? {} : { gas }),
|
|
171
|
+
})),
|
|
172
|
+
...(balance === undefined
|
|
173
|
+
? {}
|
|
174
|
+
: { stateOverrides: [{ address: from, balance }] }),
|
|
107
175
|
});
|
|
108
176
|
sequence = simulated.results.map((result) => result.status === "failure"
|
|
109
177
|
? { status: "failure", error: result.error }
|
|
@@ -111,7 +179,7 @@ async function simulateCallSequence(client, { from, calls, chainName, }) {
|
|
|
111
179
|
}
|
|
112
180
|
catch (error) {
|
|
113
181
|
if (!simulationUnsupported(error)) {
|
|
114
|
-
throw
|
|
182
|
+
throw simulationFailure(`The batch could not be simulated on ${chainName}: ${revertDetail(error)}`, error);
|
|
115
183
|
}
|
|
116
184
|
sequence = null;
|
|
117
185
|
}
|
|
@@ -120,9 +188,9 @@ async function simulateCallSequence(client, { from, calls, chainName, }) {
|
|
|
120
188
|
const result = sequence[index];
|
|
121
189
|
if (result?.status === "success")
|
|
122
190
|
continue;
|
|
123
|
-
throw
|
|
191
|
+
throw simulationFailure(`${call.label} cannot run on ${chainName}: ${result?.status === "failure"
|
|
124
192
|
? revertDetail(result.error)
|
|
125
|
-
:
|
|
193
|
+
: exports.SIMULATION_NO_ANSWER_LINE}`, result?.error);
|
|
126
194
|
}
|
|
127
195
|
if (call.dependsOnPrior)
|
|
128
196
|
continue;
|
|
@@ -132,10 +200,12 @@ async function simulateCallSequence(client, { from, calls, chainName, }) {
|
|
|
132
200
|
to: call.to,
|
|
133
201
|
data: call.data,
|
|
134
202
|
value: call.value,
|
|
203
|
+
gas: call.gas,
|
|
204
|
+
...(balance === undefined || !call.funded ? {} : { balance }),
|
|
135
205
|
});
|
|
136
206
|
}
|
|
137
207
|
catch (error) {
|
|
138
|
-
throw
|
|
208
|
+
throw simulationFailure(`${call.label} cannot run on ${chainName}: ${revertDetail(error)}`, error);
|
|
139
209
|
}
|
|
140
210
|
}
|
|
141
211
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"simulation.js","sourceRoot":"","sources":["../../../src/review/simulation.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"simulation.js","sourceRoot":"","sources":["../../../src/review/simulation.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,16 @@
|
|
|
1
|
+
import { ReviewLineError } from "./lineError.js";
|
|
2
|
+
export { ReviewLineError };
|
|
1
3
|
/** Presentation only: saved recovery evidence and original SDK errors stay unchanged. */
|
|
2
4
|
export declare function transactionMessage(message: string): string;
|
|
5
|
+
/** The line for a raw node, RPC or wallet error: its own text can quote a request or its URL. */
|
|
6
|
+
export declare const NETWORK_ERROR_LINE = "The network returned an error. Check your wallet's activity, then try again.";
|
|
7
|
+
/**
|
|
8
|
+
* The line to show for a thrown value: the message of a
|
|
9
|
+
* {@link ReviewLineError} (the SDK's, or a site's own refusal), presented by
|
|
10
|
+
* {@link transactionMessage}; the fixed line an SDK error class carries (its
|
|
11
|
+
* Relayr and Safe refusals, whose text can quote a service); or
|
|
12
|
+
* {@link NETWORK_ERROR_LINE} for anything else (a node, RPC, wallet, service
|
|
13
|
+
* or runtime error, or an app's plain Error). The raw error stays the cause.
|
|
14
|
+
*/
|
|
15
|
+
export declare function errorLine(error: unknown): string;
|
|
3
16
|
//# sourceMappingURL=transaction-message.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transaction-message.d.ts","sourceRoot":"","sources":["../../../src/review/transaction-message.ts"],"names":[],"mappings":"AAAA,yFAAyF;AACzF,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAsB1D"}
|
|
1
|
+
{"version":3,"file":"transaction-message.d.ts","sourceRoot":"","sources":["../../../src/review/transaction-message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEvE,OAAO,EAAE,eAAe,EAAE,CAAC;AAE3B,yFAAyF;AACzF,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAsB1D;AAED,iGAAiG;AACjG,eAAO,MAAM,kBAAkB,iFACiD,CAAC;AAEjF;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAWhD"}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NETWORK_ERROR_LINE = exports.ReviewLineError = void 0;
|
|
3
4
|
exports.transactionMessage = transactionMessage;
|
|
5
|
+
exports.errorLine = errorLine;
|
|
6
|
+
const lineError_js_1 = require("./lineError.js");
|
|
7
|
+
Object.defineProperty(exports, "ReviewLineError", { enumerable: true, get: function () { return lineError_js_1.ReviewLineError; } });
|
|
4
8
|
/** Presentation only: saved recovery evidence and original SDK errors stay unchanged. */
|
|
5
9
|
function transactionMessage(message) {
|
|
6
10
|
const formatted = message
|
|
@@ -16,4 +20,25 @@ function transactionMessage(message) {
|
|
|
16
20
|
? message
|
|
17
21
|
: formatted.replace(/^([a-z])/, (letter) => letter.toUpperCase());
|
|
18
22
|
}
|
|
23
|
+
/** The line for a raw node, RPC or wallet error: its own text can quote a request or its URL. */
|
|
24
|
+
exports.NETWORK_ERROR_LINE = "The network returned an error. Check your wallet's activity, then try again.";
|
|
25
|
+
/**
|
|
26
|
+
* The line to show for a thrown value: the message of a
|
|
27
|
+
* {@link ReviewLineError} (the SDK's, or a site's own refusal), presented by
|
|
28
|
+
* {@link transactionMessage}; the fixed line an SDK error class carries (its
|
|
29
|
+
* Relayr and Safe refusals, whose text can quote a service); or
|
|
30
|
+
* {@link NETWORK_ERROR_LINE} for anything else (a node, RPC, wallet, service
|
|
31
|
+
* or runtime error, or an app's plain Error). The raw error stays the cause.
|
|
32
|
+
*/
|
|
33
|
+
function errorLine(error) {
|
|
34
|
+
if (error instanceof lineError_js_1.ReviewLineError)
|
|
35
|
+
return transactionMessage(error.message);
|
|
36
|
+
// Marked by its class, never by its own fields, so a plain error cannot pose as one.
|
|
37
|
+
const fixed = error instanceof lineError_js_1.ReviewFixedLineError ||
|
|
38
|
+
(error instanceof Error &&
|
|
39
|
+
!Object.prototype.hasOwnProperty.call(error, "reviewFixedLine") &&
|
|
40
|
+
error.reviewFixedLine === true);
|
|
41
|
+
const line = fixed ? error.line : undefined;
|
|
42
|
+
return typeof line === "string" ? line : exports.NETWORK_ERROR_LINE;
|
|
43
|
+
}
|
|
19
44
|
//# sourceMappingURL=transaction-message.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transaction-message.js","sourceRoot":"","sources":["../../../src/review/transaction-message.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"transaction-message.js","sourceRoot":"","sources":["../../../src/review/transaction-message.ts"],"names":[],"mappings":";;;AAKA,gDAsBC;AAcD,8BAWC;AApDD,iDAAuE;AAE9D,gGAFsB,8BAAe,OAEtB;AAExB,yFAAyF;AACzF,SAAgB,kBAAkB,CAAC,OAAe;IAChD,MAAM,SAAS,GAAG,OAAO;SACtB,OAAO,CACN,6EAA6E,EAC7E,+BAA+B,CAChC;SACA,OAAO,CACN,2BAA2B,EAC3B,wCAAwC,CACzC;SACA,OAAO,CAAC,yBAAyB,EAAE,sCAAsC,CAAC;SAC1E,OAAO,CAAC,uBAAuB,EAAE,UAAU,CAAC;SAC5C,OAAO,CAAC,4BAA4B,EAAE,KAAK,CAAC;SAC5C,OAAO,CACN,0NAA0N,EAC1N,EAAE,CACH;SACA,OAAO,CAAC,oBAAoB,EAAE,MAAM,CAAC;SACrC,OAAO,CAAC,mCAAmC,EAAE,aAAa,CAAC,CAAC;IAC/D,OAAO,SAAS,KAAK,OAAO;QAC1B,CAAC,CAAC,OAAO;QACT,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;AACtE,CAAC;AAED,iGAAiG;AACpF,QAAA,kBAAkB,GAC7B,8EAA8E,CAAC;AAEjF;;;;;;;GAOG;AACH,SAAgB,SAAS,CAAC,KAAc;IACtC,IAAI,KAAK,YAAY,8BAAe;QAClC,OAAO,kBAAkB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC3C,qFAAqF;IACrF,MAAM,KAAK,GACT,KAAK,YAAY,mCAAoB;QACrC,CAAC,KAAK,YAAY,KAAK;YACrB,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,iBAAiB,CAAC;YAC9D,KAAuC,CAAC,eAAe,KAAK,IAAI,CAAC,CAAC;IACvE,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,KAA4B,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IACpE,OAAO,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,0BAAkB,CAAC;AAC9D,CAAC"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { type Abi, type Address, type Hex } from "viem";
|
|
2
|
+
import type { PrettyStep } from "./decode.js";
|
|
3
|
+
import type { ReviewContextRow, ReviewModel } from "./model.js";
|
|
2
4
|
export type { FundingChainOption } from "./reviewQueue.js";
|
|
3
|
-
export { registerFundingChainSelectionHandler,
|
|
5
|
+
export { registerFundingChainSelectionHandler, requireFundingChainSelection, TransactionReviewCancelledError, } from "./reviewQueue.js";
|
|
4
6
|
/**
|
|
5
7
|
* How review prompts name a chain and link its explorer. Apps pass their own
|
|
6
8
|
* chain display, which also keeps a chain table out of the review bundle.
|
|
@@ -28,9 +30,29 @@ export type TransactionReviewCall = {
|
|
|
28
30
|
contractName?: string;
|
|
29
31
|
/** The calls a batching destination (MultiSend) makes in order, decoded by the caller. */
|
|
30
32
|
calls?: readonly TransactionReviewCall[];
|
|
33
|
+
/** For a Safe proposal: the arg indexes a queued proposal it adopts may differ in. */
|
|
34
|
+
adoptIgnoringArgs?: readonly number[];
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* A signature the action asks for: the exact typed data or text the wallet
|
|
38
|
+
* signs, and what it lets run.
|
|
39
|
+
*/
|
|
40
|
+
export type TransactionReviewSignature = {
|
|
41
|
+
kind: "safe-tx" | "forward-request" | "permit2" | "message";
|
|
42
|
+
chainId: number;
|
|
43
|
+
/** The exact EIP-712 typed data, for every kind but a message. */
|
|
44
|
+
typedData?: unknown;
|
|
45
|
+
/** The exact text, for a message. */
|
|
46
|
+
message?: string;
|
|
47
|
+
/** The calls the signature lets someone run, decoded. */
|
|
48
|
+
calls?: readonly TransactionReviewCall[];
|
|
49
|
+
/** What it authorizes, in rows (Permit2's token, amount, spender and expiry). */
|
|
50
|
+
steps?: readonly PrettyStep[];
|
|
31
51
|
};
|
|
32
52
|
export type TransactionReviewRequest = {
|
|
33
53
|
calls: readonly TransactionReviewCall[];
|
|
54
|
+
/** Signed after confirm, before the first call is sent. */
|
|
55
|
+
signatures?: readonly TransactionReviewSignature[];
|
|
34
56
|
title?: string;
|
|
35
57
|
description?: string;
|
|
36
58
|
confirmLabel?: string;
|
|
@@ -38,26 +60,11 @@ export type TransactionReviewRequest = {
|
|
|
38
60
|
kind?: "transaction" | "authorization";
|
|
39
61
|
/** Exact typed data committed by a Safe/relayer signature, when applicable. */
|
|
40
62
|
authorization?: unknown;
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
chainId: number;
|
|
44
|
-
address: Address;
|
|
45
|
-
abi: Abi;
|
|
46
|
-
functionName: string;
|
|
47
|
-
args?: readonly unknown[];
|
|
48
|
-
value?: bigint;
|
|
49
|
-
gas?: bigint;
|
|
50
|
-
safeTxGas?: bigint;
|
|
51
|
-
account?: Address;
|
|
52
|
-
};
|
|
53
|
-
export type TransactionReviewOptions = Omit<TransactionReviewRequest, "calls"> & {
|
|
54
|
-
label?: string;
|
|
55
|
-
contractName?: string;
|
|
63
|
+
/** The site's summary rows, shown first. Display only: never part of a call. */
|
|
64
|
+
context?: readonly ReviewContextRow[];
|
|
56
65
|
};
|
|
57
66
|
/** "Base (~0.000123 ETH)": a chain and the relay fee quoted on it. */
|
|
58
67
|
export declare function fundingChainLabel(chainName: string, amountWei: bigint): string;
|
|
59
|
-
export declare function requestContractTransactionReview(call: ContractTransactionReviewCall, options?: TransactionReviewOptions): Promise<boolean>;
|
|
60
|
-
export declare function requireContractTransactionReview(call: ContractTransactionReviewCall, options?: TransactionReviewOptions): Promise<void>;
|
|
61
68
|
export declare function transactionReviewJson(request: TransactionReviewRequest): string;
|
|
62
69
|
/**
|
|
63
70
|
* The post-transaction counterpart of the review prompt: a mined tx the user
|
|
@@ -69,5 +76,6 @@ export declare function buildTransactionDebugPrompt(calls: {
|
|
|
69
76
|
chainId: number;
|
|
70
77
|
txHash: string;
|
|
71
78
|
}[], { chainName: displayChainName, explorerOrigin }: TransactionReviewDisplay): string;
|
|
72
|
-
|
|
79
|
+
/** The audit prompt for a request, or for the model core built from one (its `rawJson` is the same payload). */
|
|
80
|
+
export declare function buildTransactionReviewPrompt(request: TransactionReviewRequest | ReviewModel, { explorerOrigin }: Pick<TransactionReviewDisplay, "explorerOrigin">): string;
|
|
73
81
|
//# sourceMappingURL=transactionReview.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transactionReview.d.ts","sourceRoot":"","sources":["../../../src/review/transactionReview.ts"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"transactionReview.d.ts","sourceRoot":"","sources":["../../../src/review/transactionReview.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,21 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
"use client";
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.TransactionReviewCancelledError = exports.
|
|
4
|
+
exports.TransactionReviewCancelledError = exports.requireFundingChainSelection = exports.registerFundingChainSelectionHandler = void 0;
|
|
5
5
|
exports.fundingChainLabel = fundingChainLabel;
|
|
6
|
-
exports.requestContractTransactionReview = requestContractTransactionReview;
|
|
7
|
-
exports.requireContractTransactionReview = requireContractTransactionReview;
|
|
8
6
|
exports.transactionReviewJson = transactionReviewJson;
|
|
9
7
|
exports.buildTransactionDebugPrompt = buildTransactionDebugPrompt;
|
|
10
8
|
exports.buildTransactionReviewPrompt = buildTransactionReviewPrompt;
|
|
11
9
|
const viem_1 = require("viem");
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
Object.defineProperty(exports, "
|
|
15
|
-
Object.defineProperty(exports, "
|
|
16
|
-
Object.defineProperty(exports, "requireFundingChainSelection", { enumerable: true, get: function () { return reviewQueue_js_2.requireFundingChainSelection; } });
|
|
17
|
-
Object.defineProperty(exports, "requireTransactionReview", { enumerable: true, get: function () { return reviewQueue_js_2.requireTransactionReview; } });
|
|
18
|
-
Object.defineProperty(exports, "TransactionReviewCancelledError", { enumerable: true, get: function () { return reviewQueue_js_2.TransactionReviewCancelledError; } });
|
|
10
|
+
var reviewQueue_js_1 = require("./reviewQueue.js");
|
|
11
|
+
Object.defineProperty(exports, "registerFundingChainSelectionHandler", { enumerable: true, get: function () { return reviewQueue_js_1.registerFundingChainSelectionHandler; } });
|
|
12
|
+
Object.defineProperty(exports, "requireFundingChainSelection", { enumerable: true, get: function () { return reviewQueue_js_1.requireFundingChainSelection; } });
|
|
13
|
+
Object.defineProperty(exports, "TransactionReviewCancelledError", { enumerable: true, get: function () { return reviewQueue_js_1.TransactionReviewCancelledError; } });
|
|
19
14
|
/** "Base (~0.000123 ETH)": a chain and the relay fee quoted on it. */
|
|
20
15
|
function fundingChainLabel(chainName, amountWei) {
|
|
21
16
|
const exact = (0, viem_1.formatEther)(amountWei);
|
|
@@ -24,54 +19,6 @@ function fundingChainLabel(chainName, amountWei) {
|
|
|
24
19
|
}).format(Number(exact));
|
|
25
20
|
return `${chainName} (${shown === exact ? "" : "~"}${shown} ETH)`;
|
|
26
21
|
}
|
|
27
|
-
/** Encode once for review using the same ABI/function/args passed to wagmi. */
|
|
28
|
-
function contractCallForReview(call, options = {}) {
|
|
29
|
-
const data = (0, viem_1.encodeFunctionData)({
|
|
30
|
-
abi: call.abi,
|
|
31
|
-
functionName: call.functionName,
|
|
32
|
-
args: call.args,
|
|
33
|
-
});
|
|
34
|
-
return {
|
|
35
|
-
chainId: call.chainId,
|
|
36
|
-
to: call.address,
|
|
37
|
-
data,
|
|
38
|
-
value: call.value,
|
|
39
|
-
gas: call.gas,
|
|
40
|
-
safeTxGas: call.safeTxGas,
|
|
41
|
-
from: call.account,
|
|
42
|
-
abi: call.abi,
|
|
43
|
-
functionName: call.functionName,
|
|
44
|
-
args: call.args,
|
|
45
|
-
label: options.label,
|
|
46
|
-
contractName: options.contractName,
|
|
47
|
-
};
|
|
48
|
-
}
|
|
49
|
-
function requestContractTransactionReview(call, options = {}) {
|
|
50
|
-
const { label, contractName, ...requestOptions } = options;
|
|
51
|
-
const reviewed = contractCallForReview(call, { label, contractName });
|
|
52
|
-
return (0, reviewQueue_js_1.requestTransactionReview)({
|
|
53
|
-
...requestOptions,
|
|
54
|
-
calls: [reviewed],
|
|
55
|
-
}).then((approved) => {
|
|
56
|
-
if (!approved)
|
|
57
|
-
return false;
|
|
58
|
-
const current = contractCallForReview(call, { label, contractName });
|
|
59
|
-
if (current.chainId !== reviewed.chainId ||
|
|
60
|
-
current.to.toLowerCase() !== reviewed.to.toLowerCase() ||
|
|
61
|
-
(current.value ?? 0n) !== (reviewed.value ?? 0n) ||
|
|
62
|
-
current.gas !== reviewed.gas ||
|
|
63
|
-
current.safeTxGas !== reviewed.safeTxGas ||
|
|
64
|
-
current.data !== reviewed.data) {
|
|
65
|
-
throw new Error("Transaction data changed after review. Nothing was sent; review it again.");
|
|
66
|
-
}
|
|
67
|
-
return true;
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
async function requireContractTransactionReview(call, options = {}) {
|
|
71
|
-
if (!(await requestContractTransactionReview(call, options))) {
|
|
72
|
-
throw new reviewQueue_js_1.TransactionReviewCancelledError();
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
22
|
function transactionReviewJson(request) {
|
|
76
23
|
const transactions = request.calls.map((call) => ({
|
|
77
24
|
chainId: call.chainId,
|
|
@@ -85,10 +32,20 @@ function transactionReviewJson(request) {
|
|
|
85
32
|
data: call.data,
|
|
86
33
|
}));
|
|
87
34
|
const calls = transactions.length === 1 ? transactions[0] : { transactions };
|
|
88
|
-
const
|
|
89
|
-
?
|
|
90
|
-
|
|
91
|
-
|
|
35
|
+
const signatures = request.signatures?.map((signature) => signature.typedData === undefined
|
|
36
|
+
? { message: signature.message }
|
|
37
|
+
: { typedData: signature.typedData });
|
|
38
|
+
const { authorization } = request;
|
|
39
|
+
const payload = signatures?.length || authorization
|
|
40
|
+
? {
|
|
41
|
+
...(signatures?.length ? { signatures } : {}),
|
|
42
|
+
...(authorization ? { authorization } : {}),
|
|
43
|
+
...(transactions.length === 0
|
|
44
|
+
? {}
|
|
45
|
+
: signatures?.length
|
|
46
|
+
? { calls }
|
|
47
|
+
: { resultingCall: calls }),
|
|
48
|
+
}
|
|
92
49
|
: calls;
|
|
93
50
|
return JSON.stringify(payload, (_, value) => (typeof value === "bigint" ? value.toString() : value), 2);
|
|
94
51
|
}
|
|
@@ -112,13 +69,15 @@ function buildTransactionDebugPrompt(calls, { chainName: displayChainName, explo
|
|
|
112
69
|
lines.push("", "If your agent has Etherscan's skills installed (`npx skills add etherscan/skills`), use `etherscan-transaction-debugger` in security mode on each hash. Otherwise work from the explorer page: receipt status, decoded input, event logs, and internal transactions.", "", "Verify contract source only against the Juicebox V6 repositories: https://github.com/Bananapus/version-6 (repositories ending in `-v6`; same-named repositories without that suffix are older versions).", "", "Report the decoded method and arguments, every native and token movement with its recipient, every permission, ownership, or ruleset change, and, if it reverted, the narrowest root cause the evidence supports. Mark each claim observed, derived, or inferred. Never invent a function name, amount, or revert reason. End with one line: what the transaction did in plain English, and anything that looks wrong.");
|
|
113
70
|
return lines.join("\n");
|
|
114
71
|
}
|
|
72
|
+
/** The audit prompt for a request, or for the model core built from one (its `rawJson` is the same payload). */
|
|
115
73
|
function buildTransactionReviewPrompt(request, { explorerOrigin }) {
|
|
74
|
+
const payload = "rawJson" in request ? request.rawJson : transactionReviewJson(request);
|
|
116
75
|
const lines = [
|
|
117
76
|
"I'm about to authorize a blockchain action in a Juicebox V6 app (the nana V6 / revnet V6 protocol release, not an older Juicebox version). Act as a careful security reviewer. Independently verify the payload against the deployed contracts and V6 source, confirm it matches my intent, and give a go/no-go. Assume the UI could be spoofed; trust the onchain call and verified V6 source over the page.",
|
|
118
77
|
"",
|
|
119
78
|
"Exact app-controlled transaction payload:",
|
|
120
79
|
"```json",
|
|
121
|
-
|
|
80
|
+
payload,
|
|
122
81
|
"```",
|
|
123
82
|
"",
|
|
124
83
|
];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transactionReview.js","sourceRoot":"","sources":["../../../src/review/transactionReview.ts"],"names":[],"mappings":";AAAA,YAAY,CAAC;;;
|
|
1
|
+
{"version":3,"file":"transactionReview.js","sourceRoot":"","sources":["../../../src/review/transactionReview.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import type { Address, Hex, TypedDataDefinition, WalletClient } from "viem";
|
|
2
|
+
/** The raw calls a self-reviewing wallet (Signa) decodes and confirms on its own page. */
|
|
3
|
+
export type SelfReviewedRequest = {
|
|
4
|
+
account: Address;
|
|
5
|
+
calls: readonly {
|
|
6
|
+
chainId: number;
|
|
7
|
+
to: Address;
|
|
8
|
+
data: Hex;
|
|
9
|
+
value: bigint;
|
|
10
|
+
/** The exact gas limit the app fixed for the call, when it did. */
|
|
11
|
+
gas?: bigint;
|
|
12
|
+
}[];
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* The wallet as core sees it. This file is the only core code that calls a
|
|
16
|
+
* wallet; `sendReviewed` reaches it only through an adapter, after the review
|
|
17
|
+
* is confirmed. A `self-reviewing` adapter shows its own review and takes raw
|
|
18
|
+
* calls through `submitToReviewer` only.
|
|
19
|
+
*/
|
|
20
|
+
export type WalletAdapter = {
|
|
21
|
+
/**
|
|
22
|
+
* Settles once `kind` and `isSafe` can be trusted (Safe{Wallet} over
|
|
23
|
+
* WalletConnect is known only once its peer metadata settles). Core awaits
|
|
24
|
+
* it, bounded, before reading them; a rejection or timeout sends nothing.
|
|
25
|
+
* It may be called more than once.
|
|
26
|
+
*/
|
|
27
|
+
ready?(): Promise<void>;
|
|
28
|
+
kind: "wallet" | "self-reviewing";
|
|
29
|
+
account(): Address | undefined;
|
|
30
|
+
chainId(): number | undefined;
|
|
31
|
+
isSafe(): boolean;
|
|
32
|
+
switchChain(chainId: number): Promise<void>;
|
|
33
|
+
sendTransaction(tx: {
|
|
34
|
+
chainId: number;
|
|
35
|
+
to: Address;
|
|
36
|
+
data: Hex;
|
|
37
|
+
value: bigint;
|
|
38
|
+
gas?: bigint;
|
|
39
|
+
}): Promise<Hex>;
|
|
40
|
+
signTypedData(typedData: TypedDataDefinition): Promise<Hex>;
|
|
41
|
+
signMessage(message: string): Promise<Hex>;
|
|
42
|
+
sendCalls?(chainId: number, calls: readonly {
|
|
43
|
+
to: Address;
|
|
44
|
+
data: Hex;
|
|
45
|
+
value: bigint;
|
|
46
|
+
}[]): Promise<string>;
|
|
47
|
+
/** Self-reviewing adapters only. */
|
|
48
|
+
submitToReviewer?(request: SelfReviewedRequest): Promise<Hex>;
|
|
49
|
+
};
|
|
50
|
+
export declare const WALLET_NOT_READY_LINE = "Your wallet's connection could not be confirmed. Nothing was sent; try again.";
|
|
51
|
+
/**
|
|
52
|
+
* Awaits `adapter.ready`, at most {@link WALLET_READY_MS}. A rejection or
|
|
53
|
+
* timeout throws {@link WALLET_NOT_READY_LINE}: the wallet is never taken
|
|
54
|
+
* for a plain one it may not be.
|
|
55
|
+
*/
|
|
56
|
+
export declare function walletReady(adapter: WalletAdapter): Promise<void>;
|
|
57
|
+
/**
|
|
58
|
+
* A {@link WalletAdapter} over a viem wallet client (wagmi's, say). Every
|
|
59
|
+
* write and signature names the connected account read when it is asked,
|
|
60
|
+
* and every send names its chain, so a wallet that moved refuses it.
|
|
61
|
+
*/
|
|
62
|
+
export declare function viemWalletAdapter(options: {
|
|
63
|
+
walletClient: () => Promise<WalletClient>;
|
|
64
|
+
account: () => Address | undefined;
|
|
65
|
+
chainId: () => number | undefined;
|
|
66
|
+
isSafe: () => boolean;
|
|
67
|
+
switchChain: (chainId: number) => Promise<unknown>;
|
|
68
|
+
/** Settles once `isSafe` is known (see {@link WalletAdapter.ready}). */
|
|
69
|
+
ready?: () => Promise<unknown>;
|
|
70
|
+
}): WalletAdapter;
|
|
71
|
+
/** EIP-1193 4200, as Signa's connector refuses a request it does not take. */
|
|
72
|
+
export declare function unsupportedWalletRequest(): Error;
|
|
73
|
+
/**
|
|
74
|
+
* A {@link WalletAdapter} for a wallet that reviews on its own page (Signa).
|
|
75
|
+
* It takes raw calls through `submit` only; every other method is refused
|
|
76
|
+
* with EIP-1193 4200.
|
|
77
|
+
*/
|
|
78
|
+
export declare function selfReviewingAdapter(options: {
|
|
79
|
+
account: () => Address | undefined;
|
|
80
|
+
submit: (request: SelfReviewedRequest) => Promise<Hex>;
|
|
81
|
+
}): WalletAdapter;
|
|
82
|
+
//# sourceMappingURL=wallet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../../src/review/wallet.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,OAAO,EAEP,GAAG,EACH,mBAAmB,EACnB,YAAY,EACb,MAAM,MAAM,CAAC;AAGd,0FAA0F;AAC1F,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,SAAS;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,EAAE,EAAE,OAAO,CAAC;QACZ,IAAI,EAAE,GAAG,CAAC;QACV,KAAK,EAAE,MAAM,CAAC;QACd,mEAAmE;QACnE,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,EAAE,CAAC;CACL,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B;;;;;OAKG;IACH,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,IAAI,EAAE,QAAQ,GAAG,gBAAgB,CAAC;IAClC,OAAO,IAAI,OAAO,GAAG,SAAS,CAAC;IAC/B,OAAO,IAAI,MAAM,GAAG,SAAS,CAAC;IAC9B,MAAM,IAAI,OAAO,CAAC;IAClB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,eAAe,CAAC,EAAE,EAAE;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,EAAE,EAAE,OAAO,CAAC;QACZ,IAAI,EAAE,GAAG,CAAC;QACV,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACjB,aAAa,CAAC,SAAS,EAAE,mBAAmB,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC5D,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC3C,SAAS,CAAC,CACR,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,SAAS;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,GAAG,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,GAC1D,OAAO,CAAC,MAAM,CAAC,CAAC;IACnB,oCAAoC;IACpC,gBAAgB,CAAC,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;CAC/D,CAAC;AAKF,eAAO,MAAM,qBAAqB,kFAC+C,CAAC;AAElF;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAYvE;AAsDD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE;IACzC,YAAY,EAAE,MAAM,OAAO,CAAC,YAAY,CAAC,CAAC;IAC1C,OAAO,EAAE,MAAM,OAAO,GAAG,SAAS,CAAC;IACnC,OAAO,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IAClC,MAAM,EAAE,MAAM,OAAO,CAAC;IACtB,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACnD,wEAAwE;IACxE,KAAK,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;CAChC,GAAG,aAAa,CAyDhB;AAED,8EAA8E;AAC9E,wBAAgB,wBAAwB,IAAI,KAAK,CAOhD;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE;IAC5C,OAAO,EAAE,MAAM,OAAO,GAAG,SAAS,CAAC;IACnC,MAAM,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;CACxD,GAAG,aAAa,CAgBhB"}
|