steemit上的Escrow Transfer过了有效期居然不会自动付款。
被娃吵醒了,睡不着,干脆起了个早。
研究后发现,steemit实现的escrow有点奇怪。
想起昨天@davidke20 让看一下escrow,遂研究了一番。
一共有四个Escrow操作,分别是
escrow_transfer
escrow_approve
escrow_release
escrow_dispute
官方文档看这里:https://developers.steem.io/apidefinitions/#broadcast_ops_escrow_transfer
1.escrow_transfer
steem.broadcast.escrowTransfer(
wif, // active key
from,
to,
agent,
escrow_id,
sbd_amount,
steem_amount,
fee,
ratification_deadline,
escrow_expiration,
JSON.stringify({'test':'test'}),
function(err, response) {
console.log(err, response);
}
);
这些字段字面理解即可,我就不做过多说明了。
执行后会产生这样一条交易记录。
2.escrow_approve
steem.broadcast.escrowApprove(
wif,
from,
to,
agent,
who,
escrow_id,
'true',
function(err, response) {
console.log(err, response);
}
);
产生区块记录如下:
交易发起后,需要收款方和escrow代理各自执行approve操作。然后,escrow交易才算正式开始。
如果收款方和代理没有在ratification_deadline规定的时间内approve。发起方被暂扣的款项将退回发起方帐号。
3.escrow_release
steem.broadcast.escrowRelease(
wif,
from,
to,
agent,
who,
receiver,
escrow_id,
sbd_balance,
steem_balance,
function(err, response) {
console.log(err, response);
}
);
这个是用来付款的。官方规则如下:
如果没有纠纷,没人调用escrow_dispute方法:
那么分为有效期内和过期两种情况。
有效期内,付款和收款方可以分多次分批支付或退回款项给对方。
过有效期后,“诡异”的事情出现了。付款和收款方可以任意支配escrow交易里的余额了,可以付给对方,也可以付给自己。到期后,难道款项不是应该自动付给收款方的吗? 这样的话,这个方法似乎就只适合大宗贸易而不太适合普通电商支付了。
(另外,没有纠纷的情况下,escrow代理是无权执行此方法的。)
如果有纠纷,那么就只能由escrow代理来执行该方法了。
4.escrow_dispute
由于其他方法测试一切正常,这个方法我就没测了。这个是发起纠纷仲裁的。付款和收款方可以调用该方法让escrow代理来仲裁。这样付款权限就交到escrow代理手里了。
经测试,escrow交易正常可用。只是到期不会自动给把款项付给收款方,这个有点诡异。不太适合收款方有大量交易的应用场景。
那你后来收到了吗?
Posted using Partiko Android
我确定收付都是正常的
还真是怪
Posted using Partiko Android