@truffle/contract

1. @truffle/contract의 장점

원래는 web3에서 스마트 컨트랙트를 사용하려면 abi랑 address를 뽑아서 사용해야 했다. 그런데
const contract = require('@truffle/contract')을 쓰고,
import lotteryStorageContract from './Lottery.json'을 통해 json파일을 가져오면 저절로 instance를 만들어준다.

const init = async () => {
    const contract = require('@truffle/contract')
    //얘가 abi랑 address를 뽑아서 instance를 만들어준다.
    //함수를 호출할때 methods를 생략하게 해준다.ㅣ 
    let web3 = await getWeb3()
    let [accounts] = await web3.eth.getAccounts()
    let lotteryContract = contract(lotteryStorageContract)
    lotteryContract.setProvider(web3.currentProvider)

    const Instance = await lotteryContract.deployed()
    //배포된 걸 가져와라!!!!!
    
    // let lotteryContract = new web3.eth.Contract(lotteryABI, lotteryAddress); 

    let actions = {
      type:'INIT',
      accounts,
      web3,
      Instance
    }

    dispatch(actions)
    let interval = setInterval(() => {
      getPot(web3,Instance)  
    }, 1000);
  }

그리고 lotteryContract.deployed()가 배포가 된 것이라고 생각을 했었는데 그게 아니라 배포된 것을 가지고 오는 것이었다.

2.dispatch가 test queue로 빠진다고?

dispatch는 테스트 큐로 빠지는 아이이다. 그래서 dispatch를 썼다고해서 바로 상태값을 바꾸지는 못한다. 언제 완료가 될지를 가늠할 수 없는 함수이다.

그래서 그 다음에 있는 getPot을 처리하기 위해서 상태에 있는 값을 처리하는 것이 아니라 web3Instance를 인자값으로 넣어주는 것이다.

Javascript의 비동기코드들

  • setInterval
  • fetch
  • await
  • connection.query()
  • dispatch

나중에 까먹지 말자!!

좋은 웹페이지 즐겨찾기