💼 오늘 작업 내용
1. 코딩테스트 연습
- Programmers - 연습문제 - 공원 산책 풀이 (난이도 2)
- Programmers - 연습문제 - 바탕화면 정리 (난이도 1)
2. InvincibleNode 작업
- Lending Pool Contract 구조 개선
- index 기반 접근 방식 ⇒ nftId 기반 접근 방식
- Loan Page 작업
- repay 기능 부분에 바뀐 컨트랙트 구조 적용하기.
3. NeerTube 작업
- Youtube Data API를 통해 비디오 정보 가져오기
- chrome extension background.js / contentScript.js 구조 변경
⚠️ 에러 핸들링
1. JSON RPC error
솔리디티 개발할 때 무수한 악명을 자랑하는 JSON RPC 에러를 만났다.
명확하 이유가 설명이 안 되고, 그냥 갑자기 이렇게 에러만 띡 주면 해결하기 너무 어려운 것 같다.
해당 에러가 발생하게 된 경위는, LendingPool Contract 구조를 수정하는 과정에서 일어났기 때문에 해당 구조적인 문제로 인해 발생했다고 생각한다.
한 가지 추측은, 여러가지 함수들을 실행시키면 확인해봤을때, getLendInfo 함수 호출에서 에러가 발생했다.
해당 함수는 write가 아닌 그저 read 함수이기 때문에 더욱 더 코드적인 문제라고 추측된다.
그런데 아무리 봐도 코드적으로는 문제가 없었다. 그래서 LendInfo Struct 구조가 바뀐 게 문제라고 추측이 된다.
현재 LendPool Contract에 연결되 여러 컨트랙트는 LendInfo Struct를 사용하고 있다. 그러나 새롭게 배포한 LendPool Contract는 살짝 다른 구조의 LendInfo Struct를 사용하고 있다. 따라서 해당 mismatch 문제로 에러가 발생하지 않았나 추측이 된다.
💡 깨달은 점
- Python은 함수 인자를 넘겨줄 때 Pass By Reference가 아닌 Pass By Value로 넘겨준다.
- 해당 방식은 배열을 인자로 넘겨줄 때 index로 값은 변경 가능하지만 실제 배열의 주소를 바꾸는 건 안됨!
- 특정 함수 안에서 전역 변수를 쓸려면
global
키워드를 사용해야 함.
- Chrome extension에서 동작 방식을 아직 전부 이해하진 못했지만 이벤트 기반 동작인 것 같다.
- background.js는 extension이 활성화 상태일 때 항상 동작하고 있음.
- 그러나 content_script에 속하는 애들은 매칭되는 url에서만 동작함. (해당 url에 유저가 접속한 경우 바로 동작함.)
📝 투두리스트