Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,9 @@ pub fn process_closeaccount_link(
let mut side_a_dev = Device::try_from(side_a_account)?;
let mut side_z_dev = Device::try_from(side_z_account)?;
let link: Link = Link::try_from(link_account)?;
if link.contributor_pk != *contributor_account.key {
return Err(DoubleZeroError::NotAllowed.into());
}

if link.owner != *owner_account.key {
return Err(ProgramError::InvalidAccountData);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,14 +66,18 @@ pub fn process_delete_link(

let contributor = Contributor::try_from(contributor_account)?;

if contributor.owner != *payer_account.key
&& !globalstate.foundation_allowlist.contains(payer_account.key)
{
let payer_in_foundation = globalstate.foundation_allowlist.contains(payer_account.key);

if contributor.owner != *payer_account.key && !payer_in_foundation {
return Err(DoubleZeroError::InvalidOwnerPubkey.into());
}

// Any link can be deleted by its contributor or foundation allowlist on any status
let mut link: Link = Link::try_from(link_account)?;
if !payer_in_foundation && link.contributor_pk != *contributor_account.key {
return Err(DoubleZeroError::NotAllowed.into());
}

link.status = LinkStatus::Deleting;

try_acc_write(&link, link_account, payer_account, accounts)?;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,14 +62,18 @@ pub fn process_resume_link(
let globalstate = GlobalState::try_from(globalstate_account)?;
let contributor = Contributor::try_from(contributor_account)?;

if contributor.owner != *payer_account.key
&& !globalstate.foundation_allowlist.contains(payer_account.key)
{
let payer_in_foundation = globalstate.foundation_allowlist.contains(payer_account.key);

if contributor.owner != *payer_account.key && !payer_in_foundation {
return Err(DoubleZeroError::InvalidOwnerPubkey.into());
}

let mut link: Link = Link::try_from(link_account)?;

if !payer_in_foundation && link.contributor_pk != *contributor_account.key {
return Err(DoubleZeroError::NotAllowed.into());
}

if link.status != LinkStatus::Suspended {
return Err(DoubleZeroError::InvalidStatus.into());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,13 +62,16 @@ pub fn process_suspend_link(
let globalstate = GlobalState::try_from(globalstate_account)?;
let contributor = Contributor::try_from(contributor_account)?;

if contributor.owner != *payer_account.key
&& !globalstate.foundation_allowlist.contains(payer_account.key)
{
let payer_in_foundation = globalstate.foundation_allowlist.contains(payer_account.key);

if contributor.owner != *payer_account.key && !payer_in_foundation {
return Err(DoubleZeroError::InvalidOwnerPubkey.into());
}

let mut link: Link = Link::try_from(link_account)?;
if !payer_in_foundation && link.contributor_pk != *contributor_account.key {
return Err(DoubleZeroError::NotAllowed.into());
}

if link.status != LinkStatus::Activated {
#[cfg(test)]
Expand Down