Skip to content

Commit 2564d0b

Browse files
committed
feat(primitives): deploy tx receipt
1 parent ea44e0d commit 2564d0b

File tree

4 files changed

+71
-5
lines changed

4 files changed

+71
-5
lines changed

crates/gateway/gateway-types/src/conversion.rs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,19 @@ impl From<katana_primitives::receipt::Receipt> for ReceiptBody {
265265
};
266266

267267
match receipt {
268+
katana_primitives::receipt::Receipt::Deploy(receipt) => {
269+
Self {
270+
execution_resources: Some(receipt.execution_resources.into()),
271+
// This would need to be populated from transaction context
272+
l1_to_l2_consumed_message: None,
273+
l2_to_l1_messages: receipt.messages_sent,
274+
events: receipt.events,
275+
actual_fee: receipt.fee.overall_fee.into(),
276+
execution_status,
277+
revert_error: receipt.revert_error,
278+
}
279+
}
280+
268281
katana_primitives::receipt::Receipt::Invoke(receipt) => {
269282
Self {
270283
execution_resources: Some(receipt.execution_resources.into()),

crates/primitives/src/receipt.rs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,25 @@ pub struct DeployAccountTxReceipt {
107107
pub contract_address: ContractAddress,
108108
}
109109

110+
/// Receipt for a `Deploy` transaction.
111+
#[derive(Debug, Clone, PartialEq, Eq)]
112+
#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
113+
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
114+
pub struct DeployTxReceipt {
115+
/// Information about the transaction fee.
116+
pub fee: FeeInfo,
117+
/// Events emitted by contracts.
118+
pub events: Vec<Event>,
119+
/// Messages sent to L1.
120+
pub messages_sent: Vec<MessageToL1>,
121+
/// Revert error message if the transaction execution failed.
122+
pub revert_error: Option<String>,
123+
/// The execution resources used by the transaction.
124+
pub execution_resources: ExecutionResources,
125+
/// Contract address of the deployed contract.
126+
pub contract_address: ContractAddress,
127+
}
128+
110129
/// The receipt of a transaction containing the outputs of its execution.
111130
#[derive(Debug, Clone, PartialEq, Eq)]
112131
#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
@@ -116,6 +135,7 @@ pub enum Receipt {
116135
Declare(DeclareTxReceipt),
117136
L1Handler(L1HandlerTxReceipt),
118137
DeployAccount(DeployAccountTxReceipt),
138+
Deploy(DeployTxReceipt),
119139
}
120140

121141
impl Receipt {
@@ -129,6 +149,7 @@ impl Receipt {
129149
/// Returns the revert reason if the transaction is reverted.
130150
pub fn revert_reason(&self) -> Option<&str> {
131151
match self {
152+
Receipt::Deploy(rct) => rct.revert_error.as_deref(),
132153
Receipt::Invoke(rct) => rct.revert_error.as_deref(),
133154
Receipt::Declare(rct) => rct.revert_error.as_deref(),
134155
Receipt::L1Handler(rct) => rct.revert_error.as_deref(),
@@ -139,6 +160,7 @@ impl Receipt {
139160
/// Returns the L1 messages sent.
140161
pub fn messages_sent(&self) -> &[MessageToL1] {
141162
match self {
163+
Receipt::Deploy(rct) => &rct.messages_sent,
142164
Receipt::Invoke(rct) => &rct.messages_sent,
143165
Receipt::Declare(rct) => &rct.messages_sent,
144166
Receipt::L1Handler(rct) => &rct.messages_sent,
@@ -149,6 +171,7 @@ impl Receipt {
149171
/// Returns the events emitted.
150172
pub fn events(&self) -> &[Event] {
151173
match self {
174+
Receipt::Deploy(rct) => &rct.events,
152175
Receipt::Invoke(rct) => &rct.events,
153176
Receipt::Declare(rct) => &rct.events,
154177
Receipt::L1Handler(rct) => &rct.events,
@@ -159,6 +182,7 @@ impl Receipt {
159182
/// Returns the execution resources used.
160183
pub fn resources_used(&self) -> &ExecutionResources {
161184
match self {
185+
Receipt::Deploy(rct) => &rct.execution_resources,
162186
Receipt::Invoke(rct) => &rct.execution_resources,
163187
Receipt::Declare(rct) => &rct.execution_resources,
164188
Receipt::L1Handler(rct) => &rct.execution_resources,
@@ -168,6 +192,7 @@ impl Receipt {
168192

169193
pub fn fee(&self) -> &FeeInfo {
170194
match self {
195+
Receipt::Deploy(rct) => &rct.fee,
171196
Receipt::Invoke(rct) => &rct.fee,
172197
Receipt::Declare(rct) => &rct.fee,
173198
Receipt::L1Handler(rct) => &rct.fee,
@@ -178,6 +203,7 @@ impl Receipt {
178203
/// Returns the transaction tyoe of the receipt.
179204
pub fn r#type(&self) -> TxType {
180205
match self {
206+
Receipt::Deploy(_) => TxType::Deploy,
181207
Receipt::Invoke(_) => TxType::Invoke,
182208
Receipt::Declare(_) => TxType::Declare,
183209
Receipt::L1Handler(_) => TxType::L1Handler,

crates/rpc/rpc-types/src/receipt.rs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,25 @@ pub struct RpcDeployAccountTxReceipt {
175175
impl RpcTxReceipt {
176176
fn new(receipt: Receipt, finality_status: FinalityStatus) -> Self {
177177
match receipt {
178+
Receipt::Deploy(rct) => {
179+
let messages_sent = rct.messages_sent;
180+
let events = rct.events;
181+
182+
RpcTxReceipt::Deploy(RpcDeployTxReceipt {
183+
events,
184+
messages_sent,
185+
finality_status,
186+
actual_fee: rct.fee.into(),
187+
contract_address: rct.contract_address,
188+
execution_resources: rct.execution_resources.into(),
189+
execution_result: if let Some(reason) = rct.revert_error {
190+
ExecutionResult::Reverted { reason }
191+
} else {
192+
ExecutionResult::Succeeded
193+
},
194+
})
195+
}
196+
178197
Receipt::Invoke(rct) => {
179198
let messages_sent = rct.messages_sent;
180199
let events = rct.events;

crates/sync/stage/src/blocks/mod.rs

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ use katana_primitives::block::{
66
};
77
use katana_primitives::fee::{FeeInfo, PriceUnit};
88
use katana_primitives::receipt::{
9-
DeclareTxReceipt, DeployAccountTxReceipt, InvokeTxReceipt, L1HandlerTxReceipt, Receipt,
9+
DeclareTxReceipt, DeployAccountTxReceipt, DeployTxReceipt, InvokeTxReceipt, L1HandlerTxReceipt,
10+
Receipt,
1011
};
1112
use katana_primitives::state::{StateUpdates, StateUpdatesWithClasses};
1213
use katana_primitives::transaction::{Tx, TxWithHash};
@@ -208,7 +209,7 @@ fn extract_block_data(
208209

209210
let fee = FeeInfo { unit, overall_fee, ..Default::default() };
210211

211-
match tx.transaction {
212+
match &tx.transaction {
212213
Tx::Invoke(_) => Receipt::Invoke(InvokeTxReceipt {
213214
fee,
214215
events,
@@ -231,15 +232,22 @@ fn extract_block_data(
231232
message_hash: Default::default(),
232233
execution_resources: execution_resources.into(),
233234
}),
234-
Tx::DeployAccount(_) => Receipt::DeployAccount(DeployAccountTxReceipt {
235+
Tx::DeployAccount(tx) => Receipt::DeployAccount(DeployAccountTxReceipt {
235236
fee,
236237
events,
237238
revert_error,
238239
messages_sent,
239-
contract_address: Default::default(),
240+
contract_address: tx.contract_address(),
241+
execution_resources: execution_resources.into(),
242+
}),
243+
Tx::Deploy(tx) => Receipt::Deploy(DeployTxReceipt {
244+
fee,
245+
events,
246+
revert_error,
247+
messages_sent,
248+
contract_address: tx.contract_address.into(),
240249
execution_resources: execution_resources.into(),
241250
}),
242-
Tx::Deploy(_) => unreachable!("Deploy transactions are not supported"),
243251
}
244252
})
245253
.collect::<Vec<Receipt>>();

0 commit comments

Comments
 (0)