Skip to content

Commit

Permalink
Verify Voucher locks in VoucherValidUnlocked
Browse files Browse the repository at this point in the history
  • Loading branch information
ta0li committed Oct 21, 2021
1 parent 795d911 commit 2ba17df
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 8 deletions.
1 change: 1 addition & 0 deletions pkg/paychmgr/manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -339,6 +339,7 @@ func (pm *Manager) trackInboundChannel(ctx context.Context, ch address.Address)
return pm.store.TrackChannel(stateCi)
}

// TODO: secret vs proof doesn't make sense, there is only one, not two
func (pm *Manager) SubmitVoucher(ctx context.Context, ch address.Address, sv *paych.SignedVoucher, secret []byte, proof []byte) (cid.Cid, error) {
if len(proof) > 0 {
return cid.Undef, errProofNotSupported
Expand Down
14 changes: 14 additions & 0 deletions pkg/paychmgr/paych.go
Original file line number Diff line number Diff line change
Expand Up @@ -183,6 +183,20 @@ func (ca *channelAccessor) checkVoucherValidUnlocked(ctx context.Context, ch add
return nil, xerrors.Errorf("voucher ChannelAddr doesn't match channel address, got %s, expected %s", sv.ChannelAddr, ch)
}

// check voucher is unlocked
if sv.Extra != nil {
return nil, xerrors.Errorf("voucher is Message Locked")
}
if sv.TimeLockMax != 0 {
return nil, xerrors.Errorf("voucher is Max Time Locked")
}
if sv.TimeLockMin != 0 {
return nil, xerrors.Errorf("voucher is Min Time Locked")
}
if len(sv.SecretPreimage) != 0 {
return nil, xerrors.Errorf("voucher is Hash Locked")
}

// Load payment channel actor state
act, pchState, err := ca.sa.loadPaychActorState(ctx, ch)
if err != nil {
Expand Down
13 changes: 5 additions & 8 deletions pkg/paychmgr/paych_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -606,7 +606,7 @@ func TestCheckSpendable(t *testing.T) {
voucherLane := uint64(1)
nonce := uint64(1)
voucherAmount := big.NewInt(1)
voucher := createTestVoucherWithExtra(t, s.ch, voucherLane, nonce, voucherAmount, s.fromKeyPrivate)
voucher := createTestVoucher(t, s.ch, voucherLane, nonce, voucherAmount, s.fromKeyPrivate)

// Add voucher
minDelta := big.NewInt(0)
Expand Down Expand Up @@ -671,7 +671,7 @@ func TestSubmitVoucher(t *testing.T) {
voucherLane := uint64(1)
nonce := uint64(1)
voucherAmount := big.NewInt(1)
voucher := createTestVoucherWithExtra(t, s.ch, voucherLane, nonce, voucherAmount, s.fromKeyPrivate)
voucher := createTestVoucher(t, s.ch, voucherLane, nonce, voucherAmount, s.fromKeyPrivate)

// Add voucher
minDelta := big.NewInt(0)
Expand All @@ -688,21 +688,18 @@ func TestSubmitVoucher(t *testing.T) {
var p paych2.UpdateChannelStateParams
err = p.UnmarshalCBOR(bytes.NewReader(msg.Message.Params))
require.NoError(t, err)
require.Equal(t, secret, p.Secret)

// Submit a voucher without first adding it
nonce++
voucherAmount = big.NewInt(3)
secret3 := []byte("secret2")
voucher = createTestVoucherWithExtra(t, s.ch, voucherLane, nonce, voucherAmount, s.fromKeyPrivate)
submitCid, err = s.mgr.SubmitVoucher(ctx, s.ch, voucher, secret3, nil)
voucher = createTestVoucher(t, s.ch, voucherLane, nonce, voucherAmount, s.fromKeyPrivate)
submitCid, err = s.mgr.SubmitVoucher(ctx, s.ch, voucher, nil, nil)
require.NoError(t, err)

msg = s.mock.pushedMessages(submitCid)
var p3 paych2.UpdateChannelStateParams
err = p3.UnmarshalCBOR(bytes.NewReader(msg.Message.Params))
require.NoError(t, err)
require.Equal(t, secret3, p3.Secret)

// Verify that vouchers are marked as submitted
vis, err := s.mgr.ListVouchers(ctx, s.ch)
Expand All @@ -714,7 +711,7 @@ func TestSubmitVoucher(t *testing.T) {
}

// Attempting to submit the same voucher again should fail
_, err = s.mgr.SubmitVoucher(ctx, s.ch, voucher, secret3, nil)
_, err = s.mgr.SubmitVoucher(ctx, s.ch, voucher, nil, nil)
require.Error(t, err)
}

Expand Down

0 comments on commit 2ba17df

Please sign in to comment.