📱인프런 모바일 App 😆

안녕하세요. 매물구입함수 실행 에러 문의드립니다.

미해결질문
한상윤 Han 프로필

우선 현재까지 가르쳐주신 내용을 잘 따라왔습니다. 하지만 현재 단계인 매물구입함수를 구현하고 실행하는 과정에서 다음과 같은 2가지 에러가 발생했습니다.

  1. 작성해 주신 소스를 실행시켰을 때,
    initWeb3: function() {
    if(typeof web3 !== 'undefined'){
    App.web3Provider = web3.currentProvider;
    web3 = new Web3(web3.currentProvider);
    } else {
    App.web3Provider = new web3.providers.HttpProvider('http://localhost:8545');
    web3 = new Web3(App.web3Provider);
    }
    return App.initContract();
    이 부분에서 invalid address 라는 에러가 발생합니다. 혹시 해결하신 경험이 있으시면 조언 부탁드립니다.
    그리고 이 부분을 단순하게 else로 실행하도록 했을 때에는 (typeof web3 == undefined 로 설정했을 때.) 아래와 같은 에러들이 발생합니다.
  2. 교육 내용을 따라 바로 진행했을 때, 처음에는 메타마스크의 작동은 정상이었으며, 단 한번 매입하는 데에 두번의 매입 트랜잭션이 발생해서 지정된 이더의 2배가 차감, 차입 되는 현상이 있었습니다.
  3. 저러한 이상현상을 해결하고자, build 폴더를 삭제하고, metamask의 설치도 다시 진행한 후, 재 migration을 진행하였습니다만, 현재는 metamask에서 transaction 발생하는 화면 조차 나타나지 않으며, truffle console로 해당 함수를 실행했을 시truffle(ganache)> app.buyRealEstate(9, web3.toHex('사용자이름'), 35, {from:'0x2DcCa9B61E50D79A90a813fcD6a42c3A3Ac52e6f', value:1.23 });

Error: sender doesn't have enough funds to send tx. The upfront cost is: 1188468692540441322405034084557662891273515906800840149300 and the sender's account only has: 100000000000000000000

와 같은 에러가 발생합니다.

  1. 그리고 truffle console로 instance를 생성하여 테스트를 진행해 봤을 때에도,

truffle(ganache)> app.getBuyerInfo(0);

Error: Attempting to run transaction which calls a contract function, but recipient address 0x0b4b148c6ab76335899a1294c22f48964cb04869 is not a contract address

at XMLHttpRequest._onHttpResponseEnd (C:UsersmicroAppDataRoamingnpmnode_modulestrufflebuildwebpack:~xhr2libxhr2.js:509:1)

at XMLHttpRequest._setReadyState (C:UsersmicroAppDataRoamingnpmnode_modulestrufflebuildwebpack:~xhr2libxhr2.js:354:1)

at XMLHttpRequestEventTarget.dispatchEvent (C:UsersmicroAppDataRoamingnpmnode_modulestrufflebuildwebpack:~xhr2libxhr2.js:64:1)

at XMLHttpRequest.request.onreadystatechange (C:UsersmicroAppDataRoamingnpmnode_modulestrufflebuildwebpack:~web3libweb3httpprovider.js:128:1)

at C:UsersmicroAppDataRoamingnpmnode_modulestrufflebuildwebpack:packagestruffle-providerwrapper.js:134:1

at C:UsersmicroAppDataRoamingnpmnode_modulestrufflebuildwebpack:~web3libweb3requestmanager.js:86:1

at Object.InvalidResponse (C:UsersmicroAppDataRoamingnpmnode_modulestrufflebuildwebpack:~web3libweb3errors.js:38:1)

truffle(ganache)> app.buyRealEstate(0, 'syhan01', 36);

Error: Attempting to run transaction which calls a contract function, but recipient address 0x0b4b148c6ab76335899a1294c22f48964cb04869 is not a contract address

at XMLHttpRequest._onHttpResponseEnd (C:UsersmicroAppDataRoamingnpmnode_modulestrufflebuildwebpack:~xhr2libxhr2.js:509:1)

at XMLHttpRequest._setReadyState (C:UsersmicroAppDataRoamingnpmnode_modulestrufflebuildwebpack:~xhr2libxhr2.js:354:1)

at XMLHttpRequestEventTarget.dispatchEvent (C:UsersmicroAppDataRoamingnpmnode_modulestrufflebuildwebpack:~xhr2libxhr2.js:64:1)

at XMLHttpRequest.request.onreadystatechange (C:UsersmicroAppDataRoamingnpmnode_modulestrufflebuildwebpack:~web3libweb3httpprovider.js:128:1)

at C:UsersmicroAppDataRoamingnpmnode_modulestrufflebuildwebpack:packagestruffle-providerwrapper.js:134:1

at C:UsersmicroAppDataRoamingnpmnode_modulestrufflebuildwebpack:~web3libweb3requestmanager.js:86:1

at Object.InvalidResponse (C:UsersmicroAppDataRoamingnpmnode_modulestrufflebuildwebpack:~web3libweb3errors.js:38:1)

truffle(ganache)> app.getAllBuyers();

Error: Attempting to run transaction which calls a contract function, but recipient address 0x0b4b148c6ab76335899a1294c22f48964cb04869 is not a contract address

at XMLHttpRequest._onHttpResponseEnd (C:UsersmicroAppDataRoamingnpmnode_modulestrufflebuildwebpack:~xhr2libxhr2.js:509:1)

at XMLHttpRequest._setReadyState (C:UsersmicroAppDataRoamingnpmnode_modulestrufflebuildwebpack:~xhr2libxhr2.js:354:1)

at XMLHttpRequestEventTarget.dispatchEvent (C:UsersmicroAppDataRoamingnpmnode_modulestrufflebuildwebpack:~xhr2libxhr2.js:64:1)

at XMLHttpRequest.request.onreadystatechange (C:UsersmicroAppDataRoamingnpmnode_modulestrufflebuildwebpack:~web3libweb3httpprovider.js:128:1)

at C:UsersmicroAppDataRoamingnpmnode_modulestrufflebuildwebpack:packagestruffle-providerwrapper.js:134:1

at C:UsersmicroAppDataRoamingnpmnode_modulestrufflebuildwebpack:~web3libweb3requestmanager.js:86:1

at Object.InvalidResponse (C:UsersmicroAppDataRoamingnpmnode_modulestrufflebuildwebpack:~web3libweb3errors.js:38:1)

와 같은 주소값 에러가 발생합니다.

혹시 위와 같은 에러를 해결해 보신 경험이 있으시다면 조언 부탁드리며, 단위테스트나 디버딩을 해 보고 싶은데, 로그를 어디에 남겨야 하는지에 대한 지식이 전무하다보니 이 부분도 조언 부탁드립니다.

긴글 읽어 주셔서 감사합니다.

한상윤 Han 프로필
한상윤 Han 4달 전

우선 invalid address 에러가 발생한 이유는 metamask의 정책 변경 때문이었습니다.
관련 내용은 https://medium.com/metamask/introducing-privacy-mode-42549d4870fa
에 잘 나와 있습니다. 2018년 11월 2번째 주부터 metamask를 업데이트 하면서 일괄 적용한 것으로 보입니다.
임시해결방안은 metamask를 실행한 후, settings에 들어가서 Security & Privacy 의 Privacy mode를 해제하면
강사님의 코드로 매물거래가 가능합니다.
하지만 아직 까지 왜 매물 거래가 2번 연속으로 발생해야 하는지, 이 문제를 어떻게 해결해야 할 지는 진행중입니다.

성백민 프로필
성백민 4달 전

진짜 감사합니다. 저도 같은 에러였는데 도저히 방법을 못찾았었거든요..정말로 감사드려요

SEJONG IT EDU 프로필
SEJONG IT EDU 4달 전

@한상윤
안녕하세요. 좋은 발견 해주셔서 감사합니다. 공지해야겠네요.

https://github.com/MetaMask/metamask-extension/issues/1676 

링크 주신걸로 무슨 이슈인지 확인은 했습니다. 메타마스크의 버튼을 빨리 눌렀을 때 발생하는 이슈인데 똑같은 이슈 맞나요? 이미 해결된걸로 보아서는 그 부분은 아닌거같고.. 만약 고쳤다하고 안고쳐졌으면 메타마스크의 문제긴하네요. ㄱ-

한상윤 Han 프로필
한상윤 Han 4달 전

두번 결제 되는 것은 제가 코드를 테스트 하면서 찍어본다는 것이 결제하는걸 찍어보는 어처구니 없는 짓을 해서 두번 결제가 되었던 것이구요. 그 부분 삭제하니까 정상 결제 되었습니다. 단순하지만 크리티컬한 제 실수였어요.