diff --git a/src/chainstate/stacks/db/mod.rs b/src/chainstate/stacks/db/mod.rs index d06636acdd2..6448d71564f 100644 --- a/src/chainstate/stacks/db/mod.rs +++ b/src/chainstate/stacks/db/mod.rs @@ -921,6 +921,8 @@ impl StacksChainState { } let mut allocation_events: Vec = vec![]; + let mut lockup_events: Vec = vec![]; + info!( "Initializing chain with {} config balances", boot_data.initial_balances.len() @@ -1001,12 +1003,27 @@ impl StacksChainState { .with_clarity_db(|db| { for (block_height, schedule) in lockups_per_block.into_iter() { let key = Value::UInt(block_height.into()); + let value = Value::list_from(schedule).unwrap(); db.insert_entry( &lockup_contract_id, "lockups", - key, - Value::list_from(schedule).unwrap(), + key.clone(), + value.clone(), )?; + + // Attach some events + let lookup_event = TupleData::from_data(vec![ + (ClarityName::try_from("block-height").unwrap(), key), + (ClarityName::try_from("due-schedules").unwrap(), value), + ]) + .unwrap(); + let lookup_event = StacksTransactionEvent::SmartContractEvent( + SmartContractEventData { + key: (boot_code_id("lockup"), "print".to_string()), + value: Value::Tuple(lookup_event), + }, + ); + lockup_events.push(lookup_event); } Ok(()) }) @@ -1190,6 +1207,24 @@ impl StacksChainState { ); receipts.push(allocations_receipt); + let lockup_tx = StacksTransaction::new( + tx_version.clone(), + boot_code_auth.clone(), + TransactionPayload::ContractCall(TransactionContractCall { + address: boot_code_address, + contract_name: ContractName::try_from("lockup").unwrap(), + function_name: ClarityName::try_from("genesis").unwrap(), + function_args: vec![], + }), + ); + let lockup_receipt = StacksTransactionReceipt::from_stx_transfer( + lockup_tx, + lockup_events, + Value::okay_true(), + ExecutionCost::zero(), + ); + receipts.push(lockup_receipt); + if let Some(callback) = boot_data.post_flight_callback.take() { callback(&mut clarity_tx); }