Skip to content

[DNM] Trace Dump Feature #1077

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

Draft
wants to merge 59 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
59 commits
Select commit Hold shift + click to select a range
89789c6
Add stuff.
azteca1998 Aug 28, 2024
1aaaea8
Fix bug.
azteca1998 Aug 28, 2024
5347c55
Merge branch 'main' into add-trace-dump-contracts
azteca1998 Sep 10, 2024
12e3d8e
Fix stuff.
azteca1998 Sep 10, 2024
dd2258e
Add trace dump contracts 2 (#783)
JulianGCalderon Sep 10, 2024
52ef1d8
Fix second bug in tail recursion transformations.
azteca1998 Sep 10, 2024
10ecaa2
Merge branch 'main' into add-trace-dump-contracts
azteca1998 Sep 16, 2024
b2935f0
Merge branch 'main' into add-trace-dump-contracts
azteca1998 Sep 18, 2024
57b39dc
Fix error.
azteca1998 Sep 19, 2024
1361621
Merge branch 'main' into add-trace-dump-contracts
azteca1998 Oct 8, 2024
30d7a98
Fix compile error.
azteca1998 Oct 8, 2024
e1ba709
Fix more errors.
azteca1998 Oct 8, 2024
c989b31
Add trace dump contracts 2 (#838)
JulianGCalderon Oct 21, 2024
d5a0271
Merge branch 'main' of github.com:lambdaclass/cairo_native into add-t…
FrancoGiachetta Oct 24, 2024
11c3714
Cargo.lock
FrancoGiachetta Oct 24, 2024
339534f
enum 0 tag
FrancoGiachetta Oct 24, 2024
da47a0f
revert builtin costs
FrancoGiachetta Oct 25, 2024
567c7a1
fix seg fault felt dict
FrancoGiachetta Oct 30, 2024
99accfb
implement feltDictEntry and SquashedFeltDict
FrancoGiachetta Oct 31, 2024
7f37246
Merge branch 'main' into add-trace-dump-contracts
JulianGCalderon Nov 19, 2024
85ce88b
gas u64
FrancoGiachetta Nov 19, 2024
76663d2
Merge branch 'main' into add-trace-dump-contracts
FrancoGiachetta Nov 19, 2024
bb890c3
Merge branch 'main' into add-trace-dump-contracts
azteca1998 Nov 26, 2024
32b4cc8
Merge branch 'main' into add-trace-dump-contracts
JulianGCalderon Dec 26, 2024
8411019
Adapt trace dump with new dictionary
JulianGCalderon Dec 30, 2024
365bb7d
Merge branch 'main' into add-trace-dump-contracts
JulianGCalderon Jan 17, 2025
c2529e1
Use local path
JulianGCalderon Jan 17, 2025
c9787a4
Merge branch 'main' into add-trace-dump-contracts
JulianGCalderon Jan 23, 2025
5114d4c
Merge branch 'main' into add-trace-dump-contracts
JulianGCalderon Jan 30, 2025
11b1922
Implement trace dump without runtime
JulianGCalderon Jan 30, 2025
1432029
Setup trace dump with jit
JulianGCalderon Jan 30, 2025
46845ac
Remove no_mangle
JulianGCalderon Jan 30, 2025
09841e5
Setup trace dump with aot
JulianGCalderon Jan 30, 2025
df8e25b
Add dummy implmenetation for circuit trace dump
JulianGCalderon Jan 30, 2025
25e9253
Add support for saving sierra program
JulianGCalderon Jan 31, 2025
9764d54
Add circuit support
JulianGCalderon Jan 31, 2025
a6b12fb
Merge branch 'main' into trace-dump-feature
JulianGCalderon Feb 19, 2025
9d5f2ab
Update lock
JulianGCalderon Feb 19, 2025
45ddd2e
Improve formatting
JulianGCalderon Feb 19, 2025
70bbef9
Improve readibility
JulianGCalderon Feb 19, 2025
fa0752d
Fix paths for new runtime
JulianGCalderon Feb 19, 2025
15b85dc
Reset to main
JulianGCalderon Feb 19, 2025
1141b07
Use pretty write
JulianGCalderon Feb 19, 2025
e92619c
Fix clippy
JulianGCalderon Feb 19, 2025
6bd9939
Setup trace binding runtime for contract executor
JulianGCalderon Feb 20, 2025
86edda6
Fix BuiltinCosts
JulianGCalderon Feb 20, 2025
b1b29f3
Add dict count
JulianGCalderon Feb 20, 2025
2a4997d
Merge branch 'main' into trace-dump-feature
JulianGCalderon Feb 21, 2025
c2dea06
Update dep
JulianGCalderon Feb 21, 2025
eefec2f
Update lock
JulianGCalderon Feb 21, 2025
63d2c91
Merge branch 'main' into trace-dump-feature
JulianGCalderon Feb 24, 2025
567c699
Fix array trace dump
JulianGCalderon Feb 24, 2025
b345ea5
merge main
FrancoGiachetta Apr 14, 2025
ca3bd20
update vm
FrancoGiachetta Apr 14, 2025
c84cf11
fix vm version
FrancoGiachetta Apr 14, 2025
7f6cb98
fix clippy
FrancoGiachetta Apr 14, 2025
f3a0828
fix clippy
FrancoGiachetta Apr 14, 2025
9ab25d7
Merge branch 'main' into trace-dump-feature
FrancoGiachetta Apr 16, 2025
2f3b224
add dict count
FrancoGiachetta Apr 16, 2025
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
344 changes: 284 additions & 60 deletions Cargo.lock

Large diffs are not rendered by default.

4 changes: 4 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ with-cheatcode = []
with-debug-utils = []
with-mem-tracing = []
with-segfault-catcher = []
with-trace-dump = ["dep:sierra-emu"]

# the aquamarine dep is only used in docs and cannot be detected as used by cargo udeps
[package.metadata.cargo-udeps.ignore]
Expand Down Expand Up @@ -127,6 +128,9 @@ num-integer = "0.1.46"
rand = "0.9.0"
starknet-curve = "0.5.1"

# trace dump
sierra-emu = { git = "https://github.com/lambdaclass/sierra-emu", branch = "main", optional = true}

[dev-dependencies]
cairo-vm = { git = "https://github.com/lambdaclass/cairo-vm", rev = "368e3fb311601a33ff8945e784eaa332f1fd499a", features = ["cairo-1-hints"] }
cairo-lang-semantic = { version = "=2.12.0-dev.0", features = ["testing"] }
Expand Down
67 changes: 66 additions & 1 deletion src/bin/cairo-native-run.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ use cairo_native::{
starknet_stub::StubSyscallHandler,
};
use clap::{Parser, ValueEnum};
use std::path::PathBuf;
use std::{path::PathBuf, fs::File};
use tracing_subscriber::{EnvFilter, FmtSubscriber};
use utils::{find_function, result_to_runresult};

Expand Down Expand Up @@ -45,6 +45,14 @@ struct Args {
/// Optimization level, Valid: 0, 1, 2, 3. Values higher than 3 are considered as 3.
#[arg(short = 'O', long, default_value_t = 0)]
opt_level: u8,

#[cfg(feature = "with-trace-dump")]
#[arg(long)]
trace_output: Option<PathBuf>,

#[cfg(feature = "with-trace-dump")]
#[arg(long)]
sierra_output: Option<PathBuf>,
}

fn main() -> anyhow::Result<()> {
Expand All @@ -70,6 +78,13 @@ fn main() -> anyhow::Result<()> {
)?
.program;

#[cfg(feature = "with-trace-dump")]
if let Some(sierra_output) = args.sierra_output {
use std::io::Write;
let mut file = File::create(sierra_output).unwrap();
write!(file, "{}", &sierra_program).unwrap();
}

let native_context = NativeContext::new();

// Compile the sierra program into a MLIR module.
Expand All @@ -81,6 +96,16 @@ fn main() -> anyhow::Result<()> {
RunMode::Aot => {
let executor =
AotNativeExecutor::from_native_module(native_module, args.opt_level.into())?;

#[cfg(feature = "with-trace-dump")]
{
use cairo_native::metadata::trace_dump::TraceBinding;
if let Some(trace_id) = executor.find_symbol_ptr(TraceBinding::TraceId.symbol()) {
let trace_id = trace_id.cast::<u64>();
unsafe { *trace_id = 0 };
}
}

Box::new(move |function_id, args, gas, syscall_handler| {
executor.invoke_dynamic_with_syscall_handler(
function_id,
Expand All @@ -93,6 +118,16 @@ fn main() -> anyhow::Result<()> {
RunMode::Jit => {
let executor =
JitNativeExecutor::from_native_module(native_module, args.opt_level.into())?;

#[cfg(feature = "with-trace-dump")]
{
use cairo_native::metadata::trace_dump::TraceBinding;
if let Some(trace_id) = executor.find_symbol_ptr(TraceBinding::TraceId.symbol()) {
let trace_id = trace_id.cast::<u64>();
unsafe { *trace_id = 0 };
}
}

Box::new(move |function_id, args, gas, syscall_handler| {
executor.invoke_dynamic_with_syscall_handler(
function_id,
Expand All @@ -104,6 +139,21 @@ fn main() -> anyhow::Result<()> {
}
};

#[cfg(feature = "with-trace-dump")]
{
use cairo_lang_sierra::program_registry::ProgramRegistry;
use cairo_native::runtime::trace_dump::{TraceDump, TRACE_DUMP};
use cairo_native::types::TypeBuilder;

TRACE_DUMP.lock().unwrap().insert(
0,
TraceDump::new(
ProgramRegistry::new(&sierra_program).unwrap(),
|ty, registry| ty.layout(registry).unwrap(),
),
);
}

let gas_metadata =
GasMetadata::new(&sierra_program, Some(MetadataComputationConfig::default())).unwrap();

Expand Down Expand Up @@ -139,5 +189,20 @@ fn main() -> anyhow::Result<()> {
println!("Remaining gas: {gas}");
}

#[cfg(feature = "with-trace-dump")]
if let Some(trace_output) = args.trace_output {
let traces = cairo_native::runtime::trace_dump::TRACE_DUMP
.lock()
.unwrap();
assert_eq!(traces.len(), 1);

let trace_dump = traces.values().next().unwrap();
serde_json::to_writer_pretty(
std::fs::File::create(trace_output).unwrap(),
&trace_dump.trace,
)
.unwrap();
}

Ok(())
}
Loading
Loading