essential-app-utils 0.7.0

Utilities for building Essential applications
Documentation
use essential_types::contract::Contract;

use super::*;

#[test]
fn test_get_source() {
    let code = r#"
const ::auth::signed::TransferWith::ADDRESS: b256 = 0x3750D1EE658C1A69072EC71B7C586C29779B4570DB1B19C054A58A9AD5803653;
storage {
    balances: ( b256 => int ),
}
interface ::Auth {
    predicate Predicate {
        pub var addr: {contract: b256, addr: b256};
    }
}
type ::std::lib::PredicateAddress = {contract: b256, addr: b256};

predicate ::Burn {
    constraint ((::A::addr.contract == __this_set_address()) && (::A::addr.addr == __this_address()));
}

predicate ::Cancel {
    constraint ((::A::addr.contract == __this_set_address()) && (::A::addr.addr == __this_address()));
}

predicate ::Transfer {
    storage {
        balances: ( b256 => int ),
    }
    interface ::Auth {
        predicate Predicate {
            pub var addr: {contract: b256, addr: b256};
        }
    }
    pub var ::amount: int;
    constraint (__mut_keys_len() == 3);
    constraint ((::A::addr.contract == __this_set_address()) && (::A::addr.addr == __this_address()));
    constraint (((__state_len(::nonce) == 0) && (::nonce' == 1)) || ((::nonce' - ::nonce) == 1));
}

predicate ::Mint {
    constraint (__mut_keys_len() == 5);
}
    "#;

    let other = r#"
const ::auth::signed::TransferWith::ADDRESS: b256 = 0x3750D1EE658C1A69072EC71B7C586C29779B4570DB1B19C054A58A9AD5803653;
storage {
    balances: ( b256 => int ),
}
interface ::Auth {
    predicate Predicate {
        pub var addr: {contract: b256, addr: b256};
    }
}
type ::std::lib::PredicateAddress = {contract: b256, addr: b256};

"#;
    let predicate = r#"predicate ::Transfer {
    storage {
        balances: ( b256 => int ),
    }
    interface ::Auth {
        predicate Predicate {
            pub var addr: {contract: b256, addr: b256};
        }
    }
    pub var ::amount: int;
    constraint (__mut_keys_len() == 3);
    constraint ((::A::addr.contract == __this_set_address()) && (::A::addr.addr == __this_address()));
    constraint (((__state_len(::nonce) == 0) && (::nonce' == 1)) || ((::nonce' - ::nonce) == 1));
}

"#;
    let constraint_line = Some(11);

    let contract = NamedContract {
        name: "token".to_string(),
        contract: Contract::default(),
        predicates: vec![],
        source: code.to_string(),
    };

    let source = get_source(&contract, "transfer", 1);
    assert_eq!(source.other, other);
    assert_eq!(source.predicate, predicate);
    assert_eq!(source.constraint_line, constraint_line);
}