near-safe 0.6.0 → 0.6.2
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/cjs/constants.d.ts +2 -0
- package/dist/cjs/constants.js +9 -0
- package/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/index.js +1 -0
- package/dist/cjs/lib/safe.js +15 -10
- package/dist/cjs/near-safe.d.ts +1 -1
- package/dist/cjs/near-safe.js +5 -2
- package/dist/cjs/util.d.ts +1 -0
- package/dist/cjs/util.js +8 -0
- package/dist/esm/constants.d.ts +2 -0
- package/dist/esm/constants.js +6 -0
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.js +1 -0
- package/dist/esm/lib/safe.js +16 -11
- package/dist/esm/near-safe.d.ts +1 -1
- package/dist/esm/near-safe.js +5 -2
- package/dist/esm/util.d.ts +1 -0
- package/dist/esm/util.js +8 -1
- package/package.json +4 -4
@@ -0,0 +1,9 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.DEFAULT_SAFE_SALT_NONCE = exports.USER_OP_IDENTIFIER = void 0;
|
4
|
+
const viem_1 = require("viem");
|
5
|
+
const DOMAIN_SEPARATOR = "bitte/near-safe";
|
6
|
+
// 0x62697474652f6e6561722d7361666500
|
7
|
+
exports.USER_OP_IDENTIFIER = (0, viem_1.toHex)(DOMAIN_SEPARATOR, { size: 16 });
|
8
|
+
// 130811896738364114529934864114944206080
|
9
|
+
exports.DEFAULT_SAFE_SALT_NONCE = BigInt(exports.USER_OP_IDENTIFIER).toString();
|
package/dist/cjs/index.d.ts
CHANGED
package/dist/cjs/index.js
CHANGED
@@ -18,6 +18,7 @@ exports.populateTx = exports.Network = void 0;
|
|
18
18
|
__exportStar(require("./near-safe"), exports);
|
19
19
|
__exportStar(require("./types"), exports);
|
20
20
|
__exportStar(require("./util"), exports);
|
21
|
+
__exportStar(require("./constants"), exports);
|
21
22
|
var near_ca_1 = require("near-ca");
|
22
23
|
Object.defineProperty(exports, "Network", { enumerable: true, get: function () { return near_ca_1.Network; } });
|
23
24
|
Object.defineProperty(exports, "populateTx", { enumerable: true, get: function () { return near_ca_1.populateTx; } });
|
package/dist/cjs/lib/safe.js
CHANGED
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.SafeContractSuite = void 0;
|
4
4
|
const viem_1 = require("viem");
|
5
5
|
const deployments_1 = require("../_gen/deployments");
|
6
|
+
const constants_1 = require("../constants");
|
6
7
|
const util_1 = require("../util");
|
7
8
|
/**
|
8
9
|
* All contracts used in account creation & execution
|
@@ -104,16 +105,20 @@ class SafeContractSuite {
|
|
104
105
|
nonce: (0, viem_1.toHex)(nonce),
|
105
106
|
...this.factoryDataForSetup(safeNotDeployed, setup, safeSaltNonce),
|
106
107
|
// <https://github.com/safe-global/safe-modules/blob/9a18245f546bf2a8ed9bdc2b04aae44f949ec7a0/modules/4337/contracts/Safe4337Module.sol#L172>
|
107
|
-
callData: (0, viem_1.
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
108
|
+
callData: (0, viem_1.concat)([
|
109
|
+
(0, viem_1.encodeFunctionData)({
|
110
|
+
abi: this.m4337.abi,
|
111
|
+
functionName: "executeUserOp",
|
112
|
+
args: [
|
113
|
+
txData.to,
|
114
|
+
BigInt(txData.value),
|
115
|
+
txData.data,
|
116
|
+
txData.operation || 0,
|
117
|
+
],
|
118
|
+
}),
|
119
|
+
// Append On-Chain Identifier:
|
120
|
+
constants_1.USER_OP_IDENTIFIER,
|
121
|
+
]),
|
117
122
|
...feeData,
|
118
123
|
};
|
119
124
|
}
|
package/dist/cjs/near-safe.d.ts
CHANGED
@@ -7,9 +7,9 @@ import { DecodedMultisend, EncodedTxData, EvmTransactionData, MetaTransaction, U
|
|
7
7
|
export interface NearSafeConfig {
|
8
8
|
accountId: string;
|
9
9
|
mpcContractId: string;
|
10
|
-
pimlicoKey: string;
|
11
10
|
nearConfig?: NearConfig;
|
12
11
|
privateKey?: string;
|
12
|
+
pimlicoKey: string;
|
13
13
|
safeSaltNonce?: string;
|
14
14
|
}
|
15
15
|
export declare class NearSafe {
|
package/dist/cjs/near-safe.js
CHANGED
@@ -4,6 +4,7 @@ exports.NearSafe = void 0;
|
|
4
4
|
const ethers_multisend_1 = require("ethers-multisend");
|
5
5
|
const near_ca_1 = require("near-ca");
|
6
6
|
const viem_1 = require("viem");
|
7
|
+
const constants_1 = require("./constants");
|
7
8
|
const bundler_1 = require("./lib/bundler");
|
8
9
|
const multisend_1 = require("./lib/multisend");
|
9
10
|
const safe_1 = require("./lib/safe");
|
@@ -18,6 +19,7 @@ class NearSafe {
|
|
18
19
|
*/
|
19
20
|
static async create(config) {
|
20
21
|
const { pimlicoKey, safeSaltNonce } = config;
|
22
|
+
// const nearAdapter = await mockAdapter();
|
21
23
|
const nearAdapter = await (0, near_ca_1.setupAdapter)({ ...config });
|
22
24
|
const safePack = new safe_1.SafeContractSuite();
|
23
25
|
const setup = safePack.getSetup([nearAdapter.address]);
|
@@ -28,7 +30,7 @@ class NearSafe {
|
|
28
30
|
MPC EOA: ${nearAdapter.address}
|
29
31
|
Safe: ${safeAddress}
|
30
32
|
`);
|
31
|
-
return new NearSafe(nearAdapter, safePack, pimlicoKey, setup, safeAddress, safeSaltNonce ||
|
33
|
+
return new NearSafe(nearAdapter, safePack, pimlicoKey, setup, safeAddress, safeSaltNonce || constants_1.DEFAULT_SAFE_SALT_NONCE);
|
32
34
|
}
|
33
35
|
/**
|
34
36
|
* Constructs a new `NearSafe` object with the provided parameters.
|
@@ -62,7 +64,7 @@ class NearSafe {
|
|
62
64
|
* @returns {string} - The contract ID of the MPC contract.
|
63
65
|
*/
|
64
66
|
get mpcContractId() {
|
65
|
-
return this.nearAdapter.mpcContract.
|
67
|
+
return this.nearAdapter.mpcContract.accountId();
|
66
68
|
}
|
67
69
|
/**
|
68
70
|
* Retrieves the balance of the Safe account on the specified EVM chain.
|
@@ -89,6 +91,7 @@ class NearSafe {
|
|
89
91
|
if (transactions.length === 0) {
|
90
92
|
throw new Error("Empty transaction set!");
|
91
93
|
}
|
94
|
+
console.log(`Building UserOp on chainId ${chainId} with ${transactions.length} transaction(s)`);
|
92
95
|
const bundler = this.bundlerForChainId(chainId);
|
93
96
|
const [gasFees, nonce, safeDeployed] = await Promise.all([
|
94
97
|
bundler.getGasPrice(),
|
package/dist/cjs/util.d.ts
CHANGED
@@ -10,4 +10,5 @@ export declare function containsValue(transactions: MetaTransaction[]): boolean;
|
|
10
10
|
export declare function isContract(address: Address, chainId: number): Promise<boolean>;
|
11
11
|
export declare function getClient(chainId: number): PublicClient;
|
12
12
|
export declare function metaTransactionsFromRequest(params: SessionRequestParams): MetaTransaction[];
|
13
|
+
export declare function saltNonceFromMessage(input: string): string;
|
13
14
|
export {};
|
package/dist/cjs/util.js
CHANGED
@@ -7,6 +7,7 @@ exports.containsValue = containsValue;
|
|
7
7
|
exports.isContract = isContract;
|
8
8
|
exports.getClient = getClient;
|
9
9
|
exports.metaTransactionsFromRequest = metaTransactionsFromRequest;
|
10
|
+
exports.saltNonceFromMessage = saltNonceFromMessage;
|
10
11
|
const near_ca_1 = require("near-ca");
|
11
12
|
const viem_1 = require("viem");
|
12
13
|
//
|
@@ -58,3 +59,10 @@ function metaTransactionsFromRequest(params) {
|
|
58
59
|
data: tx.data || "0x",
|
59
60
|
}));
|
60
61
|
}
|
62
|
+
function saltNonceFromMessage(input) {
|
63
|
+
// Convert the string to bytes (UTF-8 encoding)
|
64
|
+
// Compute the keccak256 hash of the input bytes
|
65
|
+
// Convert the resulting hash (which is in hex) to a BigInt
|
66
|
+
// Return string for readability and transport.
|
67
|
+
return BigInt((0, viem_1.keccak256)((0, viem_1.toBytes)(input))).toString();
|
68
|
+
}
|
@@ -0,0 +1,6 @@
|
|
1
|
+
import { toHex } from "viem";
|
2
|
+
const DOMAIN_SEPARATOR = "bitte/near-safe";
|
3
|
+
// 0x62697474652f6e6561722d7361666500
|
4
|
+
export const USER_OP_IDENTIFIER = toHex(DOMAIN_SEPARATOR, { size: 16 });
|
5
|
+
// 130811896738364114529934864114944206080
|
6
|
+
export const DEFAULT_SAFE_SALT_NONCE = BigInt(USER_OP_IDENTIFIER).toString();
|
package/dist/esm/index.d.ts
CHANGED
package/dist/esm/index.js
CHANGED
package/dist/esm/lib/safe.js
CHANGED
@@ -1,5 +1,6 @@
|
|
1
|
-
import { encodeFunctionData, encodePacked, getCreate2Address, keccak256, toHex, zeroAddress, } from "viem";
|
1
|
+
import { concat, encodeFunctionData, encodePacked, getCreate2Address, keccak256, toHex, zeroAddress, } from "viem";
|
2
2
|
import { SAFE_DEPLOYMENTS } from "../_gen/deployments";
|
3
|
+
import { USER_OP_IDENTIFIER } from "../constants";
|
3
4
|
import { PLACEHOLDER_SIG, getClient, packGas, packPaymasterData, } from "../util";
|
4
5
|
/**
|
5
6
|
* All contracts used in account creation & execution
|
@@ -108,16 +109,20 @@ export class SafeContractSuite {
|
|
108
109
|
nonce: toHex(nonce),
|
109
110
|
...this.factoryDataForSetup(safeNotDeployed, setup, safeSaltNonce),
|
110
111
|
// <https://github.com/safe-global/safe-modules/blob/9a18245f546bf2a8ed9bdc2b04aae44f949ec7a0/modules/4337/contracts/Safe4337Module.sol#L172>
|
111
|
-
callData:
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
112
|
+
callData: concat([
|
113
|
+
encodeFunctionData({
|
114
|
+
abi: this.m4337.abi,
|
115
|
+
functionName: "executeUserOp",
|
116
|
+
args: [
|
117
|
+
txData.to,
|
118
|
+
BigInt(txData.value),
|
119
|
+
txData.data,
|
120
|
+
txData.operation || 0,
|
121
|
+
],
|
122
|
+
}),
|
123
|
+
// Append On-Chain Identifier:
|
124
|
+
USER_OP_IDENTIFIER,
|
125
|
+
]),
|
121
126
|
...feeData,
|
122
127
|
};
|
123
128
|
}
|
package/dist/esm/near-safe.d.ts
CHANGED
@@ -7,9 +7,9 @@ import { DecodedMultisend, EncodedTxData, EvmTransactionData, MetaTransaction, U
|
|
7
7
|
export interface NearSafeConfig {
|
8
8
|
accountId: string;
|
9
9
|
mpcContractId: string;
|
10
|
-
pimlicoKey: string;
|
11
10
|
nearConfig?: NearConfig;
|
12
11
|
privateKey?: string;
|
12
|
+
pimlicoKey: string;
|
13
13
|
safeSaltNonce?: string;
|
14
14
|
}
|
15
15
|
export declare class NearSafe {
|
package/dist/esm/near-safe.js
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
import { decodeMulti } from "ethers-multisend";
|
2
2
|
import { setupAdapter, signatureFromOutcome, toPayload, } from "near-ca";
|
3
3
|
import { decodeFunctionData, formatEther, serializeSignature, } from "viem";
|
4
|
+
import { DEFAULT_SAFE_SALT_NONCE } from "./constants";
|
4
5
|
import { Erc4337Bundler } from "./lib/bundler";
|
5
6
|
import { encodeMulti, isMultisendTx } from "./lib/multisend";
|
6
7
|
import { SafeContractSuite } from "./lib/safe";
|
@@ -21,6 +22,7 @@ export class NearSafe {
|
|
21
22
|
*/
|
22
23
|
static async create(config) {
|
23
24
|
const { pimlicoKey, safeSaltNonce } = config;
|
25
|
+
// const nearAdapter = await mockAdapter();
|
24
26
|
const nearAdapter = await setupAdapter({ ...config });
|
25
27
|
const safePack = new SafeContractSuite();
|
26
28
|
const setup = safePack.getSetup([nearAdapter.address]);
|
@@ -31,7 +33,7 @@ export class NearSafe {
|
|
31
33
|
MPC EOA: ${nearAdapter.address}
|
32
34
|
Safe: ${safeAddress}
|
33
35
|
`);
|
34
|
-
return new NearSafe(nearAdapter, safePack, pimlicoKey, setup, safeAddress, safeSaltNonce ||
|
36
|
+
return new NearSafe(nearAdapter, safePack, pimlicoKey, setup, safeAddress, safeSaltNonce || DEFAULT_SAFE_SALT_NONCE);
|
35
37
|
}
|
36
38
|
/**
|
37
39
|
* Constructs a new `NearSafe` object with the provided parameters.
|
@@ -65,7 +67,7 @@ export class NearSafe {
|
|
65
67
|
* @returns {string} - The contract ID of the MPC contract.
|
66
68
|
*/
|
67
69
|
get mpcContractId() {
|
68
|
-
return this.nearAdapter.mpcContract.
|
70
|
+
return this.nearAdapter.mpcContract.accountId();
|
69
71
|
}
|
70
72
|
/**
|
71
73
|
* Retrieves the balance of the Safe account on the specified EVM chain.
|
@@ -92,6 +94,7 @@ export class NearSafe {
|
|
92
94
|
if (transactions.length === 0) {
|
93
95
|
throw new Error("Empty transaction set!");
|
94
96
|
}
|
97
|
+
console.log(`Building UserOp on chainId ${chainId} with ${transactions.length} transaction(s)`);
|
95
98
|
const bundler = this.bundlerForChainId(chainId);
|
96
99
|
const [gasFees, nonce, safeDeployed] = await Promise.all([
|
97
100
|
bundler.getGasPrice(),
|
package/dist/esm/util.d.ts
CHANGED
@@ -10,4 +10,5 @@ export declare function containsValue(transactions: MetaTransaction[]): boolean;
|
|
10
10
|
export declare function isContract(address: Address, chainId: number): Promise<boolean>;
|
11
11
|
export declare function getClient(chainId: number): PublicClient;
|
12
12
|
export declare function metaTransactionsFromRequest(params: SessionRequestParams): MetaTransaction[];
|
13
|
+
export declare function saltNonceFromMessage(input: string): string;
|
13
14
|
export {};
|
package/dist/esm/util.js
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
import { Network } from "near-ca";
|
2
|
-
import { concatHex, encodePacked, toHex, isHex, parseTransaction, zeroAddress, } from "viem";
|
2
|
+
import { concatHex, encodePacked, toHex, isHex, parseTransaction, zeroAddress, toBytes, keccak256, } from "viem";
|
3
3
|
//
|
4
4
|
export const PLACEHOLDER_SIG = encodePacked(["uint48", "uint48"], [0, 0]);
|
5
5
|
export const packGas = (hi, lo) => encodePacked(["uint128", "uint128"], [BigInt(hi), BigInt(lo)]);
|
@@ -48,3 +48,10 @@ export function metaTransactionsFromRequest(params) {
|
|
48
48
|
data: tx.data || "0x",
|
49
49
|
}));
|
50
50
|
}
|
51
|
+
export function saltNonceFromMessage(input) {
|
52
|
+
// Convert the string to bytes (UTF-8 encoding)
|
53
|
+
// Compute the keccak256 hash of the input bytes
|
54
|
+
// Convert the resulting hash (which is in hex) to a BigInt
|
55
|
+
// Return string for readability and transport.
|
56
|
+
return BigInt(keccak256(toBytes(input))).toString();
|
57
|
+
}
|
package/package.json
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
{
|
2
2
|
"name": "near-safe",
|
3
|
-
"version": "0.6.
|
3
|
+
"version": "0.6.2",
|
4
4
|
"license": "MIT",
|
5
5
|
"description": "An SDK for controlling Ethereum Smart Accounts via ERC4337 from a Near Account.",
|
6
6
|
"author": "bh2smith",
|
7
7
|
"repository": {
|
8
8
|
"type": "git",
|
9
|
-
"url": "https://github.com/
|
9
|
+
"url": "https://github.com/BitteProtocol/near-safe"
|
10
10
|
},
|
11
11
|
"bugs": {
|
12
|
-
"url": "https://github.com/
|
12
|
+
"url": "https://github.com/BitteProtocol/near-safe/issues"
|
13
13
|
},
|
14
14
|
"engines": {
|
15
15
|
"node": ">=20.0.0"
|
@@ -44,7 +44,7 @@
|
|
44
44
|
"@safe-global/safe-gateway-typescript-sdk": "^3.22.2",
|
45
45
|
"ethers-multisend": "^3.1.0",
|
46
46
|
"near-api-js": "^5.0.0",
|
47
|
-
"near-ca": "^0.5.
|
47
|
+
"near-ca": "^0.5.9",
|
48
48
|
"semver": "^7.6.3",
|
49
49
|
"viem": "^2.16.5"
|
50
50
|
},
|