Skip to content

Commit a0eb074

Browse files
committed
added optional param used by remix
Signed-off-by: Simeon Nakov <[email protected]>
1 parent 2eb65ea commit a0eb074

File tree

5 files changed

+42
-7
lines changed

5 files changed

+42
-7
lines changed

packages/relay/src/lib/debug.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -129,13 +129,18 @@ export class DebugImpl implements Debug {
129129
// If no nested tracerConfig is provided AND no tracer is explicitly set,
130130
// check for top-level opcodeLogger config properties (defaults to opcodeLogger)
131131
if (!tracerObject?.tracerConfig && !tracerObject?.tracer && tracerObject) {
132-
const { tracer: _, tracerConfig: __, ...topLevelConfig } = tracerObject;
132+
const topLevelConfig = Object.fromEntries(
133+
Object.entries(tracerObject).filter(([key]) => key !== 'tracer' && key !== 'tracerConfig'),
134+
);
133135
// Only include valid opcodeLogger config properties
134-
const validOpcodeLoggerKeys = ['enableMemory', 'disableStack', 'disableStorage'];
136+
const validOpcodeLoggerKeys = ['enableMemory', 'disableStack', 'disableStorage', 'fullStorage'];
135137
const filteredConfig = Object.keys(topLevelConfig)
136138
.filter((key) => validOpcodeLoggerKeys.includes(key))
137139
.reduce((obj, key) => {
138-
obj[key] = topLevelConfig[key];
140+
// Filter out non-standard parameters that shouldn't be passed to the actual tracer
141+
if (key !== 'fullStorage') {
142+
obj[key] = topLevelConfig[key];
143+
}
139144
return obj;
140145
}, {} as any);
141146

packages/relay/src/lib/types/ITracerConfig.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ export interface IOpcodeLoggerConfig {
88
enableMemory?: boolean;
99
disableStack?: boolean;
1010
disableStorage?: boolean;
11+
fullStorage?: boolean; // Non-standard parameter sometimes sent by Remix - ignored in implementation
1112
}
1213

1314
export type ITracerConfig = ICallTracerConfig | IOpcodeLoggerConfig;

packages/relay/src/lib/validators/objectTypes.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,11 @@ export const OBJECTS_VALIDATIONS: { [key: string]: IObjectSchema } = {
106106
nullable: false,
107107
required: false,
108108
},
109+
fullStorage: {
110+
type: 'boolean',
111+
nullable: false,
112+
required: false,
113+
},
109114
},
110115
},
111116
tracerConfigWrapper: {
@@ -139,6 +144,11 @@ export const OBJECTS_VALIDATIONS: { [key: string]: IObjectSchema } = {
139144
nullable: false,
140145
required: false,
141146
},
147+
fullStorage: {
148+
type: 'boolean',
149+
nullable: false,
150+
required: false,
151+
},
142152
},
143153
},
144154
transaction: {

packages/relay/tests/lib/validators/validators.spec.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -692,6 +692,8 @@ describe('Validator', async () => {
692692
{ enableMemory: true },
693693
{ disableStack: false },
694694
{ disableStorage: true },
695+
{ fullStorage: false }, // Non-standard but accepted for Remix compatibility
696+
{ enableMemory: true, disableStack: false, disableStorage: true, fullStorage: false },
695697
// Empty object
696698
{},
697699
],
@@ -700,19 +702,19 @@ describe('Validator', async () => {
700702
input: { tracer: 'invalid', tracerConfig: {} },
701703
error: expectInvalidParam("'tracer' for TracerConfigWrapper", TYPES.tracerType.error, 'invalid'),
702704
},
703-
// OpcodeLogger config properties with wrong tracer type
705+
// Config properties with explicit tracer (not allowed in simplified model)
704706
{
705707
input: { tracer: Constants.TracerType.CallTracer, enableMemory: true },
706708
error: expectInvalidParam(
707709
1,
708-
'opcodeLogger config properties for TracerConfigWrapper are only valid when tracer=opcodeLogger',
710+
"Cannot specify tracer config properties at top level when 'tracer' is explicitly set for TracerConfigWrapper",
709711
),
710712
},
711713
{
712714
input: { tracer: Constants.TracerType.CallTracer, disableStack: false },
713715
error: expectInvalidParam(
714716
1,
715-
'opcodeLogger config properties for TracerConfigWrapper are only valid when tracer=opcodeLogger',
717+
"Cannot specify tracer config properties at top level when 'tracer' is explicitly set for TracerConfigWrapper",
716718
),
717719
},
718720
// Both top-level and nested config

packages/server/tests/acceptance/debug.spec.ts

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -647,13 +647,30 @@ describe('@debug API Acceptance Tests', function () {
647647
disableStorage: true,
648648
};
649649

650+
// Test with fullStorage parameter (Remix compatibility)
651+
const topLevelWithFullStorage = {
652+
enableMemory: true,
653+
disableStack: false,
654+
disableStorage: true,
655+
fullStorage: false, // Non-standard parameter sent by Remix
656+
};
657+
650658
const topLevelResult = await relay.call(DEBUG_TRACE_TRANSACTION, [createChildTx.hash, topLevelFormat]);
651659
expect(topLevelResult).to.exist;
652660
expect(topLevelResult.structLogs).to.exist;
653661

654-
// Both formats should produce similar results
662+
// Test that fullStorage parameter is accepted (Remix compatibility)
663+
const fullStorageResult = await relay.call(DEBUG_TRACE_TRANSACTION, [
664+
createChildTx.hash,
665+
topLevelWithFullStorage,
666+
]);
667+
expect(fullStorageResult).to.exist;
668+
expect(fullStorageResult.structLogs).to.exist;
669+
670+
// All formats should produce similar results
655671
expect(topLevelResult.structLogs).to.have.length.greaterThan(0);
656672
expect(nestedResult.structLogs).to.have.length.greaterThan(0);
673+
expect(fullStorageResult.structLogs).to.have.length.greaterThan(0);
657674
});
658675

659676
it('should reject mixed format (top-level and nested config)', async function () {

0 commit comments

Comments
 (0)