오늘은
Web3.js
에서 contract를 이용해 call(호출)하거나 signTransaction(거래를 일으키는)것을 해보고solidity
에서event-emit
을 배웠다.
call
간략한 순서로는 먼저 node 환경을 구축하고 web3.js 라이브러리를 설치하고(npm i web3) javascript로 변수 선언을 해주어야 한다.
- Provider 설정(ex. infura api key? cloudflare's url?)
-const web3 = new Web3('PROVIDER')
- 개인키 설정
-const privatekey = 'YOUR PRIVATE KEY'
- 지갑주소 설정
-const account = web3.eth.accounts.privateKeyToAccount(privatekey)
- 기본 지갑주소로 설정
-web3.eth.defaultAccount = account.address
- 월렛에 추가
-web3.eth.accounts.wallet.add(account)
- 이용하려는 컨트랙트의 abi와 address 설정
-let abi = CONTRACT ABI / let c_address = 'CONTRACT ADDRESS'
- contract 변수 설정
-let contract = new web3.eth.Contract(abi, c_address)
- 함수 호출하기
-contract.methods.함수이름(input value).call().then(console.log)
signTransaction
- tx 변수 선언
- var tx = {from : account.address, to : c_address , gas : 300000, gasPrice : 3000000, data : contract.methods.함수이름(input value).encodeABI()}- 서명하는 변수 선언
- var signPromise = web3.eth.accounts.signTransaction(tx, account.privateKey)
---이 과정까지 하면 트랜잭션 서명까지는 완료---- 거래 일으키기
- signPromise.then((signedTx)=> {var sentTx = web3.eth.sendSignedTransaction(signedTx.raw || signedTx.rawTransaction); sentTx.on("receipt", receipt=> {console.log(receipt)})})
Event & Emit
Event
는 트랜잭션 로그에 저장하는 기능으로 인수를 취할 수 있다.
Emit
은 트랜잭션 로그에Event
데이터를 넣을 수 있다.
이 이벤트는 컨트랙트 내에서는 접근이 불가하고 자바스크립트로 컨트랙트 주소를 통해 접근 할 수 있다.