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

Update blockifier to 0.8.0 #1911

Merged
merged 36 commits into from
Jul 26, 2024
Merged
Show file tree
Hide file tree
Changes from 35 commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
3a78096
Update blockifier to 0.8.0-dev.0
kirugan Jun 19, 2024
a36430e
Update versioned_constants json files
kirugan Jun 21, 2024
b9e0386
Remove unused imports, added versioned constants for 0.13.1.1 to rust…
kirugan Jun 21, 2024
71f1cf8
Add concurrency_mode parameter to VM methods
kirugan Jun 21, 2024
b2fb322
Fix calls in tests, add StateMaps -> StateDiff conversion
kirugan Jun 23, 2024
e6c6b22
debugging issue
kirugan Jun 27, 2024
16bdc2a
Merge remote-tracking branch 'origin/main' into kirugan/blockifier-0.…
kirugan Jul 16, 2024
0cfd72a
Update blockifier, fix todos, update fgw response objects
kirugan Jul 16, 2024
96712c3
Draft impl of new block hashing scheme
kirugan Jul 17, 2024
ff3818f
Update blockifier to 0.8.0-rc.0
kirugan Jul 19, 2024
9190559
Merge remote-tracking branch 'origin/main' into kirugan/blockifier-0.…
kirugan Jul 19, 2024
34f07a8
Fix linter issues
kirugan Jul 19, 2024
a629a3b
Update cargo dependencies
kirugan Jul 19, 2024
521bbfd
Implement receipt Hash()
kirugan Jul 23, 2024
fb2aa5e
Fix receipt commitment
kirugan Jul 23, 2024
0710646
Remove hashes changes
kirugan Jul 23, 2024
7a253b4
Remove core/receipt.go + test
kirugan Jul 23, 2024
710cb34
Merge remote-tracking branch 'origin/main' into kirugan/blockifier-0.…
kirugan Jul 23, 2024
8eae571
Unskip tests, remove decoding debug logic
kirugan Jul 24, 2024
acc73d5
Merge remote-tracking branch 'origin/main' into kirugan/blockifier-0.…
kirugan Jul 24, 2024
32350ec
Update ubuntu docker image to latest version in dockerfile
wojciechos Jul 24, 2024
d3f9854
Fix transaction_receipt.fee estimation
kirugan Jul 24, 2024
1cc72e7
Merge branch 'kirugan/blockifier-0.13.2' of github.com:NethermindEth/…
kirugan Jul 24, 2024
4bfde5a
Update Dockerfile to install latest version of rust
derrix060 Jul 24, 2024
225d9fa
FIXME
derrix060 Jul 24, 2024
8310fe7
Merge branch 'kirugan/blockifier-0.13.2' of github.com:NethermindEth/…
kirugan Jul 24, 2024
4306139
Adjust gas_consumed & data_gas_consumed
kirugan Jul 24, 2024
6d33cda
Fixed fee issue + rust formating code
kirugan Jul 24, 2024
bd1a614
Reverting changes for CI/CD
kirugan Jul 24, 2024
433887e
Remove vm-concurrency-mode flag
kirugan Jul 25, 2024
3303a3f
Add support for 0.13.1.1 in blockifier glue code
kirugan Jul 25, 2024
f6ca4d4
Review fixes
kirugan Jul 25, 2024
6ba2d33
Merge remote-tracking branch 'origin/main' into kirugan/blockifier-0.…
kirugan Jul 25, 2024
71738c0
Remove todo, rename rust var
kirugan Jul 25, 2024
fa2f4ae
Merge remote-tracking branch 'origin/main' into kirugan/blockifier-0.…
kirugan Jul 25, 2024
6d1408b
Fix unpacking of a var to struct field
kirugan Jul 25, 2024
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
14 changes: 7 additions & 7 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,26 +1,26 @@
# Stage 1: Build golang dependencies and binaries
FROM ubuntu:24.04 AS build
FROM ubuntu:24.10 AS build

ARG VM_DEBUG

# Install Alpine Dependencies
# removal is temp. to fix https://github.com/orgs/community/discussions/120966
RUN apt-get update && \
apt-get install build-essential cargo git golang upx-ucl libjemalloc-dev libjemalloc2 -y

RUN apt-get -qq update && \
apt-get -qq install curl build-essential git golang upx-ucl libjemalloc-dev libjemalloc2 -y
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -q -y

WORKDIR /app

# Copy source code
COPY . .

# Build the project
RUN VM_DEBUG=${VM_DEBUG} make juno
RUN bash -c 'source ~/.cargo/env && VM_DEBUG=${VM_DEBUG} make juno'

# Compress the executable with UPX
RUN upx-ucl /app/build/juno

# Stage 2: Build Docker image
FROM ubuntu:23.10 AS runtime
FROM ubuntu:24.10 AS runtime

RUN apt-get update && apt-get install -y ca-certificates curl gawk grep libjemalloc-dev libjemalloc2

Expand Down
2 changes: 1 addition & 1 deletion node/node.go
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,7 @@ func New(cfg *Config, version string) (*Node, error) { //nolint:gocyclo,funlen
services = append(services, synchronizer)
}

throttledVM := NewThrottledVM(vm.New(log), cfg.MaxVMs, int32(cfg.MaxVMQueue))
throttledVM := NewThrottledVM(vm.New(false, log), cfg.MaxVMs, int32(cfg.MaxVMQueue))

var syncReader sync.Reader = &sync.NoopSynchronizer{}
if synchronizer != nil {
Expand Down
3 changes: 2 additions & 1 deletion node/throttled_vm.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,8 @@ func (tvm *ThrottledVM) Call(callInfo *vm.CallInfo, blockInfo *vm.BlockInfo, sta
}

func (tvm *ThrottledVM) Execute(txns []core.Transaction, declaredClasses []core.Class, paidFeesOnL1 []*felt.Felt,
blockInfo *vm.BlockInfo, state core.StateReader, network *utils.Network, skipChargeFee, skipValidate, errOnRevert, useBlobData bool,
blockInfo *vm.BlockInfo, state core.StateReader, network *utils.Network, skipChargeFee, skipValidate, errOnRevert,
useBlobData bool,
) ([]*felt.Felt, []*felt.Felt, []vm.TransactionTrace, error) {
var ret []*felt.Felt
var traces []vm.TransactionTrace
Expand Down
15 changes: 10 additions & 5 deletions rpc/trace_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -245,7 +245,8 @@ func TestTraceTransaction(t *testing.T) {
consumedGas := []*felt.Felt{new(felt.Felt).SetUint64(1)}
overallFee := []*felt.Felt{new(felt.Felt).SetUint64(1)}
mockVM.EXPECT().Execute([]core.Transaction{tx}, []core.Class{declaredClass.Class}, []*felt.Felt{},
&vm.BlockInfo{Header: header}, gomock.Any(), &utils.Mainnet, false, false, false, true).Return(overallFee, consumedGas, []vm.TransactionTrace{*vmTrace}, nil)
&vm.BlockInfo{Header: header}, gomock.Any(), &utils.Mainnet, false, false, false, true).
Return(overallFee, consumedGas, []vm.TransactionTrace{*vmTrace}, nil)

trace, err := handler.TraceTransaction(context.Background(), *hash)
require.Nil(t, err)
Expand Down Expand Up @@ -324,7 +325,8 @@ func TestTraceTransactionV0_6(t *testing.T) {
vmTrace := new(vm.TransactionTrace)
require.NoError(t, json.Unmarshal(vmTraceJSON, vmTrace))
mockVM.EXPECT().Execute([]core.Transaction{tx}, []core.Class{declaredClass.Class}, []*felt.Felt{},
&vm.BlockInfo{Header: header}, gomock.Any(), &utils.Mainnet, false, false, false, false).Return(nil, nil, []vm.TransactionTrace{*vmTrace}, nil)
&vm.BlockInfo{Header: header}, gomock.Any(), &utils.Mainnet, false, false, false, false).
Return(nil, nil, []vm.TransactionTrace{*vmTrace}, nil)

trace, err := handler.TraceTransactionV0_6(context.Background(), *hash)
require.Nil(t, err)
Expand Down Expand Up @@ -379,7 +381,8 @@ func TestTraceTransactionV0_6(t *testing.T) {
vmTrace := new(vm.TransactionTrace)
require.NoError(t, json.Unmarshal(vmTraceJSON, vmTrace))
mockVM.EXPECT().Execute([]core.Transaction{tx}, []core.Class{declaredClass.Class}, []*felt.Felt{},
&vm.BlockInfo{Header: header}, gomock.Any(), &utils.Mainnet, false, false, false, false).Return(nil, nil, []vm.TransactionTrace{*vmTrace}, nil)
&vm.BlockInfo{Header: header}, gomock.Any(), &utils.Mainnet, false, false, false, false).
Return(nil, nil, []vm.TransactionTrace{*vmTrace}, nil)

trace, err := handler.TraceTransactionV0_6(context.Background(), *hash)
require.Nil(t, err)
Expand Down Expand Up @@ -470,7 +473,8 @@ func TestTraceBlockTransactions(t *testing.T) {
vmTrace := vm.TransactionTrace{}
require.NoError(t, json.Unmarshal(vmTraceJSON, &vmTrace))
mockVM.EXPECT().Execute(block.Transactions, []core.Class{declaredClass.Class}, paidL1Fees, &vm.BlockInfo{Header: header},
gomock.Any(), n, false, false, false, false).Return(nil, []vm.TransactionTrace{vmTrace, vmTrace}, nil)
gomock.Any(), n, false, false, false, false).
Return(nil, []vm.TransactionTrace{vmTrace, vmTrace}, nil)

result, err := handler.TraceBlockTransactions(context.Background(), rpc.BlockID{Hash: blockHash})
require.Nil(t, err)
Expand Down Expand Up @@ -536,7 +540,8 @@ func TestTraceBlockTransactions(t *testing.T) {
vmTrace := vm.TransactionTrace{}
require.NoError(t, json.Unmarshal(vmTraceJSON, &vmTrace))
mockVM.EXPECT().Execute([]core.Transaction{tx}, []core.Class{declaredClass.Class}, []*felt.Felt{}, &vm.BlockInfo{Header: header},
gomock.Any(), n, false, false, false, false).Return(nil, []vm.TransactionTrace{vmTrace}, nil)
gomock.Any(), n, false, false, false, false).
Return(nil, []vm.TransactionTrace{vmTrace}, nil)

expectedResult := []rpc.TracedBlockTransaction{
{
Expand Down
2 changes: 1 addition & 1 deletion starknet/rust/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ edition = "2021"
[dependencies]
serde = "1.0.171"
serde_json = { version = "1.0.96", features = ["raw_value"] }
cairo-lang-starknet-classes = "=2.6.0"
cairo-lang-starknet-classes = "=2.7.0-rc.3"

[lib]
crate-type = ["staticlib"]
7 changes: 4 additions & 3 deletions vm/rust/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,10 @@ edition = "2021"
[dependencies]
serde = "1.0.171"
serde_json = { version = "1.0.96", features = ["raw_value"] }
blockifier = "=0.6.0-rc.2"
starknet_api = "=0.10.0"
cairo-vm = "=0.9.2"
blockifier = "=0.8.0-rc.1"
starknet_api = "=0.13.0-rc.0"
cairo-vm = "=1.0.0-rc5"
starknet-types-core = { version = "0.1.5", features = ["hash", "prime-bigint"] }
indexmap = "2.1.0"
cached = "0.46.1"
once_cell = "1.18.0"
Expand Down
98 changes: 62 additions & 36 deletions vm/rust/src/jsonrpc.rs
Original file line number Diff line number Diff line change
@@ -1,28 +1,28 @@
use blockifier;
use blockifier::execution::entry_point::CallType;
use blockifier::execution::call_info::OrderedL2ToL1Message;
use cairo_vm::vm::runners::builtin_runner::{
BITWISE_BUILTIN_NAME, EC_OP_BUILTIN_NAME, HASH_BUILTIN_NAME,
POSEIDON_BUILTIN_NAME, RANGE_CHECK_BUILTIN_NAME, SIGNATURE_BUILTIN_NAME, KECCAK_BUILTIN_NAME,
SEGMENT_ARENA_BUILTIN_NAME,
};
use blockifier::state::cached_state::TransactionalState;
use blockifier::execution::entry_point::CallType;
use blockifier::state::cached_state::CachedState;
use blockifier::state::cached_state::{CommitmentStateDiff, TransactionalState};
use blockifier::state::errors::StateError;
use blockifier::state::state_api::{State, StateReader};
use blockifier::state::state_api::StateReader;
use cairo_vm::types::builtin_name::BuiltinName;
use serde::Serialize;
use starknet_api::core::{ClassHash, ContractAddress, EntryPointSelector, PatriciaKey, EthAddress};
use starknet_api::core::{ClassHash, ContractAddress, EntryPointSelector, EthAddress, PatriciaKey};
use starknet_api::deprecated_contract_class::EntryPointType;
use starknet_api::hash::StarkFelt;
use starknet_api::transaction::{Calldata, EventContent, L2ToL1Payload};
use starknet_api::transaction::{DeclareTransaction, Transaction as StarknetApiTransaction};
use starknet_types_core::felt::Felt;

type StarkFelt = Felt;

use crate::juno_state_reader::JunoStateReader;

#[derive(Serialize, Default)]
#[serde(rename_all = "UPPERCASE")]
pub enum TransactionType {
// dummy type for implementing Default trait
#[default] Unknown,
#[default]
Unknown,
Invoke,
Declare,
#[serde(rename = "DEPLOY_ACCOUNT")]
Expand Down Expand Up @@ -104,10 +104,10 @@ type BlockifierTxInfo = blockifier::transaction::objects::TransactionExecutionIn
pub fn new_transaction_trace(
tx: &StarknetApiTransaction,
info: BlockifierTxInfo,
state: &mut TransactionalState<JunoStateReader>,
state: &mut TransactionalState<CachedState<JunoStateReader>>,
) -> Result<TransactionTrace, StateError> {
let mut trace = TransactionTrace::default();
let mut deprecated_declared_class: Option<ClassHash> = None;
let mut deprecated_declared_class_hash: Option<ClassHash> = None;
match tx {
StarknetApiTransaction::L1Handler(_) => {
trace.function_invocation = info.execute_call_info.map(|v| v.into());
Expand All @@ -134,7 +134,7 @@ pub fn new_transaction_trace(
trace.validate_invocation = info.validate_call_info.map(|v| v.into());
trace.fee_transfer_invocation = info.fee_transfer_call_info.map(|v| v.into());
trace.r#type = TransactionType::Declare;
deprecated_declared_class = if info.revert_error.is_none() {
deprecated_declared_class_hash = if info.revert_error.is_none() {
match declare_txn {
DeclareTransaction::V0(_) => Some(declare_txn.class_hash()),
DeclareTransaction::V1(_) => Some(declare_txn.class_hash()),
Expand All @@ -150,7 +150,7 @@ pub fn new_transaction_trace(
}
};

trace.state_diff = make_state_diff(state, deprecated_declared_class)?;
trace.state_diff = make_state_diff(state, deprecated_declared_class_hash)?;
Ok(trace)
}

Expand Down Expand Up @@ -205,14 +205,38 @@ impl From<VmExecutionResources> for ExecutionResources {
} else {
None
},
range_check_builtin_applications: val.builtin_instance_counter.get(RANGE_CHECK_BUILTIN_NAME).cloned(),
pedersen_builtin_applications: val.builtin_instance_counter.get(HASH_BUILTIN_NAME).cloned(),
poseidon_builtin_applications: val.builtin_instance_counter.get(POSEIDON_BUILTIN_NAME).cloned(),
ec_op_builtin_applications: val.builtin_instance_counter.get(EC_OP_BUILTIN_NAME).cloned(),
ecdsa_builtin_applications: val.builtin_instance_counter.get(SIGNATURE_BUILTIN_NAME).cloned(),
bitwise_builtin_applications: val.builtin_instance_counter.get(BITWISE_BUILTIN_NAME).cloned(),
keccak_builtin_applications: val.builtin_instance_counter.get(KECCAK_BUILTIN_NAME).cloned(),
segment_arena_builtin: val.builtin_instance_counter.get(SEGMENT_ARENA_BUILTIN_NAME).cloned(),
range_check_builtin_applications: val
.builtin_instance_counter
.get(&BuiltinName::range_check)
.cloned(),
pedersen_builtin_applications: val
.builtin_instance_counter
.get(&BuiltinName::pedersen)
.cloned(),
poseidon_builtin_applications: val
.builtin_instance_counter
.get(&BuiltinName::poseidon)
.cloned(),
ec_op_builtin_applications: val
.builtin_instance_counter
.get(&BuiltinName::ec_op)
.cloned(),
ecdsa_builtin_applications: val
.builtin_instance_counter
.get(&BuiltinName::ecdsa)
.cloned(),
bitwise_builtin_applications: val
.builtin_instance_counter
.get(&BuiltinName::bitwise)
.cloned(),
keccak_builtin_applications: val
.builtin_instance_counter
.get(&BuiltinName::keccak)
.cloned(),
segment_arena_builtin: val
.builtin_instance_counter
.get(&BuiltinName::segment_arena)
.cloned(),
}
}
}
Expand Down Expand Up @@ -298,33 +322,35 @@ impl From<OrderedL2ToL1Message> for OrderedMessage {
pub struct Retdata(pub Vec<StarkFelt>);

fn make_state_diff(
state: &mut TransactionalState<JunoStateReader>,
deprecated_declared_class: Option<ClassHash>,
state: &mut TransactionalState<CachedState<JunoStateReader>>,
deprecated_declared_class_hash: Option<ClassHash>,
) -> Result<StateDiff, StateError> {
let diff = state.to_state_diff();
let diff: CommitmentStateDiff = state.to_state_diff()?.into();
let mut deployed_contracts = Vec::new();
let mut replaced_classes = Vec::new();

for pair in diff.address_to_class_hash {
let existing_class_hash = state.state.get_class_hash_at(pair.0)?;
for (addr, class_hash) in diff.address_to_class_hash {
let existing_class_hash = state.state.get_class_hash_at(addr)?;
let addr: StarkFelt = addr.into();

if existing_class_hash == ClassHash::default() {
#[rustfmt::skip]
deployed_contracts.push(DeployedContract {
address: *pair.0.0.key(),
class_hash: pair.1.0,
address: addr,
class_hash: class_hash.0,
});
} else {
#[rustfmt::skip]
replaced_classes.push(ReplacedClass {
contract_address: *pair.0.0.key(),
class_hash: pair.1.0,
contract_address: addr,
class_hash: class_hash.0,
});
}
}

let mut deprecated_declared_classes = Vec::default();
if let Some(v) = deprecated_declared_class {
deprecated_declared_classes.push(v.0)
let mut deprecated_declared_class_hashes = Vec::default();
if let Some(v) = deprecated_declared_class_hash {
kirugan marked this conversation as resolved.
Show resolved Hide resolved
deprecated_declared_class_hashes.push(v.0)
}
Ok(StateDiff {
deployed_contracts,
Expand All @@ -341,7 +367,7 @@ fn make_state_diff(
class_hash: v.0.0,
compiled_class_hash: v.1.0,
}).collect(),
deprecated_declared_classes,
deprecated_declared_class_hashes,
#[rustfmt::skip]
nonces: diff.address_to_nonce.into_iter().map(| v | Nonce {
contract_address: *v.0.0.key(),
Expand Down
Loading
Loading