origin.rs 1.1 KB

1234567891011121314151617181920212223242526
  1. use frame_system::RawOrigin;
  2. /// Abstract validator for the origin(account_id) and actor_id (eg.: thread author id).
  3. pub trait ActorOriginValidator<Origin, ActorId, AccountId> {
  4. /// Check for valid combination of origin and actor_id.
  5. fn ensure_actor_origin(origin: Origin, actor_id: ActorId) -> Result<AccountId, &'static str>;
  6. }
  7. // TODO: delete when T::Origin will support the clone()
  8. /// Multiplies the T::Origin.
  9. /// In our current substrate version frame_system::Origin doesn't support clone(),
  10. /// but it will be supported in latest up-to-date substrate version.
  11. pub fn double_origin<T: frame_system::Trait>(origin: T::Origin) -> (T::Origin, T::Origin) {
  12. let coerced_origin = origin.into().ok().unwrap_or(RawOrigin::None);
  13. let (cloned_origin1, cloned_origin2) = match coerced_origin {
  14. RawOrigin::None => (RawOrigin::None, RawOrigin::None),
  15. RawOrigin::Root => (RawOrigin::Root, RawOrigin::Root),
  16. RawOrigin::Signed(account_id) => (
  17. RawOrigin::Signed(account_id.clone()),
  18. RawOrigin::Signed(account_id),
  19. ),
  20. };
  21. (cloned_origin1.into(), cloned_origin2.into())
  22. }