@safe-global/protocol-kit 7.0.0 → 7.2.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/dist/cjs/src/index.cjs +125 -17
- package/dist/cjs/test-utils/index.cjs +14 -1
- package/dist/esm/src/index.mjs +144 -32
- package/dist/esm/test-utils/index.mjs +20 -3
- package/dist/src/index.d.ts +4 -3
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/utils/eip-3770/config.d.ts.map +1 -1
- package/dist/src/utils/eip-3770/index.d.ts +1 -0
- package/dist/src/utils/eip-3770/index.d.ts.map +1 -1
- package/dist/src/utils/safeVersions.d.ts +2 -2
- package/dist/src/utils/safeVersions.d.ts.map +1 -1
- package/dist/src/utils/transactions/gas.d.ts.map +1 -1
- package/package.json +3 -3
package/dist/cjs/src/index.cjs
CHANGED
|
@@ -48,11 +48,15 @@ __export(src_exports, {
|
|
|
48
48
|
MultiSendCallOnlyBaseContract: () => MultiSendCallOnlyBaseContract_default,
|
|
49
49
|
PREDETERMINED_SALT_NONCE: () => PREDETERMINED_SALT_NONCE,
|
|
50
50
|
SafeBaseContract: () => SafeBaseContract_default,
|
|
51
|
+
SafeFeature: () => SafeFeature,
|
|
51
52
|
SafeProvider: () => SafeProvider_default,
|
|
52
53
|
SafeProxyFactoryBaseContract: () => SafeProxyFactoryBaseContract_default,
|
|
53
54
|
SignMessageLibBaseContract: () => SignMessageLibBaseContract_default,
|
|
55
|
+
adjustVInSignature: () => adjustVInSignature,
|
|
54
56
|
buildContractSignature: () => buildContractSignature,
|
|
55
57
|
buildSignatureBytes: () => buildSignatureBytes,
|
|
58
|
+
calculateSafeMessageHash: () => calculateSafeMessageHash,
|
|
59
|
+
calculateSafeTransactionHash: () => calculateSafeTransactionHash,
|
|
56
60
|
createERC20TokenTransferTransaction: () => createERC20TokenTransferTransaction,
|
|
57
61
|
createPasskeyClient: () => createPasskeyClient,
|
|
58
62
|
decodeMultiSendData: () => decodeMultiSendData,
|
|
@@ -67,11 +71,14 @@ __export(src_exports, {
|
|
|
67
71
|
extractPasskeyData: () => extractPasskeyData,
|
|
68
72
|
generateEIP712Signature: () => generateEIP712Signature,
|
|
69
73
|
generateOnChainIdentifier: () => generateOnChainIdentifier_default,
|
|
74
|
+
generatePreValidatedSignature: () => generatePreValidatedSignature,
|
|
70
75
|
generateSignature: () => generateSignature,
|
|
71
76
|
generateTypedData: () => generateTypedData,
|
|
77
|
+
getChainIdFromEip3770NetworkPrefix: () => getChainIdFromEip3770NetworkPrefix,
|
|
72
78
|
getCompatibilityFallbackHandlerContract: () => getCompatibilityFallbackHandlerContract,
|
|
73
79
|
getCreateCallContract: () => getCreateCallContract,
|
|
74
80
|
getERC20Decimals: () => getERC20Decimals,
|
|
81
|
+
getEip3770NetworkPrefixFromChainId: () => getEip3770NetworkPrefixFromChainId,
|
|
75
82
|
getEip712MessageTypes: () => getEip712MessageTypes,
|
|
76
83
|
getEip712TxTypes: () => getEip712TxTypes,
|
|
77
84
|
getExtensibleFallbackHandlerContract: () => getExtensibleFallbackHandlerContract,
|
|
@@ -86,6 +93,7 @@ __export(src_exports, {
|
|
|
86
93
|
getSafeWebAuthnSharedSignerContract: () => getSafeWebAuthnSharedSignerContract,
|
|
87
94
|
getSafeWebAuthnSignerFactoryContract: () => getSafeWebAuthnSignerFactoryContract,
|
|
88
95
|
getSignMessageLibContract: () => getSignMessageLibContract,
|
|
96
|
+
hasSafeFeature: () => hasSafeFeature,
|
|
89
97
|
hashSafeMessage: () => hashSafeMessage,
|
|
90
98
|
isGasTokenCompatibleWithHandlePayment: () => isGasTokenCompatibleWithHandlePayment,
|
|
91
99
|
predictSafeAddress: () => predictSafeAddress,
|
|
@@ -479,12 +487,15 @@ var networks = [
|
|
|
479
487
|
{ chainId: 4061n, shortName: "Nahmii3Mainnet" },
|
|
480
488
|
{ chainId: 4062n, shortName: "Nahmii3Testnet" },
|
|
481
489
|
{ chainId: 4078n, shortName: "muster" },
|
|
490
|
+
{ chainId: 4153n, shortName: "rise" },
|
|
482
491
|
{ chainId: 4157n, shortName: "crossfi-testnet" },
|
|
483
492
|
{ chainId: 4158n, shortName: "crossfi" },
|
|
484
493
|
{ chainId: 4162n, shortName: "SXR" },
|
|
485
494
|
{ chainId: 4202n, shortName: "lisksep" },
|
|
495
|
+
{ chainId: 4217n, shortName: "tempo" },
|
|
486
496
|
{ chainId: 4326n, shortName: "megaeth" },
|
|
487
497
|
{ chainId: 4337n, shortName: "beam" },
|
|
498
|
+
{ chainId: 4441n, shortName: "liteforge" },
|
|
488
499
|
{ chainId: 4460n, shortName: "orderlyl2" },
|
|
489
500
|
{ chainId: 4488n, shortName: "HYDRA" },
|
|
490
501
|
{ chainId: 4509n, shortName: "SC" },
|
|
@@ -532,6 +543,7 @@ var networks = [
|
|
|
532
543
|
{ chainId: 7700n, shortName: "canto" },
|
|
533
544
|
{ chainId: 7771n, shortName: "tbitrock" },
|
|
534
545
|
{ chainId: 7897n, shortName: "arena-z" },
|
|
546
|
+
{ chainId: 7979n, shortName: "dos" },
|
|
535
547
|
{ chainId: 8008n, shortName: "polynomial" },
|
|
536
548
|
{ chainId: 8150n, shortName: "alpen" },
|
|
537
549
|
{ chainId: 8192n, shortName: "tqf" },
|
|
@@ -599,12 +611,14 @@ var networks = [
|
|
|
599
611
|
{ chainId: 23295n, shortName: "sapphire-testnet" },
|
|
600
612
|
{ chainId: 24101n, shortName: "incentiv" },
|
|
601
613
|
{ chainId: 25327n, shortName: "Everclear" },
|
|
614
|
+
{ chainId: 25363n, shortName: "fluent" },
|
|
602
615
|
{ chainId: 26888n, shortName: "tABCore" },
|
|
603
616
|
{ chainId: 28802n, shortName: "tcent" },
|
|
604
617
|
{ chainId: 28882n, shortName: "BobaSepolia" },
|
|
605
618
|
{ chainId: 28979n, shortName: "kimbonet-testnet" },
|
|
606
619
|
{ chainId: 30303n, shortName: "Ethiq" },
|
|
607
|
-
{ chainId: 31611n, shortName: "mezo" },
|
|
620
|
+
{ chainId: 31611n, shortName: "mezo-testnet" },
|
|
621
|
+
{ chainId: 31612n, shortName: "mezo" },
|
|
608
622
|
{ chainId: 32323n, shortName: "basedai" },
|
|
609
623
|
{ chainId: 32380n, shortName: "paix" },
|
|
610
624
|
{ chainId: 32769n, shortName: "zil" },
|
|
@@ -634,6 +648,7 @@ var networks = [
|
|
|
634
648
|
{ chainId: 43419n, shortName: "gunz-mainnet" },
|
|
635
649
|
{ chainId: 44787n, shortName: "alfa" },
|
|
636
650
|
{ chainId: 45000n, shortName: "autobahnnetwork" },
|
|
651
|
+
{ chainId: 46630n, shortName: "robinhoodchaintestnet" },
|
|
637
652
|
{ chainId: 47763n, shortName: "neox-mainnet" },
|
|
638
653
|
{ chainId: 47805n, shortName: "rei" },
|
|
639
654
|
{ chainId: 48898n, shortName: "zircuit-garfield-testnet" },
|
|
@@ -683,10 +698,12 @@ var networks = [
|
|
|
683
698
|
{ chainId: 90001n, shortName: "dhobyghaut" },
|
|
684
699
|
{ chainId: 91342n, shortName: "giwasepolia" },
|
|
685
700
|
{ chainId: 97435n, shortName: "sling" },
|
|
701
|
+
{ chainId: 97476n, shortName: "doma-testnet" },
|
|
686
702
|
{ chainId: 98864n, shortName: "plume-devnet" },
|
|
687
703
|
{ chainId: 98865n, shortName: "plume" },
|
|
688
704
|
{ chainId: 98866n, shortName: "plume-mainnet" },
|
|
689
705
|
{ chainId: 98867n, shortName: "plume-testnet" },
|
|
706
|
+
{ chainId: 98875n, shortName: "nil" },
|
|
690
707
|
{ chainId: 98985n, shortName: "superposition-testnet" },
|
|
691
708
|
{ chainId: 102030n, shortName: "ctc" },
|
|
692
709
|
{ chainId: 103454n, shortName: "masatest" },
|
|
@@ -832,6 +849,13 @@ function getEip3770NetworkPrefixFromChainId(chainId) {
|
|
|
832
849
|
}
|
|
833
850
|
return network.shortName;
|
|
834
851
|
}
|
|
852
|
+
function getChainIdFromEip3770NetworkPrefix(prefix) {
|
|
853
|
+
const network = networks.find(({ shortName }) => shortName === prefix);
|
|
854
|
+
if (!network) {
|
|
855
|
+
throw new Error("No chainId found for the given network prefix");
|
|
856
|
+
}
|
|
857
|
+
return network.chainId;
|
|
858
|
+
}
|
|
835
859
|
function isValidEip3770NetworkPrefix(prefix) {
|
|
836
860
|
return networks.some(({ shortName }) => shortName === prefix);
|
|
837
861
|
}
|
|
@@ -1137,6 +1161,19 @@ function generateTypedData({
|
|
|
1137
1161
|
|
|
1138
1162
|
// src/utils/safeVersions.ts
|
|
1139
1163
|
var import_satisfies2 = __toESM(require("semver/functions/satisfies.js"));
|
|
1164
|
+
var SafeFeature = /* @__PURE__ */ ((SafeFeature2) => {
|
|
1165
|
+
SafeFeature2["SAFE_TX_GAS_OPTIONAL"] = "SAFE_TX_GAS_OPTIONAL";
|
|
1166
|
+
SafeFeature2["SAFE_TX_GUARDS"] = "SAFE_TX_GUARDS";
|
|
1167
|
+
SafeFeature2["SAFE_FALLBACK_HANDLER"] = "SAFE_FALLBACK_HANDLER";
|
|
1168
|
+
SafeFeature2["ETH_SIGN"] = "ETH_SIGN";
|
|
1169
|
+
SafeFeature2["ACCOUNT_ABSTRACTION"] = "ACCOUNT_ABSTRACTION";
|
|
1170
|
+
SafeFeature2["REQUIRED_TXGAS"] = "REQUIRED_TXGAS";
|
|
1171
|
+
SafeFeature2["SIMULATE_AND_REVERT"] = "SIMULATE_AND_REVERT";
|
|
1172
|
+
SafeFeature2["PASSKEY_SIGNER"] = "PASSKEY_SIGNER";
|
|
1173
|
+
SafeFeature2["SAFE_L2_CONTRACTS"] = "SAFE_L2_CONTRACTS";
|
|
1174
|
+
SafeFeature2["SAFE_MODULE_GUARD"] = "SAFE_MODULE_GUARD";
|
|
1175
|
+
return SafeFeature2;
|
|
1176
|
+
})(SafeFeature || {});
|
|
1140
1177
|
var SAFE_FEATURES_BY_VERSION = {
|
|
1141
1178
|
["SAFE_TX_GAS_OPTIONAL" /* SAFE_TX_GAS_OPTIONAL */]: ">=1.3.0",
|
|
1142
1179
|
["SAFE_TX_GUARDS" /* SAFE_TX_GUARDS */]: ">=1.3.0",
|
|
@@ -5415,11 +5452,23 @@ async function getExtensibleFallbackHandlerContract({
|
|
|
5415
5452
|
// src/utils/transactions/gas.ts
|
|
5416
5453
|
var CALL_DATA_ZERO_BYTE_GAS_COST = 4;
|
|
5417
5454
|
var CALL_DATA_BYTE_GAS_COST = 16;
|
|
5418
|
-
var
|
|
5455
|
+
var INITIALIZATION_GAS_COST = 22100;
|
|
5419
5456
|
var INCREMENT_NONCE_GAS_COST = 5e3;
|
|
5420
5457
|
var HASH_GENERATION_GAS_COST = 1500;
|
|
5421
5458
|
var ECRECOVER_GAS_COST = 6e3;
|
|
5422
|
-
var
|
|
5459
|
+
var INTRINSIC_TX_GAS_COST = 21e3;
|
|
5460
|
+
var PRE_EXEC_STORAGE_GAS_COST = 2 * 2100;
|
|
5461
|
+
var MISC_OVERHEAD_GAS_COST = 3e3;
|
|
5462
|
+
var EXTRA_BASE_GAS_COST = INTRINSIC_TX_GAS_COST + PRE_EXEC_STORAGE_GAS_COST + MISC_OVERHEAD_GAS_COST;
|
|
5463
|
+
var NEW_ACCOUNT_GAS_COST = 25e3;
|
|
5464
|
+
var COLD_ACCOUNT_ACCESS_GAS_COST = 2600;
|
|
5465
|
+
var CALL_VALUE_GAS_COST = 9e3;
|
|
5466
|
+
var ERC20_TRANSFER_GAS_COST = 21e3;
|
|
5467
|
+
var ERC20_NEW_HOLDER_TRANSFER_GAS_COST = 38e3;
|
|
5468
|
+
var LOG_BASE_GAS_COST = 375;
|
|
5469
|
+
var LOG_TOPIC_GAS_COST = 375;
|
|
5470
|
+
var LOG_DATA_GAS_COST_PER_BYTE = 8;
|
|
5471
|
+
var EXECUTION_RESULT_EVENT_GAS_COST = 1500;
|
|
5423
5472
|
var GAS_COST_PER_SIGNATURE = 1 * CALL_DATA_BYTE_GAS_COST + 2 * 32 * CALL_DATA_BYTE_GAS_COST + ECRECOVER_GAS_COST;
|
|
5424
5473
|
function estimateDataGasCosts(data) {
|
|
5425
5474
|
const bytes = data.match(/.{2}/g);
|
|
@@ -5433,6 +5482,58 @@ function estimateDataGasCosts(data) {
|
|
|
5433
5482
|
return gasCost + CALL_DATA_BYTE_GAS_COST;
|
|
5434
5483
|
}, 0);
|
|
5435
5484
|
}
|
|
5485
|
+
function calculateExecTransactionEventsGas(isL1SafeSingleton, data, threshold) {
|
|
5486
|
+
let gas = EXECUTION_RESULT_EVENT_GAS_COST;
|
|
5487
|
+
if (!isL1SafeSingleton) {
|
|
5488
|
+
const dataBytes = (data.length - 2) / 2;
|
|
5489
|
+
const signaturesBytes = threshold * 65;
|
|
5490
|
+
const headBytes = 11 * 32;
|
|
5491
|
+
const dataDynamicBytes = 32 + Math.ceil(dataBytes / 32) * 32;
|
|
5492
|
+
const signaturesDynamicBytes = 32 + Math.ceil(signaturesBytes / 32) * 32;
|
|
5493
|
+
const additionalInfoDynamicBytes = 32 + 3 * 32;
|
|
5494
|
+
const eventDataBytes = headBytes + dataDynamicBytes + signaturesDynamicBytes + additionalInfoDynamicBytes;
|
|
5495
|
+
gas += LOG_BASE_GAS_COST + LOG_TOPIC_GAS_COST + eventDataBytes * LOG_DATA_GAS_COST_PER_BYTE;
|
|
5496
|
+
}
|
|
5497
|
+
return gas;
|
|
5498
|
+
}
|
|
5499
|
+
async function isNewEthRefundReceiver(safeProvider, gasToken, refundReceiver) {
|
|
5500
|
+
if (gasToken.toLowerCase() !== ZERO_ADDRESS.toLowerCase() || refundReceiver.toLowerCase() === ZERO_ADDRESS.toLowerCase()) {
|
|
5501
|
+
return false;
|
|
5502
|
+
}
|
|
5503
|
+
const [contractCode, nonce, balance] = await Promise.all([
|
|
5504
|
+
safeProvider.getContractCode(refundReceiver),
|
|
5505
|
+
safeProvider.getNonce(refundReceiver),
|
|
5506
|
+
safeProvider.getBalance(refundReceiver)
|
|
5507
|
+
]);
|
|
5508
|
+
return contractCode === "0x" && nonce === 0 && balance === 0n;
|
|
5509
|
+
}
|
|
5510
|
+
async function hasExistingTokenBalance(safeProvider, gasToken, account) {
|
|
5511
|
+
const data = (0, import_viem8.encodeFunctionData)({
|
|
5512
|
+
abi: (0, import_viem8.parseAbi)(["function balanceOf(address account) view returns (uint256)"]),
|
|
5513
|
+
functionName: "balanceOf",
|
|
5514
|
+
args: [account]
|
|
5515
|
+
});
|
|
5516
|
+
try {
|
|
5517
|
+
const response = await safeProvider.call({ to: gasToken, from: gasToken, value: "0", data });
|
|
5518
|
+
return BigInt(response || "0x0") > 0n;
|
|
5519
|
+
} catch {
|
|
5520
|
+
return false;
|
|
5521
|
+
}
|
|
5522
|
+
}
|
|
5523
|
+
async function calculateRefundGas(safeProvider, gasPrice, gasToken, refundReceiver) {
|
|
5524
|
+
if (BigInt(gasPrice) === 0n) {
|
|
5525
|
+
return 0;
|
|
5526
|
+
}
|
|
5527
|
+
if (gasToken.toLowerCase() === ZERO_ADDRESS.toLowerCase()) {
|
|
5528
|
+
let gas = COLD_ACCOUNT_ACCESS_GAS_COST + CALL_VALUE_GAS_COST;
|
|
5529
|
+
if (await isNewEthRefundReceiver(safeProvider, gasToken, refundReceiver)) {
|
|
5530
|
+
gas += NEW_ACCOUNT_GAS_COST;
|
|
5531
|
+
}
|
|
5532
|
+
return gas;
|
|
5533
|
+
}
|
|
5534
|
+
const hasBalance = await hasExistingTokenBalance(safeProvider, gasToken, refundReceiver);
|
|
5535
|
+
return hasBalance ? ERC20_TRANSFER_GAS_COST : ERC20_NEW_HOLDER_TRANSFER_GAS_COST;
|
|
5536
|
+
}
|
|
5436
5537
|
async function estimateGas(safeVersion, safeContract, safeProvider, to, valueInWei, data, operation, customContracts) {
|
|
5437
5538
|
const chainId = await safeProvider.getChainId();
|
|
5438
5539
|
const simulateTxAccessorContract = await getSimulateTxAccessorContract({
|
|
@@ -5484,21 +5585,25 @@ async function estimateTxGas(safeContract, safeProvider, to, valueInWei, data, o
|
|
|
5484
5585
|
}
|
|
5485
5586
|
async function estimateTxBaseGas(safe, safeTransaction) {
|
|
5486
5587
|
const safeTransactionData = safeTransaction.data;
|
|
5487
|
-
const { to, value, data, operation, safeTxGas, gasToken, refundReceiver } = safeTransactionData;
|
|
5488
|
-
const safeThreshold = await safe.getThreshold();
|
|
5489
|
-
const safeNonce = await safe.getNonce();
|
|
5490
|
-
const signaturesGasCost = safeThreshold * GAS_COST_PER_SIGNATURE;
|
|
5588
|
+
const { to, value, data, operation, safeTxGas, gasPrice, gasToken, refundReceiver } = safeTransactionData;
|
|
5491
5589
|
const encodeSafeTxGas = safeTxGas || 0;
|
|
5492
5590
|
const encodeBaseGas = 0;
|
|
5493
|
-
const
|
|
5591
|
+
const encodeGasPrice = 1;
|
|
5494
5592
|
const encodeGasToken = gasToken || ZERO_ADDRESS;
|
|
5495
5593
|
const encodeRefundReceiver = refundReceiver || ZERO_ADDRESS;
|
|
5496
5594
|
const signatures = "0x";
|
|
5497
|
-
const safeVersion = safe.getContractVersion();
|
|
5498
5595
|
const safeProvider = safe.getSafeProvider();
|
|
5499
|
-
const
|
|
5500
|
-
const
|
|
5501
|
-
const
|
|
5596
|
+
const safeVersion = safe.getContractVersion();
|
|
5597
|
+
const contractManager = safe.getContractManager();
|
|
5598
|
+
const isL1SafeSingleton = contractManager.isL1SafeSingleton;
|
|
5599
|
+
const [safeThreshold, safeNonce, chainId, refundGas] = await Promise.all([
|
|
5600
|
+
safe.getThreshold(),
|
|
5601
|
+
safe.getNonce(),
|
|
5602
|
+
safe.getChainId(),
|
|
5603
|
+
calculateRefundGas(safeProvider, gasPrice, encodeGasToken, encodeRefundReceiver)
|
|
5604
|
+
]);
|
|
5605
|
+
const signaturesGasCost = safeThreshold * GAS_COST_PER_SIGNATURE;
|
|
5606
|
+
const customContracts = contractManager.contractNetworks?.[chainId.toString()];
|
|
5502
5607
|
const safeSingletonContract = await getSafeContract({
|
|
5503
5608
|
safeProvider,
|
|
5504
5609
|
safeVersion,
|
|
@@ -5512,16 +5617,19 @@ async function estimateTxBaseGas(safe, safeTransaction) {
|
|
|
5512
5617
|
operation,
|
|
5513
5618
|
encodeSafeTxGas,
|
|
5514
5619
|
encodeBaseGas,
|
|
5515
|
-
|
|
5620
|
+
encodeGasPrice,
|
|
5516
5621
|
encodeGasToken,
|
|
5517
5622
|
encodeRefundReceiver,
|
|
5518
5623
|
signatures
|
|
5519
5624
|
]);
|
|
5520
5625
|
const isSafeInitialized = safeNonce !== 0;
|
|
5521
|
-
const incrementNonceGasCost = isSafeInitialized ? INCREMENT_NONCE_GAS_COST :
|
|
5626
|
+
const incrementNonceGasCost = isSafeInitialized ? INCREMENT_NONCE_GAS_COST : INITIALIZATION_GAS_COST;
|
|
5522
5627
|
let baseGas = signaturesGasCost + estimateDataGasCosts(execTransactionData) + incrementNonceGasCost + HASH_GENERATION_GAS_COST;
|
|
5523
|
-
baseGas
|
|
5524
|
-
baseGas +=
|
|
5628
|
+
baseGas += refundGas;
|
|
5629
|
+
baseGas += calculateExecTransactionEventsGas(isL1SafeSingleton ?? false, data, safeThreshold);
|
|
5630
|
+
baseGas += EXTRA_BASE_GAS_COST;
|
|
5631
|
+
const baseGasUsedBytes = Math.ceil(baseGas.toString(16).length / 2);
|
|
5632
|
+
baseGas += baseGasUsedBytes * (CALL_DATA_BYTE_GAS_COST - CALL_DATA_ZERO_BYTE_GAS_COST);
|
|
5525
5633
|
return baseGas.toString();
|
|
5526
5634
|
}
|
|
5527
5635
|
async function estimateSafeTxGas(safe, safeTransaction) {
|
|
@@ -7301,7 +7409,7 @@ function generateOnChainIdentifier({
|
|
|
7301
7409
|
var generateOnChainIdentifier_default = generateOnChainIdentifier;
|
|
7302
7410
|
|
|
7303
7411
|
// src/utils/getProtocolKitVersion.ts
|
|
7304
|
-
var getProtocolKitVersion = () => "7.
|
|
7412
|
+
var getProtocolKitVersion = () => "7.2.0";
|
|
7305
7413
|
|
|
7306
7414
|
// src/Safe.ts
|
|
7307
7415
|
var EQ_OR_GT_1_5_0 = ">=1.5.0";
|
|
@@ -475,12 +475,15 @@ var networks = [
|
|
|
475
475
|
{ chainId: 4061n, shortName: "Nahmii3Mainnet" },
|
|
476
476
|
{ chainId: 4062n, shortName: "Nahmii3Testnet" },
|
|
477
477
|
{ chainId: 4078n, shortName: "muster" },
|
|
478
|
+
{ chainId: 4153n, shortName: "rise" },
|
|
478
479
|
{ chainId: 4157n, shortName: "crossfi-testnet" },
|
|
479
480
|
{ chainId: 4158n, shortName: "crossfi" },
|
|
480
481
|
{ chainId: 4162n, shortName: "SXR" },
|
|
481
482
|
{ chainId: 4202n, shortName: "lisksep" },
|
|
483
|
+
{ chainId: 4217n, shortName: "tempo" },
|
|
482
484
|
{ chainId: 4326n, shortName: "megaeth" },
|
|
483
485
|
{ chainId: 4337n, shortName: "beam" },
|
|
486
|
+
{ chainId: 4441n, shortName: "liteforge" },
|
|
484
487
|
{ chainId: 4460n, shortName: "orderlyl2" },
|
|
485
488
|
{ chainId: 4488n, shortName: "HYDRA" },
|
|
486
489
|
{ chainId: 4509n, shortName: "SC" },
|
|
@@ -528,6 +531,7 @@ var networks = [
|
|
|
528
531
|
{ chainId: 7700n, shortName: "canto" },
|
|
529
532
|
{ chainId: 7771n, shortName: "tbitrock" },
|
|
530
533
|
{ chainId: 7897n, shortName: "arena-z" },
|
|
534
|
+
{ chainId: 7979n, shortName: "dos" },
|
|
531
535
|
{ chainId: 8008n, shortName: "polynomial" },
|
|
532
536
|
{ chainId: 8150n, shortName: "alpen" },
|
|
533
537
|
{ chainId: 8192n, shortName: "tqf" },
|
|
@@ -595,12 +599,14 @@ var networks = [
|
|
|
595
599
|
{ chainId: 23295n, shortName: "sapphire-testnet" },
|
|
596
600
|
{ chainId: 24101n, shortName: "incentiv" },
|
|
597
601
|
{ chainId: 25327n, shortName: "Everclear" },
|
|
602
|
+
{ chainId: 25363n, shortName: "fluent" },
|
|
598
603
|
{ chainId: 26888n, shortName: "tABCore" },
|
|
599
604
|
{ chainId: 28802n, shortName: "tcent" },
|
|
600
605
|
{ chainId: 28882n, shortName: "BobaSepolia" },
|
|
601
606
|
{ chainId: 28979n, shortName: "kimbonet-testnet" },
|
|
602
607
|
{ chainId: 30303n, shortName: "Ethiq" },
|
|
603
|
-
{ chainId: 31611n, shortName: "mezo" },
|
|
608
|
+
{ chainId: 31611n, shortName: "mezo-testnet" },
|
|
609
|
+
{ chainId: 31612n, shortName: "mezo" },
|
|
604
610
|
{ chainId: 32323n, shortName: "basedai" },
|
|
605
611
|
{ chainId: 32380n, shortName: "paix" },
|
|
606
612
|
{ chainId: 32769n, shortName: "zil" },
|
|
@@ -630,6 +636,7 @@ var networks = [
|
|
|
630
636
|
{ chainId: 43419n, shortName: "gunz-mainnet" },
|
|
631
637
|
{ chainId: 44787n, shortName: "alfa" },
|
|
632
638
|
{ chainId: 45000n, shortName: "autobahnnetwork" },
|
|
639
|
+
{ chainId: 46630n, shortName: "robinhoodchaintestnet" },
|
|
633
640
|
{ chainId: 47763n, shortName: "neox-mainnet" },
|
|
634
641
|
{ chainId: 47805n, shortName: "rei" },
|
|
635
642
|
{ chainId: 48898n, shortName: "zircuit-garfield-testnet" },
|
|
@@ -679,10 +686,12 @@ var networks = [
|
|
|
679
686
|
{ chainId: 90001n, shortName: "dhobyghaut" },
|
|
680
687
|
{ chainId: 91342n, shortName: "giwasepolia" },
|
|
681
688
|
{ chainId: 97435n, shortName: "sling" },
|
|
689
|
+
{ chainId: 97476n, shortName: "doma-testnet" },
|
|
682
690
|
{ chainId: 98864n, shortName: "plume-devnet" },
|
|
683
691
|
{ chainId: 98865n, shortName: "plume" },
|
|
684
692
|
{ chainId: 98866n, shortName: "plume-mainnet" },
|
|
685
693
|
{ chainId: 98867n, shortName: "plume-testnet" },
|
|
694
|
+
{ chainId: 98875n, shortName: "nil" },
|
|
686
695
|
{ chainId: 98985n, shortName: "superposition-testnet" },
|
|
687
696
|
{ chainId: 102030n, shortName: "ctc" },
|
|
688
697
|
{ chainId: 103454n, shortName: "masatest" },
|
|
@@ -4640,6 +4649,10 @@ async function getSafeWebAuthnSharedSignerContract({
|
|
|
4640
4649
|
// src/utils/transactions/gas.ts
|
|
4641
4650
|
var CALL_DATA_BYTE_GAS_COST = 16;
|
|
4642
4651
|
var ECRECOVER_GAS_COST = 6e3;
|
|
4652
|
+
var INTRINSIC_TX_GAS_COST = 21e3;
|
|
4653
|
+
var PRE_EXEC_STORAGE_GAS_COST = 2 * 2100;
|
|
4654
|
+
var MISC_OVERHEAD_GAS_COST = 3e3;
|
|
4655
|
+
var EXTRA_BASE_GAS_COST = INTRINSIC_TX_GAS_COST + PRE_EXEC_STORAGE_GAS_COST + MISC_OVERHEAD_GAS_COST;
|
|
4643
4656
|
var GAS_COST_PER_SIGNATURE = 1 * CALL_DATA_BYTE_GAS_COST + 2 * 32 * CALL_DATA_BYTE_GAS_COST + ECRECOVER_GAS_COST;
|
|
4644
4657
|
|
|
4645
4658
|
// src/utils/transactions/utils.ts
|
package/dist/esm/src/index.mjs
CHANGED
|
@@ -22,7 +22,7 @@ import {
|
|
|
22
22
|
isAddress as isAddress4,
|
|
23
23
|
keccak256 as keccak2562,
|
|
24
24
|
pad,
|
|
25
|
-
parseAbi as
|
|
25
|
+
parseAbi as parseAbi4,
|
|
26
26
|
toHex as toHex3,
|
|
27
27
|
toEventHash,
|
|
28
28
|
decodeEventLog
|
|
@@ -418,12 +418,15 @@ var networks = [
|
|
|
418
418
|
{ chainId: 4061n, shortName: "Nahmii3Mainnet" },
|
|
419
419
|
{ chainId: 4062n, shortName: "Nahmii3Testnet" },
|
|
420
420
|
{ chainId: 4078n, shortName: "muster" },
|
|
421
|
+
{ chainId: 4153n, shortName: "rise" },
|
|
421
422
|
{ chainId: 4157n, shortName: "crossfi-testnet" },
|
|
422
423
|
{ chainId: 4158n, shortName: "crossfi" },
|
|
423
424
|
{ chainId: 4162n, shortName: "SXR" },
|
|
424
425
|
{ chainId: 4202n, shortName: "lisksep" },
|
|
426
|
+
{ chainId: 4217n, shortName: "tempo" },
|
|
425
427
|
{ chainId: 4326n, shortName: "megaeth" },
|
|
426
428
|
{ chainId: 4337n, shortName: "beam" },
|
|
429
|
+
{ chainId: 4441n, shortName: "liteforge" },
|
|
427
430
|
{ chainId: 4460n, shortName: "orderlyl2" },
|
|
428
431
|
{ chainId: 4488n, shortName: "HYDRA" },
|
|
429
432
|
{ chainId: 4509n, shortName: "SC" },
|
|
@@ -471,6 +474,7 @@ var networks = [
|
|
|
471
474
|
{ chainId: 7700n, shortName: "canto" },
|
|
472
475
|
{ chainId: 7771n, shortName: "tbitrock" },
|
|
473
476
|
{ chainId: 7897n, shortName: "arena-z" },
|
|
477
|
+
{ chainId: 7979n, shortName: "dos" },
|
|
474
478
|
{ chainId: 8008n, shortName: "polynomial" },
|
|
475
479
|
{ chainId: 8150n, shortName: "alpen" },
|
|
476
480
|
{ chainId: 8192n, shortName: "tqf" },
|
|
@@ -538,12 +542,14 @@ var networks = [
|
|
|
538
542
|
{ chainId: 23295n, shortName: "sapphire-testnet" },
|
|
539
543
|
{ chainId: 24101n, shortName: "incentiv" },
|
|
540
544
|
{ chainId: 25327n, shortName: "Everclear" },
|
|
545
|
+
{ chainId: 25363n, shortName: "fluent" },
|
|
541
546
|
{ chainId: 26888n, shortName: "tABCore" },
|
|
542
547
|
{ chainId: 28802n, shortName: "tcent" },
|
|
543
548
|
{ chainId: 28882n, shortName: "BobaSepolia" },
|
|
544
549
|
{ chainId: 28979n, shortName: "kimbonet-testnet" },
|
|
545
550
|
{ chainId: 30303n, shortName: "Ethiq" },
|
|
546
|
-
{ chainId: 31611n, shortName: "mezo" },
|
|
551
|
+
{ chainId: 31611n, shortName: "mezo-testnet" },
|
|
552
|
+
{ chainId: 31612n, shortName: "mezo" },
|
|
547
553
|
{ chainId: 32323n, shortName: "basedai" },
|
|
548
554
|
{ chainId: 32380n, shortName: "paix" },
|
|
549
555
|
{ chainId: 32769n, shortName: "zil" },
|
|
@@ -573,6 +579,7 @@ var networks = [
|
|
|
573
579
|
{ chainId: 43419n, shortName: "gunz-mainnet" },
|
|
574
580
|
{ chainId: 44787n, shortName: "alfa" },
|
|
575
581
|
{ chainId: 45000n, shortName: "autobahnnetwork" },
|
|
582
|
+
{ chainId: 46630n, shortName: "robinhoodchaintestnet" },
|
|
576
583
|
{ chainId: 47763n, shortName: "neox-mainnet" },
|
|
577
584
|
{ chainId: 47805n, shortName: "rei" },
|
|
578
585
|
{ chainId: 48898n, shortName: "zircuit-garfield-testnet" },
|
|
@@ -622,10 +629,12 @@ var networks = [
|
|
|
622
629
|
{ chainId: 90001n, shortName: "dhobyghaut" },
|
|
623
630
|
{ chainId: 91342n, shortName: "giwasepolia" },
|
|
624
631
|
{ chainId: 97435n, shortName: "sling" },
|
|
632
|
+
{ chainId: 97476n, shortName: "doma-testnet" },
|
|
625
633
|
{ chainId: 98864n, shortName: "plume-devnet" },
|
|
626
634
|
{ chainId: 98865n, shortName: "plume" },
|
|
627
635
|
{ chainId: 98866n, shortName: "plume-mainnet" },
|
|
628
636
|
{ chainId: 98867n, shortName: "plume-testnet" },
|
|
637
|
+
{ chainId: 98875n, shortName: "nil" },
|
|
629
638
|
{ chainId: 98985n, shortName: "superposition-testnet" },
|
|
630
639
|
{ chainId: 102030n, shortName: "ctc" },
|
|
631
640
|
{ chainId: 103454n, shortName: "masatest" },
|
|
@@ -771,6 +780,13 @@ function getEip3770NetworkPrefixFromChainId(chainId) {
|
|
|
771
780
|
}
|
|
772
781
|
return network.shortName;
|
|
773
782
|
}
|
|
783
|
+
function getChainIdFromEip3770NetworkPrefix(prefix) {
|
|
784
|
+
const network = networks.find(({ shortName }) => shortName === prefix);
|
|
785
|
+
if (!network) {
|
|
786
|
+
throw new Error("No chainId found for the given network prefix");
|
|
787
|
+
}
|
|
788
|
+
return network.chainId;
|
|
789
|
+
}
|
|
774
790
|
function isValidEip3770NetworkPrefix(prefix) {
|
|
775
791
|
return networks.some(({ shortName }) => shortName === prefix);
|
|
776
792
|
}
|
|
@@ -1084,6 +1100,19 @@ function generateTypedData({
|
|
|
1084
1100
|
|
|
1085
1101
|
// src/utils/safeVersions.ts
|
|
1086
1102
|
import semverSatisfies2 from "semver/functions/satisfies.js";
|
|
1103
|
+
var SafeFeature = /* @__PURE__ */ ((SafeFeature2) => {
|
|
1104
|
+
SafeFeature2["SAFE_TX_GAS_OPTIONAL"] = "SAFE_TX_GAS_OPTIONAL";
|
|
1105
|
+
SafeFeature2["SAFE_TX_GUARDS"] = "SAFE_TX_GUARDS";
|
|
1106
|
+
SafeFeature2["SAFE_FALLBACK_HANDLER"] = "SAFE_FALLBACK_HANDLER";
|
|
1107
|
+
SafeFeature2["ETH_SIGN"] = "ETH_SIGN";
|
|
1108
|
+
SafeFeature2["ACCOUNT_ABSTRACTION"] = "ACCOUNT_ABSTRACTION";
|
|
1109
|
+
SafeFeature2["REQUIRED_TXGAS"] = "REQUIRED_TXGAS";
|
|
1110
|
+
SafeFeature2["SIMULATE_AND_REVERT"] = "SIMULATE_AND_REVERT";
|
|
1111
|
+
SafeFeature2["PASSKEY_SIGNER"] = "PASSKEY_SIGNER";
|
|
1112
|
+
SafeFeature2["SAFE_L2_CONTRACTS"] = "SAFE_L2_CONTRACTS";
|
|
1113
|
+
SafeFeature2["SAFE_MODULE_GUARD"] = "SAFE_MODULE_GUARD";
|
|
1114
|
+
return SafeFeature2;
|
|
1115
|
+
})(SafeFeature || {});
|
|
1087
1116
|
var SAFE_FEATURES_BY_VERSION = {
|
|
1088
1117
|
["SAFE_TX_GAS_OPTIONAL" /* SAFE_TX_GAS_OPTIONAL */]: ">=1.3.0",
|
|
1089
1118
|
["SAFE_TX_GUARDS" /* SAFE_TX_GUARDS */]: ">=1.3.0",
|
|
@@ -1291,7 +1320,11 @@ var calculateSafeMessageHash = (safeAddress, message, safeVersion, chainId) => {
|
|
|
1291
1320
|
};
|
|
1292
1321
|
|
|
1293
1322
|
// src/utils/transactions/gas.ts
|
|
1294
|
-
import {
|
|
1323
|
+
import {
|
|
1324
|
+
BaseError,
|
|
1325
|
+
encodeFunctionData as encodeFunctionData2,
|
|
1326
|
+
parseAbi
|
|
1327
|
+
} from "viem";
|
|
1295
1328
|
import { OperationType } from "@safe-global/types-kit";
|
|
1296
1329
|
import semverSatisfies4 from "semver/functions/satisfies.js";
|
|
1297
1330
|
|
|
@@ -5432,11 +5465,23 @@ async function getExtensibleFallbackHandlerContract({
|
|
|
5432
5465
|
// src/utils/transactions/gas.ts
|
|
5433
5466
|
var CALL_DATA_ZERO_BYTE_GAS_COST = 4;
|
|
5434
5467
|
var CALL_DATA_BYTE_GAS_COST = 16;
|
|
5435
|
-
var
|
|
5468
|
+
var INITIALIZATION_GAS_COST = 22100;
|
|
5436
5469
|
var INCREMENT_NONCE_GAS_COST = 5e3;
|
|
5437
5470
|
var HASH_GENERATION_GAS_COST = 1500;
|
|
5438
5471
|
var ECRECOVER_GAS_COST = 6e3;
|
|
5439
|
-
var
|
|
5472
|
+
var INTRINSIC_TX_GAS_COST = 21e3;
|
|
5473
|
+
var PRE_EXEC_STORAGE_GAS_COST = 2 * 2100;
|
|
5474
|
+
var MISC_OVERHEAD_GAS_COST = 3e3;
|
|
5475
|
+
var EXTRA_BASE_GAS_COST = INTRINSIC_TX_GAS_COST + PRE_EXEC_STORAGE_GAS_COST + MISC_OVERHEAD_GAS_COST;
|
|
5476
|
+
var NEW_ACCOUNT_GAS_COST = 25e3;
|
|
5477
|
+
var COLD_ACCOUNT_ACCESS_GAS_COST = 2600;
|
|
5478
|
+
var CALL_VALUE_GAS_COST = 9e3;
|
|
5479
|
+
var ERC20_TRANSFER_GAS_COST = 21e3;
|
|
5480
|
+
var ERC20_NEW_HOLDER_TRANSFER_GAS_COST = 38e3;
|
|
5481
|
+
var LOG_BASE_GAS_COST = 375;
|
|
5482
|
+
var LOG_TOPIC_GAS_COST = 375;
|
|
5483
|
+
var LOG_DATA_GAS_COST_PER_BYTE = 8;
|
|
5484
|
+
var EXECUTION_RESULT_EVENT_GAS_COST = 1500;
|
|
5440
5485
|
var GAS_COST_PER_SIGNATURE = 1 * CALL_DATA_BYTE_GAS_COST + 2 * 32 * CALL_DATA_BYTE_GAS_COST + ECRECOVER_GAS_COST;
|
|
5441
5486
|
function estimateDataGasCosts(data) {
|
|
5442
5487
|
const bytes = data.match(/.{2}/g);
|
|
@@ -5450,6 +5495,58 @@ function estimateDataGasCosts(data) {
|
|
|
5450
5495
|
return gasCost + CALL_DATA_BYTE_GAS_COST;
|
|
5451
5496
|
}, 0);
|
|
5452
5497
|
}
|
|
5498
|
+
function calculateExecTransactionEventsGas(isL1SafeSingleton, data, threshold) {
|
|
5499
|
+
let gas = EXECUTION_RESULT_EVENT_GAS_COST;
|
|
5500
|
+
if (!isL1SafeSingleton) {
|
|
5501
|
+
const dataBytes = (data.length - 2) / 2;
|
|
5502
|
+
const signaturesBytes = threshold * 65;
|
|
5503
|
+
const headBytes = 11 * 32;
|
|
5504
|
+
const dataDynamicBytes = 32 + Math.ceil(dataBytes / 32) * 32;
|
|
5505
|
+
const signaturesDynamicBytes = 32 + Math.ceil(signaturesBytes / 32) * 32;
|
|
5506
|
+
const additionalInfoDynamicBytes = 32 + 3 * 32;
|
|
5507
|
+
const eventDataBytes = headBytes + dataDynamicBytes + signaturesDynamicBytes + additionalInfoDynamicBytes;
|
|
5508
|
+
gas += LOG_BASE_GAS_COST + LOG_TOPIC_GAS_COST + eventDataBytes * LOG_DATA_GAS_COST_PER_BYTE;
|
|
5509
|
+
}
|
|
5510
|
+
return gas;
|
|
5511
|
+
}
|
|
5512
|
+
async function isNewEthRefundReceiver(safeProvider, gasToken, refundReceiver) {
|
|
5513
|
+
if (gasToken.toLowerCase() !== ZERO_ADDRESS.toLowerCase() || refundReceiver.toLowerCase() === ZERO_ADDRESS.toLowerCase()) {
|
|
5514
|
+
return false;
|
|
5515
|
+
}
|
|
5516
|
+
const [contractCode, nonce, balance] = await Promise.all([
|
|
5517
|
+
safeProvider.getContractCode(refundReceiver),
|
|
5518
|
+
safeProvider.getNonce(refundReceiver),
|
|
5519
|
+
safeProvider.getBalance(refundReceiver)
|
|
5520
|
+
]);
|
|
5521
|
+
return contractCode === "0x" && nonce === 0 && balance === 0n;
|
|
5522
|
+
}
|
|
5523
|
+
async function hasExistingTokenBalance(safeProvider, gasToken, account) {
|
|
5524
|
+
const data = encodeFunctionData2({
|
|
5525
|
+
abi: parseAbi(["function balanceOf(address account) view returns (uint256)"]),
|
|
5526
|
+
functionName: "balanceOf",
|
|
5527
|
+
args: [account]
|
|
5528
|
+
});
|
|
5529
|
+
try {
|
|
5530
|
+
const response = await safeProvider.call({ to: gasToken, from: gasToken, value: "0", data });
|
|
5531
|
+
return BigInt(response || "0x0") > 0n;
|
|
5532
|
+
} catch {
|
|
5533
|
+
return false;
|
|
5534
|
+
}
|
|
5535
|
+
}
|
|
5536
|
+
async function calculateRefundGas(safeProvider, gasPrice, gasToken, refundReceiver) {
|
|
5537
|
+
if (BigInt(gasPrice) === 0n) {
|
|
5538
|
+
return 0;
|
|
5539
|
+
}
|
|
5540
|
+
if (gasToken.toLowerCase() === ZERO_ADDRESS.toLowerCase()) {
|
|
5541
|
+
let gas = COLD_ACCOUNT_ACCESS_GAS_COST + CALL_VALUE_GAS_COST;
|
|
5542
|
+
if (await isNewEthRefundReceiver(safeProvider, gasToken, refundReceiver)) {
|
|
5543
|
+
gas += NEW_ACCOUNT_GAS_COST;
|
|
5544
|
+
}
|
|
5545
|
+
return gas;
|
|
5546
|
+
}
|
|
5547
|
+
const hasBalance = await hasExistingTokenBalance(safeProvider, gasToken, refundReceiver);
|
|
5548
|
+
return hasBalance ? ERC20_TRANSFER_GAS_COST : ERC20_NEW_HOLDER_TRANSFER_GAS_COST;
|
|
5549
|
+
}
|
|
5453
5550
|
async function estimateGas(safeVersion, safeContract, safeProvider, to, valueInWei, data, operation, customContracts) {
|
|
5454
5551
|
const chainId = await safeProvider.getChainId();
|
|
5455
5552
|
const simulateTxAccessorContract = await getSimulateTxAccessorContract({
|
|
@@ -5501,21 +5598,25 @@ async function estimateTxGas(safeContract, safeProvider, to, valueInWei, data, o
|
|
|
5501
5598
|
}
|
|
5502
5599
|
async function estimateTxBaseGas(safe, safeTransaction) {
|
|
5503
5600
|
const safeTransactionData = safeTransaction.data;
|
|
5504
|
-
const { to, value, data, operation, safeTxGas, gasToken, refundReceiver } = safeTransactionData;
|
|
5505
|
-
const safeThreshold = await safe.getThreshold();
|
|
5506
|
-
const safeNonce = await safe.getNonce();
|
|
5507
|
-
const signaturesGasCost = safeThreshold * GAS_COST_PER_SIGNATURE;
|
|
5601
|
+
const { to, value, data, operation, safeTxGas, gasPrice, gasToken, refundReceiver } = safeTransactionData;
|
|
5508
5602
|
const encodeSafeTxGas = safeTxGas || 0;
|
|
5509
5603
|
const encodeBaseGas = 0;
|
|
5510
|
-
const
|
|
5604
|
+
const encodeGasPrice = 1;
|
|
5511
5605
|
const encodeGasToken = gasToken || ZERO_ADDRESS;
|
|
5512
5606
|
const encodeRefundReceiver = refundReceiver || ZERO_ADDRESS;
|
|
5513
5607
|
const signatures = "0x";
|
|
5514
|
-
const safeVersion = safe.getContractVersion();
|
|
5515
5608
|
const safeProvider = safe.getSafeProvider();
|
|
5516
|
-
const
|
|
5517
|
-
const
|
|
5518
|
-
const
|
|
5609
|
+
const safeVersion = safe.getContractVersion();
|
|
5610
|
+
const contractManager = safe.getContractManager();
|
|
5611
|
+
const isL1SafeSingleton = contractManager.isL1SafeSingleton;
|
|
5612
|
+
const [safeThreshold, safeNonce, chainId, refundGas] = await Promise.all([
|
|
5613
|
+
safe.getThreshold(),
|
|
5614
|
+
safe.getNonce(),
|
|
5615
|
+
safe.getChainId(),
|
|
5616
|
+
calculateRefundGas(safeProvider, gasPrice, encodeGasToken, encodeRefundReceiver)
|
|
5617
|
+
]);
|
|
5618
|
+
const signaturesGasCost = safeThreshold * GAS_COST_PER_SIGNATURE;
|
|
5619
|
+
const customContracts = contractManager.contractNetworks?.[chainId.toString()];
|
|
5519
5620
|
const safeSingletonContract = await getSafeContract({
|
|
5520
5621
|
safeProvider,
|
|
5521
5622
|
safeVersion,
|
|
@@ -5529,16 +5630,19 @@ async function estimateTxBaseGas(safe, safeTransaction) {
|
|
|
5529
5630
|
operation,
|
|
5530
5631
|
encodeSafeTxGas,
|
|
5531
5632
|
encodeBaseGas,
|
|
5532
|
-
|
|
5633
|
+
encodeGasPrice,
|
|
5533
5634
|
encodeGasToken,
|
|
5534
5635
|
encodeRefundReceiver,
|
|
5535
5636
|
signatures
|
|
5536
5637
|
]);
|
|
5537
5638
|
const isSafeInitialized = safeNonce !== 0;
|
|
5538
|
-
const incrementNonceGasCost = isSafeInitialized ? INCREMENT_NONCE_GAS_COST :
|
|
5639
|
+
const incrementNonceGasCost = isSafeInitialized ? INCREMENT_NONCE_GAS_COST : INITIALIZATION_GAS_COST;
|
|
5539
5640
|
let baseGas = signaturesGasCost + estimateDataGasCosts(execTransactionData) + incrementNonceGasCost + HASH_GENERATION_GAS_COST;
|
|
5540
|
-
baseGas
|
|
5541
|
-
baseGas +=
|
|
5641
|
+
baseGas += refundGas;
|
|
5642
|
+
baseGas += calculateExecTransactionEventsGas(isL1SafeSingleton ?? false, data, safeThreshold);
|
|
5643
|
+
baseGas += EXTRA_BASE_GAS_COST;
|
|
5644
|
+
const baseGasUsedBytes = Math.ceil(baseGas.toString(16).length / 2);
|
|
5645
|
+
baseGas += baseGasUsedBytes * (CALL_DATA_BYTE_GAS_COST - CALL_DATA_ZERO_BYTE_GAS_COST);
|
|
5542
5646
|
return baseGas.toString();
|
|
5543
5647
|
}
|
|
5544
5648
|
async function estimateSafeTxGas(safe, safeTransaction) {
|
|
@@ -5727,7 +5831,7 @@ import {
|
|
|
5727
5831
|
encodePacked,
|
|
5728
5832
|
bytesToHex,
|
|
5729
5833
|
decodeFunctionData,
|
|
5730
|
-
parseAbi
|
|
5834
|
+
parseAbi as parseAbi2
|
|
5731
5835
|
} from "viem";
|
|
5732
5836
|
import { waitForTransactionReceipt as waitForTransactionReceiptViem } from "viem/actions";
|
|
5733
5837
|
function standardizeMetaTransactionData(tx) {
|
|
@@ -5827,7 +5931,7 @@ function encodeMultiSendData(txs) {
|
|
|
5827
5931
|
}
|
|
5828
5932
|
function decodeMultiSendData(encodedData) {
|
|
5829
5933
|
const decodedData = decodeFunctionData({
|
|
5830
|
-
abi:
|
|
5934
|
+
abi: parseAbi2(["function multiSend(bytes memory transactions) public payable"]),
|
|
5831
5935
|
data: asHex(encodedData)
|
|
5832
5936
|
});
|
|
5833
5937
|
const args = decodedData.args;
|
|
@@ -6076,8 +6180,8 @@ import {
|
|
|
6076
6180
|
fromBytes,
|
|
6077
6181
|
fromHex,
|
|
6078
6182
|
parseAbiParameters,
|
|
6079
|
-
encodeFunctionData as
|
|
6080
|
-
parseAbi as
|
|
6183
|
+
encodeFunctionData as encodeFunctionData3,
|
|
6184
|
+
parseAbi as parseAbi3
|
|
6081
6185
|
} from "viem";
|
|
6082
6186
|
|
|
6083
6187
|
// src/utils/passkeys/isSharedSigner.ts
|
|
@@ -6163,8 +6267,8 @@ var createPasskeyClient = async (passkey, safeWebAuthnSignerFactoryContract, saf
|
|
|
6163
6267
|
signTransaction,
|
|
6164
6268
|
signTypedData,
|
|
6165
6269
|
encodeConfigure() {
|
|
6166
|
-
return
|
|
6167
|
-
abi:
|
|
6270
|
+
return encodeFunctionData3({
|
|
6271
|
+
abi: parseAbi3(["function configure((uint256 x, uint256 y, uint176 verifiers) signer)"]),
|
|
6168
6272
|
functionName: "configure",
|
|
6169
6273
|
args: [
|
|
6170
6274
|
{
|
|
@@ -6695,7 +6799,7 @@ var memoizedGetSafeContract = createMemoizedFunction(
|
|
|
6695
6799
|
async function getSafeContractVersion(safeProvider, safeAddress) {
|
|
6696
6800
|
return await safeProvider.readContract({
|
|
6697
6801
|
address: safeAddress,
|
|
6698
|
-
abi:
|
|
6802
|
+
abi: parseAbi4(["function VERSION() view returns (string)"]),
|
|
6699
6803
|
functionName: "VERSION"
|
|
6700
6804
|
});
|
|
6701
6805
|
}
|
|
@@ -6849,7 +6953,7 @@ function getSafeAddressFromDeploymentTx(txReceipt, safeVersion) {
|
|
|
6849
6953
|
}
|
|
6850
6954
|
const { data, topics } = proxyCreationEvent;
|
|
6851
6955
|
const { args } = decodeEventLog({
|
|
6852
|
-
abi:
|
|
6956
|
+
abi: parseAbi4([getProxyCreationEvent(safeVersion)]),
|
|
6853
6957
|
eventName: "ProxyCreation",
|
|
6854
6958
|
data,
|
|
6855
6959
|
topics
|
|
@@ -7367,7 +7471,7 @@ function generateOnChainIdentifier({
|
|
|
7367
7471
|
var generateOnChainIdentifier_default = generateOnChainIdentifier;
|
|
7368
7472
|
|
|
7369
7473
|
// src/utils/getProtocolKitVersion.ts
|
|
7370
|
-
var getProtocolKitVersion = () => "7.
|
|
7474
|
+
var getProtocolKitVersion = () => "7.2.0";
|
|
7371
7475
|
|
|
7372
7476
|
// src/Safe.ts
|
|
7373
7477
|
var EQ_OR_GT_1_5_0 = ">=1.5.0";
|
|
@@ -9016,15 +9120,15 @@ var Safe = class _Safe {
|
|
|
9016
9120
|
var Safe_default = Safe;
|
|
9017
9121
|
|
|
9018
9122
|
// src/utils/erc-20/index.ts
|
|
9019
|
-
import { encodeFunctionData as
|
|
9123
|
+
import { encodeFunctionData as encodeFunctionData4, parseAbi as parseAbi5 } from "viem";
|
|
9020
9124
|
var ERC20_ABI = [
|
|
9021
9125
|
"function transfer(address recipient, uint256 amount) returns (bool)",
|
|
9022
9126
|
"function decimals() view returns (uint8)"
|
|
9023
9127
|
];
|
|
9024
9128
|
async function getERC20Decimals(tokenAddress, safe) {
|
|
9025
9129
|
const safeProvider = safe.getSafeProvider();
|
|
9026
|
-
const data =
|
|
9027
|
-
abi:
|
|
9130
|
+
const data = encodeFunctionData4({
|
|
9131
|
+
abi: parseAbi5(ERC20_ABI),
|
|
9028
9132
|
functionName: "decimals"
|
|
9029
9133
|
});
|
|
9030
9134
|
const getTokenDecimalsTransaction = {
|
|
@@ -9051,8 +9155,8 @@ async function isGasTokenCompatibleWithHandlePayment(gasToken, safe) {
|
|
|
9051
9155
|
return hasTokenStandardERC20Decimals;
|
|
9052
9156
|
}
|
|
9053
9157
|
function createERC20TokenTransferTransaction(tokenAddress, toAddress, amount) {
|
|
9054
|
-
const data =
|
|
9055
|
-
abi:
|
|
9158
|
+
const data = encodeFunctionData4({
|
|
9159
|
+
abi: parseAbi5(ERC20_ABI),
|
|
9056
9160
|
functionName: "transfer",
|
|
9057
9161
|
args: [toAddress, amount]
|
|
9058
9162
|
});
|
|
@@ -9077,11 +9181,15 @@ export {
|
|
|
9077
9181
|
MultiSendCallOnlyBaseContract_default as MultiSendCallOnlyBaseContract,
|
|
9078
9182
|
PREDETERMINED_SALT_NONCE,
|
|
9079
9183
|
SafeBaseContract_default as SafeBaseContract,
|
|
9184
|
+
SafeFeature,
|
|
9080
9185
|
SafeProvider_default as SafeProvider,
|
|
9081
9186
|
SafeProxyFactoryBaseContract_default as SafeProxyFactoryBaseContract,
|
|
9082
9187
|
SignMessageLibBaseContract_default as SignMessageLibBaseContract,
|
|
9188
|
+
adjustVInSignature,
|
|
9083
9189
|
buildContractSignature,
|
|
9084
9190
|
buildSignatureBytes,
|
|
9191
|
+
calculateSafeMessageHash,
|
|
9192
|
+
calculateSafeTransactionHash,
|
|
9085
9193
|
createERC20TokenTransferTransaction,
|
|
9086
9194
|
createPasskeyClient,
|
|
9087
9195
|
decodeMultiSendData,
|
|
@@ -9096,11 +9204,14 @@ export {
|
|
|
9096
9204
|
extractPasskeyData,
|
|
9097
9205
|
generateEIP712Signature,
|
|
9098
9206
|
generateOnChainIdentifier_default as generateOnChainIdentifier,
|
|
9207
|
+
generatePreValidatedSignature,
|
|
9099
9208
|
generateSignature,
|
|
9100
9209
|
generateTypedData,
|
|
9210
|
+
getChainIdFromEip3770NetworkPrefix,
|
|
9101
9211
|
getCompatibilityFallbackHandlerContract,
|
|
9102
9212
|
getCreateCallContract,
|
|
9103
9213
|
getERC20Decimals,
|
|
9214
|
+
getEip3770NetworkPrefixFromChainId,
|
|
9104
9215
|
getEip712MessageTypes,
|
|
9105
9216
|
getEip712TxTypes,
|
|
9106
9217
|
getExtensibleFallbackHandlerContract,
|
|
@@ -9115,6 +9226,7 @@ export {
|
|
|
9115
9226
|
getSafeWebAuthnSharedSignerContract,
|
|
9116
9227
|
getSafeWebAuthnSignerFactoryContract,
|
|
9117
9228
|
getSignMessageLibContract,
|
|
9229
|
+
hasSafeFeature,
|
|
9118
9230
|
hashSafeMessage,
|
|
9119
9231
|
isGasTokenCompatibleWithHandlePayment,
|
|
9120
9232
|
predictSafeAddress,
|
|
@@ -433,12 +433,15 @@ var networks = [
|
|
|
433
433
|
{ chainId: 4061n, shortName: "Nahmii3Mainnet" },
|
|
434
434
|
{ chainId: 4062n, shortName: "Nahmii3Testnet" },
|
|
435
435
|
{ chainId: 4078n, shortName: "muster" },
|
|
436
|
+
{ chainId: 4153n, shortName: "rise" },
|
|
436
437
|
{ chainId: 4157n, shortName: "crossfi-testnet" },
|
|
437
438
|
{ chainId: 4158n, shortName: "crossfi" },
|
|
438
439
|
{ chainId: 4162n, shortName: "SXR" },
|
|
439
440
|
{ chainId: 4202n, shortName: "lisksep" },
|
|
441
|
+
{ chainId: 4217n, shortName: "tempo" },
|
|
440
442
|
{ chainId: 4326n, shortName: "megaeth" },
|
|
441
443
|
{ chainId: 4337n, shortName: "beam" },
|
|
444
|
+
{ chainId: 4441n, shortName: "liteforge" },
|
|
442
445
|
{ chainId: 4460n, shortName: "orderlyl2" },
|
|
443
446
|
{ chainId: 4488n, shortName: "HYDRA" },
|
|
444
447
|
{ chainId: 4509n, shortName: "SC" },
|
|
@@ -486,6 +489,7 @@ var networks = [
|
|
|
486
489
|
{ chainId: 7700n, shortName: "canto" },
|
|
487
490
|
{ chainId: 7771n, shortName: "tbitrock" },
|
|
488
491
|
{ chainId: 7897n, shortName: "arena-z" },
|
|
492
|
+
{ chainId: 7979n, shortName: "dos" },
|
|
489
493
|
{ chainId: 8008n, shortName: "polynomial" },
|
|
490
494
|
{ chainId: 8150n, shortName: "alpen" },
|
|
491
495
|
{ chainId: 8192n, shortName: "tqf" },
|
|
@@ -553,12 +557,14 @@ var networks = [
|
|
|
553
557
|
{ chainId: 23295n, shortName: "sapphire-testnet" },
|
|
554
558
|
{ chainId: 24101n, shortName: "incentiv" },
|
|
555
559
|
{ chainId: 25327n, shortName: "Everclear" },
|
|
560
|
+
{ chainId: 25363n, shortName: "fluent" },
|
|
556
561
|
{ chainId: 26888n, shortName: "tABCore" },
|
|
557
562
|
{ chainId: 28802n, shortName: "tcent" },
|
|
558
563
|
{ chainId: 28882n, shortName: "BobaSepolia" },
|
|
559
564
|
{ chainId: 28979n, shortName: "kimbonet-testnet" },
|
|
560
565
|
{ chainId: 30303n, shortName: "Ethiq" },
|
|
561
|
-
{ chainId: 31611n, shortName: "mezo" },
|
|
566
|
+
{ chainId: 31611n, shortName: "mezo-testnet" },
|
|
567
|
+
{ chainId: 31612n, shortName: "mezo" },
|
|
562
568
|
{ chainId: 32323n, shortName: "basedai" },
|
|
563
569
|
{ chainId: 32380n, shortName: "paix" },
|
|
564
570
|
{ chainId: 32769n, shortName: "zil" },
|
|
@@ -588,6 +594,7 @@ var networks = [
|
|
|
588
594
|
{ chainId: 43419n, shortName: "gunz-mainnet" },
|
|
589
595
|
{ chainId: 44787n, shortName: "alfa" },
|
|
590
596
|
{ chainId: 45000n, shortName: "autobahnnetwork" },
|
|
597
|
+
{ chainId: 46630n, shortName: "robinhoodchaintestnet" },
|
|
591
598
|
{ chainId: 47763n, shortName: "neox-mainnet" },
|
|
592
599
|
{ chainId: 47805n, shortName: "rei" },
|
|
593
600
|
{ chainId: 48898n, shortName: "zircuit-garfield-testnet" },
|
|
@@ -637,10 +644,12 @@ var networks = [
|
|
|
637
644
|
{ chainId: 90001n, shortName: "dhobyghaut" },
|
|
638
645
|
{ chainId: 91342n, shortName: "giwasepolia" },
|
|
639
646
|
{ chainId: 97435n, shortName: "sling" },
|
|
647
|
+
{ chainId: 97476n, shortName: "doma-testnet" },
|
|
640
648
|
{ chainId: 98864n, shortName: "plume-devnet" },
|
|
641
649
|
{ chainId: 98865n, shortName: "plume" },
|
|
642
650
|
{ chainId: 98866n, shortName: "plume-mainnet" },
|
|
643
651
|
{ chainId: 98867n, shortName: "plume-testnet" },
|
|
652
|
+
{ chainId: 98875n, shortName: "nil" },
|
|
644
653
|
{ chainId: 98985n, shortName: "superposition-testnet" },
|
|
645
654
|
{ chainId: 102030n, shortName: "ctc" },
|
|
646
655
|
{ chainId: 103454n, shortName: "masatest" },
|
|
@@ -1089,7 +1098,11 @@ import {
|
|
|
1089
1098
|
import semverSatisfies3 from "semver/functions/satisfies.js";
|
|
1090
1099
|
|
|
1091
1100
|
// src/utils/transactions/gas.ts
|
|
1092
|
-
import {
|
|
1101
|
+
import {
|
|
1102
|
+
BaseError,
|
|
1103
|
+
encodeFunctionData as encodeFunctionData3,
|
|
1104
|
+
parseAbi as parseAbi3
|
|
1105
|
+
} from "viem";
|
|
1093
1106
|
import { OperationType } from "@safe-global/types-kit";
|
|
1094
1107
|
import semverSatisfies5 from "semver/functions/satisfies.js";
|
|
1095
1108
|
|
|
@@ -4740,6 +4753,10 @@ async function getSafeWebAuthnSharedSignerContract({
|
|
|
4740
4753
|
// src/utils/transactions/gas.ts
|
|
4741
4754
|
var CALL_DATA_BYTE_GAS_COST = 16;
|
|
4742
4755
|
var ECRECOVER_GAS_COST = 6e3;
|
|
4756
|
+
var INTRINSIC_TX_GAS_COST = 21e3;
|
|
4757
|
+
var PRE_EXEC_STORAGE_GAS_COST = 2 * 2100;
|
|
4758
|
+
var MISC_OVERHEAD_GAS_COST = 3e3;
|
|
4759
|
+
var EXTRA_BASE_GAS_COST = INTRINSIC_TX_GAS_COST + PRE_EXEC_STORAGE_GAS_COST + MISC_OVERHEAD_GAS_COST;
|
|
4743
4760
|
var GAS_COST_PER_SIGNATURE = 1 * CALL_DATA_BYTE_GAS_COST + 2 * 32 * CALL_DATA_BYTE_GAS_COST + ECRECOVER_GAS_COST;
|
|
4744
4761
|
|
|
4745
4762
|
// src/utils/transactions/utils.ts
|
|
@@ -4753,7 +4770,7 @@ import {
|
|
|
4753
4770
|
encodePacked,
|
|
4754
4771
|
bytesToHex,
|
|
4755
4772
|
decodeFunctionData,
|
|
4756
|
-
parseAbi as
|
|
4773
|
+
parseAbi as parseAbi4
|
|
4757
4774
|
} from "viem";
|
|
4758
4775
|
import { waitForTransactionReceipt as waitForTransactionReceiptViem } from "viem/actions";
|
|
4759
4776
|
function toEstimateGasParameters(tx) {
|
package/dist/src/index.d.ts
CHANGED
|
@@ -5,19 +5,20 @@ import { DEFAULT_SAFE_VERSION } from './contracts/config';
|
|
|
5
5
|
import { getCompatibilityFallbackHandlerContract, getExtensibleFallbackHandlerContract, getCreateCallContract, getMultiSendCallOnlyContract, getMultiSendContract, getSafeProxyFactoryContract, getSafeContract, getSignMessageLibContract, getSafeWebAuthnSignerFactoryContract, getSafeWebAuthnSharedSignerContract } from './contracts/safeDeploymentContracts';
|
|
6
6
|
import { PREDETERMINED_SALT_NONCE, encodeCreateProxyWithNonce, encodeSetupCallData, predictSafeAddress, getPredictedSafeAddressInitCode, getSafeAddressFromDeploymentTx } from './contracts/utils';
|
|
7
7
|
import ContractManager from './managers/contractManager';
|
|
8
|
-
import { EthSafeSignature, estimateTxBaseGas, estimateTxGas, estimateSafeTxGas, estimateSafeDeploymentGas, extractPasskeyData, validateEthereumAddress, validateEip3770Address } from './utils';
|
|
8
|
+
import { EthSafeSignature, estimateTxBaseGas, estimateTxGas, estimateSafeTxGas, estimateSafeDeploymentGas, extractPasskeyData, validateEthereumAddress, validateEip3770Address, getEip3770NetworkPrefixFromChainId, getChainIdFromEip3770NetworkPrefix } from './utils';
|
|
9
9
|
import EthSafeTransaction from './utils/transactions/SafeTransaction';
|
|
10
10
|
import EthSafeMessage from './utils/messages/SafeMessage';
|
|
11
11
|
import { SafeTransactionOptionalProps } from './utils/transactions/types';
|
|
12
12
|
import { encodeMultiSendData, decodeMultiSendData, standardizeSafeTransactionData } from './utils/transactions/utils';
|
|
13
13
|
import { getERC20Decimals, isGasTokenCompatibleWithHandlePayment, createERC20TokenTransferTransaction } from './utils/erc-20';
|
|
14
|
-
import { generateSignature, generateEIP712Signature, buildContractSignature, buildSignatureBytes, preimageSafeTransactionHash, preimageSafeMessageHash } from './utils/signatures/utils';
|
|
14
|
+
import { generateSignature, generateEIP712Signature, buildContractSignature, buildSignatureBytes, preimageSafeTransactionHash, preimageSafeMessageHash, generatePreValidatedSignature, adjustVInSignature, calculateSafeMessageHash, calculateSafeTransactionHash } from './utils/signatures/utils';
|
|
15
15
|
import { getEip712TxTypes, getEip712MessageTypes, hashSafeMessage, generateTypedData } from './utils/eip-712';
|
|
16
16
|
import { createPasskeyClient } from './utils/passkeys/PasskeyClient';
|
|
17
17
|
import getPasskeyOwnerAddress from './utils/passkeys/getPasskeyOwnerAddress';
|
|
18
18
|
import { getP256VerifierAddress } from './utils/passkeys/extractPasskeyData';
|
|
19
19
|
import generateOnChainIdentifier from './utils/on-chain-tracking/generateOnChainIdentifier';
|
|
20
|
-
|
|
20
|
+
import { SafeFeature, hasSafeFeature } from './utils/safeVersions';
|
|
21
|
+
export { estimateTxBaseGas, estimateTxGas, estimateSafeTxGas, estimateSafeDeploymentGas, extractPasskeyData, getP256VerifierAddress, ContractManager, CreateCallBaseContract, createERC20TokenTransferTransaction, DEFAULT_SAFE_VERSION, EthSafeSignature, MultiSendCallOnlyBaseContract, MultiSendBaseContract, generateOnChainIdentifier, PREDETERMINED_SALT_NONCE, SafeBaseContract, SafeProxyFactoryBaseContract, SafeTransactionOptionalProps, SignMessageLibBaseContract, encodeCreateProxyWithNonce, encodeMultiSendData, decodeMultiSendData, encodeSetupCallData, getCompatibilityFallbackHandlerContract, getExtensibleFallbackHandlerContract, getCreateCallContract, getERC20Decimals, getMultiSendCallOnlyContract, getMultiSendContract, getSafeProxyFactoryContract, getSafeContract, getSignMessageLibContract, getSafeWebAuthnSignerFactoryContract, getSafeWebAuthnSharedSignerContract, isGasTokenCompatibleWithHandlePayment, predictSafeAddress, getPredictedSafeAddressInitCode, standardizeSafeTransactionData, validateEip3770Address, validateEthereumAddress, generateSignature, generateEIP712Signature, buildContractSignature, buildSignatureBytes, preimageSafeTransactionHash, preimageSafeMessageHash, getEip712TxTypes, getEip712MessageTypes, getSafeAddressFromDeploymentTx, hashSafeMessage, generateTypedData, SafeProvider, createPasskeyClient, EthSafeTransaction, EthSafeMessage, getPasskeyOwnerAddress, adjustVInSignature, calculateSafeMessageHash, calculateSafeTransactionHash, generatePreValidatedSignature, SafeFeature, hasSafeFeature, getEip3770NetworkPrefixFromChainId, getChainIdFromEip3770NetworkPrefix };
|
|
21
22
|
export * from './types';
|
|
22
23
|
export default Safe;
|
|
23
24
|
declare module 'abitype' {
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,QAAQ,CAAA;AACzB,OAAO,YAAY,MAAM,gBAAgB,CAAA;AACzC,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,6BAA6B,EAC7B,gBAAgB,EAChB,4BAA4B,EAC5B,0BAA0B,EAC3B,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,EACL,uCAAuC,EACvC,oCAAoC,EACpC,qBAAqB,EACrB,4BAA4B,EAC5B,oBAAoB,EACpB,2BAA2B,EAC3B,eAAe,EACf,yBAAyB,EACzB,oCAAoC,EACpC,mCAAmC,EACpC,MAAM,qCAAqC,CAAA;AAC5C,OAAO,EACL,wBAAwB,EACxB,0BAA0B,EAC1B,mBAAmB,EACnB,kBAAkB,EAClB,+BAA+B,EAC/B,8BAA8B,EAC/B,MAAM,mBAAmB,CAAA;AAC1B,OAAO,eAAe,MAAM,4BAA4B,CAAA;AACxD,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EACb,iBAAiB,EACjB,yBAAyB,EACzB,kBAAkB,EAClB,uBAAuB,EACvB,sBAAsB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,QAAQ,CAAA;AACzB,OAAO,YAAY,MAAM,gBAAgB,CAAA;AACzC,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,6BAA6B,EAC7B,gBAAgB,EAChB,4BAA4B,EAC5B,0BAA0B,EAC3B,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,EACL,uCAAuC,EACvC,oCAAoC,EACpC,qBAAqB,EACrB,4BAA4B,EAC5B,oBAAoB,EACpB,2BAA2B,EAC3B,eAAe,EACf,yBAAyB,EACzB,oCAAoC,EACpC,mCAAmC,EACpC,MAAM,qCAAqC,CAAA;AAC5C,OAAO,EACL,wBAAwB,EACxB,0BAA0B,EAC1B,mBAAmB,EACnB,kBAAkB,EAClB,+BAA+B,EAC/B,8BAA8B,EAC/B,MAAM,mBAAmB,CAAA;AAC1B,OAAO,eAAe,MAAM,4BAA4B,CAAA;AACxD,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EACb,iBAAiB,EACjB,yBAAyB,EACzB,kBAAkB,EAClB,uBAAuB,EACvB,sBAAsB,EACtB,kCAAkC,EAClC,kCAAkC,EACnC,MAAM,SAAS,CAAA;AAChB,OAAO,kBAAkB,MAAM,sCAAsC,CAAA;AACrE,OAAO,cAAc,MAAM,8BAA8B,CAAA;AACzD,OAAO,EAAE,4BAA4B,EAAE,MAAM,4BAA4B,CAAA;AACzE,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,8BAA8B,EAC/B,MAAM,4BAA4B,CAAA;AACnC,OAAO,EACL,gBAAgB,EAChB,qCAAqC,EACrC,mCAAmC,EACpC,MAAM,gBAAgB,CAAA;AAEvB,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,sBAAsB,EACtB,mBAAmB,EACnB,2BAA2B,EAC3B,uBAAuB,EACvB,6BAA6B,EAC7B,kBAAkB,EAClB,wBAAwB,EACxB,4BAA4B,EAC7B,MAAM,0BAA0B,CAAA;AAEjC,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,eAAe,EACf,iBAAiB,EAClB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAA;AACpE,OAAO,sBAAsB,MAAM,yCAAyC,CAAA;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAA;AAC5E,OAAO,yBAAyB,MAAM,qDAAqD,CAAA;AAC3F,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAElE,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,iBAAiB,EACjB,yBAAyB,EACzB,kBAAkB,EAClB,sBAAsB,EACtB,eAAe,EACf,sBAAsB,EACtB,mCAAmC,EACnC,oBAAoB,EACpB,gBAAgB,EAChB,6BAA6B,EAC7B,qBAAqB,EACrB,yBAAyB,EACzB,wBAAwB,EACxB,gBAAgB,EAChB,4BAA4B,EAC5B,4BAA4B,EAC5B,0BAA0B,EAC1B,0BAA0B,EAC1B,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,uCAAuC,EACvC,oCAAoC,EACpC,qBAAqB,EACrB,gBAAgB,EAChB,4BAA4B,EAC5B,oBAAoB,EACpB,2BAA2B,EAC3B,eAAe,EACf,yBAAyB,EACzB,oCAAoC,EACpC,mCAAmC,EACnC,qCAAqC,EACrC,kBAAkB,EAClB,+BAA+B,EAC/B,8BAA8B,EAC9B,sBAAsB,EACtB,uBAAuB,EACvB,iBAAiB,EACjB,uBAAuB,EACvB,sBAAsB,EACtB,mBAAmB,EACnB,2BAA2B,EAC3B,uBAAuB,EACvB,gBAAgB,EAChB,qBAAqB,EACrB,8BAA8B,EAC9B,eAAe,EACf,iBAAiB,EACjB,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,EAClB,cAAc,EACd,sBAAsB,EACtB,kBAAkB,EAClB,wBAAwB,EACxB,4BAA4B,EAC5B,6BAA6B,EAC7B,WAAW,EACX,cAAc,EACd,kCAAkC,EAClC,kCAAkC,EACnC,CAAA;AAED,cAAc,SAAS,CAAA;AAEvB,eAAe,IAAI,CAAA;AAEnB,OAAO,QAAQ,SAAS,CAAC;IACvB,UAAiB,QAAQ;QACvB,WAAW,EAAE,MAAM,CAAA;KACpB;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../src/utils/eip-3770/config.ts"],"names":[],"mappings":"AAAA,UAAU,gBAAgB;IACxB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;CAChB;AAID,eAAO,MAAM,QAAQ,EAAE,gBAAgB,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../src/utils/eip-3770/config.ts"],"names":[],"mappings":"AAAA,UAAU,gBAAgB;IACxB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;CAChB;AAID,eAAO,MAAM,QAAQ,EAAE,gBAAgB,EAqiBtC,CAAA"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Eip3770Address } from '@safe-global/types-kit';
|
|
2
2
|
export declare function parseEip3770Address(fullAddress: string): Eip3770Address;
|
|
3
3
|
export declare function getEip3770NetworkPrefixFromChainId(chainId: bigint): string;
|
|
4
|
+
export declare function getChainIdFromEip3770NetworkPrefix(prefix: string): bigint;
|
|
4
5
|
export declare function isValidEip3770NetworkPrefix(prefix: string): boolean;
|
|
5
6
|
export declare function validateEip3770NetworkPrefix(prefix: string, currentChainId: bigint): void;
|
|
6
7
|
export declare function validateEthereumAddress(address: string): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/utils/eip-3770/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAGvD,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,cAAc,CAKvE;AAED,wBAAgB,kCAAkC,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAM1E;AAED,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEnE;AAED,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI,CAKzF;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAI7D;AAED,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,GACrB,cAAc,CAOhB"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/utils/eip-3770/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAGvD,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,cAAc,CAKvE;AAED,wBAAgB,kCAAkC,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAM1E;AAED,wBAAgB,kCAAkC,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAMzE;AAED,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEnE;AAED,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI,CAKzF;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAI7D;AAED,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,GACrB,cAAc,CAOhB"}
|
|
@@ -5,7 +5,7 @@ import SafeContract_v1_2_0 from '../contracts/Safe/v1.2.0/SafeContract_v1_2_0';
|
|
|
5
5
|
import SafeContract_v1_3_0 from '../contracts/Safe/v1.3.0/SafeContract_v1_3_0';
|
|
6
6
|
import SafeContract_v1_4_1 from '../contracts/Safe/v1.4.1/SafeContract_v1_4_1';
|
|
7
7
|
import SafeContract_v1_5_0 from '../contracts/Safe/v1.5.0/SafeContract_v1_5_0';
|
|
8
|
-
export declare enum
|
|
8
|
+
export declare enum SafeFeature {
|
|
9
9
|
SAFE_TX_GAS_OPTIONAL = "SAFE_TX_GAS_OPTIONAL",
|
|
10
10
|
SAFE_TX_GUARDS = "SAFE_TX_GUARDS",
|
|
11
11
|
SAFE_FALLBACK_HANDLER = "SAFE_FALLBACK_HANDLER",
|
|
@@ -17,7 +17,7 @@ export declare enum SAFE_FEATURES {
|
|
|
17
17
|
SAFE_L2_CONTRACTS = "SAFE_L2_CONTRACTS",
|
|
18
18
|
SAFE_MODULE_GUARD = "SAFE_MODULE_GUARD"
|
|
19
19
|
}
|
|
20
|
-
export declare const hasSafeFeature: (feature:
|
|
20
|
+
export declare const hasSafeFeature: (feature: SafeFeature, version: string) => boolean;
|
|
21
21
|
export type SafeContractCompatibleWithFallbackHandler = SafeContract_v1_1_1 | SafeContract_v1_2_0 | SafeContract_v1_3_0 | SafeContract_v1_4_1 | SafeContract_v1_5_0;
|
|
22
22
|
export type SafeContractCompatibleWithGuardManager = SafeContract_v1_3_0 | SafeContract_v1_4_1 | SafeContract_v1_5_0;
|
|
23
23
|
export type SafeContractCompatibleWithModuleManager = SafeContract_v1_3_0 | SafeContract_v1_4_1 | SafeContract_v1_5_0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"safeVersions.d.ts","sourceRoot":"","sources":["../../../src/utils/safeVersions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,8BAA8B,EAAE,MAAM,iCAAiC,CAAA;AAChF,OAAO,mBAAmB,MAAM,qEAAqE,CAAA;AACrG,OAAO,mBAAmB,MAAM,qEAAqE,CAAA;AACrG,OAAO,mBAAmB,MAAM,qEAAqE,CAAA;AACrG,OAAO,mBAAmB,MAAM,qEAAqE,CAAA;AACrG,OAAO,mBAAmB,MAAM,qEAAqE,CAAA;AACrG,OAAO,mBAAmB,MAAM,qEAAqE,CAAA;AAErG,oBAAY,
|
|
1
|
+
{"version":3,"file":"safeVersions.d.ts","sourceRoot":"","sources":["../../../src/utils/safeVersions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,8BAA8B,EAAE,MAAM,iCAAiC,CAAA;AAChF,OAAO,mBAAmB,MAAM,qEAAqE,CAAA;AACrG,OAAO,mBAAmB,MAAM,qEAAqE,CAAA;AACrG,OAAO,mBAAmB,MAAM,qEAAqE,CAAA;AACrG,OAAO,mBAAmB,MAAM,qEAAqE,CAAA;AACrG,OAAO,mBAAmB,MAAM,qEAAqE,CAAA;AACrG,OAAO,mBAAmB,MAAM,qEAAqE,CAAA;AAErG,oBAAY,WAAW;IACrB,oBAAoB,yBAAyB;IAC7C,cAAc,mBAAmB;IACjC,qBAAqB,0BAA0B;IAC/C,QAAQ,aAAa;IACrB,mBAAmB,wBAAwB;IAC3C,cAAc,mBAAmB;IACjC,mBAAmB,wBAAwB;IAC3C,cAAc,mBAAmB;IACjC,iBAAiB,sBAAsB;IACvC,iBAAiB,sBAAsB;CACxC;AAeD,eAAO,MAAM,cAAc,YAAa,WAAW,WAAW,MAAM,KAAG,OAMtE,CAAA;AAED,MAAM,MAAM,yCAAyC,GACjD,mBAAmB,GACnB,mBAAmB,GACnB,mBAAmB,GACnB,mBAAmB,GACnB,mBAAmB,CAAA;AAEvB,MAAM,MAAM,sCAAsC,GAC9C,mBAAmB,GACnB,mBAAmB,GACnB,mBAAmB,CAAA;AAEvB,MAAM,MAAM,uCAAuC,GAC/C,mBAAmB,GACnB,mBAAmB,GACnB,mBAAmB,CAAA;AAEvB,MAAM,MAAM,4CAA4C,GAAG,mBAAmB,CAAA;AAE9E,MAAM,MAAM,uCAAuC,GAC/C,mBAAmB,GACnB,mBAAmB,GACnB,mBAAmB,CAAA;AAEvB,MAAM,MAAM,2CAA2C,GACnD,mBAAmB,GACnB,mBAAmB,GACnB,mBAAmB,CAAA;AAEvB,wBAAsB,yCAAyC,CAC7D,YAAY,EAAE,8BAA8B,GAC3C,OAAO,CAAC,uCAAuC,CAAC,CAQlD;AAED,wBAAsB,6CAA6C,CACjE,YAAY,EAAE,8BAA8B,GAC3C,OAAO,CAAC,2CAA2C,CAAC,CAUtD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gas.d.ts","sourceRoot":"","sources":["../../../../src/utils/transactions/gas.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"gas.d.ts","sourceRoot":"","sources":["../../../../src/utils/transactions/gas.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAEpF,OAAO,IAAI,MAAM,gCAAgC,CAAA;AACjD,OAAO,YAAY,MAAM,wCAAwC,CAAA;AACjE,OAAO,EACL,sBAAsB,EACtB,8BAA8B,EAC/B,MAAM,iCAAiC,CAAA;AA+LxC,wBAAsB,WAAW,CAC/B,WAAW,EAAE,WAAW,EACxB,YAAY,EAAE,8BAA8B,EAC5C,YAAY,EAAE,YAAY,EAC1B,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,aAAa,EACxB,eAAe,CAAC,EAAE,sBAAsB,mBAsCzC;AAED,wBAAsB,aAAa,CACjC,YAAY,EAAE,8BAA8B,EAC5C,YAAY,EAAE,YAAY,EAC1B,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,aAAa,GACvB,OAAO,CAAC,MAAM,CAAC,CAgBjB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,IAAI,EACV,eAAe,EAAE,eAAe,GAC/B,OAAO,CAAC,MAAM,CAAC,CA8EjB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,IAAI,EACV,eAAe,EAAE,eAAe,GAC/B,OAAO,CAAC,MAAM,CAAC,CAajB;AAoPD;;;;;;;;;GASG;AACH,wBAAsB,yBAAyB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAgB3E"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@safe-global/protocol-kit",
|
|
3
|
-
"version": "7.
|
|
3
|
+
"version": "7.2.0",
|
|
4
4
|
"description": "SDK that facilitates the interaction with Safe Smart Accounts",
|
|
5
5
|
"types": "dist/src/index.d.ts",
|
|
6
6
|
"main": "dist/cjs/src/index.cjs",
|
|
@@ -81,8 +81,8 @@
|
|
|
81
81
|
"tsconfig-paths": "^4.2.0"
|
|
82
82
|
},
|
|
83
83
|
"dependencies": {
|
|
84
|
-
"@safe-global/safe-deployments": "^1.37.
|
|
85
|
-
"@safe-global/safe-modules-deployments": "^3.0.
|
|
84
|
+
"@safe-global/safe-deployments": "^1.37.56",
|
|
85
|
+
"@safe-global/safe-modules-deployments": "^3.0.4",
|
|
86
86
|
"@safe-global/types-kit": "^3.1.0",
|
|
87
87
|
"abitype": "^1.0.2",
|
|
88
88
|
"semver": "^7.7.2",
|