@appliedblockchain/silentdatarollup-core 1.0.4 → 1.0.5
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/{chunk-CH35C5Q7.mjs → chunk-PTTWND7Y.mjs} +52 -33
- package/dist/index.d.mts +14 -15
- package/dist/index.d.ts +14 -15
- package/dist/index.js +52 -37
- package/dist/index.mjs +3 -11
- package/dist/tests.mjs +1 -1
- package/package.json +1 -1
|
@@ -143,28 +143,11 @@ async function signAuthHeaderRawMessage(signer, payload, timestamp, chainId) {
|
|
|
143
143
|
log("Raw signature generated:", signature);
|
|
144
144
|
return signature;
|
|
145
145
|
}
|
|
146
|
-
async function
|
|
147
|
-
log("Signing typed delegate header", { chainId, message });
|
|
148
|
-
const signature = await signer.signTypedData(
|
|
149
|
-
{ ...eip721Domain, chainId },
|
|
150
|
-
delegateEIP721Types,
|
|
151
|
-
message
|
|
152
|
-
);
|
|
153
|
-
log("Signature generated:", signature);
|
|
154
|
-
return signature;
|
|
155
|
-
}
|
|
156
|
-
async function signRawDelegateHeader(signer, message) {
|
|
157
|
-
log("Signing raw delegate header", message);
|
|
158
|
-
const signature = await signer.signMessage(message);
|
|
159
|
-
log("Raw signature generated:", signature);
|
|
160
|
-
return signature;
|
|
161
|
-
}
|
|
162
|
-
async function getAuthHeaders(signer, payload, signatureType) {
|
|
146
|
+
async function getAuthHeaders(signer, payload, chainId, signatureType) {
|
|
163
147
|
const xTimestamp = (/* @__PURE__ */ new Date()).toISOString();
|
|
164
148
|
const headers = {
|
|
165
149
|
[HEADER_TIMESTAMP]: xTimestamp
|
|
166
150
|
};
|
|
167
|
-
const chainId = (await signer.provider.getNetwork()).chainId.toString();
|
|
168
151
|
switch (signatureType) {
|
|
169
152
|
case "RAW" /* Raw */:
|
|
170
153
|
log("Generating raw signature");
|
|
@@ -189,12 +172,11 @@ async function getAuthHeaders(signer, payload, signatureType) {
|
|
|
189
172
|
}
|
|
190
173
|
return headers;
|
|
191
174
|
}
|
|
192
|
-
function isSignableContractCall(payload,
|
|
193
|
-
if (!
|
|
175
|
+
function isSignableContractCall(payload, contracts) {
|
|
176
|
+
if (!contracts || contracts.length === 0) {
|
|
194
177
|
return false;
|
|
195
178
|
}
|
|
196
179
|
log("Checking if contract call is signable");
|
|
197
|
-
log("Contract methods to sign:", contractMethodsToSign);
|
|
198
180
|
if (payload.method !== "eth_call") {
|
|
199
181
|
log("Payload method is not eth_call, returning false");
|
|
200
182
|
return false;
|
|
@@ -204,8 +186,31 @@ function isSignableContractCall(payload, contractMethodsToSign, contract) {
|
|
|
204
186
|
log("Invalid params, returning false");
|
|
205
187
|
return false;
|
|
206
188
|
}
|
|
207
|
-
const
|
|
208
|
-
|
|
189
|
+
const callTarget = params[0].to;
|
|
190
|
+
if (!callTarget) {
|
|
191
|
+
log("Missing call target, returning false");
|
|
192
|
+
return false;
|
|
193
|
+
}
|
|
194
|
+
log(`Call target: ${callTarget}`);
|
|
195
|
+
const contractIndex = contracts.findIndex(
|
|
196
|
+
(c) => c.contract.target.toString().toLowerCase() === callTarget.toLowerCase()
|
|
197
|
+
);
|
|
198
|
+
if (contractIndex < 0) {
|
|
199
|
+
log("Contract not found, returning false");
|
|
200
|
+
return false;
|
|
201
|
+
}
|
|
202
|
+
const callData = params[0].data;
|
|
203
|
+
if (!callData) {
|
|
204
|
+
log("Missing call data, returning false");
|
|
205
|
+
return false;
|
|
206
|
+
}
|
|
207
|
+
const methodSignature = callData.slice(2, 10);
|
|
208
|
+
if (!methodSignature) {
|
|
209
|
+
log("Missing method signature, returning false");
|
|
210
|
+
return false;
|
|
211
|
+
}
|
|
212
|
+
log(`Method signature: ${methodSignature}`);
|
|
213
|
+
const { contract, contractMethodsToSign } = contracts[contractIndex];
|
|
209
214
|
const isSignable = contractMethodsToSign.some((methodName) => {
|
|
210
215
|
const fragment = contract.interface.getFunction(methodName);
|
|
211
216
|
return !!fragment && methodSignature.startsWith(fragment.selector.slice(2));
|
|
@@ -229,8 +234,8 @@ var SilentDataRollupBase = class {
|
|
|
229
234
|
this.delegateSignerExpires = 0;
|
|
230
235
|
this.cachedDelegateHeaders = null;
|
|
231
236
|
this.cachedHeadersExpiry = 0;
|
|
232
|
-
this.
|
|
233
|
-
this.
|
|
237
|
+
this.delegateHeadersPromise = null;
|
|
238
|
+
this.contracts = [];
|
|
234
239
|
this._cachedNetwork = null;
|
|
235
240
|
this.config = {
|
|
236
241
|
...config,
|
|
@@ -352,6 +357,22 @@ var SilentDataRollupBase = class {
|
|
|
352
357
|
}
|
|
353
358
|
async getDelegateHeaders(provider) {
|
|
354
359
|
log2("Getting delegate headers");
|
|
360
|
+
if (!this.delegateHeadersPromise) {
|
|
361
|
+
this.delegateHeadersPromise = this.generateDelegateHeaders(provider);
|
|
362
|
+
}
|
|
363
|
+
const currentPromise = this.delegateHeadersPromise;
|
|
364
|
+
try {
|
|
365
|
+
return await currentPromise;
|
|
366
|
+
} catch (error) {
|
|
367
|
+
log2("Error getting delegate headers:", error);
|
|
368
|
+
throw new Error("Failed to get delegate headers");
|
|
369
|
+
} finally {
|
|
370
|
+
if (this.delegateHeadersPromise === currentPromise) {
|
|
371
|
+
this.delegateHeadersPromise = null;
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
async generateDelegateHeaders(provider) {
|
|
355
376
|
const now = Math.floor(Date.now() / 1e3);
|
|
356
377
|
const signatureType = this.config.authSignatureType;
|
|
357
378
|
const isCachedHeadersValid = this.cachedDelegateHeaders && this.cachedHeadersExpiry - DELEGATE_EXPIRATION_THRESHOLD_BUFFER > now;
|
|
@@ -480,8 +501,10 @@ var SilentDataRollupBase = class {
|
|
|
480
501
|
}
|
|
481
502
|
setContract(contract, contractMethodsToSign) {
|
|
482
503
|
log2("Setting contract and methods to sign: ", contractMethodsToSign);
|
|
483
|
-
this.
|
|
484
|
-
|
|
504
|
+
this.contracts.push({
|
|
505
|
+
contract,
|
|
506
|
+
contractMethodsToSign
|
|
507
|
+
});
|
|
485
508
|
}
|
|
486
509
|
/**
|
|
487
510
|
* Prepares the message to be signed for the x-signature header.
|
|
@@ -513,7 +536,7 @@ var SilentDataRollupBase = class {
|
|
|
513
536
|
|
|
514
537
|
// src/contract.ts
|
|
515
538
|
import {
|
|
516
|
-
Contract
|
|
539
|
+
Contract,
|
|
517
540
|
Interface,
|
|
518
541
|
assertArgument
|
|
519
542
|
} from "ethers";
|
|
@@ -547,7 +570,7 @@ function getContractRunner(runner, provider) {
|
|
|
547
570
|
}
|
|
548
571
|
return new CustomContractRunner(runner.provider, runner);
|
|
549
572
|
}
|
|
550
|
-
var SilentDataRollupContract = class extends
|
|
573
|
+
var SilentDataRollupContract = class extends Contract {
|
|
551
574
|
constructor(config) {
|
|
552
575
|
const { address, abi, runner, contractMethodsToSign, provider } = config;
|
|
553
576
|
const contractInterface = new Interface(abi);
|
|
@@ -596,10 +619,6 @@ export {
|
|
|
596
619
|
NetworkName,
|
|
597
620
|
SignatureType,
|
|
598
621
|
getAuthEIP721Types,
|
|
599
|
-
signAuthHeaderTypedData,
|
|
600
|
-
signAuthHeaderRawMessage,
|
|
601
|
-
signTypedDelegateHeader,
|
|
602
|
-
signRawDelegateHeader,
|
|
603
622
|
getAuthHeaders,
|
|
604
623
|
isSignableContractCall,
|
|
605
624
|
defaultGetDelegate,
|
package/dist/index.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Signer, JsonRpcPayload, InterfaceAbi, ContractRunner, Provider,
|
|
1
|
+
import { Signer, Contract, JsonRpcPayload, InterfaceAbi, ContractRunner, Provider, TypedDataDomain, TypedDataField } from 'ethers';
|
|
2
2
|
|
|
3
3
|
declare const SIGN_RPC_METHODS: string[];
|
|
4
4
|
declare const eip721Domain: {
|
|
@@ -101,6 +101,10 @@ type SilentDataRollupContractConfig = {
|
|
|
101
101
|
contractMethodsToSign: string[];
|
|
102
102
|
provider?: Provider;
|
|
103
103
|
};
|
|
104
|
+
type ContractInfo = {
|
|
105
|
+
contract: Contract;
|
|
106
|
+
contractMethodsToSign: string[];
|
|
107
|
+
};
|
|
104
108
|
|
|
105
109
|
declare class SilentDataRollupBase {
|
|
106
110
|
config: BaseConfig;
|
|
@@ -109,8 +113,8 @@ declare class SilentDataRollupBase {
|
|
|
109
113
|
private delegateSignerExpires;
|
|
110
114
|
private cachedDelegateHeaders;
|
|
111
115
|
private cachedHeadersExpiry;
|
|
112
|
-
|
|
113
|
-
|
|
116
|
+
private delegateHeadersPromise;
|
|
117
|
+
contracts: ContractInfo[];
|
|
114
118
|
private _cachedNetwork;
|
|
115
119
|
constructor(config: BaseConfig);
|
|
116
120
|
private resolveDelegateConfig;
|
|
@@ -139,6 +143,7 @@ declare class SilentDataRollupBase {
|
|
|
139
143
|
*/
|
|
140
144
|
protected signTypedDelegateHeader(provider: any, chainId: string, message: DelegateSignerMessage): Promise<string>;
|
|
141
145
|
getDelegateHeaders(provider: any): Promise<DelegateHeaders>;
|
|
146
|
+
generateDelegateHeaders(provider: any): Promise<DelegateHeaders>;
|
|
142
147
|
getAuthHeaders(provider: any, payload: JsonRpcPayload | JsonRpcPayload[]): Promise<AuthHeaders>;
|
|
143
148
|
signAuthHeaderRawMessage(provider: any, payload: JsonRpcPayload | JsonRpcPayload[], timestamp: string, chainId: string): Promise<string>;
|
|
144
149
|
signAuthHeaderTypedData(provider: any, payload: JsonRpcPayload | JsonRpcPayload[], timestamp: string, chainId: string): Promise<string>;
|
|
@@ -185,11 +190,7 @@ declare function getAuthEIP721Types(payload: JsonRpcPayload | JsonRpcPayload[]):
|
|
|
185
190
|
type: string;
|
|
186
191
|
}[];
|
|
187
192
|
};
|
|
188
|
-
declare function
|
|
189
|
-
declare function signAuthHeaderRawMessage(signer: any, payload: JsonRpcPayload | JsonRpcPayload[], timestamp: string, chainId: string): Promise<string>;
|
|
190
|
-
declare function signTypedDelegateHeader(signer: any, chainId: string, message: DelegateSignerMessage): Promise<any>;
|
|
191
|
-
declare function signRawDelegateHeader(signer: any, message: string): Promise<string>;
|
|
192
|
-
declare function getAuthHeaders(signer: Signer, payload: JsonRpcPayload | JsonRpcPayload[], signatureType: SignatureType): Promise<AuthHeaders>;
|
|
193
|
+
declare function getAuthHeaders(signer: Signer, payload: JsonRpcPayload | JsonRpcPayload[], chainId: string, signatureType: SignatureType): Promise<AuthHeaders>;
|
|
193
194
|
/**
|
|
194
195
|
* Determines if a given JSON-RPC payload represents a call to a contract method that requires signing.
|
|
195
196
|
*
|
|
@@ -200,19 +201,17 @@ declare function getAuthHeaders(signer: Signer, payload: JsonRpcPayload | JsonRp
|
|
|
200
201
|
* The function performs the following checks:
|
|
201
202
|
* 1. Verifies if the payload is an `eth_call`.
|
|
202
203
|
* 2. Extracts the method signature from the call data.
|
|
203
|
-
* 3. Compares the signature against
|
|
204
|
-
* 4. Uses
|
|
204
|
+
* 3. Compares the signature against the list of contracts and their methods requiring signing.
|
|
205
|
+
* 4. Uses each contract's ABI to match the method signature with known methods.
|
|
205
206
|
*
|
|
206
207
|
* By accurately identifying these calls, we can add appropriate authentication headers
|
|
207
208
|
* to the request, enabling the smart contract to verify the caller's identity.
|
|
208
209
|
*
|
|
209
210
|
* @param payload - The JSON-RPC payload to analyze.
|
|
210
|
-
* @param
|
|
211
|
-
* @param contract - The contract instance containing the ABI information.
|
|
211
|
+
* @param contracts - An array of contract information containing contracts and their methods to sign.
|
|
212
212
|
* @returns {boolean} True if the call is to a method that requires signing, false otherwise.
|
|
213
|
-
* @throws {Error} If contractMethodsToSign or contract is not provided.
|
|
214
213
|
*/
|
|
215
|
-
declare function isSignableContractCall(payload: JsonRpcPayload,
|
|
214
|
+
declare function isSignableContractCall(payload: JsonRpcPayload, contracts: ContractInfo[]): boolean;
|
|
216
215
|
declare const defaultGetDelegate: (provider: any) => Promise<Signer>;
|
|
217
216
|
declare const prepareTypedDataPayload: (p: JsonRpcPayload) => AuthSignatureMessageRequest;
|
|
218
217
|
|
|
@@ -242,4 +241,4 @@ interface PrivateEvent {
|
|
|
242
241
|
*/
|
|
243
242
|
declare function calculateEventTypeHash(eventSignature: string): string;
|
|
244
243
|
|
|
245
|
-
export { type AuthHeaders, type AuthSignatureMessage, type AuthSignatureMessageRequest, type BaseConfig, ChainId, DEBUG_NAMESPACE, DEBUG_NAMESPACE_SILENTDATA_INTERCEPTOR, DEFAULT_DELEGATE_EXPIRES, DELEGATE_EXPIRATION_THRESHOLD_BUFFER, type DelegateConfig, type DelegateHeaders, type DelegateSignerMessage, HEADER_DELEGATE, HEADER_DELEGATE_SIGNATURE, HEADER_EIP712_DELEGATE_SIGNATURE, HEADER_EIP712_SIGNATURE, HEADER_SIGNATURE, HEADER_TIMESTAMP, NetworkName, PRIVATE_EVENT_SIGNATURE, PRIVATE_EVENT_SIGNATURE_HASH, type PrivateEvent, SIGN_RPC_METHODS, SignatureType, type SilentDataProviderOptions, SilentDataRollupBase, SilentDataRollupContract, type SilentDataRollupContractConfig, type SilentdataNetworkConfig, WHITELISTED_METHODS, calculateEventTypeHash, defaultGetDelegate, delegateEIP721Types, eip721Domain, getAuthEIP721Types, getAuthHeaders, isSignableContractCall, prepareTypedDataPayload
|
|
244
|
+
export { type AuthHeaders, type AuthSignatureMessage, type AuthSignatureMessageRequest, type BaseConfig, ChainId, type ContractInfo, DEBUG_NAMESPACE, DEBUG_NAMESPACE_SILENTDATA_INTERCEPTOR, DEFAULT_DELEGATE_EXPIRES, DELEGATE_EXPIRATION_THRESHOLD_BUFFER, type DelegateConfig, type DelegateHeaders, type DelegateSignerMessage, HEADER_DELEGATE, HEADER_DELEGATE_SIGNATURE, HEADER_EIP712_DELEGATE_SIGNATURE, HEADER_EIP712_SIGNATURE, HEADER_SIGNATURE, HEADER_TIMESTAMP, NetworkName, PRIVATE_EVENT_SIGNATURE, PRIVATE_EVENT_SIGNATURE_HASH, type PrivateEvent, SIGN_RPC_METHODS, SignatureType, type SilentDataProviderOptions, SilentDataRollupBase, SilentDataRollupContract, type SilentDataRollupContractConfig, type SilentdataNetworkConfig, WHITELISTED_METHODS, calculateEventTypeHash, defaultGetDelegate, delegateEIP721Types, eip721Domain, getAuthEIP721Types, getAuthHeaders, isSignableContractCall, prepareTypedDataPayload };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Signer, JsonRpcPayload, InterfaceAbi, ContractRunner, Provider,
|
|
1
|
+
import { Signer, Contract, JsonRpcPayload, InterfaceAbi, ContractRunner, Provider, TypedDataDomain, TypedDataField } from 'ethers';
|
|
2
2
|
|
|
3
3
|
declare const SIGN_RPC_METHODS: string[];
|
|
4
4
|
declare const eip721Domain: {
|
|
@@ -101,6 +101,10 @@ type SilentDataRollupContractConfig = {
|
|
|
101
101
|
contractMethodsToSign: string[];
|
|
102
102
|
provider?: Provider;
|
|
103
103
|
};
|
|
104
|
+
type ContractInfo = {
|
|
105
|
+
contract: Contract;
|
|
106
|
+
contractMethodsToSign: string[];
|
|
107
|
+
};
|
|
104
108
|
|
|
105
109
|
declare class SilentDataRollupBase {
|
|
106
110
|
config: BaseConfig;
|
|
@@ -109,8 +113,8 @@ declare class SilentDataRollupBase {
|
|
|
109
113
|
private delegateSignerExpires;
|
|
110
114
|
private cachedDelegateHeaders;
|
|
111
115
|
private cachedHeadersExpiry;
|
|
112
|
-
|
|
113
|
-
|
|
116
|
+
private delegateHeadersPromise;
|
|
117
|
+
contracts: ContractInfo[];
|
|
114
118
|
private _cachedNetwork;
|
|
115
119
|
constructor(config: BaseConfig);
|
|
116
120
|
private resolveDelegateConfig;
|
|
@@ -139,6 +143,7 @@ declare class SilentDataRollupBase {
|
|
|
139
143
|
*/
|
|
140
144
|
protected signTypedDelegateHeader(provider: any, chainId: string, message: DelegateSignerMessage): Promise<string>;
|
|
141
145
|
getDelegateHeaders(provider: any): Promise<DelegateHeaders>;
|
|
146
|
+
generateDelegateHeaders(provider: any): Promise<DelegateHeaders>;
|
|
142
147
|
getAuthHeaders(provider: any, payload: JsonRpcPayload | JsonRpcPayload[]): Promise<AuthHeaders>;
|
|
143
148
|
signAuthHeaderRawMessage(provider: any, payload: JsonRpcPayload | JsonRpcPayload[], timestamp: string, chainId: string): Promise<string>;
|
|
144
149
|
signAuthHeaderTypedData(provider: any, payload: JsonRpcPayload | JsonRpcPayload[], timestamp: string, chainId: string): Promise<string>;
|
|
@@ -185,11 +190,7 @@ declare function getAuthEIP721Types(payload: JsonRpcPayload | JsonRpcPayload[]):
|
|
|
185
190
|
type: string;
|
|
186
191
|
}[];
|
|
187
192
|
};
|
|
188
|
-
declare function
|
|
189
|
-
declare function signAuthHeaderRawMessage(signer: any, payload: JsonRpcPayload | JsonRpcPayload[], timestamp: string, chainId: string): Promise<string>;
|
|
190
|
-
declare function signTypedDelegateHeader(signer: any, chainId: string, message: DelegateSignerMessage): Promise<any>;
|
|
191
|
-
declare function signRawDelegateHeader(signer: any, message: string): Promise<string>;
|
|
192
|
-
declare function getAuthHeaders(signer: Signer, payload: JsonRpcPayload | JsonRpcPayload[], signatureType: SignatureType): Promise<AuthHeaders>;
|
|
193
|
+
declare function getAuthHeaders(signer: Signer, payload: JsonRpcPayload | JsonRpcPayload[], chainId: string, signatureType: SignatureType): Promise<AuthHeaders>;
|
|
193
194
|
/**
|
|
194
195
|
* Determines if a given JSON-RPC payload represents a call to a contract method that requires signing.
|
|
195
196
|
*
|
|
@@ -200,19 +201,17 @@ declare function getAuthHeaders(signer: Signer, payload: JsonRpcPayload | JsonRp
|
|
|
200
201
|
* The function performs the following checks:
|
|
201
202
|
* 1. Verifies if the payload is an `eth_call`.
|
|
202
203
|
* 2. Extracts the method signature from the call data.
|
|
203
|
-
* 3. Compares the signature against
|
|
204
|
-
* 4. Uses
|
|
204
|
+
* 3. Compares the signature against the list of contracts and their methods requiring signing.
|
|
205
|
+
* 4. Uses each contract's ABI to match the method signature with known methods.
|
|
205
206
|
*
|
|
206
207
|
* By accurately identifying these calls, we can add appropriate authentication headers
|
|
207
208
|
* to the request, enabling the smart contract to verify the caller's identity.
|
|
208
209
|
*
|
|
209
210
|
* @param payload - The JSON-RPC payload to analyze.
|
|
210
|
-
* @param
|
|
211
|
-
* @param contract - The contract instance containing the ABI information.
|
|
211
|
+
* @param contracts - An array of contract information containing contracts and their methods to sign.
|
|
212
212
|
* @returns {boolean} True if the call is to a method that requires signing, false otherwise.
|
|
213
|
-
* @throws {Error} If contractMethodsToSign or contract is not provided.
|
|
214
213
|
*/
|
|
215
|
-
declare function isSignableContractCall(payload: JsonRpcPayload,
|
|
214
|
+
declare function isSignableContractCall(payload: JsonRpcPayload, contracts: ContractInfo[]): boolean;
|
|
216
215
|
declare const defaultGetDelegate: (provider: any) => Promise<Signer>;
|
|
217
216
|
declare const prepareTypedDataPayload: (p: JsonRpcPayload) => AuthSignatureMessageRequest;
|
|
218
217
|
|
|
@@ -242,4 +241,4 @@ interface PrivateEvent {
|
|
|
242
241
|
*/
|
|
243
242
|
declare function calculateEventTypeHash(eventSignature: string): string;
|
|
244
243
|
|
|
245
|
-
export { type AuthHeaders, type AuthSignatureMessage, type AuthSignatureMessageRequest, type BaseConfig, ChainId, DEBUG_NAMESPACE, DEBUG_NAMESPACE_SILENTDATA_INTERCEPTOR, DEFAULT_DELEGATE_EXPIRES, DELEGATE_EXPIRATION_THRESHOLD_BUFFER, type DelegateConfig, type DelegateHeaders, type DelegateSignerMessage, HEADER_DELEGATE, HEADER_DELEGATE_SIGNATURE, HEADER_EIP712_DELEGATE_SIGNATURE, HEADER_EIP712_SIGNATURE, HEADER_SIGNATURE, HEADER_TIMESTAMP, NetworkName, PRIVATE_EVENT_SIGNATURE, PRIVATE_EVENT_SIGNATURE_HASH, type PrivateEvent, SIGN_RPC_METHODS, SignatureType, type SilentDataProviderOptions, SilentDataRollupBase, SilentDataRollupContract, type SilentDataRollupContractConfig, type SilentdataNetworkConfig, WHITELISTED_METHODS, calculateEventTypeHash, defaultGetDelegate, delegateEIP721Types, eip721Domain, getAuthEIP721Types, getAuthHeaders, isSignableContractCall, prepareTypedDataPayload
|
|
244
|
+
export { type AuthHeaders, type AuthSignatureMessage, type AuthSignatureMessageRequest, type BaseConfig, ChainId, type ContractInfo, DEBUG_NAMESPACE, DEBUG_NAMESPACE_SILENTDATA_INTERCEPTOR, DEFAULT_DELEGATE_EXPIRES, DELEGATE_EXPIRATION_THRESHOLD_BUFFER, type DelegateConfig, type DelegateHeaders, type DelegateSignerMessage, HEADER_DELEGATE, HEADER_DELEGATE_SIGNATURE, HEADER_EIP712_DELEGATE_SIGNATURE, HEADER_EIP712_SIGNATURE, HEADER_SIGNATURE, HEADER_TIMESTAMP, NetworkName, PRIVATE_EVENT_SIGNATURE, PRIVATE_EVENT_SIGNATURE_HASH, type PrivateEvent, SIGN_RPC_METHODS, SignatureType, type SilentDataProviderOptions, SilentDataRollupBase, SilentDataRollupContract, type SilentDataRollupContractConfig, type SilentdataNetworkConfig, WHITELISTED_METHODS, calculateEventTypeHash, defaultGetDelegate, delegateEIP721Types, eip721Domain, getAuthEIP721Types, getAuthHeaders, isSignableContractCall, prepareTypedDataPayload };
|
package/dist/index.js
CHANGED
|
@@ -56,11 +56,7 @@ __export(index_exports, {
|
|
|
56
56
|
getAuthEIP721Types: () => getAuthEIP721Types,
|
|
57
57
|
getAuthHeaders: () => getAuthHeaders,
|
|
58
58
|
isSignableContractCall: () => isSignableContractCall,
|
|
59
|
-
prepareTypedDataPayload: () => prepareTypedDataPayload
|
|
60
|
-
signAuthHeaderRawMessage: () => signAuthHeaderRawMessage,
|
|
61
|
-
signAuthHeaderTypedData: () => signAuthHeaderTypedData,
|
|
62
|
-
signRawDelegateHeader: () => signRawDelegateHeader,
|
|
63
|
-
signTypedDelegateHeader: () => signTypedDelegateHeader
|
|
59
|
+
prepareTypedDataPayload: () => prepareTypedDataPayload
|
|
64
60
|
});
|
|
65
61
|
module.exports = __toCommonJS(index_exports);
|
|
66
62
|
|
|
@@ -209,28 +205,11 @@ async function signAuthHeaderRawMessage(signer, payload, timestamp, chainId) {
|
|
|
209
205
|
log("Raw signature generated:", signature);
|
|
210
206
|
return signature;
|
|
211
207
|
}
|
|
212
|
-
async function
|
|
213
|
-
log("Signing typed delegate header", { chainId, message });
|
|
214
|
-
const signature = await signer.signTypedData(
|
|
215
|
-
{ ...eip721Domain, chainId },
|
|
216
|
-
delegateEIP721Types,
|
|
217
|
-
message
|
|
218
|
-
);
|
|
219
|
-
log("Signature generated:", signature);
|
|
220
|
-
return signature;
|
|
221
|
-
}
|
|
222
|
-
async function signRawDelegateHeader(signer, message) {
|
|
223
|
-
log("Signing raw delegate header", message);
|
|
224
|
-
const signature = await signer.signMessage(message);
|
|
225
|
-
log("Raw signature generated:", signature);
|
|
226
|
-
return signature;
|
|
227
|
-
}
|
|
228
|
-
async function getAuthHeaders(signer, payload, signatureType) {
|
|
208
|
+
async function getAuthHeaders(signer, payload, chainId, signatureType) {
|
|
229
209
|
const xTimestamp = (/* @__PURE__ */ new Date()).toISOString();
|
|
230
210
|
const headers = {
|
|
231
211
|
[HEADER_TIMESTAMP]: xTimestamp
|
|
232
212
|
};
|
|
233
|
-
const chainId = (await signer.provider.getNetwork()).chainId.toString();
|
|
234
213
|
switch (signatureType) {
|
|
235
214
|
case "RAW" /* Raw */:
|
|
236
215
|
log("Generating raw signature");
|
|
@@ -255,12 +234,11 @@ async function getAuthHeaders(signer, payload, signatureType) {
|
|
|
255
234
|
}
|
|
256
235
|
return headers;
|
|
257
236
|
}
|
|
258
|
-
function isSignableContractCall(payload,
|
|
259
|
-
if (!
|
|
237
|
+
function isSignableContractCall(payload, contracts) {
|
|
238
|
+
if (!contracts || contracts.length === 0) {
|
|
260
239
|
return false;
|
|
261
240
|
}
|
|
262
241
|
log("Checking if contract call is signable");
|
|
263
|
-
log("Contract methods to sign:", contractMethodsToSign);
|
|
264
242
|
if (payload.method !== "eth_call") {
|
|
265
243
|
log("Payload method is not eth_call, returning false");
|
|
266
244
|
return false;
|
|
@@ -270,8 +248,31 @@ function isSignableContractCall(payload, contractMethodsToSign, contract) {
|
|
|
270
248
|
log("Invalid params, returning false");
|
|
271
249
|
return false;
|
|
272
250
|
}
|
|
273
|
-
const
|
|
274
|
-
|
|
251
|
+
const callTarget = params[0].to;
|
|
252
|
+
if (!callTarget) {
|
|
253
|
+
log("Missing call target, returning false");
|
|
254
|
+
return false;
|
|
255
|
+
}
|
|
256
|
+
log(`Call target: ${callTarget}`);
|
|
257
|
+
const contractIndex = contracts.findIndex(
|
|
258
|
+
(c) => c.contract.target.toString().toLowerCase() === callTarget.toLowerCase()
|
|
259
|
+
);
|
|
260
|
+
if (contractIndex < 0) {
|
|
261
|
+
log("Contract not found, returning false");
|
|
262
|
+
return false;
|
|
263
|
+
}
|
|
264
|
+
const callData = params[0].data;
|
|
265
|
+
if (!callData) {
|
|
266
|
+
log("Missing call data, returning false");
|
|
267
|
+
return false;
|
|
268
|
+
}
|
|
269
|
+
const methodSignature = callData.slice(2, 10);
|
|
270
|
+
if (!methodSignature) {
|
|
271
|
+
log("Missing method signature, returning false");
|
|
272
|
+
return false;
|
|
273
|
+
}
|
|
274
|
+
log(`Method signature: ${methodSignature}`);
|
|
275
|
+
const { contract, contractMethodsToSign } = contracts[contractIndex];
|
|
275
276
|
const isSignable = contractMethodsToSign.some((methodName) => {
|
|
276
277
|
const fragment = contract.interface.getFunction(methodName);
|
|
277
278
|
return !!fragment && methodSignature.startsWith(fragment.selector.slice(2));
|
|
@@ -295,8 +296,8 @@ var SilentDataRollupBase = class {
|
|
|
295
296
|
this.delegateSignerExpires = 0;
|
|
296
297
|
this.cachedDelegateHeaders = null;
|
|
297
298
|
this.cachedHeadersExpiry = 0;
|
|
298
|
-
this.
|
|
299
|
-
this.
|
|
299
|
+
this.delegateHeadersPromise = null;
|
|
300
|
+
this.contracts = [];
|
|
300
301
|
this._cachedNetwork = null;
|
|
301
302
|
this.config = {
|
|
302
303
|
...config,
|
|
@@ -418,6 +419,22 @@ var SilentDataRollupBase = class {
|
|
|
418
419
|
}
|
|
419
420
|
async getDelegateHeaders(provider) {
|
|
420
421
|
log2("Getting delegate headers");
|
|
422
|
+
if (!this.delegateHeadersPromise) {
|
|
423
|
+
this.delegateHeadersPromise = this.generateDelegateHeaders(provider);
|
|
424
|
+
}
|
|
425
|
+
const currentPromise = this.delegateHeadersPromise;
|
|
426
|
+
try {
|
|
427
|
+
return await currentPromise;
|
|
428
|
+
} catch (error) {
|
|
429
|
+
log2("Error getting delegate headers:", error);
|
|
430
|
+
throw new Error("Failed to get delegate headers");
|
|
431
|
+
} finally {
|
|
432
|
+
if (this.delegateHeadersPromise === currentPromise) {
|
|
433
|
+
this.delegateHeadersPromise = null;
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
async generateDelegateHeaders(provider) {
|
|
421
438
|
const now = Math.floor(Date.now() / 1e3);
|
|
422
439
|
const signatureType = this.config.authSignatureType;
|
|
423
440
|
const isCachedHeadersValid = this.cachedDelegateHeaders && this.cachedHeadersExpiry - DELEGATE_EXPIRATION_THRESHOLD_BUFFER > now;
|
|
@@ -546,8 +563,10 @@ var SilentDataRollupBase = class {
|
|
|
546
563
|
}
|
|
547
564
|
setContract(contract, contractMethodsToSign) {
|
|
548
565
|
log2("Setting contract and methods to sign: ", contractMethodsToSign);
|
|
549
|
-
this.
|
|
550
|
-
|
|
566
|
+
this.contracts.push({
|
|
567
|
+
contract,
|
|
568
|
+
contractMethodsToSign
|
|
569
|
+
});
|
|
551
570
|
}
|
|
552
571
|
/**
|
|
553
572
|
* Prepares the message to be signed for the x-signature header.
|
|
@@ -666,9 +685,5 @@ function calculateEventTypeHash(eventSignature) {
|
|
|
666
685
|
getAuthEIP721Types,
|
|
667
686
|
getAuthHeaders,
|
|
668
687
|
isSignableContractCall,
|
|
669
|
-
prepareTypedDataPayload
|
|
670
|
-
signAuthHeaderRawMessage,
|
|
671
|
-
signAuthHeaderTypedData,
|
|
672
|
-
signRawDelegateHeader,
|
|
673
|
-
signTypedDelegateHeader
|
|
688
|
+
prepareTypedDataPayload
|
|
674
689
|
});
|
package/dist/index.mjs
CHANGED
|
@@ -25,12 +25,8 @@ import {
|
|
|
25
25
|
getAuthEIP721Types,
|
|
26
26
|
getAuthHeaders,
|
|
27
27
|
isSignableContractCall,
|
|
28
|
-
prepareTypedDataPayload
|
|
29
|
-
|
|
30
|
-
signAuthHeaderTypedData,
|
|
31
|
-
signRawDelegateHeader,
|
|
32
|
-
signTypedDelegateHeader
|
|
33
|
-
} from "./chunk-CH35C5Q7.mjs";
|
|
28
|
+
prepareTypedDataPayload
|
|
29
|
+
} from "./chunk-PTTWND7Y.mjs";
|
|
34
30
|
export {
|
|
35
31
|
ChainId,
|
|
36
32
|
DEBUG_NAMESPACE,
|
|
@@ -58,9 +54,5 @@ export {
|
|
|
58
54
|
getAuthEIP721Types,
|
|
59
55
|
getAuthHeaders,
|
|
60
56
|
isSignableContractCall,
|
|
61
|
-
prepareTypedDataPayload
|
|
62
|
-
signAuthHeaderRawMessage,
|
|
63
|
-
signAuthHeaderTypedData,
|
|
64
|
-
signRawDelegateHeader,
|
|
65
|
-
signTypedDelegateHeader
|
|
57
|
+
prepareTypedDataPayload
|
|
66
58
|
};
|
package/dist/tests.mjs
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@appliedblockchain/silentdatarollup-core",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.5",
|
|
4
4
|
"description": "Core library for Silent Data [Rollup]",
|
|
5
5
|
"author": "Applied Blockchain",
|
|
6
6
|
"homepage": "https://github.com/appliedblockchain/silent-data-rollup-providers#readme",
|