cw20 스마트 컨트랙트를 배포하는 방법을 안내합니다.
CosmWasm의 사양 및 컨트랙트 컬렉션에서 실제 네트워크의 프로덕션 사용을 위해 설계된 cw20-base 컨트랙트를 사용합니다. cw20-base는 빌드하려는 모든 커스텀 컨트랙트에서 가져올 수 있는 cw20 호환 컨트랙트의 기본 구현입니다. 모든 확장과 함께 cw20 사양의 간단하지만 완전한 구현을 포함합니다. cw20-base는 그대로 배포하거나 다른 컨트랙트에서 가져올 수 있습니다.
사전 요구 사항
다음 지침에 따라 Go, Rust 및 기타 CosmWasm 종속성을 설치하세요: 시작하기 전에rustup과 함께 최신 버전의 rustc 및 cargo가 설치되어 있는지 확인하세요. 현재 Rust v1.58.1+ 에서 테스트하고 있습니다.
또한 wasm32-unknown-unknown 타겟과 cargo-generate Rust crate가 설치되어 있어야 합니다.
다음 명령어로 버전을 확인할 수 있습니다:
injectived
injectived가 로컬에 설치되어 있는지 확인하세요. injectived 및 기타 사전 요구 사항을 로컬에서 실행하려면 injectived 설치 가이드를 따르세요.
injectived가 설치되면 로컬 체인 인스턴스를 시작해야 합니다.
CosmWasm 컨트랙트 컴파일
이 단계에서는 모든 CW 프로덕션 템플릿 컨트랙트를 가져오고 여러 컨트랙트를 컴파일하기 위한 CosmWasm Rust Optimizer Docker 이미지(workspace-optimizer라고 함)를 사용하여 컴파일합니다. 최신 버전은 여기 (x86) 또는 여기 (ARM)를 참조하세요. 이 프로세스는 시간과 CPU 전력이 소요될 수 있습니다.
artifacts 디렉토리에 있습니다. 이제 cw20_base.wasm 컨트랙트(ARM 장치에서 컴파일한 경우 cw20_base-aarch64.wasm)를 배포할 수 있습니다.
체인에 CosmWasm 컨트랙트 업로드
txhash로 트랜잭션을 쿼리하여 컨트랙트가 실제로 배포되었는지 확인합니다.
code_id가 1임을 알 수 있습니다.
코드를 업로드했지만 아직 컨트랙트를 인스턴스화해야 합니다.
컨트랙트 인스턴스화
컨트랙트를 인스턴스화하기 전에instantiate에 대한 CW-20 컨트랙트 함수 시그니처를 살펴보겠습니다.
InstantiateMsg 파라미터가 있습니다.
선택한 주소의 개인 키가 있는지 확인하세요. 그렇지 않으면 해당 주소에서 토큰 전송을 테스트할 수 없습니다. 또한 선택한 주소는 체인의 유효한 주소여야 하며(과거에 자금을 받은 적이 있어야 함) 컨트랙트 실행 시 가스를 지불할 잔액이 있어야 합니다.
code_id 1과 함께 JSON 인코딩된 초기화 인수(선택한 주소 포함) 및 레이블(목록에서 이 컨트랙트의 사람이 읽을 수 있는 이름)로 CLI 명령을 실행하여 컨트랙트를 인스턴스화하세요:
http://localhost:10337/swagger/#/Query/ContractsByCode에서 얻을 수 있습니다.
컨트랙트 정보 메타데이터는 http://localhost:10337/swagger/#/Query/ContractInfo 또는 CLI 쿼리로 얻을 수 있습니다.
컨트랙트 쿼리
전체 컨트랙트 상태는 다음으로 쿼리할 수 있습니다:토큰 전송
테스트넷 개발
로컬과 테스트넷 개발/배포 간의 주요 차이점은 다음과 같습니다:
- Injective 테스트넷 Faucet을 사용하여 주소에 테스트넷 자금을 받을 수 있습니다.
- Injective 테스트넷 익스플로러를 사용하여 트랜잭션을 쿼리하고 자세한 내용을 볼 수 있습니다.
injectived를 사용할 때node플래그를 사용하여testnetrpc를 지정해야 합니다:--node=https://testnet.sentry.tm.injective.network:443chainId로injective-1대신injective-888을 사용해야 합니다. 즉chain-id플래그는 이제--chain-id="injective-888"이어야 합니다.- Injective 테스트넷 익스플로러를 사용하여 업로드된 스마트 컨트랙트의
codeId에 대한 정보를 찾거나 인스턴스화된 스마트 컨트랙트를 찾을 수 있습니다.
testnet에 대해 트랜잭션을 쿼리/전송하기 위해 injectived를 사용하는 방법에 대한 자세한 내용은 injectived 사용 가이드를 참조하세요.