Geth에서 함수 호출 방법
Geth에 smart contract를 배포하고나면 함수를 호출할 수 있는데 그 방법에 대해 정리
참고한 사이트: https://arvanaghi.com/blog/testing-smart-contracts-on-a-private-blockchain-with-Geth/
1. 컨트랙트를 컴파일 해준다.
solc --abi 컴파일할sol파일.sol
solc --bin 컴파일할sol파일.sol
으로 abi와 bin를 구해준다.
2. geth에서 변수를 하나씩 만들어서 저장해준다.
var exampleAbi = <abi내용 복붙>
var exampleHex ='0x<bin파일 내용 복붙>'
3. contract 객체 선언
var exampleInterface = eth.contract(exampleAbi)
2번에서 선언한 Abi객체를 인자로 넣어줌
4. contract를 network에 올리기(배포 전)
personal 권한을 풀어주고나서 contract객체를 실제로 만들어주는 과정
personal.unlockAccount(eth.accounts[lock해제할 accounts번호])
//예시: personal.unlockAccount(eth.accounts[0])
var exampleTx = exampleInerface.new(<constructor에서 인자가 필요하다면 여기 넣어주기>,from:eth.accounts[lock해제한 번호], data:exampleHex, gas: 1000000)
//gas는 주고싶은 만큼 줄 수있는데 너무 적으면 gas가 부족해서 실행되지 않음
여기까지 해줬으면 contract의 생성자까지가 실행된 것
그이후에 있는 여러 함수들을 사용하고 싶으면 배포한 후에 사용가능하다.
5. transaction hash를 확인하기 위해 변수로 선언
var exampleTxHash = exampleTx.transactionHash
6. 아래 명령어를 통해서 transaction들의 상황을 확인할 수 있다.
txpool.status
7. 특정 transaction의 내용을 확인하려면 아래 명령어로 확인할 수 있다.
eth.getTransactionReceipt(exampleTxHash)
//인자로 확인하고 싶은 hash넣어주기
8. 마이닝 마이닝
miner.start()
//마이닝 시작
miner.stop()
//마이닝 끝
9. 마이닝된 후 contract주소 가져오기
//첫번째 방법
var pulishedExampleAddr = eth.getTransactionReceipt(exampleTxHash).contractAddress
//두번째 방법
exampleTx
//이렇게 입력하면 trasaction 내용이 뜨는데 그중에 address라고 되어있는 부분이 contract 주소값
var publishedExampleAddr = <확인한 주소값 넣어주기>
10. 실행하기
//getter함수라면
exampleInterface.at(publishedExampleAddr).함수이름()
//예시: exampleInterface.at(publishedExampleAddr).greet()
//상태를 바꾸는 함수라면
exampleInterface.at(publishedExampleAddr).함수이름(<인자가 필요한 함수라면 넣어주기>,{from:eth.accounts[숫자], gas:1000000})
11. 이미 배포되어있는 contract의 함수를 호출하고 싶다면?
3번과정을 해주고나서
배포된 contract의 주소를 기억하고 있다가 contract의 주소를 publishedAddr로 선언해서 10번처럼 실행하기
이후에는 Solidity코드 내에서 다른 contract의 함수를 호출하는 방법에 대해 정리해볼것이다.