Origin

런타임 origin 은 트랜잭션이 어디에서 왔는지 확인하기 위해 트랜잭션에서 사용됩니다.

원시(Raw) origin

Substrate는 런타임 팔레트에서 사용할 수 있는 세 가지 원시 origin을 정의합니다:

pub enum RawOrigin<AccountId> {
	Root,
	Signed(AccountId),
	None,
}
  • Root: 시스템 레벨 origin 이며 가장 높은 특권을 가지고 있습니다. 런타임 origin의 슈퍼유저(sudo) 로 생각할 수 있습니다.

  • Signed: 트랜잭션 origin 이며 온체인 계정의 개인 키로 서명되며, 서명자의 계정 식별자를 포함합니다. 이를 통해 런타임은 트랜잭션의 출처를 인증하고, 관련된 계정에 트랜잭션 수수료를 부과할 수 있습니다.

  • None: origin 이 없으며 검증자들에 의해 합의되거나 모듈에 의해 검증되어 포함되어야 합니다. 이 origin 유형은 특정 런타임 메커니즘을 우회하기 위해 설계되어 더 복잡합니다. 예를 들어, 이 origin 유형은 검증자들이 데이터를 블록에 직접 삽입할 수 있도록 허용하기 위해 사용될 수 있습니다.

Origin 호출

런타임 내에서 어떤 origin으로든 호출을 생성할 수 있습니다. 예를 들어:

// Root
proposal.dispatch(system::RawOrigin::Root.into())

// Signed
proposal.dispatch(system::RawOrigin::Signed(who).into())

// None
proposal.dispatch(system::RawOrigin::None.into())

이를 실제로 구현한 Sudo 모듈arrow-up-right의 소스 코드를 살펴볼 수 있습니다.

커스텀 origin

세 가지 핵심 origin 유형 외에도, 런타임 개발자는 커스텀 origin을 정의할 수 있습니다. 이는 런타임 팔레트 내에 정의된 특정 모듈의 함수에서 권한 확인에 사용하거나, 런타임 요청의 origin에 대한 커스텀 접근 제어 로직을 정의하는 데 사용될 수 있습니다.

Origin을 커스텀하는 것은 런타임 개발자가 런타임 로직에 따라 유효한 origin을 지정할 수 있도록 합니다. 예를 들어, 특정 함수의 접근을 특별한 커스텀 origin으로 제한하고, collectivearrow-up-right의 멤버에서만 트랜잭션 호출을 가능하게 하는 것을 가능하게 합니다. 커스텀 origin을 사용하는 장점은 런타임 개발자에게 트랜잭션 호출에 대한 접근권한 방법을 제공한다는 것입니다.

다음 단계로 넘어가기

더 알아보기

예제

참고 자료

Last updated