Skip to content

Commit c35e816

Browse files
authored
chore: update FVM (#363)
1. Updates to the latest gas fees. 2. Adapts to the changes in gas tracing (half way). We still need to propagate this information to lotus, but that's a future patch.
1 parent 32df7d1 commit c35e816

File tree

4 files changed

+28
-23
lines changed

4 files changed

+28
-23
lines changed

rust/Cargo.lock

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

rust/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ serde_json = "1.0.46"
3434
memmap = "0.7"
3535
rust-gpu-tools = { version = "0.5", optional = true, default-features = false }
3636
fr32 = { version = "~5.0", default-features = false }
37-
fvm3 = { package = "fvm", version = "3.0.0-alpha.23", default-features = false }
37+
fvm3 = { package = "fvm", version = "3.0.0-alpha.24", default-features = false }
3838
fvm3_shared = { package = "fvm_shared", version = "3.0.0-alpha.20" }
3939
fvm3_ipld_encoding = { package = "fvm_ipld_encoding", version = "0.3.3" }
4040
fvm2 = { package = "fvm", version = "2.2.0", default-features = false }

rust/src/fvm/engine.rs

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,7 @@ mod v3 {
184184
mod v2 {
185185
use anyhow::{anyhow, Context};
186186
use cid::Cid;
187+
use fvm3_ipld_encoding::ipld_block::IpldBlock;
187188
use num_traits::FromPrimitive;
188189
use std::sync::Mutex;
189190

@@ -211,7 +212,7 @@ mod v2 {
211212
use fvm3::kernel::SyscallError;
212213

213214
use fvm3::trace::ExecutionEvent;
214-
use fvm3_ipld_encoding::RawBytes;
215+
use fvm3_ipld_encoding::{RawBytes, DAG_CBOR};
215216
use fvm3_shared::{
216217
address::Address, econ::TokenAmount, error::ErrorNumber, error::ExitCode, message::Message,
217218
receipt::Receipt,
@@ -355,17 +356,22 @@ mod v2 {
355356
from,
356357
to: Address::from_bytes(&to.to_bytes()).unwrap(),
357358
method,
358-
params: RawBytes::new(params.into()),
359+
params: params.is_empty().then(|| IpldBlock {
360+
codec: DAG_CBOR,
361+
data: params.into(),
362+
}),
359363
value: TokenAmount::from_atto(value.atto().clone()),
360364
}),
361365
ExecutionEvent2::CallReturn(ret) => Some(ExecutionEvent::CallReturn(
362366
ExitCode::OK,
363-
RawBytes::new(ret.into()),
364-
)),
365-
ExecutionEvent2::CallAbort(ec) => Some(ExecutionEvent::CallReturn(
366-
ExitCode::new(ec.value()),
367-
RawBytes::default(),
367+
ret.is_empty().then(|| IpldBlock {
368+
codec: DAG_CBOR,
369+
data: ret.into(),
370+
}),
368371
)),
372+
ExecutionEvent2::CallAbort(ec) => {
373+
Some(ExecutionEvent::CallReturn(ExitCode::new(ec.value()), None))
374+
}
369375
ExecutionEvent2::CallError(err) => {
370376
Some(ExecutionEvent::CallError(SyscallError(
371377
err.0,

rust/src/fvm/machine.rs

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ fn fvm_machine_execute_message(
205205
let exec_trace = if !apply_ret.exec_trace.is_empty() {
206206
let mut trace_iter = apply_ret.exec_trace.into_iter();
207207
build_lotus_trace(
208-
&(&mut trace_iter)
208+
(&mut trace_iter)
209209
// Skip gas charges before the first call, if any. Lotus can't handle them.
210210
.find(|item| !matches!(item, &ExecutionEvent::GasCharge(_)))
211211
.expect("already checked trace for emptiness"),
@@ -337,7 +337,7 @@ pub struct LotusReceipt {
337337
}
338338

339339
fn build_lotus_trace(
340-
new_call: &ExecutionEvent,
340+
new_call: ExecutionEvent,
341341
trace_iter: &mut impl Iterator<Item = ExecutionEvent>,
342342
) -> anyhow::Result<LotusTrace> {
343343
let mut new_trace = LotusTrace {
@@ -350,12 +350,12 @@ fn build_lotus_trace(
350350
value,
351351
} => Message {
352352
version: 0,
353-
from: Address::new_id(*from),
354-
to: *to,
353+
from: Address::new_id(from),
354+
to,
355+
value,
355356
sequence: 0,
356-
value: value.clone(),
357-
method_num: *method,
358-
params: params.clone(),
357+
method_num: method,
358+
params: params.map(|b| b.data).unwrap_or_default().into(),
359359
gas_limit: 0,
360360
gas_fee_cap: TokenAmount::default(),
361361
gas_premium: TokenAmount::default(),
@@ -379,12 +379,12 @@ fn build_lotus_trace(
379379
ExecutionEvent::Call { .. } => {
380380
new_trace
381381
.subcalls
382-
.push(build_lotus_trace(&trace, trace_iter)?);
382+
.push(build_lotus_trace(trace, trace_iter)?);
383383
}
384384
ExecutionEvent::CallReturn(exit_code, return_data) => {
385385
new_trace.msg_receipt = LotusReceipt {
386386
exit_code,
387-
return_data,
387+
return_data: return_data.map(|b| b.data).unwrap_or_default().into(),
388388
gas_used: 0,
389389
};
390390
return Ok(new_trace);
@@ -431,7 +431,6 @@ mod test {
431431
use crate::fvm::machine::build_lotus_trace;
432432
use fvm3::kernel::SyscallError;
433433
use fvm3::trace::ExecutionEvent;
434-
use fvm3_ipld_encoding::RawBytes;
435434
use fvm3_shared::address::Address;
436435
use fvm3_shared::econ::TokenAmount;
437436
use fvm3_shared::error::ErrorNumber::IllegalArgument;
@@ -442,7 +441,7 @@ mod test {
442441
let call_event = ExecutionEvent::Call {
443442
from: ActorID::default(),
444443
method: 0,
445-
params: RawBytes::default(),
444+
params: None,
446445
to: Address::new_id(0),
447446
value: TokenAmount::default(),
448447
};
@@ -461,7 +460,7 @@ mod test {
461460

462461
let mut trace_iter = trace.into_iter();
463462

464-
let lotus_trace = build_lotus_trace(&trace_iter.next().unwrap(), &mut trace_iter).unwrap();
463+
let lotus_trace = build_lotus_trace(trace_iter.next().unwrap(), &mut trace_iter).unwrap();
465464

466465
assert!(trace_iter.next().is_none());
467466

0 commit comments

Comments
 (0)