Skip to main content

amaru_kernel/cardano/
address.rs

1// Copyright 2026 PRAGMA
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//     http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15pub use pallas_addresses::Address;
16
17use crate::{AsShelley, HasOwnership, StakeCredential};
18
19pub fn is_locked_by_script(address: &Address) -> bool {
20    matches!(address.as_shelley().map(|addr| addr.owner()), Some(StakeCredential::ScriptHash(_)))
21}
22
23#[cfg(any(test, feature = "test-utils"))]
24pub use tests::*;
25
26#[cfg(any(test, feature = "test-utils"))]
27mod tests {
28    use proptest::prelude::*;
29
30    use crate::{Address, Network, ShelleyAddress, ShelleyDelegationPart, ShelleyPaymentPart, any_hash28};
31
32    pub fn any_shelley_address() -> impl Strategy<Value = Address> {
33        (any::<bool>(), any_hash28(), any_hash28()).prop_map(|(is_mainnet, payment_hash, delegation_hash)| {
34            let network = if is_mainnet { Network::Mainnet } else { Network::Testnet };
35
36            let payment = ShelleyPaymentPart::Key(payment_hash);
37            let delegation = ShelleyDelegationPart::Key(delegation_hash);
38
39            Address::Shelley(ShelleyAddress::new(network, payment, delegation))
40        })
41    }
42}