1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
//                              Næ§@@@ÑÉ©
//                        æ@@@@@@@@@@@@@@@@@@
//                    Ñ@@@@?.?@@@@@@@@@@@@@@@@@@@N
//                 ¶@@@@@?^%@@.=@@@@@@@@@@@@@@@@@@@@
//               N@@@@@@@?^@@@»^@@@@@@@@@@@@@@@@@@@@@@
//               @@@@@@@@?^@@@».............?@@@@@@@@@É
//              Ñ@@@@@@@@?^@@@@@@@@@@@@@@@@@@'?@@@@@@@@Ñ
//              @@@@@@@@@?^@@@»..............»@@@@@@@@@@
//              @@@@@@@@@?^@@@»^@@@@@@@@@@@@@@@@@@@@@@@@
//              @@@@@@@@@?^ë@@&.@@@@@@@@@@@@@@@@@@@@@@@@
//               @@@@@@@@?^´@@@o.%@@@@@@@@@@@@@@@@@@@@©
//                @@@@@@@?.´@@@@@ë.........*.±@@@@@@@æ
//                 @@@@@@@@?´.I@@@@@@@@@@@@@@.&@@@@@N
//                  N@@@@@@@@@@ë.*=????????=?@@@@@Ñ
//                    @@@@@@@@@@@@@@@@@@@@@@@@@@@¶
//                        É@@@@@@@@@@@@@@@@Ѷ
//                             Næ§@@@ÑÉ©

// Copyright 2020 Chris D'Costa
// This file is part of Totem Live Accounting.
// Authors:
// - Félix Daudré-Vignier   email: felix@totemaccounting.com
// - Chris D'Costa          email: chris.dcosta@totemaccounting.com

// Totem is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.

// Totem is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.

// You should have received a copy of the GNU General Public License
// along with Totem.  If not, see <http://www.gnu.org/licenses/>.

use crate::LedgerBalance;
use frame_support::{dispatch::EncodeLike, pallet_prelude::*};
use scale_info::TypeInfo;
use sp_std::prelude::*;

pub trait Encumbrance<AccountId, Hash, BlockNumber, CoinAmount> {
    fn prefunding_for(
        who: AccountId,
        recipient: AccountId,
        amount: CoinAmount,
        deadline: BlockNumber,
        ref_hash: Hash,
        uid: Hash,
    ) -> DispatchResultWithPostInfo;

    fn send_simple_invoice(
        who: AccountId,
        recipient: AccountId,
        amount: LedgerBalance,
        ref_hash: Hash,
        uid: Hash,
    ) -> DispatchResultWithPostInfo;

    fn settle_prefunded_invoice(
        who: AccountId,
        ref_hash: Hash,
        uid: Hash,
    ) -> DispatchResultWithPostInfo;

    fn set_release_state(
        who: AccountId,
        o_lock: LockStatus,
        ref_hash: Hash,
        uid: Hash,
    ) -> DispatchResultWithPostInfo;

    fn unlock_funds_for_owner(
        who: AccountId,
        ref_hash: Hash,
        uid: Hash,
    ) -> DispatchResultWithPostInfo;

    fn check_ref_owner(who: AccountId, ref_hash: Hash) -> bool;

    fn check_ref_beneficiary(who: AccountId, ref_hash: Hash) -> bool;
}

#[derive(Clone, Copy, Debug, Decode, Encode, PartialEq, Eq, TypeInfo)]
pub enum LockStatus {
    Unlocked = 0,
    Locked = 1,
}

/// Generic Status for whatever the HashReference refers.
//TODO
pub type Status = u16;

// Implementations

impl EncodeLike<LockStatus> for bool {}