Blockchain
Aptos Move Structure
Move 구조체, ability, 전역 저장소, signer 권한 모델을 실무 관점으로 정리합니다.
Aptos Move Structure
Aptos의 Move는 "리소스의 안전한 소유권"을 강하게 강제하는 언어입니다. 이 글은 구조체, ability, 전역 저장, signer, acquires 같은 핵심 문법이 실제 설계에서 왜 중요한지 정리합니다.
1. Move 구조체의 기본 전제
Move struct는 데이터 컨테이너입니다.
- 구조체 안에 메서드를 넣지 않습니다.
- 상속이 없습니다.
- 한 번 온체인에 배포된 구조체의 필드 정의는 바꿀 수 없습니다.
즉, "타입 안정성"을 강하게 잡는 대신, 업그레이드 유연성은 모듈 레벨에서 관리합니다.
2. Ability로 권한을 모델링한다
Move 타입은 아래 ability 조합으로 동작 범위를 제한합니다.
copy: 값 복제 가능drop: 값 폐기 가능store: 다른 구조체 내부나 전역 저장소에 저장 가능key: 계정 전역 저장소의 최상위 리소스로 저장 가능
토큰/NFT 설계에서 실수가 자주 나는 지점은 copy입니다. 희소성이 필요한 자산 타입에 copy를 열면 설계 자체가 무너집니다.
3. 전역 저장소와 소유권
Aptos 계정은 전역 저장소를 갖고, key 리소스를 소유합니다. 핵심은 다음입니다.
- 리소스 소유자는 계정이다.
- 리소스를 읽고 분해하고 수정할 권한은 "그 타입을 정의한 모듈"이 통제한다.
- 따라서 소유권(계정)과 조작권(모듈 권한)이 분리된다.
이 분리가 Move의 보안 모델 핵심입니다.
4. signer는 권한 토큰이다
entry fun의 첫 파라미터 &signer는 트랜잭션 서명자 권한을 나타냅니다.
signer로 계정 주소를 얻을 수 있습니다.- 주소만으로는
signer를 만들 수 없습니다. - 그래서 "임의 주소를 넣어 남의 자산 조작" 같은 패턴이 어렵습니다.
실무에서는 리소스 계정 + SignerCapability로 모듈 자율 실행 권한을 위임하는 패턴을 자주 씁니다.
5. acquires와 move_to를 정확히 쓰자
- 전역 리소스를 읽거나 수정하는 함수는
acquires선언으로 의도를 명확히 합니다. - 신규 리소스를 계정에 배치할 때는
move_to를 사용합니다.
이 두 지점을 명확히 써두면 코드 리뷰에서 권한 경계를 빠르게 확인할 수 있습니다.
실무 체크리스트
- 자산 타입의 ability(
copy,drop,store,key)를 표로 먼저 정의합니다. - 각
entry fun이 요구하는 권한(&signer, capability)을 명시합니다. - 전역 리소스 접근 함수에
acquires를 일관되게 선언합니다. - 리소스 생성/폐기 경로를 모듈 내부로만 강제합니다.