cardano-serialization-lib 15.0.3

(De)serialization functions for the Cardano blockchain along with related utility functions
Documentation
use crate::*;
use crate::tests::fakes::{fake_anchor, fake_asset_name, fake_auxiliary_data_hash, fake_base_address, fake_key_hash, fake_policy_id, fake_reward_address, fake_script_data_hash, fake_tx_hash, fake_tx_input};

#[test]
fn transaction_round_trip_test() {
    let input = fake_tx_input(1);
    let output = TransactionOutput::new(&fake_base_address(2), &Value::new(&BigNum(1_000_001)));
    let inputs = TransactionInputs::from_vec(vec![input]);
    let outputs = TransactionOutputs(vec![output]);
    let fee = Coin::from(1_000_002u64);
    let mut body = TransactionBody::new_tx_body(&inputs, &outputs, &fee);
    let mut mint = Mint::new();
    let mint_asset =
        MintAssets::new_from_entry(&fake_asset_name(4), &Int::new(&BigNum(1_000_003u64)))
            .unwrap();
    mint.insert(&fake_policy_id(3), &mint_asset);

    let mut req_signers = Ed25519KeyHashes::new();
    req_signers.add(&fake_key_hash(5));

    let mut collateral_inputs = TransactionInputs::new();
    collateral_inputs.add(&fake_tx_input(6));

    let mut ref_inputs = TransactionInputs::new();
    ref_inputs.add(&fake_tx_input(7));

    let mut certs = Certificates::new();
    let stake_registration = StakeRegistration::new(&Credential::from_keyhash(&fake_key_hash(8)));
    certs.add(&Certificate::new_stake_registration(&stake_registration));

    let mut withdrawals = Withdrawals::new();
    withdrawals.insert(
        &RewardAddress::new(
            NetworkInfo::testnet_preprod().network_id(),
            &Credential::from_keyhash(&fake_key_hash(9)),
        ),
        &Coin::from(1_000_010u64),
    );

    let mut voting_procedures = VotingProcedures::new();
    let voter = Voter::new_drep_credential(&Credential::from_keyhash(&fake_key_hash(1)));
    let gov_action_id = GovernanceActionId::new(&fake_tx_hash(2), 0);
    let procedure = VotingProcedure::new(VoteKind::Abstain);
    voting_procedures.insert(&voter, &gov_action_id, &procedure);

    let mut voting_proposals = VotingProposals::new();
    let info_action = InfoAction::new();
    let action = GovernanceAction::new_info_action(&info_action);
    let proposal = VotingProposal::new(
        &action,
        &fake_anchor(),
        &fake_reward_address(3),
        &Coin::from(1_000_011u64),
    );
    voting_proposals.add(&proposal);

    body.set_ttl(&BigNum(1_000_003u64));
    body.set_certs(&certs);
    body.set_withdrawals(&withdrawals);
    body.set_update(&Update::new(&ProposedProtocolParameterUpdates::new(), 1));
    body.set_auxiliary_data_hash(&fake_auxiliary_data_hash(2));
    body.set_validity_start_interval_bignum(&SlotBigNum::from(1_000_004u64));
    body.set_mint(&mint);
    body.set_reference_inputs(&ref_inputs);
    body.set_script_data_hash(&fake_script_data_hash(3));
    body.set_collateral(&collateral_inputs);
    body.set_required_signers(&req_signers);
    body.set_network_id(&NetworkId::testnet());
    body.set_collateral_return(&TransactionOutput::new(
        &fake_base_address(4),
        &Value::new(&BigNum(1_000_005u64)),
    ));
    body.set_total_collateral(&Coin::from(1_000_006u64));
    body.set_voting_procedures(&voting_procedures);
    body.set_voting_proposals(&voting_proposals);
    body.set_donation(&Coin::from(1_000_007u64));
    body.set_current_treasury_value(&Coin::from(1_000_008u64));

    let body_cbor = body.to_bytes();
    let body_hex_cbor = body.to_hex();
    let body_json = body.to_json().unwrap();

    assert_eq!(TransactionBody::from_bytes(body_cbor).unwrap(), body);
    assert_eq!(TransactionBody::from_hex(&body_hex_cbor).unwrap(), body);
    assert_eq!(TransactionBody::from_json(&body_json).unwrap(), body);
}