[개발] 대박이라 기대했던 escrow 기능

in hive-101145 •  2 months ago 

안녕하세요 @realmankwon입니다.

어제 포스팅에서 스팀에서 스컨 비스무리한 기능이 있을지도 모른다는 기대감에 부풀었었는데 막상해 보니 기대가 너무 컸습니다.
그 기능은 바로 Escrow 기능인데요.

항상 봐왔던 스팀 api 소스에서 쉽게 찾아볼 수 있습니다.

https://github.com/steemit/steem-js/blob/master/doc/README.md#api

이 기능으로 Escrow를 생성한 계정이 Release를 하면 agent로 보냈던 스팀이나 스달이 자동으로 전송이 되지 않을까 기대했었는데 실제 코인의 전송은 일어나지 않았습니다.

그래도 키를 이용하여 서로간에 거래를 수행하는 데이터는 신뢰할 수 있어서 커스텀 제이슨 보다는 나은 것 같기는 합니다.
이때 필요한 계정은 총 3개입니다.

  • from : 돈을 지불을 계정
  • to : 서비스를 제공하고 돈을 받을 계정
  • agent : 중계인

Escrow를 사용하기 위해서 가정 먼저해야 할 것은 Escrow Transfer 입니다.
from 계정이 Escrow 를 생성하는 것입니다.

steem.broadcast.escrowTransfer(
     wif,       // from 의 active key
     from,      // escrow를 생성하는 계정
     to,             
     agent, 
     escrowId,  // 임의의 수(단 현재 생성되어 있는 escrowId 는 생성 되지 않음) 
     sbdAmount, 
     steemAmount, 
     fee, 
     ratificationDeadline,  // "2022-06-25T00:00:00"
     escrowExpiration,   // "2022-06-26T00:00:00" - ratificationDeadine 보다 커야함
     jsonMeta,   // 임의의 데이터
     function(err, result) {
            console.log(err, result);
     }
);

Escrow가 생성되고 나면 to, agent 계정이 approve 를 해 주어야 해당 Escrow가 성립이 됩니다.
getEscrowAsync 함수를 이용하면 현재 Escrow의 상태를 알 수 있습니다.

     let data = await steem.api.getEscrowAsync(from, escrowId);

위와 같이 하면 아래와 같이 결과값이 나옵니다.

     agent:'realman0711'
     agent_approved:false
     disputed:false
     escrow_expiration:'2022-07-02T00:00:00'
     escrow_id:2
     from:'realmankwon'
     id:299
     pending_fee:'0.001 STEEM'
     ratification_deadline:'2022-07-01T00:00:00'
     sbd_balance:'0.000 SBD'
     steem_balance:'0.001 STEEM'
     to:'realmankwon.cur'
     to_approved:false

agent_approved와 to_approved 가 false 상태이기 때문에 해당 Escrow는 다음 단계로 넘어갈 수가 없습니다.
이때 escrowApprove를 통해서 approve를 할 수 있습니다.

  steem.broadcast.escrowApprove(
    key,    // active key of to or agent
    from,
    to,
    agent,
    who,   // to or agent
    escrowId,
    true,
    async function (err, result) {
      console.log(err, result);
      let data = await steem.api.getEscrowAsync(from, 1);
      console.log(data);
    }
  );

who 에는 to와 agent 계정만 가능합니다.
key 는 to 일때는 to의 active key로 agent일때는 agent의 active key 를 입력하면 됩니다.
만약 이상이 있으면 escrowDispute를 이용하면 됩니다.
사용법은 escrowApprove와 동일합니다.

2 계정이 모두 approve를 하고 나면 escrowRelease를 하여 escrow를 종료시켜 줄 수 있습니다.

  steem.broadcast.escrowRelease(
    key,
    from,
    to,
    agent,
    who,             // from or to or agent
    receiver,     // from or to
    1,
    "0.000 SBD",
    "0.001 STEEM",
    function (err, result) {
      console.log(err, result);
    }
  );

escrowRelease 는 who 에 from/to/agent가 올 수 있고 receiver 에 from/to 가 올 수 있지만 2개가 동일하게 입력될 수는 없습니다.
who가 from 이면 receiver 는 to/agent가 되어야 한다는 의미입니다.
이렇게 처리가 되고 나면 escrow 는 삭제가 됩니다.

하지만 이 과정에서 실제로 STEEM, SBD 는 전송이 되지 않았습니다.
즉 STEEM, SBD 의 전송은 계정에서 각자가 해야 하고 마지막에 agent도 to 가 from이 지정한 행위를 했는지를 확인하고 직접 전송을 해줘야 합니다.
전송은 각자가 하고 그 행위를 증명하는 데이터의 단계별 처리만 해주는 것이라 이런 서비스를 가능하게 하려면 신뢰할 수 있는 agent가 개발을 하고 운영을 해야 하는 상황입니다.
이런 서비스의 수요가 얼마나 될지 모르겠지만 UPVU 정도의 신뢰도라면 한번 만들어 봐도 괜찮을 것 같긴 합니다.

하지만 어차피 UPVU를 신뢰한다면 이런 번거로운 절차없이 가능할 것 같기도 합니다.
암튼 스팀에서 새로운 것을 한번 공부한 것에 의의를 둡니다.

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

image.png

Upvoted! Thank you for supporting witness @jswit.
default.jpg

뭔가 하려고 하다가 멈춘 듯한 느낌이군요. escrow 종료가 되면 자동으로 전송이 되면 좋을 듯 한데, 그게 아니라면 굳이 사용할 필요는 없을 듯 합니다. upvu 정도면 escrow 충분히 할 수 있죠.

댄이 에스크로나 SMT만 완료하고 떠났으면 좋았을텐데 말이죠..
아쉽습니다.

@realmankwon transfered 20.000 KRWP to @krwp.burn. voting percent : 100.00%, voting power : 20.67%, steem power : 1991985.27, STU KRW : 1200.
@realmankwon staking status : 15907.726 KRWP
@realmankwon limit for KRWP voting service : 15.907 KRWP (rate : 0.001)
What you sent : 20.000 KRWP (Voting Percent over 100 %)
Refund balance : 17.137 KRWP [65378093 - 78fb02ff33e2c37048509e24fff4fa4943da9948]

예전 스팀페이는 단순히 그냥 전송기능만 있었던 걸까요??

네네
보통 오프라인으로 만난 상태이니 바로 전송하고 확인이 가능한 것입니다.
에스크로는 온라인 상에서 만나지 않고 안전한 거래를 할 수 있도록 도와주는 것인데 전송 기능은 빠져 있으니 아쉽네요.

아쉽네용. 되면 좋을텐데

그러게요...ㅜㅜ

잘은 모르지만 뭔가 조금 아쉽네요.

많이 아쉽습니다!!

Hi @realmankwon
This question is unrelated but I want to ask what is the site for Blurt with regards to delegating to upvu?

Thanks.