메인 콘텐츠로 건너뛰기

사전 요구 사항

Foundry 프로젝트가 이미 설정되어 있고 스마트 컨트랙트가 성공적으로 배포되어 있어야 합니다. 방법은 Foundry로 스마트 컨트랙트 배포 튜토리얼을 참조하세요. 선택 사항이지만 강력히 권장: 스마트 컨트랙트를 성공적으로 검증했어야 합니다. 방법은 Foundry로 스마트 컨트랙트 검증 튜토리얼을 참조하세요.

함수 호출 - 쿼리

쿼리는 읽기 전용 작업입니다. 따라서 스마트 컨트랙트 상태는 업데이트되지 않습니다. 상태 변경이 필요하지 않으므로 지갑, 서명 또는 트랜잭션 수수료(가스)가 필요하지 않습니다. 다음 명령을 사용하여 value() 함수를 쿼리합니다:
cast call \
  --rpc-url injectiveEvm \
  ${SC_ADDRESS} \
  "value()"
${SC_ADDRESS}를 스마트 컨트랙트를 배포한 주소로 바꾸세요. 예를 들어 스마트 컨트랙트 주소가 0x213ba803265386c10ce04a2caa0f31ff3440b9cf인 경우 명령은 다음과 같습니다:
cast call \
  --rpc-url injectiveEvm \
  0x213ba803265386c10ce04a2caa0f31ff3440b9cf \
  "value()"
다음이 출력됩니다.
0x0000000000000000000000000000000000000000000000000000000000000000
0x00000000000000000000000000000000000000000000000000000000000000000을 의미합니다. 이것은 Solidity의 uint256(스마트 컨트랙트의 value() 함수의 반환 유형)에 대한 16진수 원시 표현입니다.

함수 호출 - 트랜잭션

트랜잭션은 쓰기 작업입니다. 따라서 스마트 컨트랙트 상태가 업데이트됩니다. 상태 변경이 발생할 수 있으므로 트랜잭션은 지갑으로 서명해야 하며 트랜잭션 수수료(가스)를 지불해야 합니다. 다음 명령을 사용하여 increment(num) 함수를 트랜잭션합니다.
cast send \
  --legacy \
  --rpc-url injectiveEvm \
  --gas-price 160000000 \
  --gas-limit 2000000 \
  --account injTest \
  ${SC_ADDRESS} \
  "increment(uint256)" \
  1
가스 가격은 wei로 표시됩니다. 1 wei = 10^-18 INJ.
${SC_ADDRESS}를 스마트 컨트랙트를 배포한 주소로 바꾸세요. 예를 들어 스마트 컨트랙트 주소가 0x213ba803265386c10ce04a2caa0f31ff3440b9cf인 경우 명령은 다음과 같습니다:
cast send \
  --legacy \
  --rpc-url injectiveEvm \
  --gas-price 160000000 \
  --gas-limit 2000000 \
  --account injTest \
  0x213ba803265386c10ce04a2caa0f31ff3440b9cf \
  "increment(uint256)" \
  1
성공하면 다음과 유사한 결과가 생성됩니다:
Enter keystore password:
blockHash            0xe4c1f5faafc5365c43678135d6adc87104f0e288cddfcdffeb2f5aa08282ca22
blockNumber          83078201
contractAddress
cumulativeGasUsed    43623
effectiveGasPrice    160000000
from                 0x58f936cb685Bd6a7dC9a21Fa83E8aaaF8EDD5724
gasUsed              43623
logs                 []
logsBloom            0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
root
status               1 (success)
transactionHash      0x3c95e15ba24074301323e09d09d5967cc2858e255d1fdfd912758fd8bbd353b4
transactionIndex     0
type                 0
blobGasPrice
blobGasUsed
to                   0x213bA803265386C10CE04a2cAa0f31FF3440b9cF
상태를 업데이트한 후 새 상태를 쿼리할 수 있습니다. 결과는 상태 변경을 반영합니다.
cast call \
  --rpc-url injectiveEvm \
  ${SC_ADDRESS} \
  "value()"
이번에는 0 + 1 = 1이므로 결과가 0x0000000000000000000000000000000000000000000000000000000000000001이어야 합니다.
0x0000000000000000000000000000000000000000000000000000000000000001

다음 단계

축하합니다. Foundry를 사용하여 Injective에서 EVM 스마트 컨트랙트를 개발하는 전체 가이드를 완료했습니다! 스마트 컨트랙트는 비기술 사용자에게 사용자 경험을 제공하지 않습니다. 이들을 위해 탈중앙화 애플리케이션을 구축해야 합니다. 이를 위해 첫 번째 dApp 가이드를 확인하세요!