[TIL] 2023-06-12

Melon Coder·2023년 6월 12일
1

TIL

목록 보기
46/50
post-thumbnail

Today I Learned


[Web3.js & solidity]

오늘은 Web3.js에서 contract를 이용해 call(호출)하거나 signTransaction(거래를 일으키는)것을 해보고 solidity에서 event-emit을 배웠다.


Web3.js

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)
  • 이용하려는 컨트랙트의 abiaddress 설정
    - 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)})})

solidity

Event & Emit

Event는 트랜잭션 로그에 저장하는 기능으로 인수를 취할 수 있다.
Emit은 트랜잭션 로그에 Event데이터를 넣을 수 있다.
이 이벤트는 컨트랙트 내에서는 접근이 불가하고 자바스크립트로 컨트랙트 주소를 통해 접근 할 수 있다.

0개의 댓글