Add handle_pairing
This commit is contained in:
parent
c59a89fecd
commit
416d409fb9
@ -99,6 +99,32 @@ impl ProcessState {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn handle_pairing(&self, pairing_role: RoleDefinition, previous_addresses: Vec<SilentPaymentAddress>) -> anyhow::Result<()> {
|
||||||
|
// members must be empty
|
||||||
|
if !pairing_role.members.is_empty() { return Err(anyhow::Error::msg("Invalid pairing role: members list must be empty")); }
|
||||||
|
// pairing_role must have one rule that modifies pairedAddresses
|
||||||
|
let paired_addresses_rule = pairing_role.get_applicable_rules(PAIREDADDRESSES);
|
||||||
|
if paired_addresses_rule.len() != 1 {
|
||||||
|
return Err(anyhow::anyhow!("Invalid pairing role: there must one and only one rule for \"pairedAddresses\""));
|
||||||
|
}
|
||||||
|
|
||||||
|
// We must have a pairedAddresses field in public_data
|
||||||
|
let updated_addresses = self.public_data.get(PAIREDADDRESSES).ok_or(anyhow::Error::msg("No paired addresses"))?; // This shouldn't happen
|
||||||
|
|
||||||
|
// TODO check that it matches what we have in the commitment here or somewhere else?
|
||||||
|
|
||||||
|
let updated_member = Member::new(serde_json::from_value(updated_addresses.clone())?);
|
||||||
|
let previous_member = Member::new(previous_addresses);
|
||||||
|
|
||||||
|
let members = if previous_member.get_addresses().is_empty() {
|
||||||
|
vec![&updated_member]
|
||||||
|
} else {
|
||||||
|
vec![&previous_member]
|
||||||
|
};
|
||||||
|
|
||||||
|
paired_addresses_rule.iter().next().unwrap().is_satisfied(PAIREDADDRESSES, self.state_id, &self.validation_tokens, members.as_slice())
|
||||||
|
}
|
||||||
|
|
||||||
pub fn is_valid(&self, previous_state: Option<&ProcessState>, members_list: &OutPointMemberMap) -> anyhow::Result<()> {
|
pub fn is_valid(&self, previous_state: Option<&ProcessState>, members_list: &OutPointMemberMap) -> anyhow::Result<()> {
|
||||||
if self.validation_tokens.is_empty() {
|
if self.validation_tokens.is_empty() {
|
||||||
return Err(anyhow::anyhow!(
|
return Err(anyhow::anyhow!(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user