Daily Development - 2023/04/12

Hoony·2023년 4월 12일
0

Daily

목록 보기
1/30
post-thumbnail

💼 오늘 작업 내용

1. [InvincibleNode]

  • Loan page Web 3.0 연동 작업 및 리팩토링
  • Burrow / Repay Modal Web 3.0 연동
  • Upgradable Contract 배포 파일 작업
  • LendingPool Contract 수정 작업 (nftId로 lendInfo 조회할 수 있도록 해야함.)

2. [세모체]

  • 게시글 차단 기능 설정
    • 사용자가 Report한 체크리스트는 추후 검색에 안 나오도록 설정
    • Member - reportList를 조회해서 만약 해당 리스트에 포함된 체크리스트는 조회할 때 제외하도록 설정함.

3. [코딩테스트 연습]

  • 프로그래머스 달리기 문제 풀이 (dictionary 이용)



⚠️ 에러 핸들링

1. Javascript Web3.0 Contract Method 호출 안됨.

javascript Web3 라이브러리를 이용해서 contract 함수 호출하려고 할 때 함수가 호출 안되는 에러가 있었음.

contract 호출 시 send() & call() 함수를 마지막에 붙여서 사용해야 함. (아래 함수 참고)

this.createLendInfo = async (nftId) => {
        const txResult = await lendingPoolContract.methods.createLendInfo(nftId).call();
        return txResult;
    }

this.lend = async (lendInfo) => {
    const txResult = await lendingPoolContract.methods.lend(lendInfo).send({from: account.address});
    return txResult;
}

2. Web 3.0 Contract 함수 호출 시 Msg.sender 문제

onlyOwner만 호출할 수 있는 함수가 있었음. 그런데 분명 Owner가 맞는데 owner가 아니라는 에러가 발생함.

⇒ 위의 Web3.0 라이브러리로 Contract call Method만 호출해도 msg.sender가 사용자로 자동 설정되는 줄 알았음.

⇒ send() 함수를 써야지 msg.sender가 해당 사용자의 주소로 설정됨. 즉, call은 그저 get 함수로서 msg.sender에 아무런 값이 들어가지 않게됨!

this.lend = async (lendInfo) => {
        const txResult = await lendingPoolContract.methods.lend(lendInfo)
																													.send({from: account.address});
        return txResult;
    }
  • 이런 식으로 send 함수를 이용해야지 msg.sender에 현재 사용자가 들어감.



깨달은 점

  1. 프론트에서 Contract 함수를 사용할 때, msg.sender를 현재 사용자로 하기 위해선 call()이 아닌 send()로 트랜잭션을 날려야한다!
  2. Upgradable 컨트랙트를 재배포할 때(upgrades library 이용), initArgs를 채워주지 않고 그저 주소를 넣고 하면 된다!



📝 투두리스트

profile
Just Do it!

0개의 댓글