SaveGroup

modules:

module SavingGroup {
    import 0x0.LibraCoin;
    import 0x0.LibraAccount;

    resource T {
        balance: R#LibraCoin.T,
        owner: address
    }

    struct ReceivedPaymentEvent {
        payer: address,
        amount: u64
    }

    public create() {
        let t: R#Self.T;
        let zero_balance: R#LibraCoin.T;
        let sender: address; 

        zero_balance = LibraCoin.zero();
        sender = get_txn_sender();

        t = T {
            balance: move(zero_balance),
            owner: move(sender)
        };

        return move(t);
    }

    public deposit(saving_group: address, amount: u64) {
        let t: R#Self.T;
        let t_ref: &R#Self.T;

        let sender: address;

        let deposit_value: u64;
        let coin_before: R#LibraCoin.T;
        let coin_added: R#LibraCoin.T;
        let coin_after: R#LibraCoin.T;

        sender = get_txn_sender();

        deposit_value = LibraCoin.value(&amount);
        assert(copy(deposit_value) > 0, 7);

        coin_added = LibraAccount.withdraw_from_sender(move(amount));

        T { coin_before, owner } = move(saving_group);

        coin_after = LibraCoin.join(move(coin_before), move(coin_added));

        t = T {
            balance: move(coin_after),
            owner: move(owner)
        };

        return move(t);
    }
}

Last updated

Was this helpful?