Merge branch 'master' of ssh://git.taler.net/exchange
This commit is contained in:
commit
85020a9204
@ -29,7 +29,7 @@ BEGIN
|
|||||||
'(age_withdraw_id BIGINT GENERATED BY DEFAULT AS IDENTITY'
|
'(age_withdraw_id BIGINT GENERATED BY DEFAULT AS IDENTITY'
|
||||||
',h_commitment BYTEA NOT NULL CONSTRAINT h_commitment_length CHECK(LENGTH(h_commitment)=64)'
|
',h_commitment BYTEA NOT NULL CONSTRAINT h_commitment_length CHECK(LENGTH(h_commitment)=64)'
|
||||||
',max_age SMALLINT NOT NULL CONSTRAINT max_age_positive CHECK(max_age>=0)'
|
',max_age SMALLINT NOT NULL CONSTRAINT max_age_positive CHECK(max_age>=0)'
|
||||||
',amount_with_fee TALER_AMOUNT NOT NULL'
|
',amount_with_fee taler_amount NOT NULL'
|
||||||
',reserve_pub BYTEA NOT NULL CONSTRAINT reserve_pub_length CHECK(LENGTH(reserve_pub)=32)'
|
',reserve_pub BYTEA NOT NULL CONSTRAINT reserve_pub_length CHECK(LENGTH(reserve_pub)=32)'
|
||||||
',reserve_sig BYTEA NOT NULL CONSTRAINT reserve_sig_length CHECK(LENGTH(reserve_sig)=64)'
|
',reserve_sig BYTEA NOT NULL CONSTRAINT reserve_sig_length CHECK(LENGTH(reserve_sig)=64)'
|
||||||
',noreveal_index SMALLINT NOT NULL CONSTRAINT noreveal_index_positive CHECK(noreveal_index>=0)'
|
',noreveal_index SMALLINT NOT NULL CONSTRAINT noreveal_index_positive CHECK(noreveal_index>=0)'
|
@ -29,7 +29,6 @@ BEGIN
|
|||||||
',h_payto BYTEA PRIMARY KEY CHECK (LENGTH(h_payto)=32)'
|
',h_payto BYTEA PRIMARY KEY CHECK (LENGTH(h_payto)=32)'
|
||||||
',kyc_prox BYTEA NOT NULL CHECK (LENGTH(kyc_prox)=32)'
|
',kyc_prox BYTEA NOT NULL CHECK (LENGTH(kyc_prox)=32)'
|
||||||
',provider VARCHAR NOT NULL'
|
',provider VARCHAR NOT NULL'
|
||||||
',birthdate VARCHAR'
|
|
||||||
',collection_time INT8 NOT NULL'
|
',collection_time INT8 NOT NULL'
|
||||||
',expiration_time INT8 NOT NULL'
|
',expiration_time INT8 NOT NULL'
|
||||||
',encrypted_attributes BYTEA NOT NULL'
|
',encrypted_attributes BYTEA NOT NULL'
|
@ -19,6 +19,9 @@ CREATE TABLE wire_accounts
|
|||||||
,master_sig BYTEA CHECK (LENGTH(master_sig)=64)
|
,master_sig BYTEA CHECK (LENGTH(master_sig)=64)
|
||||||
,is_active BOOLEAN NOT NULL
|
,is_active BOOLEAN NOT NULL
|
||||||
,last_change INT8 NOT NULL
|
,last_change INT8 NOT NULL
|
||||||
|
,conversion_url VARCHAR DEFAULT (NULL)
|
||||||
|
,debit_restrictions VARCHAR DEFAULT (NULL)
|
||||||
|
,credit_restrictions VARCHAR DEFAULT (NULL)
|
||||||
);
|
);
|
||||||
COMMENT ON TABLE wire_accounts
|
COMMENT ON TABLE wire_accounts
|
||||||
IS 'Table with current and historic bank accounts of the exchange. Entries never expire as we need to remember the last_change column indefinitely.';
|
IS 'Table with current and historic bank accounts of the exchange. Entries never expire as we need to remember the last_change column indefinitely.';
|
||||||
@ -30,5 +33,13 @@ COMMENT ON COLUMN wire_accounts.is_active
|
|||||||
IS 'true if we are currently supporting the use of this account.';
|
IS 'true if we are currently supporting the use of this account.';
|
||||||
COMMENT ON COLUMN wire_accounts.last_change
|
COMMENT ON COLUMN wire_accounts.last_change
|
||||||
IS 'Latest time when active status changed. Used to detect replays of old messages.';
|
IS 'Latest time when active status changed. Used to detect replays of old messages.';
|
||||||
|
COMMENT ON COLUMN wire_accounts.conversion_url
|
||||||
|
IS 'URL of a currency conversion service if conversion is needed when this account is used; NULL if there is no conversion.';
|
||||||
|
COMMENT ON COLUMN wire_accounts.debit_restrictions
|
||||||
|
IS 'JSON array describing restrictions imposed when debiting this account. Empty for no restrictions, NULL if account was migrated from previous database revision or account is disabled.';
|
||||||
|
COMMENT ON COLUMN wire_accounts.credit_restrictions
|
||||||
|
IS 'JSON array describing restrictions imposed when crediting this account. Empty for no restrictions, NULL if account was migrated from previous database revision or account is disabled.';
|
||||||
|
|
||||||
|
|
||||||
-- "wire_accounts" has no sequence because it is a 'mutable' table
|
-- "wire_accounts" has no sequence because it is a 'mutable' table
|
||||||
-- and is of no concern to the auditor
|
-- and is of no concern to the auditor
|
||||||
|
@ -1,44 +0,0 @@
|
|||||||
--
|
|
||||||
-- This file is part of TALER
|
|
||||||
-- Copyright (C) 2023 Taler Systems SA
|
|
||||||
--
|
|
||||||
-- TALER is free software; you can redistribute it and/or modify it under the
|
|
||||||
-- terms of the GNU General Public License as published by the Free Software
|
|
||||||
-- Foundation; either version 3, or (at your option) any later version.
|
|
||||||
--
|
|
||||||
-- TALER is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
||||||
-- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
|
||||||
-- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
||||||
--
|
|
||||||
-- You should have received a copy of the GNU General Public License along with
|
|
||||||
-- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
|
|
||||||
--
|
|
||||||
|
|
||||||
CREATE OR REPLACE FUNCTION master_table_kyc_attributes_V2()
|
|
||||||
RETURNS VOID
|
|
||||||
LANGUAGE plpgsql
|
|
||||||
AS $$
|
|
||||||
DECLARE
|
|
||||||
table_name VARCHAR DEFAULT 'kyc_attributes';
|
|
||||||
BEGIN
|
|
||||||
EXECUTE FORMAT (
|
|
||||||
'ALTER TABLE ' || table_name ||
|
|
||||||
' DROP COLUMN birthdate;'
|
|
||||||
);
|
|
||||||
END $$;
|
|
||||||
|
|
||||||
COMMENT ON FUNCTION master_table_kyc_attributes_V2
|
|
||||||
IS 'Removes birthdate column from the kyc_attributes table';
|
|
||||||
|
|
||||||
INSERT INTO exchange_tables
|
|
||||||
(name
|
|
||||||
,version
|
|
||||||
,action
|
|
||||||
,partitioned
|
|
||||||
,by_range)
|
|
||||||
VALUES
|
|
||||||
('kyc_attributes_V2'
|
|
||||||
,'exchange-0004'
|
|
||||||
,'master'
|
|
||||||
,TRUE
|
|
||||||
,FALSE);
|
|
@ -1,26 +0,0 @@
|
|||||||
--
|
|
||||||
-- This file is part of TALER
|
|
||||||
-- Copyright (C) 2023 Taler Systems SA
|
|
||||||
--
|
|
||||||
-- TALER is free software; you can redistribute it and/or modify it under the
|
|
||||||
-- terms of the GNU General Public License as published by the Free Software
|
|
||||||
-- Foundation; either version 3, or (at your option) any later version.
|
|
||||||
--
|
|
||||||
-- TALER is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
||||||
-- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
|
||||||
-- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
||||||
--
|
|
||||||
-- You should have received a copy of the GNU General Public License along with
|
|
||||||
-- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
|
|
||||||
--
|
|
||||||
|
|
||||||
ALTER TABLE wire_accounts
|
|
||||||
ADD COLUMN conversion_url VARCHAR DEFAULT (NULL),
|
|
||||||
ADD COLUMN debit_restrictions VARCHAR DEFAULT (NULL),
|
|
||||||
ADD COLUMN credit_restrictions VARCHAR DEFAULT (NULL);
|
|
||||||
COMMENT ON COLUMN wire_accounts.conversion_url
|
|
||||||
IS 'URL of a currency conversion service if conversion is needed when this account is used; NULL if there is no conversion.';
|
|
||||||
COMMENT ON COLUMN wire_accounts.debit_restrictions
|
|
||||||
IS 'JSON array describing restrictions imposed when debiting this account. Empty for no restrictions, NULL if account was migrated from previous database revision or account is disabled.';
|
|
||||||
COMMENT ON COLUMN wire_accounts.credit_restrictions
|
|
||||||
IS 'JSON array describing restrictions imposed when crediting this account. Empty for no restrictions, NULL if account was migrated from previous database revision or account is disabled.';
|
|
@ -18,19 +18,13 @@ sqlinputs = \
|
|||||||
exchange_do_*.sql \
|
exchange_do_*.sql \
|
||||||
procedures.sql.in \
|
procedures.sql.in \
|
||||||
0002-*.sql \
|
0002-*.sql \
|
||||||
exchange-0002.sql.in \
|
exchange-0002.sql.in
|
||||||
0003-*.sql \
|
|
||||||
exchange-0003.sql.in \
|
|
||||||
0004-*.sql \
|
|
||||||
exchange-0004.sql.in
|
|
||||||
|
|
||||||
sql_DATA = \
|
sql_DATA = \
|
||||||
benchmark-0001.sql \
|
benchmark-0001.sql \
|
||||||
versioning.sql \
|
versioning.sql \
|
||||||
exchange-0001.sql \
|
exchange-0001.sql \
|
||||||
exchange-0002.sql \
|
exchange-0002.sql \
|
||||||
exchange-0003.sql \
|
|
||||||
exchange-0004.sql \
|
|
||||||
drop.sql \
|
drop.sql \
|
||||||
procedures.sql
|
procedures.sql
|
||||||
|
|
||||||
@ -41,9 +35,7 @@ BUILT_SOURCES = \
|
|||||||
procedures.sql
|
procedures.sql
|
||||||
|
|
||||||
CLEANFILES = \
|
CLEANFILES = \
|
||||||
exchange-0002.sql \
|
exchange-0002.sql
|
||||||
exchange-0003.sql \
|
|
||||||
exchange-0004.sql
|
|
||||||
|
|
||||||
procedures.sql: procedures.sql.in exchange_do_*.sql
|
procedures.sql: procedures.sql.in exchange_do_*.sql
|
||||||
chmod +w $@ || true
|
chmod +w $@ || true
|
||||||
@ -55,16 +47,6 @@ exchange-0002.sql: exchange-0002.sql.in 0002-*.sql
|
|||||||
gcc -E -P -undef - < exchange-0002.sql.in 2>/dev/null | sed -e "s/--.*//" | awk 'NF' - >$@
|
gcc -E -P -undef - < exchange-0002.sql.in 2>/dev/null | sed -e "s/--.*//" | awk 'NF' - >$@
|
||||||
chmod ugo-w $@
|
chmod ugo-w $@
|
||||||
|
|
||||||
exchange-0003.sql: exchange-0003.sql.in 0003-*.sql
|
|
||||||
chmod +w $@ || true
|
|
||||||
gcc -E -P -undef - < exchange-0003.sql.in 2>/dev/null | sed -e "s/--.*//" | awk 'NF' - >$@
|
|
||||||
chmod ugo-w $@
|
|
||||||
|
|
||||||
exchange-0004.sql: exchange-0004.sql.in 0004-*.sql
|
|
||||||
chmod +w $@ || true
|
|
||||||
gcc -E -P -undef - < exchange-0004.sql.in 2>/dev/null | sed -e "s/--.*//" | awk 'NF' - >$@
|
|
||||||
chmod ugo-w $@
|
|
||||||
|
|
||||||
check_SCRIPTS = \
|
check_SCRIPTS = \
|
||||||
test_idempotency.sh
|
test_idempotency.sh
|
||||||
|
|
||||||
|
@ -141,22 +141,10 @@ COMMENT ON FUNCTION comment_partitioned_column
|
|||||||
-- Taler amounts and helper functiosn
|
-- Taler amounts and helper functiosn
|
||||||
-------------------------------------------------------------
|
-------------------------------------------------------------
|
||||||
|
|
||||||
DO $$
|
|
||||||
BEGIN
|
|
||||||
CREATE TYPE TALER_AMOUNT
|
|
||||||
AS (val INT8
|
|
||||||
,frac INT4);
|
|
||||||
|
|
||||||
COMMENT ON TYPE TALER_AMOUNT
|
|
||||||
IS 'Type to store a TALER-amount as (val, frac) pair.';
|
|
||||||
EXCEPTION
|
|
||||||
WHEN duplicate_object THEN null;
|
|
||||||
END
|
|
||||||
$$;
|
|
||||||
|
|
||||||
CREATE PROCEDURE amount_normalize(
|
CREATE PROCEDURE amount_normalize(
|
||||||
IN amount TALER_AMOUNT
|
IN amount taler_amount
|
||||||
,OUT normalized TALER_AMOUNT
|
,OUT normalized taler_amount
|
||||||
)
|
)
|
||||||
LANGUAGE plpgsql
|
LANGUAGE plpgsql
|
||||||
AS $$
|
AS $$
|
||||||
@ -169,9 +157,9 @@ COMMENT ON PROCEDURE amount_normalize
|
|||||||
IS 'Returns the normalized amount by adding to the .val the value of (.frac / 100000000) and removing the modulus 100000000 from .frac.';
|
IS 'Returns the normalized amount by adding to the .val the value of (.frac / 100000000) and removing the modulus 100000000 from .frac.';
|
||||||
|
|
||||||
CREATE PROCEDURE amount_add(
|
CREATE PROCEDURE amount_add(
|
||||||
IN a TALER_AMOUNT
|
IN a taler_amount
|
||||||
,IN b TALER_AMOUNT
|
,IN b taler_amount
|
||||||
,OUT sum TALER_AMOUNT
|
,OUT sum taler_amount
|
||||||
)
|
)
|
||||||
LANGUAGE plpgsql
|
LANGUAGE plpgsql
|
||||||
AS $$
|
AS $$
|
||||||
@ -189,9 +177,9 @@ COMMENT ON PROCEDURE amount_add
|
|||||||
IS 'Returns the normalized sum of two amounts. It raises an exception when the resulting .val is larger than 2^52';
|
IS 'Returns the normalized sum of two amounts. It raises an exception when the resulting .val is larger than 2^52';
|
||||||
|
|
||||||
CREATE FUNCTION amount_left_minus_right(
|
CREATE FUNCTION amount_left_minus_right(
|
||||||
IN l TALER_AMOUNT
|
IN l taler_amount
|
||||||
,IN r TALER_AMOUNT
|
,IN r taler_amount
|
||||||
,OUT diff TALER_AMOUNT
|
,OUT diff taler_amount
|
||||||
,OUT ok BOOLEAN
|
,OUT ok BOOLEAN
|
||||||
)
|
)
|
||||||
LANGUAGE plpgsql
|
LANGUAGE plpgsql
|
||||||
|
@ -19,6 +19,21 @@ BEGIN;
|
|||||||
SELECT _v.register_patch('exchange-0002', NULL, NULL);
|
SELECT _v.register_patch('exchange-0002', NULL, NULL);
|
||||||
SET search_path TO exchange;
|
SET search_path TO exchange;
|
||||||
|
|
||||||
|
CREATE TYPE taler_amount
|
||||||
|
AS
|
||||||
|
(val INT8
|
||||||
|
,frac INT4);
|
||||||
|
COMMENT ON TYPE taler_amount
|
||||||
|
IS 'Stores an amount, fraction is in units of 1/100000000 of the base value';
|
||||||
|
|
||||||
|
CREATE TYPE exchange_do_array_reserve_insert_return_type
|
||||||
|
AS
|
||||||
|
(transaction_duplicate BOOLEAN
|
||||||
|
,ruuid INT8
|
||||||
|
);
|
||||||
|
COMMENT ON TYPE exchange_do_array_reserve_insert_return_type
|
||||||
|
IS 'Return type for exchange_do_array_reserves_insert() stored procedure';
|
||||||
|
|
||||||
#include "0002-denominations.sql"
|
#include "0002-denominations.sql"
|
||||||
#include "0002-denomination_revocations.sql"
|
#include "0002-denomination_revocations.sql"
|
||||||
#include "0002-wire_targets.sql"
|
#include "0002-wire_targets.sql"
|
||||||
@ -71,5 +86,14 @@ SET search_path TO exchange;
|
|||||||
#include "0002-revolving_work_shards.sql"
|
#include "0002-revolving_work_shards.sql"
|
||||||
#include "0002-partners.sql"
|
#include "0002-partners.sql"
|
||||||
#include "0002-partner_accounts.sql"
|
#include "0002-partner_accounts.sql"
|
||||||
|
#include "0002-purse_actions.sql"
|
||||||
|
#include "0002-purse_deletion.sql"
|
||||||
|
#include "0002-kyc_attributes.sql"
|
||||||
|
#include "0002-aml_status.sql"
|
||||||
|
#include "0002-aml_staff.sql"
|
||||||
|
#include "0002-aml_history.sql"
|
||||||
|
#include "0002-age_withdraw.sql"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
COMMIT;
|
COMMIT;
|
||||||
|
@ -19,13 +19,6 @@ BEGIN;
|
|||||||
SELECT _v.register_patch('exchange-0003', NULL, NULL);
|
SELECT _v.register_patch('exchange-0003', NULL, NULL);
|
||||||
SET search_path TO exchange;
|
SET search_path TO exchange;
|
||||||
|
|
||||||
#include "0003-purse_actions.sql"
|
|
||||||
#include "0003-purse_deletion.sql"
|
|
||||||
#include "0003-kyc_attributes.sql"
|
|
||||||
#include "0003-aml_status.sql"
|
|
||||||
#include "0003-aml_staff.sql"
|
|
||||||
#include "0003-aml_history.sql"
|
|
||||||
#include "0003-age_withdraw.sql"
|
|
||||||
|
|
||||||
|
|
||||||
COMMIT;
|
COMMIT;
|
||||||
|
@ -1,25 +0,0 @@
|
|||||||
--
|
|
||||||
-- This file is part of TALER
|
|
||||||
-- Copyright (C) 2023 Taler Systems SA
|
|
||||||
--
|
|
||||||
-- TALER is free software; you can redistribute it and/or modify it under the
|
|
||||||
-- terms of the GNU General Public License as published by the Free Software
|
|
||||||
-- Foundation; either version 3, or (at your option) any later version.
|
|
||||||
--
|
|
||||||
-- TALER is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
||||||
-- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
|
||||||
-- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
||||||
--
|
|
||||||
-- You should have received a copy of the GNU General Public License along with
|
|
||||||
-- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
|
|
||||||
--
|
|
||||||
|
|
||||||
BEGIN;
|
|
||||||
|
|
||||||
SELECT _v.register_patch('exchange-0004', NULL, NULL);
|
|
||||||
SET search_path TO exchange;
|
|
||||||
|
|
||||||
#include "0004-kyc_attributes.sql"
|
|
||||||
#include "0004-wire_accounts.sql"
|
|
||||||
|
|
||||||
COMMIT;
|
|
@ -16,7 +16,7 @@
|
|||||||
-- @author Özgür Kesim
|
-- @author Özgür Kesim
|
||||||
|
|
||||||
CREATE OR REPLACE FUNCTION exchange_do_age_withdraw(
|
CREATE OR REPLACE FUNCTION exchange_do_age_withdraw(
|
||||||
IN amount_with_fee TALER_AMOUNT,
|
IN amount_with_fee taler_amount,
|
||||||
IN rpub BYTEA,
|
IN rpub BYTEA,
|
||||||
IN rsig BYTEA,
|
IN rsig BYTEA,
|
||||||
IN now INT8,
|
IN now INT8,
|
||||||
@ -38,8 +38,8 @@ AS $$
|
|||||||
DECLARE
|
DECLARE
|
||||||
reserve_gc INT8;
|
reserve_gc INT8;
|
||||||
difference RECORD;
|
difference RECORD;
|
||||||
balance TALER_AMOUNT;
|
balance taler_amount;
|
||||||
new_balance TALER_AMOUNT;
|
new_balance taler_amount;
|
||||||
not_before date;
|
not_before date;
|
||||||
earliest_date date;
|
earliest_date date;
|
||||||
BEGIN
|
BEGIN
|
||||||
@ -104,9 +104,9 @@ required_age=0;
|
|||||||
|
|
||||||
-- Check reserve balance is sufficient.
|
-- Check reserve balance is sufficient.
|
||||||
SELECT *
|
SELECT *
|
||||||
INTO
|
INTO
|
||||||
difference
|
difference
|
||||||
FROM
|
FROM
|
||||||
amount_left_minus_right(
|
amount_left_minus_right(
|
||||||
balance
|
balance
|
||||||
,amount_with_fee);
|
,amount_with_fee);
|
||||||
@ -114,7 +114,7 @@ FROM
|
|||||||
balance_ok = difference.ok;
|
balance_ok = difference.ok;
|
||||||
|
|
||||||
IF NOT balance_ok
|
IF NOT balance_ok
|
||||||
THEN
|
THEN
|
||||||
RETURN;
|
RETURN;
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
@ -166,6 +166,5 @@ END IF;
|
|||||||
|
|
||||||
END $$;
|
END $$;
|
||||||
|
|
||||||
COMMENT ON FUNCTION exchange_do_age_withdraw(TALER_AMOUNT, BYTEA, BYTEA, INT8, INT8, BYTEA, INT2, INT2, BYTEA[], INT8[], BYTEA[])
|
COMMENT ON FUNCTION exchange_do_age_withdraw(taler_amount, BYTEA, BYTEA, INT8, INT8, BYTEA, INT2, INT2, BYTEA[], INT8[], BYTEA[])
|
||||||
IS 'Checks whether the reserve has sufficient balance for an age-withdraw operation (or the request is repeated and was previously approved) and that age requirements are met. If so updates the database with the result. Includes storing the blinded planchets and denomination signatures, or signaling conflict';
|
IS 'Checks whether the reserve has sufficient balance for an age-withdraw operation (or the request is repeated and was previously approved) and that age requirements are met. If so updates the database with the result. Includes storing the blinded planchets and denomination signatures, or signaling conflict';
|
||||||
|
|
||||||
|
@ -966,21 +966,6 @@ END $$;
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
DO $$
|
|
||||||
BEGIN
|
|
||||||
CREATE TYPE exchange_do_array_reserve_insert_return_type
|
|
||||||
AS
|
|
||||||
(transaction_duplicate BOOLEAN
|
|
||||||
,ruuid INT8);
|
|
||||||
EXCEPTION
|
|
||||||
WHEN duplicate_object THEN null;
|
|
||||||
END
|
|
||||||
$$;
|
|
||||||
|
|
||||||
CREATE OR REPLACE FUNCTION exchange_do_array_reserves_insert(
|
CREATE OR REPLACE FUNCTION exchange_do_array_reserves_insert(
|
||||||
IN in_gc_date INT8,
|
IN in_gc_date INT8,
|
||||||
IN in_reserve_expiration INT8,
|
IN in_reserve_expiration INT8,
|
||||||
@ -1019,7 +1004,7 @@ BEGIN
|
|||||||
,UNNEST (ina_payto_uri) AS payto_uri
|
,UNNEST (ina_payto_uri) AS payto_uri
|
||||||
ON CONFLICT DO NOTHING;
|
ON CONFLICT DO NOTHING;
|
||||||
|
|
||||||
FOR i IN
|
FOR i IN
|
||||||
SELECT
|
SELECT
|
||||||
reserve_pub
|
reserve_pub
|
||||||
,wire_ref
|
,wire_ref
|
||||||
|
Loading…
Reference in New Issue
Block a user