Skip to content

Commit

Permalink
Refactor: Reuse v6 SimulationFlag and MsgFromL1 for v7 and v8
Browse files Browse the repository at this point in the history
  • Loading branch information
hudem1 committed Feb 16, 2025
1 parent 482b6b5 commit bcf7f71
Show file tree
Hide file tree
Showing 13 changed files with 47 additions and 98 deletions.
2 changes: 1 addition & 1 deletion rpc/v6/transaction.go
Original file line number Diff line number Diff line change
Expand Up @@ -232,7 +232,7 @@ type TransactionStatus struct {
type MsgFromL1 struct {
// The address of the L1 contract sending the message.
From common.Address `json:"from_address" validate:"required"`
// The address of the L1 contract sending the message.
// The address of the L2 contract receiving the message.
To felt.Felt `json:"to_address" validate:"required"`
// The payload of the message.
Payload []felt.Felt `json:"payload" validate:"required"`
Expand Down
11 changes: 6 additions & 5 deletions rpc/v7/estimate_fee.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
"github.com/NethermindEth/juno/core/felt"
"github.com/NethermindEth/juno/jsonrpc"
"github.com/NethermindEth/juno/rpc/rpccore"
rpcv6 "github.com/NethermindEth/juno/rpc/v6"
"github.com/NethermindEth/juno/utils"
)

Expand Down Expand Up @@ -65,9 +66,9 @@ func (f FeeEstimate) MarshalJSON() ([]byte, error) {
*****************************************************/

func (h *Handler) EstimateFee(broadcastedTxns []BroadcastedTransaction,
simulationFlags []SimulationFlag, id BlockID,
simulationFlags []rpcv6.SimulationFlag, id BlockID,
) ([]FeeEstimate, http.Header, *jsonrpc.Error) {
result, httpHeader, err := h.simulateTransactions(id, broadcastedTxns, append(simulationFlags, SkipFeeChargeFlag), true)
result, httpHeader, err := h.simulateTransactions(id, broadcastedTxns, append(simulationFlags, rpcv6.SkipFeeChargeFlag), true)
if err != nil {
return nil, httpHeader, err
}
Expand All @@ -77,16 +78,16 @@ func (h *Handler) EstimateFee(broadcastedTxns []BroadcastedTransaction,
}), httpHeader, nil
}

func (h *Handler) EstimateMessageFee(msg MsgFromL1, id BlockID) (*FeeEstimate, http.Header, *jsonrpc.Error) { //nolint:gocritic
func (h *Handler) EstimateMessageFee(msg rpcv6.MsgFromL1, id BlockID) (*FeeEstimate, http.Header, *jsonrpc.Error) { //nolint:gocritic

Check warning on line 81 in rpc/v7/estimate_fee.go

View check run for this annotation

Codecov / codecov/patch

rpc/v7/estimate_fee.go#L81

Added line #L81 was not covered by tests
return h.estimateMessageFee(msg, id, h.EstimateFee)
}

type estimateFeeHandler func(broadcastedTxns []BroadcastedTransaction,
simulationFlags []SimulationFlag, id BlockID,
simulationFlags []rpcv6.SimulationFlag, id BlockID,
) ([]FeeEstimate, http.Header, *jsonrpc.Error)

//nolint:gocritic
func (h *Handler) estimateMessageFee(msg MsgFromL1, id BlockID, f estimateFeeHandler) (*FeeEstimate,
func (h *Handler) estimateMessageFee(msg rpcv6.MsgFromL1, id BlockID, f estimateFeeHandler) (*FeeEstimate,
http.Header, *jsonrpc.Error,
) {
calldata := make([]*felt.Felt, 0, len(msg.Payload)+1)
Expand Down
9 changes: 5 additions & 4 deletions rpc/v7/estimate_fee_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import (
"github.com/NethermindEth/juno/jsonrpc"
"github.com/NethermindEth/juno/mocks"
"github.com/NethermindEth/juno/rpc/rpccore"
rpcv6 "github.com/NethermindEth/juno/rpc/v6"
rpcv7 "github.com/NethermindEth/juno/rpc/v7"
"github.com/NethermindEth/juno/utils"
"github.com/NethermindEth/juno/vm"
Expand Down Expand Up @@ -44,7 +45,7 @@ func TestEstimateFee(t *testing.T) {
NumSteps: 123,
}, nil)

_, httpHeader, err := handler.EstimateFee([]rpcv7.BroadcastedTransaction{}, []rpcv7.SimulationFlag{}, rpcv7.BlockID{Latest: true})
_, httpHeader, err := handler.EstimateFee([]rpcv7.BroadcastedTransaction{}, []rpcv6.SimulationFlag{}, rpcv7.BlockID{Latest: true})
require.Nil(t, err)
assert.Equal(t, httpHeader.Get(rpcv7.ExecutionStepsHeader), "123")
})
Expand All @@ -58,7 +59,7 @@ func TestEstimateFee(t *testing.T) {
NumSteps: 123,
}, nil)

_, httpHeader, err := handler.EstimateFee([]rpcv7.BroadcastedTransaction{}, []rpcv7.SimulationFlag{rpcv7.SkipValidateFlag}, rpcv7.BlockID{Latest: true})
_, httpHeader, err := handler.EstimateFee([]rpcv7.BroadcastedTransaction{}, []rpcv6.SimulationFlag{rpcv6.SkipValidateFlag}, rpcv7.BlockID{Latest: true})
require.Nil(t, err)
assert.Equal(t, httpHeader.Get(rpcv7.ExecutionStepsHeader), "123")
})
Expand All @@ -70,7 +71,7 @@ func TestEstimateFee(t *testing.T) {
Cause: errors.New("oops"),
})

_, httpHeader, err := handler.EstimateFee([]rpcv7.BroadcastedTransaction{}, []rpcv7.SimulationFlag{rpcv7.SkipValidateFlag}, rpcv7.BlockID{Latest: true})
_, httpHeader, err := handler.EstimateFee([]rpcv7.BroadcastedTransaction{}, []rpcv6.SimulationFlag{rpcv6.SkipValidateFlag}, rpcv7.BlockID{Latest: true})
require.Equal(t, rpccore.ErrTransactionExecutionError.CloneWithData(rpcv7.TransactionExecutionErrorData{
TransactionIndex: 44,
ExecutionError: "oops",
Expand All @@ -95,7 +96,7 @@ func TestEstimateFee(t *testing.T) {
},
ContractClass: json.RawMessage(`{}`),
}
_, _, err := handler.EstimateFee([]rpcv7.BroadcastedTransaction{invalidTx}, []rpcv7.SimulationFlag{}, rpcv7.BlockID{Latest: true})
_, _, err := handler.EstimateFee([]rpcv7.BroadcastedTransaction{invalidTx}, []rpcv6.SimulationFlag{}, rpcv7.BlockID{Latest: true})
expectedErr := &jsonrpc.Error{
Code: jsonrpc.InvalidParams,
Message: "Invalid Params",
Expand Down
3 changes: 2 additions & 1 deletion rpc/v7/handlers_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (
"github.com/NethermindEth/juno/core/felt"
"github.com/NethermindEth/juno/mocks"
"github.com/NethermindEth/juno/node"
rpcv6 "github.com/NethermindEth/juno/rpc/v6"
rpcv7 "github.com/NethermindEth/juno/rpc/v7"
"github.com/NethermindEth/juno/utils"
"github.com/stretchr/testify/assert"
Expand Down Expand Up @@ -58,7 +59,7 @@ func TestThrottledVMError(t *testing.T) {
t.Run("simulate", func(t *testing.T) {
mockReader.EXPECT().HeadState().Return(mockState, nopCloser, nil)
mockReader.EXPECT().HeadsHeader().Return(&core.Header{}, nil)
_, httpHeader, rpcErr := handler.SimulateTransactions(rpcv7.BlockID{Latest: true}, []rpcv7.BroadcastedTransaction{}, []rpcv7.SimulationFlag{rpcv7.SkipFeeChargeFlag})
_, httpHeader, rpcErr := handler.SimulateTransactions(rpcv7.BlockID{Latest: true}, []rpcv7.BroadcastedTransaction{}, []rpcv6.SimulationFlag{rpcv6.SkipFeeChargeFlag})
assert.Equal(t, throttledErr, rpcErr.Data)
assert.NotEmpty(t, httpHeader.Get(rpcv7.ExecutionStepsHeader))
})
Expand Down
30 changes: 5 additions & 25 deletions rpc/v7/simulation.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package rpcv7

import (
"errors"
"fmt"
"net/http"
"slices"
"strconv"
Expand All @@ -11,32 +10,13 @@ import (
"github.com/NethermindEth/juno/core/felt"
"github.com/NethermindEth/juno/jsonrpc"
"github.com/NethermindEth/juno/rpc/rpccore"
rpcv6 "github.com/NethermindEth/juno/rpc/v6"
"github.com/NethermindEth/juno/utils"
"github.com/NethermindEth/juno/vm"
)

type SimulationFlag int

const (
SkipValidateFlag SimulationFlag = iota + 1
SkipFeeChargeFlag
)

const ExecutionStepsHeader string = "X-Cairo-Steps"

func (s *SimulationFlag) UnmarshalJSON(bytes []byte) (err error) {
switch flag := string(bytes); flag {
case `"SKIP_VALIDATE"`:
*s = SkipValidateFlag
case `"SKIP_FEE_CHARGE"`:
*s = SkipFeeChargeFlag
default:
err = fmt.Errorf("unknown simulation flag %q", flag)
}

return
}

type SimulatedTransaction struct {
TransactionTrace *vm.TransactionTrace `json:"transaction_trace,omitempty"`
FeeEstimation FeeEstimate `json:"fee_estimation,omitempty"`
Expand All @@ -52,17 +32,17 @@ type TracedBlockTransaction struct {
*****************************************************/

func (h *Handler) SimulateTransactions(id BlockID, transactions []BroadcastedTransaction,
simulationFlags []SimulationFlag,
simulationFlags []rpcv6.SimulationFlag,
) ([]SimulatedTransaction, http.Header, *jsonrpc.Error) {
return h.simulateTransactions(id, transactions, simulationFlags, false)
}

//nolint:funlen,gocyclo
func (h *Handler) simulateTransactions(id BlockID, transactions []BroadcastedTransaction,
simulationFlags []SimulationFlag, errOnRevert bool,
simulationFlags []rpcv6.SimulationFlag, errOnRevert bool,
) ([]SimulatedTransaction, http.Header, *jsonrpc.Error) {
skipFeeCharge := slices.Contains(simulationFlags, SkipFeeChargeFlag)
skipValidate := slices.Contains(simulationFlags, SkipValidateFlag)
skipFeeCharge := slices.Contains(simulationFlags, rpcv6.SkipFeeChargeFlag)
skipValidate := slices.Contains(simulationFlags, rpcv6.SkipValidateFlag)

httpHeader := http.Header{}
httpHeader.Set(ExecutionStepsHeader, "0")
Expand Down
7 changes: 4 additions & 3 deletions rpc/v7/simulation_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (
"github.com/NethermindEth/juno/core/felt"
"github.com/NethermindEth/juno/mocks"
"github.com/NethermindEth/juno/rpc/rpccore"
rpcv6 "github.com/NethermindEth/juno/rpc/v6"
rpcv7 "github.com/NethermindEth/juno/rpc/v7"
"github.com/NethermindEth/juno/utils"
"github.com/NethermindEth/juno/vm"
Expand Down Expand Up @@ -47,7 +48,7 @@ func TestSimulateTransactions(t *testing.T) {
NumSteps: stepsUsed,
}, nil)

_, httpHeader, err := handler.SimulateTransactions(rpcv7.BlockID{Latest: true}, []rpcv7.BroadcastedTransaction{}, []rpcv7.SimulationFlag{rpcv7.SkipFeeChargeFlag})
_, httpHeader, err := handler.SimulateTransactions(rpcv7.BlockID{Latest: true}, []rpcv7.BroadcastedTransaction{}, []rpcv6.SimulationFlag{rpcv6.SkipFeeChargeFlag})
require.Nil(t, err)
assert.Equal(t, httpHeader.Get(rpcv7.ExecutionStepsHeader), "123")
})
Expand All @@ -64,7 +65,7 @@ func TestSimulateTransactions(t *testing.T) {
NumSteps: stepsUsed,
}, nil)

_, httpHeader, err := handler.SimulateTransactions(rpcv7.BlockID{Latest: true}, []rpcv7.BroadcastedTransaction{}, []rpcv7.SimulationFlag{rpcv7.SkipValidateFlag})
_, httpHeader, err := handler.SimulateTransactions(rpcv7.BlockID{Latest: true}, []rpcv7.BroadcastedTransaction{}, []rpcv6.SimulationFlag{rpcv6.SkipValidateFlag})
require.Nil(t, err)
assert.Equal(t, httpHeader.Get(rpcv7.ExecutionStepsHeader), "123")
})
Expand All @@ -79,7 +80,7 @@ func TestSimulateTransactions(t *testing.T) {
Cause: errors.New("oops"),
})

_, httpHeader, err := handler.SimulateTransactions(rpcv7.BlockID{Latest: true}, []rpcv7.BroadcastedTransaction{}, []rpcv7.SimulationFlag{rpcv7.SkipValidateFlag})
_, httpHeader, err := handler.SimulateTransactions(rpcv7.BlockID{Latest: true}, []rpcv7.BroadcastedTransaction{}, []rpcv6.SimulationFlag{rpcv6.SkipValidateFlag})
require.Equal(t, rpccore.ErrTransactionExecutionError.CloneWithData(rpcv7.TransactionExecutionErrorData{
TransactionIndex: 44,
ExecutionError: "oops",
Expand Down
10 changes: 0 additions & 10 deletions rpc/v7/transaction.go
Original file line number Diff line number Diff line change
Expand Up @@ -231,16 +231,6 @@ type TransactionStatus struct {
FailureReason string `json:"failure_reason,omitempty"`
}

type MsgFromL1 struct {
// The address of the L1 contract sending the message.
From common.Address `json:"from_address" validate:"required"`
// The address of the L1 contract sending the message.
To felt.Felt `json:"to_address" validate:"required"`
// The payload of the message.
Payload []felt.Felt `json:"payload" validate:"required"`
Selector felt.Felt `json:"entry_point_selector" validate:"required"`
}

type MsgToL1 struct {
From *felt.Felt `json:"from_address,omitempty"`
To common.Address `json:"to_address"`
Expand Down
11 changes: 6 additions & 5 deletions rpc/v8/estimate_fee.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (
"github.com/NethermindEth/juno/core/felt"
"github.com/NethermindEth/juno/jsonrpc"
"github.com/NethermindEth/juno/rpc/rpccore"
rpcv6 "github.com/NethermindEth/juno/rpc/v6"
"github.com/NethermindEth/juno/utils"
)

Expand Down Expand Up @@ -45,9 +46,9 @@ type FeeEstimate struct {
*****************************************************/

func (h *Handler) EstimateFee(broadcastedTxns []BroadcastedTransaction,
simulationFlags []SimulationFlag, id BlockID,
simulationFlags []rpcv6.SimulationFlag, id BlockID,
) ([]FeeEstimate, http.Header, *jsonrpc.Error) {
result, httpHeader, err := h.simulateTransactions(id, broadcastedTxns, append(simulationFlags, SkipFeeChargeFlag), true)
result, httpHeader, err := h.simulateTransactions(id, broadcastedTxns, append(simulationFlags, rpcv6.SkipFeeChargeFlag), true)
if err != nil {
return nil, httpHeader, err
}
Expand All @@ -58,16 +59,16 @@ func (h *Handler) EstimateFee(broadcastedTxns []BroadcastedTransaction,
}

//nolint:gocritic
func (h *Handler) EstimateMessageFee(msg MsgFromL1, id BlockID) (*FeeEstimate, http.Header, *jsonrpc.Error) {
func (h *Handler) EstimateMessageFee(msg rpcv6.MsgFromL1, id BlockID) (*FeeEstimate, http.Header, *jsonrpc.Error) {

Check warning on line 62 in rpc/v8/estimate_fee.go

View check run for this annotation

Codecov / codecov/patch

rpc/v8/estimate_fee.go#L62

Added line #L62 was not covered by tests
return estimateMessageFee(msg, id, h.EstimateFee)
}

type estimateFeeHandler func(broadcastedTxns []BroadcastedTransaction,
simulationFlags []SimulationFlag, id BlockID,
simulationFlags []rpcv6.SimulationFlag, id BlockID,
) ([]FeeEstimate, http.Header, *jsonrpc.Error)

//nolint:gocritic
func estimateMessageFee(msg MsgFromL1, id BlockID, f estimateFeeHandler) (*FeeEstimate, http.Header, *jsonrpc.Error) {
func estimateMessageFee(msg rpcv6.MsgFromL1, id BlockID, f estimateFeeHandler) (*FeeEstimate, http.Header, *jsonrpc.Error) {

Check warning on line 71 in rpc/v8/estimate_fee.go

View check run for this annotation

Codecov / codecov/patch

rpc/v8/estimate_fee.go#L71

Added line #L71 was not covered by tests
calldata := make([]*felt.Felt, 0, len(msg.Payload)+1)
// The order of the calldata parameters matters. msg.From must be prepended.
calldata = append(calldata, new(felt.Felt).SetBytes(msg.From.Bytes()))
Expand Down
9 changes: 5 additions & 4 deletions rpc/v8/estimate_fee_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import (
"github.com/NethermindEth/juno/jsonrpc"
"github.com/NethermindEth/juno/mocks"
"github.com/NethermindEth/juno/rpc/rpccore"
rpcv6 "github.com/NethermindEth/juno/rpc/v6"
rpc "github.com/NethermindEth/juno/rpc/v8"
"github.com/NethermindEth/juno/utils"
"github.com/NethermindEth/juno/vm"
Expand Down Expand Up @@ -45,7 +46,7 @@ func TestEstimateFee(t *testing.T) {
NumSteps: uint64(123),
}, nil)

_, httpHeader, err := handler.EstimateFee([]rpc.BroadcastedTransaction{}, []rpc.SimulationFlag{}, rpc.BlockID{Latest: true})
_, httpHeader, err := handler.EstimateFee([]rpc.BroadcastedTransaction{}, []rpcv6.SimulationFlag{}, rpc.BlockID{Latest: true})
require.Nil(t, err)
assert.Equal(t, httpHeader.Get(rpc.ExecutionStepsHeader), "123")
})
Expand All @@ -60,7 +61,7 @@ func TestEstimateFee(t *testing.T) {
NumSteps: uint64(123),
}, nil)

_, httpHeader, err := handler.EstimateFee([]rpc.BroadcastedTransaction{}, []rpc.SimulationFlag{rpc.SkipValidateFlag}, rpc.BlockID{Latest: true})
_, httpHeader, err := handler.EstimateFee([]rpc.BroadcastedTransaction{}, []rpcv6.SimulationFlag{rpcv6.SkipValidateFlag}, rpc.BlockID{Latest: true})
require.Nil(t, err)
assert.Equal(t, httpHeader.Get(rpc.ExecutionStepsHeader), "123")
})
Expand All @@ -72,7 +73,7 @@ func TestEstimateFee(t *testing.T) {
Cause: errors.New("oops"),
})

_, httpHeader, err := handler.EstimateFee([]rpc.BroadcastedTransaction{}, []rpc.SimulationFlag{rpc.SkipValidateFlag}, rpc.BlockID{Latest: true})
_, httpHeader, err := handler.EstimateFee([]rpc.BroadcastedTransaction{}, []rpcv6.SimulationFlag{rpcv6.SkipValidateFlag}, rpc.BlockID{Latest: true})
require.Equal(t, rpccore.ErrTransactionExecutionError.CloneWithData(rpc.TransactionExecutionErrorData{
TransactionIndex: 44,
ExecutionError: "oops",
Expand All @@ -97,7 +98,7 @@ func TestEstimateFee(t *testing.T) {
},
ContractClass: json.RawMessage(`{}`),
}
_, _, err := handler.EstimateFee([]rpc.BroadcastedTransaction{invalidTx}, []rpc.SimulationFlag{}, rpc.BlockID{Latest: true})
_, _, err := handler.EstimateFee([]rpc.BroadcastedTransaction{invalidTx}, []rpcv6.SimulationFlag{}, rpc.BlockID{Latest: true})
expectedErr := &jsonrpc.Error{
Code: jsonrpc.InvalidParams,
Message: "Invalid Params",
Expand Down
3 changes: 2 additions & 1 deletion rpc/v8/handlers_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (
"github.com/NethermindEth/juno/core/felt"
"github.com/NethermindEth/juno/mocks"
"github.com/NethermindEth/juno/node"
rpcv6 "github.com/NethermindEth/juno/rpc/v6"
rpcv8 "github.com/NethermindEth/juno/rpc/v8"
"github.com/NethermindEth/juno/utils"
"github.com/stretchr/testify/assert"
Expand Down Expand Up @@ -58,7 +59,7 @@ func TestThrottledVMError(t *testing.T) {
t.Run("simulate", func(t *testing.T) {
mockReader.EXPECT().HeadState().Return(mockState, nopCloser, nil)
mockReader.EXPECT().HeadsHeader().Return(&core.Header{}, nil)
_, httpHeader, rpcErr := handler.SimulateTransactions(rpcv8.BlockID{Latest: true}, []rpcv8.BroadcastedTransaction{}, []rpcv8.SimulationFlag{rpcv8.SkipFeeChargeFlag})
_, httpHeader, rpcErr := handler.SimulateTransactions(rpcv8.BlockID{Latest: true}, []rpcv8.BroadcastedTransaction{}, []rpcv6.SimulationFlag{rpcv6.SkipFeeChargeFlag})
assert.Equal(t, throttledErr, rpcErr.Data)
assert.NotEmpty(t, httpHeader.Get(rpcv8.ExecutionStepsHeader))
})
Expand Down
29 changes: 5 additions & 24 deletions rpc/v8/simulation.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,32 +11,13 @@ import (
"github.com/NethermindEth/juno/core/felt"
"github.com/NethermindEth/juno/jsonrpc"
"github.com/NethermindEth/juno/rpc/rpccore"
rpcv6 "github.com/NethermindEth/juno/rpc/v6"
"github.com/NethermindEth/juno/utils"
"github.com/NethermindEth/juno/vm"
)

type SimulationFlag int

const (
SkipValidateFlag SimulationFlag = iota + 1
SkipFeeChargeFlag
)

const ExecutionStepsHeader string = "X-Cairo-Steps"

func (s *SimulationFlag) UnmarshalJSON(bytes []byte) (err error) {
switch flag := string(bytes); flag {
case `"SKIP_VALIDATE"`:
*s = SkipValidateFlag
case `"SKIP_FEE_CHARGE"`:
*s = SkipFeeChargeFlag
default:
err = fmt.Errorf("unknown simulation flag %q", flag)
}

return
}

type SimulatedTransaction struct {
TransactionTrace *vm.TransactionTrace `json:"transaction_trace,omitempty"`
FeeEstimation FeeEstimate `json:"fee_estimation,omitempty"`
Expand All @@ -52,16 +33,16 @@ type TracedBlockTransaction struct {
*****************************************************/

func (h *Handler) SimulateTransactions(id BlockID, transactions []BroadcastedTransaction,
simulationFlags []SimulationFlag,
simulationFlags []rpcv6.SimulationFlag,
) ([]SimulatedTransaction, http.Header, *jsonrpc.Error) {
return h.simulateTransactions(id, transactions, simulationFlags, false)
}

func (h *Handler) simulateTransactions(id BlockID, transactions []BroadcastedTransaction,
simulationFlags []SimulationFlag, errOnRevert bool,
simulationFlags []rpcv6.SimulationFlag, errOnRevert bool,
) ([]SimulatedTransaction, http.Header, *jsonrpc.Error) {
skipFeeCharge := slices.Contains(simulationFlags, SkipFeeChargeFlag)
skipValidate := slices.Contains(simulationFlags, SkipValidateFlag)
skipFeeCharge := slices.Contains(simulationFlags, rpcv6.SkipFeeChargeFlag)
skipValidate := slices.Contains(simulationFlags, rpcv6.SkipValidateFlag)

httpHeader := http.Header{}
httpHeader.Set(ExecutionStepsHeader, "0")
Expand Down
Loading

0 comments on commit bcf7f71

Please sign in to comment.