주소 별칭
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인 sender와 gas_owner로 구성된다(둘은 같을 수도 있고 다를 수도 있다).
구성된 각 address에 대해서는 그 alias 집합 안의 signer 중 하나로부터 signature가 필요하다.
예를 들어 다음 transaction과 alias가 있다고 하자:
transaction T {
sender: A
gas_owner: X
...
}
aliases[A] = {A, B}
aliases[X] = {Y}
유효하려면 transaction T는 A 또는 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를 참조한다.