@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
을 처리하기 위해서 상태에 있는 값을 처리하는 것이 아니라 web3와 Instance를 인자값으로 넣어주는 것이다.
Javascript의 비동기코드들
- setInterval
- fetch
- await
- connection.query()
- dispatch
나중에 까먹지 말자!!
Author And Source
이 문제에 관하여(@truffle/contract), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@nara7875/trufflecontract저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)