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<()> {
|
||||
if self.validation_tokens.is_empty() {
|
||||
return Err(anyhow::anyhow!(
|
||||
|
Loading…
x
Reference in New Issue
Block a user