Skip to content

Commit 8823c6a

Browse files
committed
Update blockifier and add support for SkipFeeCharge flag
1 parent f346ce8 commit 8823c6a

File tree

6 files changed

+25
-12
lines changed

6 files changed

+25
-12
lines changed

mocks/mock_vm.go

+4-4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

rpc/handlers.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -1130,7 +1130,7 @@ func (h *Handler) EstimateFee(broadcastedTxns []BroadcastedTransaction, id Block
11301130
if sequencerAddress == nil {
11311131
sequencerAddress = core.NetworkBlockHashMetaInfo(h.network).FallBackSequencerAddress
11321132
}
1133-
gasesConsumed, err := h.vm.Execute(txns, classes, blockNumber, header.Timestamp, sequencerAddress, state, h.network, paidFeesOnL1)
1133+
gasesConsumed, err := h.vm.Execute(txns, classes, blockNumber, header.Timestamp, sequencerAddress, state, h.network, paidFeesOnL1, true)
11341134
if err != nil {
11351135
rpcErr := *ErrContractError
11361136
rpcErr.Data = err.Error()

rpc/handlers_test.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -2014,9 +2014,10 @@ func TestEstimateMessageFee(t *testing.T) {
20142014
mockReader.EXPECT().HeadsHeader().Return(latestHeader, nil)
20152015

20162016
expectedGasConsumed := new(felt.Felt).SetUint64(37)
2017-
mockVM.EXPECT().Execute(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).DoAndReturn(
2017+
mockVM.EXPECT().Execute(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).DoAndReturn(
20182018
func(txns []core.Transaction, declaredClasses []core.Class, blockNumber, blockTimestamp uint64,
20192019
sequencerAddress *felt.Felt, state core.StateReader, network utils.Network, paidFeesOnL1 []*felt.Felt,
2020+
skipChargeFee bool,
20202021
) ([]*felt.Felt, error) {
20212022
require.Len(t, txns, 1)
20222023
assert.NotNil(t, txns[0].(*core.L1HandlerTransaction))

vm/rust/Cargo.toml

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ edition = "2021"
66
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
77

88
[dependencies]
9-
serde = "1.0.160"
9+
serde = "1.0.171"
1010
serde_json = { version = "1.0.96", features = ["raw_value"] }
11-
blockifier = {git = "https://github.com/starkware-libs/blockifier", rev = "4cd75c7e6d8e5534cbf9074d7a7d0192283266d7"}
11+
blockifier = {git = "https://github.com/starkware-libs/blockifier", rev = "5ba0fb4"}
1212
starknet_api = { git = "https://github.com/starkware-libs/starknet-api", rev = "8f620bc" }
1313
cairo-vm = "0.8.2"
1414
cairo-lang-casm = "2.1.0"

vm/rust/src/lib.rs

+4-2
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,7 @@ pub extern "C" fn cairoVMExecute(
128128
chain_id: *const c_char,
129129
sequencer_address: *const c_uchar,
130130
paid_fees_on_l1_json: *const c_char,
131+
skip_charge_fee: c_uchar,
131132
) {
132133
let reader = JunoStateReader::new(reader_handle);
133134
let chain_id_str = unsafe { CStr::from_ptr(chain_id) }.to_str().unwrap();
@@ -211,10 +212,11 @@ pub extern "C" fn cairoVMExecute(
211212
return;
212213
}
213214

215+
let charge_fee = skip_charge_fee == 0;
214216
let res = match txn.unwrap() {
215-
Transaction::AccountTransaction(t) => t.execute(&mut state, &block_context),
217+
Transaction::AccountTransaction(t) => t.execute(&mut state, &block_context, charge_fee),
216218
Transaction::L1HandlerTransaction(t) => {
217-
let maybe_execution_info = t.execute(&mut state, &block_context);
219+
let maybe_execution_info = t.execute(&mut state, &block_context, charge_fee);
218220
if maybe_execution_info.is_err() {
219221
maybe_execution_info
220222
} else {

vm/vm.go

+12-2
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ package vm
88
// char* chain_id);
99
//
1010
// extern void cairoVMExecute(char* txns_json, char* classes_json, uintptr_t readerHandle, unsigned long long block_number,
11-
// unsigned long long block_timestamp, char* chain_id, char* sequencer_address, char* paid_fees_on_l1_json);
11+
// unsigned long long block_timestamp, char* chain_id, char* sequencer_address, char* paid_fees_on_l1_json,
12+
// unsigned char skip_charge_fee);
1213
//
1314
// #cgo LDFLAGS: -L./rust/target/release -ljuno_starknet_rs -lm -ldl
1415
import "C"
@@ -31,6 +32,7 @@ type VM interface {
3132
) ([]*felt.Felt, error)
3233
Execute(txns []core.Transaction, declaredClasses []core.Class, blockNumber, blockTimestamp uint64,
3334
sequencerAddress *felt.Felt, state core.StateReader, network utils.Network, paidFeesOnL1 []*felt.Felt,
35+
skipChargeFee bool,
3436
) ([]*felt.Felt, error)
3537
}
3638

@@ -134,6 +136,7 @@ func (*vm) Call(contractAddr, selector *felt.Felt, calldata []felt.Felt, blockNu
134136
// Execute executes a given transaction set and returns the gas spent per transaction
135137
func (*vm) Execute(txns []core.Transaction, declaredClasses []core.Class, blockNumber, blockTimestamp uint64,
136138
sequencerAddress *felt.Felt, state core.StateReader, network utils.Network, paidFeesOnL1 []*felt.Felt,
139+
skipChargeFee bool,
137140
) ([]*felt.Felt, error) {
138141
context := &callContext{
139142
state: state,
@@ -156,6 +159,11 @@ func (*vm) Execute(txns []core.Transaction, declaredClasses []core.Class, blockN
156159
classesJSONCStr := C.CString(string(classesJSON))
157160

158161
sequencerAddressBytes := sequencerAddress.Bytes()
162+
var skipChargeFeeByte byte
163+
if skipChargeFee {
164+
skipChargeFeeByte = 1
165+
}
166+
159167
chainID := C.CString(network.ChainIDString())
160168
C.cairoVMExecute(txnsJSONCstr,
161169
classesJSONCStr,
@@ -164,7 +172,9 @@ func (*vm) Execute(txns []core.Transaction, declaredClasses []core.Class, blockN
164172
C.ulonglong(blockTimestamp),
165173
chainID,
166174
(*C.char)(unsafe.Pointer(&sequencerAddressBytes[0])),
167-
paidFeesOnL1CStr)
175+
paidFeesOnL1CStr,
176+
C.uchar(skipChargeFeeByte),
177+
)
168178

169179
C.free(unsafe.Pointer(classesJSONCStr))
170180
C.free(unsafe.Pointer(paidFeesOnL1CStr))

0 commit comments

Comments
 (0)