use crate::context::Effects;
use crate::ops::Op;
use crate::result_mode::ResultModeVerify;
use base_crypto::cost_model::RunningCost;
use derive_where::derive_where;
use serialize::tag_enforcement_test;
use serialize::{Deserializable, Serializable, Tagged};
use storage::Storable;
use storage::arena::{ArenaKey, Sp};
use storage::db::DB;
use storage::storable::Loader;
use serde::{Deserialize, Serialize};
#[derive(Storable, Serialize, Deserialize, Serializable, Clone, PartialEq, Eq, Debug)]
#[storable(base)]
#[tag = "contract-transcript-version"]
pub struct TranscriptVersion {
pub major: u8,
pub minor: u8,
}
tag_enforcement_test!(TranscriptVersion);
#[derive(Storable, Serialize, Deserialize)]
#[serde(bound(serialize = "", deserialize = ""))]
#[derive_where(Clone, PartialEq, Eq, Debug)]
#[storable(db = D)]
#[tag = "contract-transcript[v4]"]
pub struct Transcript<D: DB> {
pub gas: RunningCost,
pub effects: Effects<D>,
pub program: storage::storage::Array<Op<ResultModeVerify, D>, D>,
pub version: Option<Sp<TranscriptVersion, D>>,
}
tag_enforcement_test!(Transcript<storage::db::InMemoryDB>);
impl<D: DB> Transcript<D> {
pub const VERSION: TranscriptVersion = TranscriptVersion { major: 2, minor: 3 };
}