summaryrefslogtreecommitdiff
path: root/src/exchangedb/exchange-0001-part.sql
diff options
context:
space:
mode:
Diffstat (limited to 'src/exchangedb/exchange-0001-part.sql')
-rw-r--r--src/exchangedb/exchange-0001-part.sql66
1 files changed, 66 insertions, 0 deletions
diff --git a/src/exchangedb/exchange-0001-part.sql b/src/exchangedb/exchange-0001-part.sql
index 52a16cd9a..0b99e25f9 100644
--- a/src/exchangedb/exchange-0001-part.sql
+++ b/src/exchangedb/exchange-0001-part.sql
@@ -3092,6 +3092,8 @@ CREATE OR REPLACE FUNCTION exchange_do_purse_merge(
IN in_reserve_pub BYTEA,
OUT out_no_partner BOOLEAN,
OUT out_no_balance BOOLEAN,
+ OUT out_no_kyc BOOLEAN,
+ OUT out_no_reserve BOOLEAN,
OUT out_conflict BOOLEAN)
LANGUAGE plpgsql
AS $$
@@ -3121,6 +3123,8 @@ ELSE
THEN
out_no_partner=TRUE;
out_conflict=FALSE;
+ out_no_kyc=FALSE;
+ out_no_reserve=FALSE;
RETURN;
END IF;
END IF;
@@ -3144,6 +3148,8 @@ IF NOT FOUND
THEN
out_no_balance=TRUE;
out_conflict=FALSE;
+ out_no_kyc=FALSE;
+ out_no_reserve=FALSE;
RETURN;
END IF;
out_no_balance=FALSE;
@@ -3176,17 +3182,49 @@ THEN
THEN
-- Purse was merged, but to some other reserve. Not allowed.
out_conflict=TRUE;
+ out_no_kyc=FALSE;
+ out_no_reserve=FALSE;
RETURN;
END IF;
-- "success"
out_conflict=FALSE;
+ out_no_kyc=FALSE;
+ out_no_reserve=FALSE;
RETURN;
END IF;
out_conflict=FALSE;
ASSERT NOT my_finished, 'internal invariant failed';
+IF in_partner_url IS NULL
+THEN
+ -- Need to do KYC check.
+ SELECT NOT kyc_passed
+ INTO out_no_kyc
+ FROM reserves
+ WHERE reserve_pub=in_reserve_pub;
+
+ IF NOT FOUND
+ THEN
+ out_no_kyc=TRUE;
+ out_no_reserve=TRUE;
+ RETURN;
+ END IF;
+ out_no_reserve=FALSE;
+
+ IF (out_no_kyc)
+ THEN
+ RETURN;
+ END IF;
+ELSE
+ -- KYC is not our responsibility
+ out_no_reserve=FALSE;
+ out_no_kyc=FALSE;
+END IF;
+
+
+
-- Store account merge signature.
INSERT INTO account_merges
(reserve_pub
@@ -3248,6 +3286,8 @@ CREATE OR REPLACE FUNCTION exchange_do_reserve_purse(
IN in_purse_fee_frac INT4,
IN in_reserve_pub BYTEA,
OUT out_no_funds BOOLEAN,
+ OUT out_no_kyc BOOLEAN,
+ OUT out_no_reserve BOOLEAN,
OUT out_conflict BOOLEAN)
LANGUAGE plpgsql
AS $$
@@ -3281,16 +3321,40 @@ THEN
THEN
-- Purse was merged, but to some other reserve. Not allowed.
out_conflict=TRUE;
+ out_no_kyc=FALSE;
+ out_no_reserve=FALSE;
+ out_no_funds=FALSE;
RETURN;
END IF;
-- "success"
out_conflict=FALSE;
out_no_funds=FALSE;
+ out_no_kyc=FALSE;
+ out_no_reserve=FALSE;
RETURN;
END IF;
out_conflict=FALSE;
+SELECT NOT kyc_passed
+ INTO out_no_kyc
+ FROM reserves
+ WHERE reserve_pub=in_reserve_pub;
+
+IF NOT FOUND
+THEN
+ out_no_kyc=TRUE;
+ out_no_reserve=TRUE;
+ out_no_funds=TRUE;
+ RETURN;
+END IF;
+out_no_reserve=FALSE;
+
+IF (out_no_kyc)
+THEN
+ out_no_funds=FALSE;
+ RETURN;
+END IF;
IF (in_reserve_quota)
THEN
@@ -3303,6 +3367,7 @@ THEN
IF NOT FOUND
THEN
out_no_funds=TRUE;
+ RETURN;
END IF;
ELSE
-- UPDATE reserves balance (and check if balance is enough to pay the fee)
@@ -3328,6 +3393,7 @@ ELSE
IF NOT FOUND
THEN
out_no_funds=TRUE;
+ RETURN;
END IF;
END IF;