[개발] 대박이라 기대했던 escrow 기능
안녕하세요 @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를 신뢰한다면 이런 번거로운 절차없이 가능할 것 같기도 합니다.
암튼 스팀에서 새로운 것을 한번 공부한 것에 의의를 둡니다.
Upvoted! Thank you for supporting witness @jswit.
아쉽네용. 되면 좋을텐데
그러게요...ㅜㅜ
뭔가 하려고 하다가 멈춘 듯한 느낌이군요. 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.
상세한 설명 고맙습니다! 실제 전송이 안 일어나는 것은 아쉽네요.