Skip to content

Commit

Permalink
pr comment # 2
Browse files Browse the repository at this point in the history
  • Loading branch information
modship committed Aug 26, 2024
1 parent 9664ca7 commit a08664e
Show file tree
Hide file tree
Showing 13 changed files with 150 additions and 171 deletions.
2 changes: 1 addition & 1 deletion massa-deferred-calls/src/call.rs
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ pub struct DeferredCallSerializer {
}

impl DeferredCallSerializer {
/// Serializes an `AsyncCall` into a `Vec<u8>`
/// Serializes an `DeferredCall` into a `Vec<u8>`
pub fn new() -> Self {
Self {
slot_serializer: SlotSerializer::new(),
Expand Down
207 changes: 92 additions & 115 deletions massa-deferred-calls/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ use massa_ledger_exports::{SetOrDelete, SetOrKeep};
use massa_models::{
amount::Amount,
config::{DEFERRED_CALL_MAX_POOL_CHANGES, MAX_ASYNC_GAS, THREAD_COUNT},
deferred_call_id::{DeferredCallId, DeferredCallIdDeserializer, DeferredCallIdSerializer},
deferred_calls::{DeferredCallId, DeferredCallIdDeserializer, DeferredCallIdSerializer},
slot::Slot,
};
use std::collections::{BTreeMap, HashSet};
Expand All @@ -49,7 +49,7 @@ impl DeferredCallRegistry {
[DEFERRED_CALL_TOTAL_GAS] -> u64 // total currently booked gas
[DEFERRED_CALLS_PREFIX][slot][SLOT_TOTAL_GAS] -> u64 // total gas booked for a slot (optional, default 0, deleted when set to 0)
[DEFERRED_CALLS_PREFIX][slot][SLOT_BASE_FEE] -> u64 // deleted when set to 0
[DEFERRED_CALLS_PREFIX][slot][CALLS_TAG][id][CALL_FIELD_X_TAG] -> AsyncCall.x // call data
[DEFERRED_CALLS_PREFIX][slot][CALLS_TAG][id][CALL_FIELD_X_TAG] -> DeferredCalls.x // call data
*/

// TODO pass args
Expand Down Expand Up @@ -205,89 +205,105 @@ impl DeferredCallRegistry {

let db = self.db.read();

// sender address
let mut temp_buffer = Vec::new();
self.call_serializer
.address_serializer
.serialize(&call.sender_address, &mut temp_buffer)
.expect(DEFERRED_CALL_SER_ERROR);
db.put_or_update_entry_value(
batch,
sender_address_key!(buffer_id, slot_bytes),
&temp_buffer,
);
temp_buffer.clear();

// target slot
self.call_serializer
.slot_serializer
.serialize(&call.target_slot, &mut temp_buffer)
.expect(DEFERRED_CALL_SER_ERROR);
db.put_or_update_entry_value(batch, target_slot_key!(buffer_id, slot_bytes), &temp_buffer);
temp_buffer.clear();
{
// sender address
let mut buffer = Vec::new();
self.call_serializer
.address_serializer
.serialize(&call.sender_address, &mut buffer)
.expect(DEFERRED_CALL_SER_ERROR);
db.put_or_update_entry_value(
batch,
sender_address_key!(buffer_id, slot_bytes),
&buffer,
);
}

// target address
self.call_serializer
.address_serializer
.serialize(&call.target_address, &mut temp_buffer)
.expect(DEFERRED_CALL_SER_ERROR);
db.put_or_update_entry_value(
batch,
target_address_key!(buffer_id, slot_bytes),
&temp_buffer,
);
temp_buffer.clear();

// target function
self.call_serializer
.string_serializer
.serialize(&call.target_function, &mut temp_buffer)
.expect(DEFERRED_CALL_SER_ERROR);
db.put_or_update_entry_value(
batch,
target_function_key!(buffer_id, slot_bytes),
&temp_buffer,
);
temp_buffer.clear();

// parameters
self.call_serializer
.vec_u8_serializer
.serialize(&call.parameters, &mut temp_buffer)
.expect(DEFERRED_CALL_SER_ERROR);
db.put_or_update_entry_value(batch, parameters_key!(buffer_id, slot_bytes), &temp_buffer);
temp_buffer.clear();
{
// target slot
let mut buffer = Vec::new();
self.call_serializer
.slot_serializer
.serialize(&call.target_slot, &mut buffer)
.expect(DEFERRED_CALL_SER_ERROR);
db.put_or_update_entry_value(batch, target_slot_key!(buffer_id, slot_bytes), &buffer);
}

// coins
self.call_serializer
.amount_serializer
.serialize(&call.coins, &mut temp_buffer)
.expect(DEFERRED_CALL_SER_ERROR);
db.put_or_update_entry_value(batch, coins_key!(buffer_id, slot_bytes), &temp_buffer);
temp_buffer.clear();
{
// target address
let mut buffer = Vec::new();
self.call_serializer
.address_serializer
.serialize(&call.target_address, &mut buffer)
.expect(DEFERRED_CALL_SER_ERROR);
db.put_or_update_entry_value(
batch,
target_address_key!(buffer_id, slot_bytes),
&buffer,
);
}

// max gas
self.call_serializer
.u64_var_int_serializer
.serialize(&call.max_gas, &mut temp_buffer)
.expect(DEFERRED_CALL_SER_ERROR);
db.put_or_update_entry_value(batch, max_gas_key!(buffer_id, slot_bytes), &temp_buffer);
temp_buffer.clear();
{
// target function
let mut buffer = Vec::new();
self.call_serializer
.string_serializer
.serialize(&call.target_function, &mut buffer)
.expect(DEFERRED_CALL_SER_ERROR);
db.put_or_update_entry_value(
batch,
target_function_key!(buffer_id, slot_bytes),
&buffer,
);
}

// fee
self.call_serializer
.amount_serializer
.serialize(&call.fee, &mut temp_buffer)
.expect(DEFERRED_CALL_SER_ERROR);
db.put_or_update_entry_value(batch, fee_key!(buffer_id, slot_bytes), &temp_buffer);
temp_buffer.clear();
{
// parameters
let mut buffer = Vec::new();
self.call_serializer
.vec_u8_serializer
.serialize(&call.parameters, &mut buffer)
.expect(DEFERRED_CALL_SER_ERROR);
db.put_or_update_entry_value(batch, parameters_key!(buffer_id, slot_bytes), &buffer);
}

{
// coins
let mut buffer = Vec::new();
self.call_serializer
.amount_serializer
.serialize(&call.coins, &mut buffer)
.expect(DEFERRED_CALL_SER_ERROR);
db.put_or_update_entry_value(batch, coins_key!(buffer_id, slot_bytes), &buffer);
}

{
// max gas
let mut buffer = Vec::new();
self.call_serializer
.u64_var_int_serializer
.serialize(&call.max_gas, &mut buffer)
.expect(DEFERRED_CALL_SER_ERROR);
db.put_or_update_entry_value(batch, max_gas_key!(buffer_id, slot_bytes), &buffer);
}

{
// fee
let mut buffer = Vec::new();
self.call_serializer
.amount_serializer
.serialize(&call.fee, &mut buffer)
.expect(DEFERRED_CALL_SER_ERROR);
db.put_or_update_entry_value(batch, fee_key!(buffer_id, slot_bytes), &buffer);
}

// cancelled
let mut buffer = Vec::new();
self.call_serializer
.bool_serializer
.serialize(&call.cancelled, &mut temp_buffer)
.serialize(&call.cancelled, &mut buffer)
.expect(DEFERRED_CALL_SER_ERROR);
db.put_or_update_entry_value(batch, cancelled_key!(buffer_id, slot_bytes), &temp_buffer);
db.put_or_update_entry_value(batch, cancelled_key!(buffer_id, slot_bytes), &buffer);
}

fn delete_entry(&self, id: &DeferredCallId, slot: &Slot, batch: &mut DBBatch) {
Expand Down Expand Up @@ -389,50 +405,11 @@ impl DeferredCallRegistry {
}
}

// #[derive(Debug, Clone, Serialize, Deserialize)]
// pub enum DeferredRegistryCallChange {
// Set(DeferredCall),
// Delete,
// }

// TODO put SetOrDelete dans models
pub type DeferredRegistryCallChange = SetOrDelete<DeferredCall>;
pub type DeferredRegistryGasChange<V> = SetOrKeep<V>;
pub type DeferredRegistryBaseFeeChange = SetOrKeep<Amount>;

// impl DeferredRegistryCallChange {
// pub fn merge(&mut self, other: DeferredRegistryCallChange) {
// *self = other;
// }

// pub fn delete_call(&mut self) {
// *self = DeferredRegistryCallChange::Delete;
// }

// pub fn set_call(&mut self, call: DeferredCall) {
// *self = DeferredRegistryCallChange::Set(call);
// }

// pub fn get_call(&self) -> Option<&DeferredCall> {
// match self {
// DeferredRegistryCallChange::Set(v) => Some(v),
// DeferredRegistryCallChange::Delete => None,
// }
// }
// }

// #[derive(Debug, Clone, Serialize, Deserialize)]
// pub enum DeferredRegistryGasChange<V> {
// Set(V),
// Keep,
// }

// impl<V> Default for DeferredRegistryGasChange<V> {
// fn default() -> Self {
// DeferredRegistryGasChange::Keep
// }
// }

/// A structure that lists slot calls for a given slot,
/// as well as global gas usage statistics.
#[derive(Debug, Clone)]
Expand Down
2 changes: 1 addition & 1 deletion massa-deferred-calls/src/macros.rs
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ macro_rules! cancelled_key {
mod tests {
use massa_db_exports::DEFERRED_CALLS_PREFIX;
use massa_models::{
deferred_call_id::{DeferredCallId, DeferredCallIdSerializer},
deferred_calls::{DeferredCallId, DeferredCallIdSerializer},
slot::Slot,
};
use massa_serialization::Serializer;
Expand Down
4 changes: 2 additions & 2 deletions massa-deferred-calls/src/registry_changes.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ use std::{collections::BTreeMap, ops::Bound};
use massa_ledger_exports::{SetOrKeepDeserializer, SetOrKeepSerializer};
use massa_models::{
amount::Amount,
deferred_call_id::DeferredCallId,
deferred_calls::DeferredCallId,
slot::{Slot, SlotDeserializer, SlotSerializer},
};
use massa_serialization::{
Expand Down Expand Up @@ -208,7 +208,7 @@ impl Deserializer<DeferredCallRegistryChanges> for DeferredRegistryChangesDeseri
mod tests {
use std::str::FromStr;

use massa_models::{address::Address, amount::Amount, deferred_call_id::DeferredCallId};
use massa_models::{address::Address, amount::Amount, deferred_calls::DeferredCallId};
use massa_serialization::DeserializeError;

use crate::{
Expand Down
4 changes: 2 additions & 2 deletions massa-deferred-calls/src/slot_changes.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ use massa_ledger_exports::{
};
use massa_models::{
amount::{Amount, AmountDeserializer, AmountSerializer},
deferred_call_id::{DeferredCallId, DeferredCallIdDeserializer, DeferredCallIdSerializer},
deferred_calls::{DeferredCallId, DeferredCallIdDeserializer, DeferredCallIdSerializer},
};
use massa_serialization::{
Deserializer, SerializeError, Serializer, U64VarIntDeserializer, U64VarIntSerializer,
Expand Down Expand Up @@ -213,7 +213,7 @@ mod tests {
use std::str::FromStr;

use massa_models::{
address::Address, amount::Amount, deferred_call_id::DeferredCallId, slot::Slot,
address::Address, amount::Amount, deferred_calls::DeferredCallId, slot::Slot,
};
use massa_serialization::{DeserializeError, Deserializer, Serializer};

Expand Down
2 changes: 1 addition & 1 deletion massa-deferred-calls/src/tests/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ use massa_models::{
address::Address,
amount::Amount,
config::THREAD_COUNT,
deferred_call_id::{DeferredCallId, DeferredCallIdSerializer},
deferred_calls::{DeferredCallId, DeferredCallIdSerializer},
slot::Slot,
};
use parking_lot::RwLock;
Expand Down
14 changes: 7 additions & 7 deletions massa-execution-worker/src/context.rs
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ use massa_ledger_exports::{LedgerChanges, SetOrKeep};
use massa_models::address::ExecutionAddressCycleInfo;
use massa_models::block_id::BlockIdSerializer;
use massa_models::bytecode::Bytecode;
use massa_models::deferred_call_id::DeferredCallId;
use massa_models::deferred_calls::DeferredCallId;
use massa_models::denunciation::DenunciationIndex;
use massa_models::timeslots::get_block_slot_timestamp;
use massa_models::{
Expand Down Expand Up @@ -1183,7 +1183,7 @@ impl ExecutionContext {
/// Check if a deferred call exists
/// If it exists, check if it has been cancelled
/// If it has been cancelled, return false
pub fn deferred_call_exist(&self, call_id: &DeferredCallId) -> bool {
pub fn deferred_call_exists(&self, call_id: &DeferredCallId) -> bool {
if let Some(call) = self.speculative_deferred_calls.get_call(call_id) {
return call.cancelled;
}
Expand All @@ -1193,6 +1193,7 @@ impl ExecutionContext {
/// when a deferred call execution fails we need to refund the coins to the caller
pub fn deferred_call_fail_exec(
&mut self,
id: &DeferredCallId,
call: &DeferredCall,
) -> Option<(Address, Result<Amount, String>)> {
#[allow(unused_assignments, unused_mut)]
Expand All @@ -1207,6 +1208,9 @@ impl ExecutionContext {
);
}

let event = self.event_create(format!("DeferredCall execution fail call_id:{}", id), true);
self.event_emit(event);

#[cfg(feature = "execution-info")]
if let Err(e) = transfer_result {
result = Some((call.sender_address, Err(e.to_string())))
Expand All @@ -1217,11 +1221,7 @@ impl ExecutionContext {
result
}

/// not used for now
pub fn deferred_call_delete(&mut self, call_id: &DeferredCallId, slot: Slot) {
self.speculative_deferred_calls.delete_call(call_id, slot);
}

/// when a deferred call is cancelled we need to refund the coins to the caller
pub fn deferred_call_cancel(
&mut self,
call_id: &DeferredCallId,
Expand Down
Loading

0 comments on commit a08664e

Please sign in to comment.