본문으로 건너뛰기

주소 별칭

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의 공동 소유자가 된다.

alias 작동 방식

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개이다.

aliased address로 transaction authenticate

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가 된다.

Sui CLI로 alias 관리

sui client ptb를 사용해 sui::address_alias module의 entry function을 호출하여 address alias를 관리할 수 있다. AddressAliasState singleton object는 address 0xa에 있다.

address에 alias enable

Alias를 수정하기 전에 address에 대해 alias configuration을 활성화해야 한다. 이렇게 하면 자신의 address를 sole alias로 초기화한 AddressAliases object가 생성된다:

$ sui client ptb \
--move-call sui::address_alias::enable @0xa \
--gas-budget 50000000

Transaction output의 created objects section에서 AddressAliases object ID를 기록한다. 이후 모든 alias operation에 이 ID가 필요하다.

alias 추가

다른 address를 alias set에 추가하여, 해당 address가 사용자를 대신해 transaction에 서명할 수 있게 한다:

$ sui client ptb \
--move-call sui::address_alias::add \
@<ADDRESS_ALIASES_OBJECT_ID> \
@<NEW_ALIAS_ADDRESS> \
--gas-budget 50000000

모든 alias 교체

replace_all을 사용하여 전체 alias set을 새 address set으로 덮어쓴다. 예를 들어 단일 address를 유일한 alias로 설정하려면 다음을 실행한다:

$ sui client ptb \
--move-call sui::address_alias::replace_all \
@<ADDRESS_ALIASES_OBJECT_ID> \
vector[@<ALIAS_ADDRESS>] \
--gas-budget 50000000
경고

자신의 address를 포함하지 않는 set으로 alias를 replace하면 더 이상 해당 address에 대해 transaction에 서명할 수 없다. 새 alias set에 있는 address만 그 권한을 가진다.

alias 제거

Alias set에서 특정 address를 제거한다:

$ sui client ptb \
--move-call sui::address_alias::remove \
@<ADDRESS_ALIASES_OBJECT_ID> \
@<ALIAS_TO_REMOVE> \
--gas-budget 50000000

offline signing

Hardware wallet 또는 다른 external signer를 사용하는 경우 위 command에 --serialize-unsigned-transaction을 추가하면 실행 대신 raw transaction bytes를 출력할 수 있다. 그런 다음 transaction에 offline으로 서명하고 별도로 submit할 수 있다. 자세한 내용은 Sui Client PTB CLI를 참조한다.