Skip to content

Commit 3d46518

Browse files
authored
near encode Signature Request (#35)
1 parent 8a69b89 commit 3d46518

File tree

4 files changed

+42
-31
lines changed

4 files changed

+42
-31
lines changed

examples/send-tx.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,17 @@ import { loadArgs } from "./cli";
44
import { TransactionManager } from "../src";
55
import { nearAccountFromKeyPair } from "near-ca";
66
import { KeyPair } from "near-api-js";
7+
import { KeyPairString } from "near-api-js/lib/utils";
78

89
dotenv.config();
910

1011
async function main(): Promise<void> {
1112
const options = await loadArgs();
1213
const nearAccount = await nearAccountFromKeyPair({
1314
accountId: process.env.NEAR_ACCOUNT_ID!,
14-
keyPair: KeyPair.fromString(process.env.NEAR_ACCOUNT_PRIVATE_KEY!),
15+
keyPair: KeyPair.fromString(
16+
process.env.NEAR_ACCOUNT_PRIVATE_KEY! as KeyPairString
17+
),
1518
network: {
1619
networkId: "testnet",
1720
nodeUrl: "https://rpc.testnet.near.org",
@@ -40,11 +43,12 @@ async function main(): Promise<void> {
4043
transactions.push(recoveryTx);
4144
}
4245

43-
const { unsignedUserOp, safeOpHash } = await txManager.buildTransaction({
46+
const unsignedUserOp = await txManager.buildTransaction({
4447
transactions,
45-
options,
48+
usePaymaster: options.usePaymaster,
4649
});
4750
console.log("Unsigned UserOp", unsignedUserOp);
51+
const safeOpHash = await txManager.opHash(unsignedUserOp);
4852
console.log("Safe Op Hash", safeOpHash);
4953

5054
// TODO: Evaluate gas cost (in ETH)

src/lib/safe.ts

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,7 @@ import {
88
getSafeModuleSetupDeployment,
99
} from "@safe-global/safe-modules-deployments";
1010
import { PLACEHOLDER_SIG, packGas, packPaymasterData } from "../util";
11-
import {
12-
GasPrice,
13-
PaymasterData,
14-
UnsignedUserOperation,
15-
UserOperation,
16-
} from "../types";
11+
import { GasPrice, UnsignedUserOperation, UserOperation } from "../types";
1712
import { MetaTransaction } from "ethers-multisend";
1813

1914
/**
@@ -121,8 +116,8 @@ export class ContractSuite {
121116
}
122117

123118
async getOpHash(
124-
unsignedUserOp: UserOperation,
125-
paymasterData: PaymasterData
119+
unsignedUserOp: UserOperation
120+
// paymasterData: PaymasterData
126121
): Promise<string> {
127122
return this.m4337.getOperationHash({
128123
...unsignedUserOp,
@@ -140,7 +135,7 @@ export class ContractSuite {
140135
unsignedUserOp.maxPriorityFeePerGas,
141136
unsignedUserOp.maxFeePerGas
142137
),
143-
paymasterAndData: packPaymasterData(paymasterData),
138+
paymasterAndData: packPaymasterData(unsignedUserOp),
144139
signature: PLACEHOLDER_SIG,
145140
});
146141
}

src/tx-manager.ts

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import { ethers } from "ethers";
2-
import { NearEthAdapter, MpcContract } from "near-ca";
2+
import { NearEthAdapter, MpcContract, NearEthTxData } from "near-ca";
33
import { Erc4337Bundler } from "./lib/bundler";
44
import { packSignature } from "./util";
55
import { getNearSignature } from "./lib/near";
6-
import { UserOperation, UserOperationReceipt, UserOptions } from "./types";
6+
import { UserOperation, UserOperationReceipt } from "./types";
77
import { MetaTransaction, encodeMulti } from "ethers-multisend";
88
import { ContractSuite } from "./lib/safe";
99
import { Account } from "near-api-js";
@@ -92,9 +92,9 @@ export class TransactionManager {
9292

9393
async buildTransaction(args: {
9494
transactions: MetaTransaction[];
95-
options: UserOptions;
96-
}): Promise<{ safeOpHash: string; unsignedUserOp: UserOperation }> {
97-
const { transactions, options } = args;
95+
usePaymaster: boolean;
96+
}): Promise<UserOperation> {
97+
const { transactions, usePaymaster } = args;
9898
const gasFees = (await this.bundler.getGasPrice()).fast;
9999
// const gasFees = await this.provider.getFeeData();
100100
// Build Singular MetaTransaction for Multisend from transaction list.
@@ -114,27 +114,39 @@ export class TransactionManager {
114114

115115
const paymasterData = await this.bundler.getPaymasterData(
116116
rawUserOp,
117-
options.usePaymaster,
117+
usePaymaster,
118118
this.safeNotDeployed
119119
);
120120

121121
const unsignedUserOp = { ...rawUserOp, ...paymasterData };
122-
const safeOpHash = await this.safePack.getOpHash(
123-
unsignedUserOp,
124-
paymasterData
125-
);
126122

127-
return {
128-
safeOpHash,
129-
unsignedUserOp,
130-
};
123+
return unsignedUserOp;
131124
}
132125

133126
async signTransaction(safeOpHash: string): Promise<string> {
134127
const signature = await getNearSignature(this.nearAdapter, safeOpHash);
135128
return packSignature(signature);
136129
}
137130

131+
async opHash(userOp: UserOperation): Promise<string> {
132+
return this.safePack.getOpHash(userOp);
133+
}
134+
async encodeSignatureRequest(
135+
unsignedUserOp: UserOperation
136+
): Promise<NearEthTxData> {
137+
const safeOpHash = (await this.opHash(unsignedUserOp)) as `0x${string}`;
138+
const txData = this.nearAdapter.encodeSignRequest({
139+
method: "hash",
140+
chainId: 0,
141+
params: safeOpHash as `0x${string}`,
142+
});
143+
144+
return {
145+
...txData,
146+
evmMessage: unsignedUserOp,
147+
};
148+
}
149+
138150
async executeTransaction(
139151
userOp: UserOperation
140152
): Promise<UserOperationReceipt> {

yarn.lock

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2289,14 +2289,14 @@ near-api-js@^5.0.0:
22892289
node-fetch "2.6.7"
22902290

22912291
near-ca@^0.5.2:
2292-
version "0.5.2"
2293-
resolved "https://registry.yarnpkg.com/near-ca/-/near-ca-0.5.2.tgz#02ab0e7f0c86ab3e37b54ef0f72e2d4b5c76ae56"
2294-
integrity sha512-MbZo5IsG7YY6v3WVtestqjLz/THzc0UdOpx1KLUbmPO9CuNAMvMN5HhMIr2ZlPq+VuUui3tRVlOyilWt/x6vRg==
2292+
version "0.5.4"
2293+
resolved "https://registry.yarnpkg.com/near-ca/-/near-ca-0.5.4.tgz#04d0d6f50005e312c3ac0aec3ccf85c93e940bfb"
2294+
integrity sha512-Q5hY6uY3/2qYOqiXT23an3hyKeqPKG1RJRGIn/v55I+8FdlIvJYLd/gllB4crDn2psYwjUoevwTUbRLMP33bmA==
22952295
dependencies:
22962296
"@walletconnect/web3wallet" "^1.13.0"
22972297
elliptic "^6.5.6"
22982298
near-api-js "^5.0.0"
2299-
viem "^2.17.5"
2299+
viem "^2.21.6"
23002300

23012301
node-addon-api@^5.0.0:
23022302
version "5.1.0"
@@ -2860,7 +2860,7 @@ util-deprecate@^1.0.1:
28602860
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
28612861
integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
28622862

2863-
viem@^2.17.5:
2863+
viem@^2.21.6:
28642864
version "2.21.6"
28652865
resolved "https://registry.yarnpkg.com/viem/-/viem-2.21.6.tgz#741f9e579e069335d1540051dde19aea272ee1d7"
28662866
integrity sha512-YX48IVl6nZ4FRsY4ypv2RrxtQVWysIY146/lBW53tma8u32h8EsiA7vecw9ZbrueNUy/asHR4Egu68Z6FOvDzQ==

0 commit comments

Comments
 (0)