메인 콘텐츠로 건너뛰기
다음 페이지에서는 Injective에 연결하는 명령줄 인터페이스인 injectived를 통해 수행할 수 있는 작업을 설명합니다. injectived를 사용하여 스마트 컨트랙트 업로드, 데이터 쿼리, 스테이킹 활동 관리, 거버넌스 제안 작업 등을 통해 Injective 블록체인과 상호작용할 수 있습니다.

사전 요구 사항

injectived 설치 확인

자세한 정보는 injectived 설치를 참조하세요. injectived를 성공적으로 설치했다면 다음 명령을 실행할 수 있어야 합니다:
injectived version
home dir를 올바르게 사용하도록 명령을 조정하세요.
injectived keys list --home ~/.injective

Docker화된 CLI 사용

Docker에서 실행할 때는 home dir를 컨테이너에 마운트해야 합니다.
docker run -it --rm -v ~/.injective:/root/.injective injectivelabs/injective-core:v1.14.1 injectived keys list --home /root/.injective
Docker화된 CLI를 사용하여 키를 추가하는 것은 간단합니다.
docker run -it --rm -v ~/.injective:/root/.injective injectivelabs/injective-core:v1.14.1 injectived keys add my_key --home /root/.injective
해당 명령의 분석은 다음과 같습니다:
  • docker는 injectivelabs/injective-core:v1.14.1 이미지를 실행합니다
  • injectived는 컨테이너 내에서 CLI를 실행하는 명령입니다
  • keys add는 키를 추가하는 명령입니다
  • my_key는 키의 이름입니다
  • --home /root/.injective는 컨테이너 내부 CLI의 홈 디렉토리입니다
  • -v ~/.injective:/root/.injective는 단순히 호스트의 ~/.injective 디렉토리를 컨테이너의 /root/.injective 디렉토리에 마운트합니다.
이것은 키 쌍을 생성하고 컨테이너의 /root/.injective/keyring-file 디렉토리에 저장합니다. 이는 호스트의 ~/.injective/keyring-file 디렉토리와 동일합니다. 다음을 실행하여 모든 키를 나열할 수 있습니다:
docker run -it --rm -v ~/.injective:/root/.injective injectivelabs/injective-core:v1.14.1 injectived keys list --home /root/.injective

RPC endpoint 사용

Injective 블록체인에 액세스하려면 노드가 실행 중이어야 합니다. 자체 풀 노드를 실행하거나 다른 사람의 노드에 연결할 수 있습니다. 상태를 쿼리하고 트랜잭션을 전송하려면 전체 피어 연결 네트워크에 대한 액세스 포인트인 노드에 연결해야 합니다. 자체 풀 노드를 실행하거나 다른 사람의 노드에 연결할 수 있습니다. 자체 노드 실행은 고급 사용자를 위한 것입니다. 대부분의 사용자는 퍼블릭 노드에 연결하는 것이 권장됩니다. RPC endpoint를 설정하려면 다음 명령을 사용할 수 있습니다:
injectived config set client node https://sentry.tm.injective.network:443
injectived config set client chain-id injective-1
테스트넷 전용으로 https://k8s.testnet.tm.injective.network:443 (chain-id injective-888)을 사용할 수 있습니다.
이제 상태를 쿼리해 보세요:
injectived q bank balances inj1yu75ch9u6twffwp94gdtf4sa7hqm6n7egsu09s

balances:
- amount: "28748617927330656"
  denom: inj

일반 도움말

injectived에 대한 더 일반적인 정보를 보려면 다음을 실행하세요:
injectived --help
특정 injectived 명령에 대한 자세한 정보를 보려면 명령 뒤에 -h 또는 --help 플래그를 추가하세요. 예:
injectived query --help.

injectived 클라이언트 구성

injectived의 더 많은 옵션을 구성하려면 ~/.injective/config/ 디렉토리의 config.toml 파일을 편집하세요. keyring-backend가 file로 설정된 경우 Keyring 파일은 ~/.injective/keyring-file 디렉토리에 있습니다. keyring-backend를 test 또는 os로 설정하는 것도 가능합니다. test의 경우 ~/.injective/keyring-test로 파일로도 저장되지만 비밀번호로 보호되지 않습니다. 파일의 모든 옵션은 CLI를 사용하여 설정할 수 있습니다: injectived config set client <option> <value>.

트랜잭션 생성, 서명 및 브로드캐스트

다음 명령을 실행하면 발신자 계정에서 수신자 계정으로 INJ 토큰을 전송합니다. 1000inj는 전송할 INJ 토큰의 양이며, 1 INJ = 10^18 inj이므로 1000inj는 매우 적은 양입니다.
injectived tx bank send MY_WALLET RECEIVER_WALLET 1000inj --from MY_WALLET
다음 단계가 수행됩니다:
  • 하나의 Msg (x/bankMsgSend)로 트랜잭션을 생성하고 생성된 트랜잭션을 콘솔에 출력합니다.
  • $MY_WALLET 계정에서 트랜잭션을 전송할지 사용자에게 확인을 요청합니다.
  • keyring에서 $MY_WALLET을 가져옵니다. 이전 단계에서 CLI의 keyring을 설정했기 때문에 가능합니다.
  • keyring의 계정으로 생성된 트랜잭션에 서명합니다.
  • 서명된 트랜잭션을 네트워크에 브로드캐스트합니다. CLI가 퍼블릭 Injective 노드의 RPC endpoint에 연결하기 때문에 가능합니다.
CLI는 모든 필요한 단계를 사용하기 쉬운 사용자 경험으로 묶습니다. 그러나 모든 단계를 개별적으로 실행하는 것도 가능합니다.

(오직) 트랜잭션 생성

트랜잭션 생성은 모든 tx 명령에 --generate-only 플래그를 추가하여 간단히 수행할 수 있습니다. 예:
injectived tx bank send MY_WALLET RECEIVER_WALLET 1000inj --from MY_WALLET --generate-only
이것은 서명되지 않은 트랜잭션을 콘솔에 JSON으로 출력합니다. 위 명령에 > unsigned_tx.json을 추가하여 서명되지 않은 트랜잭션을 파일에 저장할 수도 있습니다 (서명자 간에 더 쉽게 전달하기 위해).

사전 생성된 트랜잭션 서명

CLI를 사용하여 트랜잭션에 서명하려면 서명되지 않은 트랜잭션이 파일에 저장되어 있어야 합니다. 서명되지 않은 트랜잭션이 현재 디렉토리의 unsigned_tx.json이라는 파일에 있다고 가정합니다 (이를 수행하는 방법은 이전 단락 참조). 그런 다음 다음 명령을 실행하세요:
injectived tx sign unsigned_tx.json --from=MY_WALLET
이 명령은 서명되지 않은 트랜잭션을 디코딩하고 keyring에 이미 설정한 MY_WALLET 키로 SIGN_MODE_DIRECT로 서명합니다. 서명된 트랜잭션은 콘솔에 JSON으로 출력되며, 위와 같이 명령줄에 > signed_tx.json을 추가하여 파일에 저장할 수 있습니다.
injectived tx sign unsigned_tx.json --from=MY_WALLET > signed_tx.json
tx sign 명령에서 고려할 유용한 플래그:
  • --sign-mode: SIGN_MODE_LEGACY_AMINO_JSON으로 트랜잭션에 서명하려면 amino-json을 사용할 수 있습니다.
  • --offline: 오프라인 모드로 서명합니다. 이것은 tx sign 명령이 노드에 연결하여 서명자의 계정 번호와 시퀀스(둘 다 서명에 필요)를 검색하지 않음을 의미합니다. 이 경우 --account-number--sequence 플래그를 수동으로 제공해야 합니다. 이것은 인터넷에 액세스할 수 없는 보안 환경에서 서명하는 오프라인 서명에 유용합니다.

여러 서명자로 서명 (Multi Sig)

여러 서명자로 서명하는 것은 tx multi-sign 명령으로 수행됩니다. 이 명령은 모든 서명자가 SIGN_MODE_LEGACY_AMINO_JSON을 사용한다고 가정합니다. 흐름은 tx sign 명령 흐름과 유사하지만, 서명되지 않은 트랜잭션 파일에 서명하는 대신 각 서명자가 이전 서명자(들)가 서명한 파일에 서명합니다. tx multi-sign 명령은 기존 트랜잭션에 서명을 추가합니다. 서명자가 GetSigners() 메서드로 검색할 수 있는 트랜잭션에 주어진 것과 같은 순서로 트랜잭션에 서명하는 것이 중요합니다. 예를 들어, unsigned_tx.json으로 시작하고 트랜잭션에 4명의 서명자가 있다고 가정하면 다음을 실행합니다:
# signer1이 서명되지 않은 tx에 서명하게 합니다.
injectived tx multi-sign unsigned_tx.json signer_key_1 > partial_tx_1.json
# 이제 signer1이 partial_tx_1.json을 signer2에게 보냅니다.
# Signer2가 서명을 추가합니다:
injectived tx multi-sign partial_tx_1.json signer_key_2 > partial_tx_2.json
# Signer2가 partial_tx_2.json 파일을 signer3에게 보내고, signer3가 서명을 추가할 수 있습니다:
injectived tx multi-sign partial_tx_2.json signer_key_3 > partial_tx_3.json

트랜잭션 브로드캐스트

트랜잭션 브로드캐스트는 다음 명령을 사용하여 수행됩니다:
injectived tx broadcast tx_signed.json
노드에서 받을 응답을 지정하기 위해 선택적으로 --broadcast-mode 플래그를 전달할 수 있습니다:
  • block: CLI는 tx가 블록에 포함될 때까지 기다립니다.
  • sync: CLI는 CheckTx 실행 응답만 기다리며, 포함되었는지 확인하려면 트랜잭션 결과를 수동으로 쿼리하세요.
  • async: CLI는 즉시 반환합니다 (트랜잭션이 실패할 수 있음) - 사용하지 마세요.
트랜잭션 결과를 쿼리하려면 다음 명령을 사용할 수 있습니다:
injectived tx query TX_HASH

추가 문제 해결

때때로 config가 올바르게 설정되지 않을 수 있습니다. 명령줄에 다음을 추가하여 올바른 노드 RPC endpoint를 강제로 지정할 수 있습니다. 다른 사람들과 명령을 공유할 때는 모든 플래그를 명령줄에 명시적으로 설정하는 것이 권장됩니다. (chain-id, node, keyring-backend 등)
injectived --node https://sentry.tm.injective.network:443