diff options
Diffstat (limited to 'src/exchangedb/exchange_do_reserve_purse.sql')
-rw-r--r-- | src/exchangedb/exchange_do_reserve_purse.sql | 43 |
1 files changed, 24 insertions, 19 deletions
diff --git a/src/exchangedb/exchange_do_reserve_purse.sql b/src/exchangedb/exchange_do_reserve_purse.sql index a110c85a3..8ae652e69 100644 --- a/src/exchangedb/exchange_do_reserve_purse.sql +++ b/src/exchangedb/exchange_do_reserve_purse.sql @@ -18,10 +18,11 @@ CREATE OR REPLACE FUNCTION exchange_do_reserve_purse( IN in_purse_pub BYTEA, IN in_merge_sig BYTEA, IN in_merge_timestamp INT8, + IN in_reserve_expiration INT8, + IN in_reserve_gc INT8, IN in_reserve_sig BYTEA, IN in_reserve_quota BOOLEAN, - IN in_purse_fee_val INT8, - IN in_purse_fee_frac INT4, + IN in_purse_fee taler_amount, IN in_reserve_pub BYTEA, IN in_wallet_h_payto BYTEA, OUT out_no_funds BOOLEAN, @@ -32,7 +33,7 @@ AS $$ BEGIN -- Store purse merge signature, checks for purse_pub uniqueness -INSERT INTO exchange.purse_merges +INSERT INTO purse_merges (partner_serial_id ,reserve_pub ,purse_pub @@ -52,7 +53,7 @@ THEN -- Note that by checking 'merge_sig', we implicitly check -- identity over everything that the signature covers. PERFORM - FROM exchange.purse_merges + FROM purse_merges WHERE purse_pub=in_purse_pub AND merge_sig=in_merge_sig; IF NOT FOUND @@ -99,31 +100,39 @@ ELSE -- UPDATE reserves balance (and check if balance is enough to pay the fee) IF (out_no_reserve) THEN - IF ( (0 != in_purse_fee_val) OR - (0 != in_purse_fee_frac) ) + IF ( (0 != in_purse_fee.val) OR + (0 != in_purse_fee.frac) ) THEN out_no_funds=TRUE; RETURN; END IF; + INSERT INTO exchange.reserves + (reserve_pub + ,expiration_date + ,gc_date) + VALUES + (in_reserve_pub + ,in_reserve_expiration + ,in_reserve_gc); ELSE UPDATE exchange.reserves SET - current_balance_frac=current_balance_frac-in_purse_fee_frac + current_balance.frac=(current_balance).frac-in_purse_fee.frac + CASE - WHEN current_balance_frac < in_purse_fee_frac + WHEN (current_balance).frac < in_purse_fee.frac THEN 100000000 ELSE 0 END, - current_balance_val=current_balance_val-in_purse_fee_val + current_balance.val=(current_balance).val-in_purse_fee.val - CASE - WHEN current_balance_frac < in_purse_fee_frac + WHEN (current_balance).frac < in_purse_fee.frac THEN 1 ELSE 0 END WHERE reserve_pub=in_reserve_pub - AND ( (current_balance_val > in_purse_fee_val) OR - ( (current_balance_frac >= in_purse_fee_frac) AND - (current_balance_val >= in_purse_fee_val) ) ); + AND ( ((current_balance).val > in_purse_fee.val) OR + ( ((current_balance).frac >= in_purse_fee.frac) AND + ((current_balance).val >= in_purse_fee.val) ) ); IF NOT FOUND THEN out_no_funds=TRUE; @@ -136,7 +145,7 @@ out_no_funds=FALSE; -- Store account merge signature. -INSERT INTO exchange.account_merges +INSERT INTO account_merges (reserve_pub ,reserve_sig ,purse_pub @@ -149,9 +158,5 @@ INSERT INTO exchange.account_merges END $$; -COMMENT ON FUNCTION exchange_do_reserve_purse(BYTEA, BYTEA, INT8, BYTEA, BOOLEAN, INT8, INT4, BYTEA, BYTEA) +COMMENT ON FUNCTION exchange_do_reserve_purse(BYTEA, BYTEA, INT8, INT8, INT8, BYTEA, BOOLEAN, taler_amount, BYTEA, BYTEA) IS 'Create a purse for a reserve.'; - - - - |