Merge branch 'develop' into rft_vec_to_sli

This commit is contained in:
Jude Nelson
2023-02-07 16:10:42 +00:00
committed by GitHub
7 changed files with 453 additions and 23 deletions

View File

@@ -30,6 +30,7 @@ use stacks::vm::events::{FTEventType, NFTEventType, STXEventType};
use stacks::vm::types::{AssetIdentifier, QualifiedContractIdentifier, Value};
use super::config::{EventKeyType, EventObserverConfig};
use stacks::chainstate::burn::operations::BlockstackOperationType;
use stacks::chainstate::burn::ConsensusHash;
use stacks::chainstate::stacks::db::unconfirmed::ProcessedUnconfirmedState;
use stacks::chainstate::stacks::miner::TransactionEvent;
@@ -46,6 +47,7 @@ struct ReceiptPayloadInfo<'a> {
raw_result: String,
raw_tx: String,
contract_interface_json: serde_json::Value,
burnchain_op_json: serde_json::Value,
}
const STATUS_RESP_TRUE: &str = "success";
@@ -214,12 +216,16 @@ impl EventObserver {
}
};
let (txid, raw_tx) = match tx {
TransactionOrigin::Burn(txid) => (txid.to_string(), "00".to_string()),
let (txid, raw_tx, burnchain_op_json) = match tx {
TransactionOrigin::Burn(op) => (
op.txid().to_string(),
"00".to_string(),
BlockstackOperationType::blockstack_op_to_json(&op),
),
TransactionOrigin::Stacks(ref tx) => {
let txid = tx.txid().to_string();
let bytes = tx.serialize_to_vec();
(txid, bytes_to_hex(&bytes))
(txid, bytes_to_hex(&bytes), json!(null))
}
};
@@ -239,6 +245,7 @@ impl EventObserver {
raw_result,
raw_tx,
contract_interface_json,
burnchain_op_json,
}
}
@@ -256,6 +263,7 @@ impl EventObserver {
"raw_result": format!("0x{}", &receipt_payload_info.raw_result),
"raw_tx": format!("0x{}", &receipt_payload_info.raw_tx),
"contract_abi": receipt_payload_info.contract_interface_json,
"burnchain_op": receipt_payload_info.burnchain_op_json,
"execution_cost": receipt.execution_cost,
"microblock_sequence": receipt.microblock_header.as_ref().map(|x| x.sequence),
"microblock_hash": receipt.microblock_header.as_ref().map(|x| format!("0x{}", x.block_hash())),

View File

@@ -1505,6 +1505,12 @@ fn stx_transfer_btc_integration_test() {
let (mut conf, _miner_account) = neon_integration_test_conf();
test_observer::spawn();
conf.events_observers.push(EventObserverConfig {
endpoint: format!("localhost:{}", test_observer::EVENT_OBSERVER_PORT),
events_keys: vec![EventKeyType::AnyEvent],
});
conf.initial_balances.push(InitialBalance {
address: spender_addr.clone(),
amount: 100300,
@@ -1547,6 +1553,8 @@ fn stx_transfer_btc_integration_test() {
// second block will be the first mined Stacks block
next_block_and_wait(&mut btc_regtest_controller, &blocks_processed);
test_observer::clear();
// let's query the spender's account:
assert_eq!(get_balance(&http_origin, &spender_addr), 100300);
@@ -1686,6 +1694,23 @@ fn stx_transfer_btc_integration_test() {
assert_eq!(get_balance(&http_origin, &recipient_addr), 200_000);
assert_eq!(get_balance(&http_origin, &spender_2_addr), 300);
let mut found_btc_tx = false;
let blocks = test_observer::get_blocks();
for block in blocks {
let transactions = block.get("transactions").unwrap().as_array().unwrap();
for tx in transactions.iter() {
let raw_tx = tx.get("raw_tx").unwrap().as_str().unwrap();
if raw_tx == "0x00" {
let burnchain_op = tx.get("burnchain_op").unwrap().as_object().unwrap();
if !burnchain_op.contains_key("TransferStx") {
panic!("unexpected btc transaction type");
}
found_btc_tx = true;
}
}
}
assert!(found_btc_tx);
channel.stop_chains_coordinator();
}