젤라토 네트워크로 스마트 컨트랙트 실행 자동화 하기🍦

젤라토 네트워크
젤라토 네트워크
7 min readAug 18, 2021

만일 스마트 컨트랙트를 한번이라도 작성해 보셨다면 ‘ETH가 일정치 상승 시 판매’와 같은 특정 조건을 만족시키는 함수를 자동으로 실행하는 스마트 컨트랙트는 개발이 불가능 하다는 사실을 알고 계실 것입니다. 만일 이를 개발하고 싶다면 여러분은 온체인 활동을 지속적으로 감시하고, 조건이 만족되었을 시 트랜잭션을 발생 시키는 봇을 개발하고 유지해야만 합니다. 하지만 이러한 봇을 개발하는 것은 스마트 컨트랙트 최적화에 쓰일 수 있는 시간과 개발 리소스를 필요로 합니다. 여기에 봇을 운영할 서버를 유지하고 시시각각으로 모니터링을 하는 것은 매우 부담스러운 일이 아닐수 없습니다.

이에 대한 솔루션은 바로 젤라토 네트워크 입니다 — 중앙화 포인트가 될 수 있는 기반 인프라를 따로 준비할 필요 없이 여러분은 멋진 스마트 컨트랙트 개발에 신경쓰기만 하면 되는 것입니다.

🏃‍♂️시작하기

만일 어떠한 스마트 컨트랙트를 배포하였고, 특정 시기에 젤라토가 스마트 컨트랙트를 호출하고 싶다면 젤라토와 소통할 리솔버 컨트랙트를 배포하면 됩니다.

“특정 함수를 매 1시간마다 호출하기.”

아래는 젤라토가 호출할 buy() 함수의 예시입니다. 아래 함수는 유니스왑 V2를 통해 ETH를 매수합니다.

uint256 public lastBought;function buy(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external {
require(block.timestamp >= lastBought + 1 hours); IERC20(path[0]).approve(address(router), amountIn);
router.swapExactTokensForETH(
amountIn,
amountOutMin,
path,
to,
deadline
); lastBought = block.timestamp;
}

아래는 리솔버 컨트랙트의 예시입니다. 만일lastBought 로부터 최소 한시간이 지났다면 checker() 는 true를 반환합니다. 이를 통해 위에 언급한 buy() 함수를 젤라토가 호출하도록 프롬프트를 하게 됩니다.

contract Resolver {
address public immutable owner;
ISwap public immutable swap;
address WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
address USDT = 0xdAC17F958D2ee523a2206206994597C13D831ec7;constructor(address _swap) public {
owner = msg.sender;
swap = ISwap(_swap);
}function checker()
external
view
returns (bool canExec, bytes memory execPayload)
{
address[] memory path = new address[](2);
path[0] = USDT;
path[1] = WETH;
uint256 deadline = block.timestamp + 10 minutes;
uint256 lastBought = swap.lastBought(); if (lastBought >= 1 hours) {
bytes4 selector =
bytes4(keccak256(
"buy(uint256,uint256,address[],address,uint256")); execPayload = abi.encodeWithSelector(
selector,
1000 ether,
0,
path,
owner,
deadline
); canExec = true; return (canExec, execPayload);
}
}
}

젤라토는 매 블록마다 오프체인에서 checker() 를 호출합니다. 만일canExec 이 true를 반환하면 실행자들은 execPayload 를 통해 트랜잭션을 보내게 됩니다.

리솔버 컨트랙트 작성에 대해 자세한 사항은 아래의 문서를 참고하세요👇

👷‍♂️태스크 생성

리솔버 컨트랙트를 배포했다면 절반은 끝난 것이나 마찬가지 입니다. 이제 이뤄져야 할 일은 바로 태스크를 제출하는 것입니다. 젤라토에선 PokeMe UI를 활용하여 매우 쉽게 태스크를 제출할 수 있습니다.

1. PokeMe 웹사이트 접속

해당 페이지에서 현 태스크와 잔액을 확인할 수 있습니다.

2. Submit Task 클릭

해당 페이지에서 여러분이 직접 입력해야 할 사항은 다음 두가지 입니다.

  • 실행 주소(Execution address) — 젤라토가 호출할 함수의 주소.
  • 리솔버 주소(Resolver address) — 이전에 배포한 리솔버의 주소.

실행 주소를 입력하면 여러분이 호출할 수 있는 함수의 리스트를 볼 수 있습니다.

3. 젤라토가 호출할 함수 선택

여러분의 컨트랙트는 반드시 이더스캔(Etherscan)이나 폴리곤스캔(Polygonscan)에서 검증되어 있어야 합니다. 그렇지 않으면 여러분이 직접 검증할 수도 있습니다.

리솔버 주소도 위와 같은 절차를 거칩니다.

  • 오프체인에서 봇들이 실행 여부를 결정하도록 젤라토가 호출할 함수를 선택.
  • 태스크 제출.

대시보드에서 여러분이 제출한 모든 태스크를 확인할 수 있습니다.

태스크를 클릭하면 해당 태스크의 이전 실행사항들에 대한 세부정보를 확인할 수 있습니다.

🤑펀드 예치

태스크 제출이 끝나면 마지막 단계는 실행인들이 트랜잭션을 실행할 때 여러분이 지불해야 할 수수료를 예치하는 것입니다.

여러분의 스마트 컨트랙트가 배포된 메인넷에 따라 ETH, 또는 MATIC을 예치하세요.

여러분의 잔액은 대시보드에서 확인할 수 있습니다.

🎊완료

이제 모든 준비가 끝났습니다! 이제 젤라토는 여러분의 스마트 컨트랙트를 모니터링 하면서 지정된 조건이 충족되면 해당 컨트랙트를 실행할 것입니다!

젤라토의 PokeMe는 현재 이더리움 메인넷, 롭스텐, 그리고 폴리곤을 지원하고 있습니다.

컨트랙트 주소는 다음 링크에서 확인해 보세요!

젤라토 네트워크

젤라토 네트워크는 이더리움 상 스마트 컨트랙트 실행을 자동화 해주는 프로토콜 입니다. 저희는 이더리움 상에서 안정적인 자동화가 이뤄질 수 있도록 기반 인프라를 개발하고 있으며, 이를 통해 웹3의 핵심적인 미들웨어 스택을 발전시키고, 무신뢰성과 함께 모든 스마트 컨트랙트와 레이어 2 네트워크 간 자동화된 가치 흐름을 달성하고자 합니다.

--

--