본문으로 건너뛰기

주소 별칭

Sui network의 특정 address에 대해 transaction 서명을 허용할 key 집합을 구성하는 데 address aliases를 사용할 수 있다.

address aliases는 다음과 같은 용도로 사용할 수 있다:

  • address에 대해 간단한 key rotation을 수행한다.
  • 여러 signer에게 address가 소유한 모든 것에 대한 완전한 접근 권한을 부여한다.
  • passkey를 사용하는 smart wallet 같은 더 복잡한 인증 scheme을 구현한다.
경고

주어진 address에 대한 모든 alias는 그 address가 소유한 모든 coin, balance, 그리고 기타 리소스를 단독으로 제어하거나 가져갈 수 있는 능력을 가진다.

alias를 변경할 때는 매우 주의해야 한다. 새로 추가하는 alias는 사실상 address의 공동 소유자가 된다.

How aliases work

Sui의 각 address에는 alias 집합이 있다. 새 address는 자기 자신을 alias로 가지는 상태로 시작한다. 즉 새 address A는 alias 집합 {A}를 가진다.

address의 alias는 sui::address_alias module에 있는 Move API를 사용해 수정할 수 있다. 이 수정 함수들은 최상위 PTB 명령으로 호출되어야 하며 다른 Move 함수 안에서 호출할 수 없다.

alias를 수정할 때의 몇 가지 제약 사항은 다음과 같다:

  • address는 항상 최소 하나의 alias를 가져야 한다.
  • address는 자기 자신의 alias 집합에서 제거될 수 있다. 예를 들어 address A가 있고 이 address가 {B, C}의 서명만 허용하도록 만들 수 있다.
  • address에 허용되는 alias의 최대 개수는 8개이다.

Authenticating transactions with aliased addresses

Sui의 transaction은 두 address인 sendergas_owner로 구성된다(둘은 같을 수도 있고 다를 수도 있다). 구성된 각 address에 대해서는 그 alias 집합 안의 signer 중 하나로부터 signature가 필요하다.

예를 들어 다음 transaction과 alias가 있다고 하자:

transaction T {
sender: A
gas_owner: X
...
}

aliases[A] = {A, B}
aliases[X] = {Y}

유효하려면 transaction TA 또는 B 중 하나의 signature가 필요하고, 또한 Y의 signature가 필요하다.

이 예시에서 transaction이 A가 아닌 [B, Y]의 signature를 가지고 있더라도 실행 중에는 여전히 A가 소유한 모든 것에 접근할 수 있으며, Move call 실행 중 TxContext::sender 역시 A가 된다.