본문으로 건너뛰기

Packages

Sui의 Move 패키지는 해당 패키지가 on-chain object와 상호 작용하는 방식을 정의하는 하나 이상의 모듈을 포함한다. 사용자는 Move로 해당 모듈에 대한 로직을 개발하고, 이를 object로 컴파일하며, 해당 패키지 object를 Sui 네트워크에 게시한다. On-chain에서 누구나 Sui Explorer를 사용하여 패키지의 내용을 보고 해당 로직이 object를 어떻게 조작하는지 확인할 수 있다.

Packages are immutable

패키지 object를 네트워크에 게시한 후에는 영구적으로 그곳에 존재한다. on-chain 패키지의 코드를 직접 변경할 수 없다. 일단 게시되면 다른 패키지들은 게시된 패키지가 제공하는 모듈들을 import하여 사용할 수 있다.

만약 개발자들이 게시 후 on-chain 패키지를 수정할 수 있다면, 하위(downstream) 동작이 예상치 못한 방식으로 변경될 수 있다. 예를 들어, 간과된 버그를 수정하려는 개발자는 의도치 않게 모든 종속 package의 실행을 변경할 수 있다.

Upgrading packages

게시된 패키지를 직접 편집할 수는 없지만, 이를 업그레이드할 수 있다. 업그레이드를 하면 on-chain에 새로운 패키지 object가 생성되며, 원본은 그대로 유지된다. 이를 통해 기존 종속성을 손상시키지 않고 기능을 추가하거나 문제를 수정할 수 있다.

자세한 과정을 보려면 Upgrading packages를 확인하라.

Using the Sui Client CLI

Sui Client CLI는 패키지를 업그레이드할 수 있는 접근 가능한 방식을 제공한다. 만약 CLI의 활성 address가 패키지에 대한 UpgradeCap을 소유하고 있다면, upgrade 명령어를 사용하여 업그레이드를 수행할 수 있다.

이 워크플로우는 개발을 시작하거나 빠르게 반복 작업을 할 때 편리하다. 하지만, 단일 개인 키로 패키지 업그레이드를 보호하는 것은 보안 위험을 야기한다:

Making packages immutable

Move 함수 sui::package::make_immutable를 호출하여 패키지의 UpgradeCap을 파괴하고 해당 패키지를 영구적으로 불변하게 만들 수 있다. 이것은 단일 키 위험을 제거하지만, 동시에 향후의 모든 버그 수정 및 기능 추가를 방지한다.

더 유연한 접근 방식을 위해서는, 업그레이드할 수 있는 기능을 포기하지 않으면서 UpgradeCap 접근을 보호하기 위해 custom upgrade policies를 사용하라.