Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor: starknet_estimateMessageFee #2496

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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 @@
"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 (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 @@
}), 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 @@
"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 @@
*****************************************************/

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 @@
}

//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
Loading