본문으로 건너뛰기

컨트랙트 배포하기

드디어 카운터 컨트랙트를 Devnet에 배포합니다. 어렵지 않습니다 — 컴파일하고 배포한 뒤 PackageID를 저장하면 끝입니다.


사전 조건


배포(publish)란?

배포(publish)란 로컬에서 작성한 Move 컨트랙트를 Sui 블록체인에 등록하는 작업입니다. 배포하면:

  • 컨트랙트가 Package로 체인에 저장됩니다
  • PackageID라는 고유 주소가 발급됩니다
  • PackageID를 사용해 패키지를 체인에서 참조할 수 있게 됩니다. publicentry 함수는 누구나 호출할 수 있지만, 각 함수의 인수와 접근 요건은 그대로 적용됩니다

로컬 테스트에서는 임시 컨텍스트를 사용했지만, 배포 후에는 실제 트랜잭션이 됩니다.


직접 해보기

두 가지 방법 중 원하는 것을 선택하세요.

Option A: Move Playground

로컬 환경 불필요. Playground에는 완성된 카운터 코드가 미리 입력되어 있습니다. CompilePublish 순서로 클릭하면 브라우저에서 바로 Devnet에 배포할 수 있습니다.

CLI와의 큰 차이점은 브라우저 지갑의 승인 팝업이 표시된다는 점입니다. CLI는 로컬 키스토어로 자동 서명하지만, Playground는 지갑 앱이 서명 확인을 요청합니다.

지갑에 연결된 주소에 가스비용으로 쓸 SUI 테스트 토큰이 필요합니다. 아직 받지 않았다면 여기서 받으세요.

순서:

  1. 페이지 우측 상단의 Connect Wallet에서 지갑을 연결
  2. 지갑에서 Devnet으로 전환(전환 방법은 여기
  3. Compile 버튼을 클릭하고 빌드 성공을 기다림
  4. Publish 버튼을 클릭 (Compile이 완료되기 전까지는 비활성화)
  5. 지갑 팝업에서 트랜잭션 승인
  6. 완료 후 Playground에 Package ID가 표시됨
my_first_package
Move.toml
sources
my_first_package.move
Move.toml
README.md
Console
Build ready.
정보

위에 표시된 Package ID를 메모해 두세요 — 다음 레슨에서 사용합니다.


Option B: VSCode + CLI

Move.toml이 있는 프로젝트 루트 디렉토리에서 다음 명령어를 실행합니다.

cd ~/sui-projects/my_first_package
sui client publish

명령어를 실행하면 CLI가 로컬 키스토어의 활성 주소로 자동으로 서명하여 트랜잭션을 Devnet에 전송합니다. 외부 지갑 팝업은 표시되지 않습니다.

출력 읽기

성공하면 터미널에 많은 출력이 표시됩니다. 중요한 부분만 확인합니다.

Transaction Effects 섹션에서 Status: Success가 표시되면 배포 성공입니다.

Object Changes 섹션의 Published Objects 항목에서 PackageID를 찾습니다.

│ Published Objects:                                         │
│ ┌── │
│ │ PackageID: 0x1234abcd... │
│ │ Version: 1 │
│ │ Digest: AbCdEf... │
│ │ Modules: counter │
│ └── │
정보

PackageID: 0x... 값이 여러분 컨트랙트의 주소입니다. 메모해 두세요 — 다음 레슨에서 사용합니다.

배포 시 UpgradeCap 오브젝트도 함께 생성되어 여러분의 주소로 전송됩니다. 이 오브젝트는 향후 컨트랙트 업그레이드를 관리합니다.

출력 상단 또는 하단에는 Transaction Digest도 표시됩니다. Sui Explorer에서 확인할 때 사용합니다.


Sui Explorer에서 확인하기

브라우저에서 Sui Explorer (Devnet)를 열고, PackageID 또는 트랜잭션 다이제스트를 검색창에 붙여넣으세요.

Package가 목록에 표시되고 PackageID가 일치하는지 확인합니다.


오류가 발생했다면

InsufficientGas / No valid gas coins found for the transaction / 가스 부족: Faucet에서 테스트 토큰을 받고 다시 시도하세요. sui client gas로 SUI 잔액을 확인할 수 있습니다.

Unresolved dependencies / 의존성 오류: Move.toml[environments] 설정이 없습니다. L14를 참고하여 devnet 체인 ID를 추가하세요.

Build failed / 빌드 오류: 먼저 sui move build로 빌드 오류를 확인한 후 다시 배포하세요.


성공 확인

아래 항목을 달성하면 이 레슨은 완료입니다:

  • 컨트랙트를 컴파일하고 배포했다 (Playground 또는 sui client publish)
  • PackageID를 취득했다
  • Sui Explorer에서 Package를 확인했다

이번 레슨에서 한 것

  • 카운터 컨트랙트를 Devnet에 배포했다 (Playground 또는 CLI)
  • PackageID를 취득했다
  • Sui Explorer에서 배포된 Package를 확인했다