2026-05-26 06:24:57 +00:00
|
|
|
use crate::blocks::token::CreateTokenTransaction;
|
|
|
|
|
use crate::common::network_paths_and_settings::block_extension_and_paths;
|
2026-05-24 17:56:57 +00:00
|
|
|
use crate::decode;
|
|
|
|
|
use crate::records::balance_sheet::operations::balance_sheet_operation_with_db;
|
2026-05-26 06:24:57 +00:00
|
|
|
use crate::records::record_chain::token_provenance::clear_token_history;
|
|
|
|
|
use crate::sled::Db;
|
|
|
|
|
|
|
|
|
|
pub async fn undo_create_token_transaction(
|
|
|
|
|
transaction: CreateTokenTransaction,
|
|
|
|
|
mining_receiver: &str,
|
|
|
|
|
db: &Db,
|
|
|
|
|
) {
|
|
|
|
|
// remove the created token state and restore the creator balances
|
|
|
|
|
// when a create-token transaction is rolled back
|
|
|
|
|
let operand_subtraction = "subtraction";
|
|
|
|
|
let operand_addition = "addition";
|
|
|
|
|
let (
|
|
|
|
|
_network_name,
|
|
|
|
|
_padded_base_coin,
|
|
|
|
|
type_str,
|
|
|
|
|
_torrentpath,
|
|
|
|
|
_wallet_path,
|
|
|
|
|
_blockpath,
|
|
|
|
|
_db_path,
|
|
|
|
|
_balance_path,
|
|
|
|
|
_log_path,
|
|
|
|
|
) = block_extension_and_paths();
|
|
|
|
|
let (txfee, creator, ticker, number) = (
|
|
|
|
|
&transaction.unsigned_create_token.txfee,
|
|
|
|
|
&transaction.unsigned_create_token.creator,
|
|
|
|
|
&transaction.unsigned_create_token.ticker,
|
|
|
|
|
&transaction.unsigned_create_token.number,
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
// Remove the miner fee, refund the creator fee, and remove the created
|
|
|
|
|
// supply from the creator balance.
|
|
|
|
|
let _ = balance_sheet_operation_with_db(
|
|
|
|
|
db,
|
|
|
|
|
mining_receiver,
|
|
|
|
|
*txfee,
|
|
|
|
|
&type_str,
|
|
|
|
|
operand_subtraction,
|
|
|
|
|
);
|
|
|
|
|
let _ = balance_sheet_operation_with_db(db, creator, *txfee, &type_str, operand_addition);
|
|
|
|
|
let _ = balance_sheet_operation_with_db(db, creator, *number, ticker, operand_subtraction);
|
|
|
|
|
|
|
|
|
|
let ticker_binary = &transaction.unsigned_create_token.ticker.as_bytes();
|
|
|
|
|
let hash_binary = decode(&transaction.unsigned_create_token.hash().await).unwrap();
|
|
|
|
|
|
|
|
|
|
// Remove the create-token transaction lookup from the txid tree.
|
|
|
|
|
let tree = db.open_tree("txid").unwrap();
|
|
|
|
|
let key = hash_binary.clone();
|
|
|
|
|
tree.remove(key).unwrap();
|
|
|
|
|
|
|
|
|
|
// remove the token definition and origin entry
|
|
|
|
|
// created when the token was first saved
|
|
|
|
|
let tree = db.open_tree("tokens").unwrap();
|
|
|
|
|
let key = ticker_binary;
|
|
|
|
|
tree.remove(key).unwrap();
|
|
|
|
|
|
|
|
|
|
let origin_tree = db.open_tree("token_origins").unwrap();
|
|
|
|
|
origin_tree.remove(key).unwrap();
|
|
|
|
|
|
|
|
|
|
let limit_tree = db.open_tree("token_limits").unwrap();
|
|
|
|
|
limit_tree.remove(key).unwrap();
|
|
|
|
|
// Token history is cleared because the token itself no longer exists.
|
|
|
|
|
let _ = clear_token_history(db, ticker);
|
2026-05-24 17:56:57 +00:00
|
|
|
}
|