mirror of
https://github.com/aljazceru/ark.git
synced 2025-12-18 04:34:19 +01:00
Make change of async payment spendable (#324)
* Drop unused ComputeOutputScript & use ParseTaprootScript internally * Add pending field to vtxo domain * Add check to handle async change as claimed vtxo & Move check to prevent spending penidng vtxos to app level * Rename utils.go to parser.go & Fixes * Ignore sent-and-reversible vtxos in ListVtxos * Fixes Co-authored-by: Louis Singer <louisinger@users.noreply.github.com> * Fix e2e test Co-authored-by: Louis Singer <louisinger@users.noreply.github.com> Co-authored-by: João Bordalo <bordalix@users.noreply.github.com> * Fix * Add PendingChange field to vtxo * Add PendingChange field to Transaction * Fixes * Remove logs --------- Co-authored-by: Louis Singer <louisinger@users.noreply.github.com> Co-authored-by: João Bordalo <bordalix@users.noreply.github.com>
This commit is contained in:
committed by
GitHub
parent
10ef0dbffa
commit
5c2065ad47
@@ -263,13 +263,17 @@ func (s *covenantlessService) CompleteAsyncPayment(
|
||||
vtxos := make([]domain.Vtxo, 0, len(asyncPayData.receivers))
|
||||
|
||||
for outIndex, out := range redeemPtx.UnsignedTx.TxOut {
|
||||
desc := asyncPayData.receivers[outIndex].Descriptor
|
||||
_, _, _, _, err := descriptor.ParseReversibleVtxoDescriptor(desc)
|
||||
isChange := err != nil
|
||||
|
||||
vtxos = append(vtxos, domain.Vtxo{
|
||||
VtxoKey: domain.VtxoKey{
|
||||
Txid: redeemTxid,
|
||||
VOut: uint32(outIndex),
|
||||
},
|
||||
Receiver: domain.Receiver{
|
||||
Descriptor: asyncPayData.receivers[outIndex].Descriptor,
|
||||
Descriptor: desc,
|
||||
Amount: uint64(out.Value),
|
||||
},
|
||||
ExpireAt: asyncPayData.expireAt,
|
||||
@@ -277,6 +281,7 @@ func (s *covenantlessService) CompleteAsyncPayment(
|
||||
RedeemTx: redeemTx,
|
||||
UnconditionalForfeitTxs: unconditionalForfeitTxs,
|
||||
},
|
||||
PendingChange: isChange,
|
||||
})
|
||||
}
|
||||
|
||||
@@ -332,6 +337,9 @@ func (s *covenantlessService) CreateAsyncPayment(
|
||||
if vtxo.Swept {
|
||||
return "", nil, fmt.Errorf("all vtxos must be swept")
|
||||
}
|
||||
if vtxo.AsyncPayment != nil && !vtxo.PendingChange {
|
||||
return "", nil, fmt.Errorf("all vtxos must be claimed")
|
||||
}
|
||||
|
||||
if vtxo.ExpireAt < expiration {
|
||||
expiration = vtxo.ExpireAt
|
||||
|
||||
Reference in New Issue
Block a user