Source file frozen_deposits_storage.ml
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
let get ctxt delegate =
let open Lwt_result_syntax in
let+ frozen_deposits_opt =
Storage.Contract.Frozen_deposits.find ctxt delegate
in
Option.value ~default:Deposits_repr.zero frozen_deposits_opt
let update_balance ctxt delegate f amount =
let open Lwt_result_syntax in
let delegate_contract = Contract_repr.Implicit delegate in
let* frozen_deposits = get ctxt delegate_contract in
let*? new_amount = f frozen_deposits.current_amount amount in
let*! ctxt =
Storage.Contract.Frozen_deposits.add
ctxt
delegate_contract
{frozen_deposits with current_amount = new_amount}
in
return ctxt
let credit_only_call_from_token ctxt staker amount =
let open Lwt_result_syntax in
let delegate = Stake_repr.staker_delegate staker in
let* ctxt = update_balance ctxt delegate Tez_repr.( +? ) amount in
Stake_storage.add_frozen_stake ctxt staker amount
let spend_only_call_from_token ctxt staker amount =
let open Lwt_result_syntax in
let delegate = Stake_repr.staker_delegate staker in
let* ctxt = update_balance ctxt delegate Tez_repr.( -? ) amount in
Stake_storage.remove_frozen_stake ctxt staker amount
let update_initial_amount ctxt delegate_contract deposits_cap =
let open Lwt_result_syntax in
let* frozen_deposits = get ctxt delegate_contract in
let*! ctxt =
Storage.Contract.Frozen_deposits.add
ctxt
delegate_contract
{frozen_deposits with initial_amount = deposits_cap}
in
return ctxt