origin.rs 1.1 KB

1234567891011121314151617181920212223242526
  1. use 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. // Multiplies the T::Origin.
  8. // In our current substrate version system::Origin doesn't support clone(),
  9. // but it will be supported in latest up-to-date substrate version.
  10. // TODO: delete when T::Origin will support the clone()
  11. pub fn double_origin<T: 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. }