쉽게 말해서 알람시간을 정해서 특정 시간 이후에 트랜잭션을 실행시키는 것을 말합니다.
음... 좀 이해가 쉽게 현실에서 사용되는 예시를 들어보자면
특정 플랫폼에서 업데이트를 위해 공지를 띄우고 날짜를 정해 서버를 막고 업데이트 하는것과 비슷하게
Timelock을 활용하여 일정기간후에 트랜잭션을 쏘는것을 말합니다.
이외에도 오류가 발생을 하였을떄 컨트랙트를 정지시키는 기능으로도 활용 가능합니다.
이런 식으로 활용가능합니다.
처음에는 아 이런게 있구나!! 코드부터 보자!
라는 방식으로 접근을 하였는데 백그라운드 정보가 없다보니깐 함수가 왜 사용되는지에 대해서 이해를 하지 못했습니다.
그래서 따로 이론적인 내용을 학습한 후에 코드분석을 해 보았습니다.
setDelay
말 그대로 delay를 설정하는 함수입니다.
재미있는 부분은 require(msg.sender == address(this))
구문이 들어가있다는 점이고
관리자가 아닌 컨트랙트가 실행을 시켜야 하는 함수 입니다.
public
이 아닌 internal
이 낫지 않나?? 라는 의문점이 남아 있습니다.컨트랙트가 실행을 시켜야 하는 이유는 매우 간단하며 이는 중앙화 이슈를 방지하기 위함입니다.
그러기 떄문에 관리자도 똑같은 조건으로 timeLock을 변경해야 합니다.
setpendingAdmin, acceptAdmin
단순히 admin을 바꿔주는 함수입니다.
queueTransaction
일정 시간 후에 실행시킨 트랜잭션들을 넣는 함수 입니다.
eta
라는 인자값을 톹ㅇ해서 시간을 비교하는 조건문이 들어가 있습니다.
특별한 작업은 하지 않고 단순히 일정시간후에 작업할 내용들을 모아두는 곳이라고 이해하면 될 것 같습니다.
target 인자 : 실행시키고자 하는 EOA,CA주소
value 인자 : 얼마만큼의 금액을 전송할지에 대한 영역
signature 인자 : 어떤 함수를 실행시킬것인가
data 인자 : 트랜잭션을 보낼떄 포함시킬 메시지
eta 인자 : 얼마만큼의 시간 이후에 실행시킬 것인가
cancelTransaction
별거없이 이후에 실행시킬 트랜잭션들을 취소할수 있는 함수 입니다.
excuteTransaction
제일 중요한 함수로 저장되어있는 트랜잭션을 실행시키는 함수 입니다.
실행하고자 하는 인자를 넘겨주게 되고 이후 해시값을 뺴온뒤에 초기화 해줍니다.
call을 통해서 트랜잭션을 실행하게 됩니다.
Defi를 경험해보신 분이라면 프론트에서 쉽게 확인가능한 화면입니다.
제공되는 서비스를 보여주는 방법이며 이러한 수치들은 모두 스마트컨트랙트에 존재하기 떄문에 한 페이지를 작성하기 위해서 위에있는 모든 값들을 불러와야 합니다.
일일히 불러오는 것보다는 한번에 불러오는 것이 효율적이며
가장 좋은 방법으로는 스마트 컨트랙트 자체에서 모든 정보를 가져올수 있는 함수를 만들어 사용하는 것 입니다.
대표적으로 makerDao의 MultiCall코드를 살펴 보았습니다.
봐야 하는 함수는 단 한가지 입니다.
aggregate
호출하고자 하는 값들을 배열로써 한번에 내어주는 함수로 프론트에 있는 모든 값들을 해당 함수를 실행시킴으로서 받아올수 있습니다.
구조체이 있는 target이라고 하는 주소에게 callData라는 임의의 메시지를 담아서 호출을 하게 되고
그 격로가를 함수내 변수에 담고 해당 변수를 return함으로써 작동을 하게 됩니다.
이 과정을 넘겨주고자 하는 원소의 갯수만큼 반복을 합니다.
아 이런식으로 작동을 하는구나
라는 정도로 이해를 하였습니다.저희가 Solidity코드를 짜다보면 단순히 값을 읽어오는 함수는 View
로 선언을 하게 되지만
이 함수는 view
함수가 아닙니다.
이런 이유는 매우 간단한데 함수 내부에서 실행되는 다른 함수들이 view
함수가 아니기 떄문 입니다.
음.. 정신없이 Solidity공부를 해나가고 있습니다.
youtube나 github, google을 주로 활용해서 공부를 하고 있으며
다음에는 Uniswap에 대해서 좀더 심도있게 다뤄볼 생각입니다.
이 부분은 Youtube를 참고해서 공부를 해볼것이며
얼른 Solidity공부를 끝내고 Go에 대해서 저의 새로운 언어에 대해서 공부를 하고 싶습니다!!
감사합니다~~!!!