@toruslabs/ethereum-controllers 9.0.0 → 9.1.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/lib.cjs/AccountAbstraction/AccountAbstractionController.js +18 -20
- package/dist/lib.cjs/Eip5792/walletGetCallsStatus.js +2 -2
- package/dist/lib.cjs/Eip7702/eip7702Utils.js +3 -3
- package/dist/lib.cjs/Gas/GasFeeController.js +2 -3
- package/dist/lib.cjs/Keyring/KeyringController.js +8 -10
- package/dist/lib.cjs/Message/utils.js +3 -6
- package/dist/lib.cjs/Network/NetworkController.js +7 -9
- package/dist/lib.cjs/Network/createEthereumMiddleware.js +373 -285
- package/dist/lib.cjs/Network/createJsonRpcClient.js +21 -21
- package/dist/lib.cjs/Preferences/PreferencesController.js +2 -2
- package/dist/lib.cjs/Transaction/TransactionController.js +13 -13
- package/dist/lib.cjs/Transaction/TransactionGasUtil.js +8 -8
- package/dist/lib.cjs/Transaction/TransactionUtils.js +20 -20
- package/dist/lib.cjs/index.js +9 -0
- package/dist/lib.cjs/types/AccountAbstraction/AccountAbstractionController.d.ts +3 -3
- package/dist/lib.cjs/types/Eip5792/walletSendCalls.d.ts +1 -1
- package/dist/lib.cjs/types/Eip7702/walletUpgradeAccount.d.ts +1 -1
- package/dist/lib.cjs/types/Network/NetworkController.d.ts +1 -1
- package/dist/lib.cjs/types/Network/createEthereumMiddleware.d.ts +28 -90
- package/dist/lib.cjs/types/Network/createJsonRpcClient.d.ts +4 -4
- package/dist/lib.cjs/types/Network/index.d.ts +5 -0
- package/dist/lib.cjs/types/Network/interfaces.d.ts +58 -0
- package/dist/lib.cjs/types/index.d.ts +1 -3
- package/dist/lib.cjs/types/utils/eip5792Types.d.ts +1 -1
- package/dist/lib.cjs/types/utils/eip7702Types.d.ts +1 -1
- package/dist/lib.cjs/types/utils/interfaces.d.ts +2 -2
- package/dist/lib.cjs/utils/conversionUtils.js +2 -2
- package/dist/lib.cjs/utils/helpers.js +4 -4
- package/dist/lib.cjs/utils/transaction.js +2 -2
- package/dist/lib.esm/AccountAbstraction/AccountAbstractionController.js +19 -21
- package/dist/lib.esm/Eip5792/walletGetCallsStatus.js +2 -2
- package/dist/lib.esm/Eip7702/eip7702Utils.js +3 -3
- package/dist/lib.esm/Gas/GasFeeController.js +2 -3
- package/dist/lib.esm/Keyring/KeyringController.js +9 -11
- package/dist/lib.esm/Message/utils.js +4 -7
- package/dist/lib.esm/Network/NetworkController.js +8 -10
- package/dist/lib.esm/Network/createEthereumMiddleware.js +387 -290
- package/dist/lib.esm/Network/createJsonRpcClient.js +22 -22
- package/dist/lib.esm/Preferences/PreferencesController.js +2 -2
- package/dist/lib.esm/Transaction/TransactionController.js +13 -13
- package/dist/lib.esm/Transaction/TransactionGasUtil.js +8 -8
- package/dist/lib.esm/Transaction/TransactionUtils.js +20 -20
- package/dist/lib.esm/index.js +4 -3
- package/dist/lib.esm/utils/conversionUtils.js +2 -2
- package/dist/lib.esm/utils/helpers.js +3 -3
- package/dist/lib.esm/utils/transaction.js +2 -2
- package/package.json +5 -5
- package/dist/lib.cjs/types/utils/hex.d.ts +0 -9
- package/dist/lib.cjs/utils/hex.js +0 -23
- package/dist/lib.esm/utils/hex.js +0 -21
|
@@ -8,25 +8,23 @@ var log = require('loglevel');
|
|
|
8
8
|
var viem = require('viem');
|
|
9
9
|
var accountAbstraction = require('viem/account-abstraction');
|
|
10
10
|
|
|
11
|
-
const eoaInterceptorMiddleware = eoaAddress => (
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
11
|
+
const eoaInterceptorMiddleware = eoaAddress => async ({
|
|
12
|
+
request,
|
|
13
|
+
next,
|
|
14
|
+
context
|
|
15
|
+
}) => {
|
|
16
|
+
context.set("isAAProviderRequest", true);
|
|
17
|
+
if (request.method === "eth_accounts" || request.method === "eth_requestAccounts") {
|
|
18
|
+
return [eoaAddress];
|
|
17
19
|
}
|
|
18
|
-
next();
|
|
20
|
+
return next();
|
|
19
21
|
};
|
|
20
22
|
function eoaProviderAsMiddleware(provider) {
|
|
21
|
-
return async (
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
return end();
|
|
27
|
-
} catch (error) {
|
|
28
|
-
return end(error);
|
|
29
|
-
}
|
|
23
|
+
return async ({
|
|
24
|
+
request
|
|
25
|
+
}) => {
|
|
26
|
+
const result = await provider.request(request);
|
|
27
|
+
return result;
|
|
30
28
|
};
|
|
31
29
|
}
|
|
32
30
|
class AccountAbstractionController extends baseControllers.BaseController {
|
|
@@ -92,10 +90,10 @@ class AccountAbstractionController extends baseControllers.BaseController {
|
|
|
92
90
|
transport: viem.http(providerConfig.rpcTarget)
|
|
93
91
|
});
|
|
94
92
|
// viem wallet client using json-rpc account from eoaProvider
|
|
95
|
-
const aaEngine =
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
const provider = auth.
|
|
93
|
+
const aaEngine = auth.JRPCEngineV2.create({
|
|
94
|
+
middleware: [eoaInterceptorMiddleware(eoaAddress), eoaProviderAsMiddleware(eoaProvider)]
|
|
95
|
+
});
|
|
96
|
+
const provider = auth.providerFromEngineV2(aaEngine);
|
|
99
97
|
// need to hoist the account address https://viem.sh/docs/clients/wallet#optional-hoist-the-account
|
|
100
98
|
const eoaWalletClient = viem.createWalletClient({
|
|
101
99
|
account: eoaAddress,
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var baseControllers = require('@toruslabs/base-controllers');
|
|
4
|
+
var metadataHelpers = require('@toruslabs/metadata-helpers');
|
|
4
5
|
var auth = require('@web3auth/auth');
|
|
5
6
|
var eip5792Types = require('../utils/eip5792Types.js');
|
|
6
|
-
var hex = require('../utils/hex.js');
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
9
|
* Maps a TransactionStatus to an EIP-5792 GetCallsStatusCode.
|
|
@@ -65,7 +65,7 @@ function walletGetCallsStatus(request, getTransactionByBatchId) {
|
|
|
65
65
|
return {
|
|
66
66
|
status: mapTransactionStatusToEip5792Status(batchTx.status),
|
|
67
67
|
id: batchId,
|
|
68
|
-
chainId:
|
|
68
|
+
chainId: metadataHelpers.add0x(batchTx.chainId),
|
|
69
69
|
atomic: true,
|
|
70
70
|
receipts: batchTx.txReceipt ? [batchTx.txReceipt] : []
|
|
71
71
|
};
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
var metadataHelpers = require('@toruslabs/metadata-helpers');
|
|
3
4
|
var viem = require('viem');
|
|
4
5
|
var abis = require('../utils/abis.js');
|
|
5
6
|
var constants = require('../utils/constants.js');
|
|
6
7
|
var eip7702Types = require('../utils/eip7702Types.js');
|
|
7
|
-
var hex = require('../utils/hex.js');
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* The MetaMask EIP-7702 Stateless Delegator contract address.
|
|
@@ -14,10 +14,10 @@ const MetaMask_EIP7702_Stateless_Delegator = "0x63c0c19a282a1B52b07dD5a65b58948A
|
|
|
14
14
|
async function getDelegationAddress(walletAddress, chainId, getEthCode) {
|
|
15
15
|
// query eth_getCode
|
|
16
16
|
const code = await getEthCode(walletAddress, chainId);
|
|
17
|
-
const normalizedCode = code ?
|
|
17
|
+
const normalizedCode = code ? metadataHelpers.add0x(code).toLowerCase() : "0x0";
|
|
18
18
|
const hasDelegation = normalizedCode.length === 48 && normalizedCode.startsWith(eip7702Types.EIP_7702_PREFIX);
|
|
19
19
|
if (hasDelegation) {
|
|
20
|
-
const delegationAddress =
|
|
20
|
+
const delegationAddress = metadataHelpers.add0x(normalizedCode.slice(eip7702Types.EIP_7702_PREFIX.length));
|
|
21
21
|
return delegationAddress;
|
|
22
22
|
}
|
|
23
23
|
return null;
|
|
@@ -2,10 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
var _defineProperty = require('@babel/runtime/helpers/defineProperty');
|
|
4
4
|
var baseControllers = require('@toruslabs/base-controllers');
|
|
5
|
+
var metadataHelpers = require('@toruslabs/metadata-helpers');
|
|
5
6
|
var log = require('loglevel');
|
|
6
|
-
var viem = require('viem');
|
|
7
7
|
var constants = require('../utils/constants.js');
|
|
8
|
-
var hex = require('../utils/hex.js');
|
|
9
8
|
var gasUtil = require('./gasUtil.js');
|
|
10
9
|
|
|
11
10
|
const GAS_FEE_API = "https://mock-gas-server.herokuapp.com/";
|
|
@@ -120,7 +119,7 @@ class GasFeeController extends baseControllers.BaseController {
|
|
|
120
119
|
const chainId = this.getNetworkIdentifier();
|
|
121
120
|
if (chainId === "loading") return;
|
|
122
121
|
let chainIdInt;
|
|
123
|
-
if (
|
|
122
|
+
if (metadataHelpers.isHexString(chainId)) {
|
|
124
123
|
chainIdInt = Number.parseInt(chainId, 16);
|
|
125
124
|
}
|
|
126
125
|
try {
|
|
@@ -5,7 +5,6 @@ var baseControllers = require('@toruslabs/base-controllers');
|
|
|
5
5
|
var metadataHelpers = require('@toruslabs/metadata-helpers');
|
|
6
6
|
var viem$1 = require('viem');
|
|
7
7
|
var accounts = require('viem/accounts');
|
|
8
|
-
var hex = require('../utils/hex.js');
|
|
9
8
|
var viem = require('../utils/viem.js');
|
|
10
9
|
|
|
11
10
|
class KeyringController extends baseControllers.BaseKeyringController {
|
|
@@ -24,7 +23,7 @@ class KeyringController extends baseControllers.BaseKeyringController {
|
|
|
24
23
|
}
|
|
25
24
|
async signTransaction(tx, address) {
|
|
26
25
|
const wallet = this._getWalletForAccount(address);
|
|
27
|
-
const account = accounts.privateKeyToAccount(
|
|
26
|
+
const account = accounts.privateKeyToAccount(metadataHelpers.add0x(wallet.privateKey));
|
|
28
27
|
const localTx = tx;
|
|
29
28
|
const txToSign = viem.prepareViemTx(localTx);
|
|
30
29
|
// NOTE: don't use account.signTransaction directly because it only return signed serialized transaction
|
|
@@ -44,7 +43,7 @@ class KeyringController extends baseControllers.BaseKeyringController {
|
|
|
44
43
|
}
|
|
45
44
|
async signEip7702Authorization(authorization, address) {
|
|
46
45
|
const wallet = this._getWalletForAccount(address);
|
|
47
|
-
const account = accounts.privateKeyToAccount(
|
|
46
|
+
const account = accounts.privateKeyToAccount(metadataHelpers.add0x(wallet.privateKey));
|
|
48
47
|
// Convert hex strings to proper types for RLP encoding
|
|
49
48
|
// EIP-7702 authorization tuple: [chain_id_decimal, address, nonce_decimal]
|
|
50
49
|
const chainIdDecimal = parseInt(authorization.chainId, 16);
|
|
@@ -68,8 +67,8 @@ class KeyringController extends baseControllers.BaseKeyringController {
|
|
|
68
67
|
}
|
|
69
68
|
async importAccount(accountPrivateKey) {
|
|
70
69
|
try {
|
|
71
|
-
const hexPrivateKey = accountPrivateKey.padStart(64, "0");
|
|
72
|
-
const account = accounts.privateKeyToAccount(
|
|
70
|
+
const hexPrivateKey = metadataHelpers.remove0x(accountPrivateKey).padStart(64, "0");
|
|
71
|
+
const account = accounts.privateKeyToAccount(metadataHelpers.add0x(hexPrivateKey));
|
|
73
72
|
const publicKey = account.publicKey;
|
|
74
73
|
const address = account.address;
|
|
75
74
|
const existingWallet = this.state.wallets.find(w => w.address === address);
|
|
@@ -100,8 +99,7 @@ class KeyringController extends baseControllers.BaseKeyringController {
|
|
|
100
99
|
}
|
|
101
100
|
}
|
|
102
101
|
getPrivateKeyBytes(privateKey) {
|
|
103
|
-
|
|
104
|
-
return metadataHelpers.hexToBytes(stripped);
|
|
102
|
+
return metadataHelpers.hexToBytes(privateKey);
|
|
105
103
|
}
|
|
106
104
|
// For eth_sign, we need to sign arbitrary data:
|
|
107
105
|
async signMessage(data, address) {
|
|
@@ -110,14 +108,14 @@ class KeyringController extends baseControllers.BaseKeyringController {
|
|
|
110
108
|
}
|
|
111
109
|
const wallet = this._getWalletForAccount(address);
|
|
112
110
|
const privKey = this.getPrivateKeyBytes(wallet.privateKey);
|
|
113
|
-
const payload = metadataHelpers.hexToBytes(
|
|
111
|
+
const payload = metadataHelpers.hexToBytes(data);
|
|
114
112
|
const messageSig = baseControllers.ecsignature(payload, privKey);
|
|
115
113
|
const sig = baseControllers.concatSig(messageSig.v, messageSig.r, messageSig.s);
|
|
116
114
|
return sig;
|
|
117
115
|
}
|
|
118
116
|
async signPersonalMessage(data, address) {
|
|
119
117
|
const wallet = this._getWalletForAccount(address);
|
|
120
|
-
const account = accounts.privateKeyToAccount(
|
|
118
|
+
const account = accounts.privateKeyToAccount(metadataHelpers.add0x(wallet.privateKey));
|
|
121
119
|
// we need to check if the data is hex or not
|
|
122
120
|
// For historical reasons, you must submit the message to sign in hex-encoded UTF-8.
|
|
123
121
|
// https://docs.metamask.io/wallet/how-to/sign-data/#use-personal_sign
|
|
@@ -131,7 +129,7 @@ class KeyringController extends baseControllers.BaseKeyringController {
|
|
|
131
129
|
// personal_signTypedData, signs data along with the schema
|
|
132
130
|
async signTypedData(typedData, address) {
|
|
133
131
|
const wallet = this._getWalletForAccount(address);
|
|
134
|
-
const account = accounts.privateKeyToAccount(
|
|
132
|
+
const account = accounts.privateKeyToAccount(metadataHelpers.add0x(wallet.privateKey));
|
|
135
133
|
delete typedData.types.EIP712Domain;
|
|
136
134
|
const primaryType = typedData.primaryType;
|
|
137
135
|
if (!primaryType) {
|
|
@@ -3,9 +3,7 @@
|
|
|
3
3
|
var baseControllers = require('@toruslabs/base-controllers');
|
|
4
4
|
var metadataHelpers = require('@toruslabs/metadata-helpers');
|
|
5
5
|
var viem = require('viem');
|
|
6
|
-
var hex = require('../utils/hex.js');
|
|
7
6
|
|
|
8
|
-
const hexRe = /^[0-9A-Fa-f]+$/gu;
|
|
9
7
|
function validateAddress(address, propertyName) {
|
|
10
8
|
if (!address || typeof address !== "string" || !viem.isAddress(address)) {
|
|
11
9
|
throw new Error(`Invalid "${propertyName}" address: ${address} must be a valid string.`);
|
|
@@ -23,14 +21,13 @@ function validateSignMessageData(messageData) {
|
|
|
23
21
|
}
|
|
24
22
|
function normalizeMessageData(data) {
|
|
25
23
|
try {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
return hex.addHexPrefix(stripped);
|
|
24
|
+
if (metadataHelpers.isHexString(data)) {
|
|
25
|
+
return metadataHelpers.add0x(data);
|
|
29
26
|
}
|
|
30
27
|
} catch {
|
|
31
28
|
// do nothing
|
|
32
29
|
}
|
|
33
|
-
return
|
|
30
|
+
return metadataHelpers.add0x(metadataHelpers.bytesToHex(metadataHelpers.utf8ToBytes(data)));
|
|
34
31
|
}
|
|
35
32
|
async function validateTypedSignMessageDataV4(messageData, currentChainId) {
|
|
36
33
|
validateAddress(messageData.from, "from");
|
|
@@ -150,15 +150,13 @@ class NetworkController extends baseControllers.BaseController {
|
|
|
150
150
|
networkMiddleware,
|
|
151
151
|
blockTracker
|
|
152
152
|
}) {
|
|
153
|
-
const
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
})
|
|
159
|
-
|
|
160
|
-
engine.push(networkMiddleware);
|
|
161
|
-
const provider = auth.providerFromEngine(engine);
|
|
153
|
+
const engine = auth.JRPCEngineV2.create({
|
|
154
|
+
middleware: [baseControllers.createAnalyticsMiddleware({
|
|
155
|
+
providerConfig: this.getProviderConfig(),
|
|
156
|
+
analytics: this.analytics
|
|
157
|
+
}), createEthereumMiddleware.createEthereumMiddleware(this.baseProviderHandlers, this.getProviderConfig(), this.analytics), networkMiddleware]
|
|
158
|
+
});
|
|
159
|
+
const provider = auth.providerFromEngineV2(engine);
|
|
162
160
|
this.setProvider({
|
|
163
161
|
provider,
|
|
164
162
|
blockTracker
|