서버개발 요청 (0816 논의전, deprecated )

QVE staking을 참고해주세요!

* 전체적으로 큐브 프로토콜은 공모펀드의 성격을 가집니다 *

기능1 : 자산수취 ( investmentExecution ) - 수정 중

사용자에게 이더리움을 받아서 전략봇으로 전송하고, 정보를 저장합니다.

  1. 프론트에서 투자자가 이더리움 수량을 입력한 후에 confirm을 누릅니다.

  2. confirm 이후에 프론트에서 investmentExecution 를 호출합니다.

investmentExecution

  1. 이더리움을 먼저 QVE core 컨트랙트로 옮깁니다.

    1. receiveAsset 함수에 파라미터로 ( address 거래봇 주소, uint256 전송금액 )을 전달합니다.

    2. receiveAsset은 ( uint256 값으로 완료된 시점의 timestamp, address 투자자 지갑주소 ) 를 리턴합니다.

  2. 투자자 지갑 -> QVE core 컨트랙트 -> 해당 전략봇이 작동하고 있는 주소 로 이더리움이 모두 이체된 이후에 DB에 다음 사항을 저장합니다.

    1. 투자시점(timestamp) - 투자지갑 - 전략식별가능한 값 - 금액

function
입력
출력

receiveAsset

address botAddress, uint256 sendAmount

tuple ( uint256 sentAt, address investmentAddress )

investmentExecution

int strategyNum, int investAmount(wei)

bool

기능2 : 수익 분배 ( accumulateProfit ) - 개발 중 ( 60% )

정산주기에 따라서 전략에서 수익의 10%(임의)를 인출해서, 임의 시간에 protocol Fee Contract로 옮깁니다.

Protocol Fee Contract에서는 이후, 큐브 스테이킹에 스테이킹된 QVE의 개인 예치 비중에 따라서 이를 보상주기에 따라서 분배해줍니다. 하단의 그림에서는 정산주기는 1일, 배분주기는 7일로 임의로 설정되어 있습니다. 이에 따르면 1일마다 전략에서 수익의 10%를 인출해서 Protocol Fee Contract로 보내게 되고 7일동안 쌓인 금액이 분배될 것입니다.

영안님께 질문 드려보니, 정산주기가 너무 잦으면 봇의 수익에 안좋은 영향을 준다고 합니다. 그래서 이후에 조정할 것이라 임의값이라 생각하시면 될 것 같습니다.

  1. 먼저 특정 시간대에 일정한 주기마다 accumulateProfit 을 호출합니다.

  2. accumulateProfit은 다음의 동작을 수행합니다.

    1. 전략 봇 주소들에서 일정 시점에 Protocol Fee Contract로 전체 수익금의 10%를 전송합니다.

      1. 방법이 2가지 있습니다.

        1. 바로 컨트랙트에서 이더를 전송하면, 컨트랙트에서 receive 함수를 구현해놓아 이더리움이 들어오면 후차적으로 이후 과정을 밟도록 하겠습니다.

      2. 여기서 수익은 해당 전략을 선택한 투자자들의 원금에 대한 수익금입니다.

      3. 그래서 이 부분의 수익률을 뽑아내는 것은 용이할 것 같습니다.

기능3 : 전략 환매 ( refundInvestment )

상단의 기능2같은 경우에는 전략을 선택한 투자자들의 원금이 모두 합쳐서 나온 수익률을 분배받는다는 점에서 전략을 선택한 투자자가 자신만의 수익률을 받을 방법이 없었습니다. 그래서 환매라는 로직을 새로 만들었습니다.

먼저 하단의 [그런데 문제가 하나 존재합니다] 문서를 읽어주시길 바랍니다.

환매는 해당 자산을 NFT를 컨트랙트로 보내게 되면 자신의 전략에 해당하는 수익금과 원금을 돌려주는 것입니다. 영안님께 질문드린 결과 개인 별 수익 파악이 가능합니다.

refundInvestment는 다음과 같이 작동합니다.

  1. 먼저 사용자가 프론트에서 자신의 투자에 해당하는 nft 토큰을 컨트랙트에서 확인합니다.

  2. 이후에 회수(컨트랙트로 전송)할 nft tokenId를 선택하여 refundInvestment 함수를 호출합니다.

    1. refundInvestment는 다음을 수행합니다.

    2. QVE nft에서 해당 token Id에 대해서 QVE core 컨트랙트의 사용 및 지출을 승인합니다. ( approve )

    3. 그리고 NFT를 컨트랙트로 회수하는 로직을 실행합니다

      1. 환매 로직은 만드는 중입니다.

      2. 환매는 다음과 같이 실행됩니다.

      3. 사용자에게서 컨트랙트 자기 자신으로 NFT를 전송합니다.

    4. 데이터베이스에서 사용자가 선택한 전략과 금액을 확인합니다. 그리고 전략에서 매도 이후에 데이터베이스에 있는 사용자의 지갑으로 전송해줍니다.

Last updated