1차 배포 연결 가이드

연결의 대략적인 가이드입니다. 세부 내용은 컨트랙트별 문서를 참고해주세요.

확인 가능한 시나리오

시나리오 1 - 작동확인완료

이더리움 예치

마진 수정

NFT민팅

NFT소각승인

NFT소각

QVE민팅 (1wei == 10 ^ 18 qve)

프론트 플로우

처음에 전략을 선택하고 이더리움을 투자합니다. 그럼 전략봇이 돌고있는 거래소의 해당 지갑에 전송해야 합니다. 이후, 해당 전략봇이 투자 액수만큼 매수를 추가함으로써 투자가 완료됩니다.

  • 사용자에게 봇이 매수하는 시점에 대해서 명확하게 공유해야합니다.

  • 마찬가지로 사용자가 봇이 매도하는 시점을 정확히 알아야 합니다.

    • 예시로 봇에서 해당 금액을 매도하는 함수가 값을 리턴했을 때, 정확히 그 시점에 사용자에게 알려주어야 합니다.

ㄴ 이 지갑으로 옮기는 과정은 하단에 적힌 사유 때문에 서버를 통해야 합니다. 그래서 receiveAsset을 api안에 넣어서 그 api를 호출하는 식으로 투자금 예치가 이루어질 것 같습니다.

  1. 지갑 주소가 변경될 수 있음

  2. 거래소가 추가될 수 있음

1번과 2번은 이더리움을 예치하고 한과정입니다. (지금은 봇주소를 연결하지 않았기 때문에 이더리움은 QVE core 컨트랙트로 옮겨집니다, 상기에 적힌 내용대로 서버를 통해서 봇주소로 옮겨지는 것으로 수정 예정입니다.)

  1. 투자할 이더리움을 예치합니다

    QVEcore의 receiveAsset 함수 호출하면서 msg.valuewei단위로 이더리움을 넣어주세요.

    입력 인자로는 bool lockupuint256 sendAmount가 있는데 1차 배포시에는 lockup을 안하기로 해서 false로 넣어주시고 amount에는 msg.value와 같은 값을 넣어주시면 됩니다.

    1. 이후 과정은 안에서 이루어지는 과정입니다.

      1. msg.valuesendAmount가 다르면 거절됩니다.

      2. 이후는 계속 안에서 함수 호출하면서

      3. sendAmount 금액을 메타데이터로 담아서 NFT를 발급 후 msg.sender 의 지갑으로 넣어줍니다.

      4. 그리고 투자 정보를 업데이트 합니다.

        1. 이부분은 아래에 어떻게 생겼는지 추가 서술 하겠습니다.

  2. 이후 큐브 스테이킹으로 가기 위해서 NFT를 소각 후 QVE를 민팅받아야 하는데, 다음의 단계를 실행해야 합니다.

    1. 먼저 QVEnft / approve 함수의 입력인자로는 address touint256 tokenId가 있습니다. to에 QVEcore가 배포된 주소를 넣어주시고, 컨트랙트에서 조작할 수 있도록 권한을 넘깁니다.

    2. 그리고 나서 QVEcore / burnInvestmentGuarant에는 입력인자로 uint256 tokenId가 있습니다.

      1. 이 함수는 NFT를 민팅한 본인의 주소가 아니면 실행이 거절됩니다.

      2. 전송도 막아야겠네요! (아직 안막아놓음)

    3. 이후의 과정

      1. NFT는 소각되었고 (메타마스크에는 그대로 남아있는데, 소각된겁니다.)

        1. 시간 지나면 사라짐.

      2. 이후에 QVE를 민팅해서 msg.sender의 지갑에 넣어줍니다.

다음으로는 큐브-이더리움 스왑입니다.

지금은 임의로 1wei == 10 ^ 18 QVE로 설정되어있습니다. (이후에 비율은 바뀔 예정)

  1. swapETHtoQVE_

  2. swapQVEtoETH_

다음으로는 큐브스테이킹입니다

doQVEStake함수에 인자로 uint256 qveStakeAmount를 전달해야합니다. 넣으시면 스테이킹 과정으로 들어갑니다.

아직 플랫폼 수익배분 관련해서 개발중입니다. 이 과정에서도 역시 서버가 들어갑니다.

하루에 한번씩 서버에서 봇 수익 중 일부?를 컨트랙트로 옮깁니다. 그러면 그 잔량을 큐브 스테이킹에서 큐브를 스테이킹 하는 만큼 배분해줍니다. 주기는 7일로 설정하겠습니다.

다음으로는 코어 컨트랙트의 변수와 매핑에 대해서 살펴보겠습니다. 필요한 변수나 매핑이 있다면 빠르게 추가하겠습니다.

먼저 NFT 관련입니다.

nftVault mapping

address 주소 => { uint256 토큰id, uint256 nft 민팅 시점}[]

marginForNFT mapping

uint 256 토큰id => uint 256투자한 이더리움 액수

tokenIdForAddress mapping

토큰id => 소유자 주소

다음으로는 마진(투자잔액) 관련입니다

EthMarginVault mapping

address 주소 => {uint256 잔액, uint256 시간, uint256 토큰id}[], 가지고 있는 uint256 NFT tokenId[]

Last updated