ZooBC 위키
트랜잭션

에스크로

에스크로는 제3자인 승인자가 결제를 진행할지 결정할 때까지 체인 자체가 보관하는 결제입니다. 돈을 보관하는 회사도, 관여하는 컨트랙트 코드도 없습니다. 에스크로는 봉투에 추가 부분이 붙은 일반 SendZBC나 TransferToken이며, 체인의 고정된 규칙이 이를 정산합니다. 배송, 프리랜스 작업, 또는 지불하는 쪽이 심판을 원하는 모든 거래에 알맞습니다.

에스크로 만들기

트랜잭션의 에스크로 부분은 다음을 지정합니다.

  • 승인자: 거래를 판정할 주소
  • 승인자에게 주는 커미션
  • 트랜잭션의 타임스탬프보다 늦은, 유닉스 초 단위의 절대적인 기한
  • 승인자를 위한 지시문: "배송 시 지급" 같은 것으로, 0 바이트 없이 최대 128,000바이트

에스크로 부분은 SendZBC와 TransferToken만 담을 수 있습니다. 블록이 트랜잭션을 포함하면 송신자는 금액, 수수료, 커미션, 에스크로 임대료를 내고, 체인은 금액과 커미션을 보관합니다. 토큰 에스크로에서는 금액이 토큰으로 표시되며, 수수료, 커미션, 임대료는 ZBC로 냅니다.

네 가지 결말

금액과 커미션을 담은 에스크로 상자에 출구가 넷 있습니다: 승인, 거부, 수신자의 거절, 기한 경과. 각 출구는 두 부분이 어디로 가는지 보여 줍니다
금액과 커미션을 담은 에스크로 상자에 출구가 넷 있습니다: 승인, 거부, 수신자의 거절, 기한 경과. 각 출구는 두 부분이 어디로 가는지 보여 줍니다
결말일어나는 방식금액이 가는 곳커미션이 가는 곳
승인승인자가 ApprovalEscrow를 보냄수신자승인자
거부승인자가 ApprovalEscrow를 보냄송신자승인자
거절수신자가 DeclineEscrowRequest를 보냄송신자송신자
기한 경과기한을 넘긴 첫 블록에서 저절로송신자송신자

승인자는 승인하든 거부하든 커미션을 받습니다. 어느 쪽이든 거래를 판정하는 것이 승인자의 일이었기 때문입니다. 수신자가 거절하거나 아무도 제때 행동하지 않으면 송신자가 두 부분을 모두 돌려받습니다.

ApprovalEscrow의 본문은 36바이트로, 승인 값과 에스크로된 트랜잭션의 해시입니다. 지정된 승인자만 이를 보낼 수 있습니다. 각 에스크로는 한 번만 정산되며, 이미 정산된 에스크로에 대한 두 번째 승인은 수수료를 내는 무동작입니다. 수수료만 내고 다른 일은 하지 않습니다. 송신자는 마음대로 결제를 되돌릴 수 없습니다. 오직 이 네 가지 결말만 에스크로를 닫습니다. 기한은 이전 블록의 타임스탬프를 기준으로 검사합니다(만료와 타임스탬프 참조).

체인은 각 에스크로의 상태를 0 대기, 1 승인, 2 거부, 3 만료, 4 거절로 기록합니다.

에스크로 임대료

에스크로는 정산될 때까지 체인의 상태를 차지하므로, 수수료에 더해 임대료를 냅니다.

escrow rent = storage price of the escrow part's bytes × lock duration in blocks ÷ billing period

임대료는 에스크로가 만들어질 때 차감되어 롱제비티 풀로 가며(풀 참조), 결말이 어떻든 환불되지 않습니다. GET /api/v1/blockchain/estimate-fee가 서명하기 전에 이를 알려 줍니다.

트랜잭션이 정리될 시점보다 뒤에 있는 기한은 거부됩니다. 단, 트랜잭션의 생존 예치금이 그때까지 트랜잭션을 저장해 두는 비용을 내는 경우는 예외입니다(데이터 보관 비용 (롱제비티) 참조).

에스크로 요청: 지급받을 사람이 먼저

때로는 지급받을 사람이 조건을 정하고 싶어 합니다. EscrowRequest로 지급받을 사람은 지불할 사람, 금액, 승인자, 커미션, 절대 기한, 지시문, 그리고 블록 단위의 자금 투입 기간을 게시합니다. 그러면 지불할 사람은 조건이 정확히 일치하는 에스크로 SendZBC로 자금을 넣거나, DeclineEscrowRequest로 거절합니다. 조건이 다른 자금 투입 트랜잭션은 수수료를 내는 무동작이 됩니다.

다자간 에스크로는 수신자의 공동 서명이나 그런 요청의 id 중 하나를 담습니다.

같이 보기