Skip to content

Commit ebf065b

Browse files
codilionRosina O'CrescendoReginald Urchin
authored
[donor-voice] add checks on accounts for propose payment (#395)
Co-authored-by: Rosina O'Crescendo <rosina_o'[email protected]> Co-authored-by: Reginald Urchin <[email protected]>
1 parent 536a93b commit ebf065b

File tree

3 files changed

+18
-10
lines changed

3 files changed

+18
-10
lines changed

framework/libra-framework/sources/ol_sources/community_wallet_advance.move

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -189,8 +189,11 @@ module ol_framework::community_wallet_advance {
189189
#[view]
190190
/// check if amount withdrawn will be below credit limit
191191
public fun can_withdraw_amount(dv_account: address, amount: u64): bool acquires Advances {
192-
assert!(amount> 0, error::invalid_argument(EAMOUNT_IS_ZERO));
193-
assert!(!is_delinquent(dv_account), error::invalid_state(ELOAN_OVERDUE));
192+
assert!(amount > 0, error::invalid_argument(EAMOUNT_IS_ZERO));
193+
// TODO: delinquent checks requires a payment history
194+
// and ability to service the loan.
195+
// for v8 we depend on total credit available
196+
// assert!(!is_delinquent(dv_account), error::invalid_state(ELOAN_OVERDUE));
194197
let available = total_credit_available(dv_account);
195198
available > amount
196199
}

framework/libra-framework/sources/ol_sources/donor_voice_txs.move

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -229,17 +229,22 @@ module ol_framework::donor_voice_txs {
229229
/// and the limits must not have been exceeded.
230230

231231
/// Returns the GUID of the transfer.
232-
public(friend) fun propose_payment(
232+
fun propose_payment(
233233
sender: &signer,
234234
multisig_address: address,
235235
payee: address,
236236
value: u64,
237237
description: vector<u8>,
238238
): guid::ID acquires TxSchedule {
239+
// check the CW has been reauthorized
240+
donor_voice_reauth::assert_authorized(multisig_address);
241+
// check the multisig admin is initialized
242+
reauthorization::assert_v8_authorized(signer::address_of(sender));
243+
// check the payee is initialized
244+
reauthorization::assert_v8_authorized(payee);
239245

240-
assert!(!ol_features_constants::is_governance_mode_enabled(), error::invalid_state(EGOVERNANCE_MODE));
241246

242-
donor_voice_reauth::assert_authorized(multisig_address);
247+
assert!(!ol_features_constants::is_governance_mode_enabled(), error::invalid_state(EGOVERNANCE_MODE));
243248

244249

245250
// Commit note: don't abort on not slow wallet, in cases of unlocked advance

framework/libra-framework/sources/ol_sources/tests/donor_voice.test.move

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -463,7 +463,7 @@ module ol_framework::test_donor_voice {
463463

464464
donor_voice_reauth::test_set_authorized(root, donor_voice_address);
465465

466-
let uid = donor_voice_txs::propose_payment(bob, donor_voice_address, signer::address_of(marlon_rando), 100, b"thanks marlon");
466+
let uid = donor_voice_txs::test_propose_payment(bob, donor_voice_address, signer::address_of(marlon_rando), 100, b"thanks marlon");
467467
let (found, idx, status_enum, completed) = donor_voice_txs::get_multisig_proposal_state(donor_voice_address, &uid);
468468
assert!(found, 7357004);
469469
assert!(idx == 0, 7357005);
@@ -596,7 +596,7 @@ module ol_framework::test_donor_voice {
596596

597597
slow_wallet::user_set_slow(marlon_rando);
598598

599-
let first_uid_bob = donor_voice_txs::propose_payment(bob, donor_voice_address, signer::address_of(marlon_rando), marlon_pay_one, b"thanks marlon");
599+
let first_uid_bob = donor_voice_txs::test_propose_payment(bob, donor_voice_address, signer::address_of(marlon_rando), marlon_pay_one, b"thanks marlon");
600600
let (found, idx, status_enum, completed) = donor_voice_txs::get_multisig_proposal_state(donor_voice_address, &first_uid_bob);
601601
assert!(found, 7357004);
602602
assert!(idx == 0, 7357005);
@@ -620,7 +620,7 @@ module ol_framework::test_donor_voice {
620620
let list = donor_voice_txs::find_by_deadline(donor_voice_address, 3);
621621
assert!(vector::contains(&list, &first_uid_bob), 73570014);
622622

623-
let second_uid_bob = donor_voice_txs::propose_payment(bob, donor_voice_address, signer::address_of(marlon_rando), marlon_pay_two, b"thanks again!!!");
623+
let second_uid_bob = donor_voice_txs::test_propose_payment(bob, donor_voice_address, signer::address_of(marlon_rando), marlon_pay_two, b"thanks again!!!");
624624
let (found, idx, status_enum, completed) = donor_voice_txs::get_multisig_proposal_state(donor_voice_address, &second_uid_bob);
625625
assert!(found, 73570015);
626626
assert!(idx == 0, 73570016); // since the above payment was approved, now
@@ -727,7 +727,7 @@ module ol_framework::test_donor_voice {
727727

728728
slow_wallet::user_set_slow(marlon_rando);
729729

730-
let uid = donor_voice_txs::propose_payment(bob, donor_voice_address, signer::address_of(marlon_rando), marlon_pay_one, b"thanks marlon");
730+
let uid = donor_voice_txs::test_propose_payment(bob, donor_voice_address, signer::address_of(marlon_rando), marlon_pay_one, b"thanks marlon");
731731
let (found, idx, status_enum, completed) = donor_voice_txs::get_multisig_proposal_state(donor_voice_address, &uid);
732732
assert!(found, 7357004);
733733
assert!(idx == 0, 7357005);
@@ -755,7 +755,7 @@ module ol_framework::test_donor_voice {
755755
// one epoch goes by and then new payment to marlon
756756
mock::trigger_epoch(root); // into epoch 1
757757

758-
let second_uid_bob = donor_voice_txs::propose_payment(bob, donor_voice_address, signer::address_of(marlon_rando), marlon_pay_two, b"thanks again!!!");
758+
let second_uid_bob = donor_voice_txs::test_propose_payment(bob, donor_voice_address, signer::address_of(marlon_rando), marlon_pay_two, b"thanks again!!!");
759759
let (found, idx, status_enum, completed) = donor_voice_txs::get_multisig_proposal_state(donor_voice_address, &second_uid_bob);
760760
assert!(found, 73570015);
761761
assert!(idx == 0, 73570016); // now pending is empty, should be first

0 commit comments

Comments
 (0)