summaryrefslogtreecommitdiff
path: root/design-documents/013-peer-to-peer-payments.rst
diff options
context:
space:
mode:
Diffstat (limited to 'design-documents/013-peer-to-peer-payments.rst')
-rw-r--r--design-documents/013-peer-to-peer-payments.rst73
1 files changed, 59 insertions, 14 deletions
diff --git a/design-documents/013-peer-to-peer-payments.rst b/design-documents/013-peer-to-peer-payments.rst
index 3a998c78..5e786203 100644
--- a/design-documents/013-peer-to-peer-payments.rst
+++ b/design-documents/013-peer-to-peer-payments.rst
@@ -655,29 +655,44 @@ database.)
--
CREATE TABLE IF NOT EXISTS kyc_requests
(kyc_request_serial_id BIGSERIAL UNIQUE
- ,reserve_pub BYTEA NOT NULL REFERENCES reserves (reserve_pub) ON DELETE CASCADE
+ ,reserve_uuid INT8 NOT NULL REFERENCES reserves (reserve_uuid) ON DELETE CASCADE
,kyc_date INT8 NOT NULL
+ ,kyc_retry INT8 NOT NULL
,kyc_fee_val INT8 NOT NULL
,kyc_fee_frac INT4 NOT NULL
- ,payto_uri TEXT NOT NULL
,reserve_sig BYTEA NOT NULL CHECK (LENGTH(reserve_sig)=64))
- ,PRIMARY KEY (reserve_pub, kyc_date)
+ ,kyc_id TEXT NOT NULL
+ ,PRIMARY KEY (reserve_uuid, kyc_date)
);
+ COMMENT ON COLUMN kyc_requests.reserve_uuid
+ IS 'Reserve for which the KYC request was triggered.';
+ COMMENT ON COLUMN kyc_requests.reserve_sig
+ IS 'Signature affirming the KYC request';
+ COMMENT ON COLUMN kyc_requests.kyc_fee_val
+ IS 'Amount paid by the reserve for the KYC process.';
+ COMMENT ON COLUMN kyc_requests.kyc_date
+ IS 'When was the KYC process originally initiated.';
+ COMMENT ON COLUMN kyc_requests.kyc_retry
+ IS 'Timestamp when we should next query the KYC backend for the KYC status. The maximum possible numeric value indicates that we do not need to ever check the status of this KYC process again.';
+ COMMENT ON COLUMN kyc_requests.kyc_id
+ IS 'ID of the KYC process, used to compute the URL returned to the client as well as for the exchange to check if the KYC has completed. Format depends on the KYC process of the bank.';
+ --
CREATE TABLE IF NOT EXISTS mergers
(merge_request_serial_id BIGSERIAL UNIQUE
- ,reserve_pub BYTEA NOT NULL REFERENCES reserves (reserve_pub) ON DELETE CASCADE
+ ,reserve_uuid BYTEA NOT NULL REFERENCES reserves (reserve_uuid) ON DELETE CASCADE
,purse_url TEXT NOT NULL,
,purse_pub BYTEA NOT NULL CHECK (LENGTH(purse_pub)=32),
,reserve_sig BYTEA NOT NULL CHECK (LENGTH(reserve_sig)=64))
- ,purse_sig BYTEA NOT NULL CHECK (LENGTH(reserve_sig)=64))
+ ,purse_sig BYTEA NOT NULL CHECK (LENGTH(purse_sig)=64))
,merge_timestamp INT8 NOT NULL
,purse_expiration INT8 NOT NULL
,h_contract_terms BYTEA NOT NULL CHECK (LENGTH(h_contract_terms)=64))
- ,h_wire BYTEA NOT NULL CHECK (LENGTH(h_contract_terms)=64))
+ ,h_wire BYTEA NOT NULL CHECK (LENGTH(h_wire)=64))
,purse_val INT8 NOT NULL
,purse_frac INT4 NOT NULL
,PRIMARY KEY (purse_pub)
);
+ --
CREATE TABLE IF NOT EXISTS contracts
(contract_serial_id BIGSERIAL UNIQUE
,purse_pub BYTEA NOT NULL CHECK (LENGTH(purse_pub)=32),
@@ -685,12 +700,23 @@ database.)
,e_contract BYTEA NOT NULL,
,PRIMARY KEY (purse_pub)
);
+ --
CREATE TABLE IF NOT EXISTS history_requests
- (reserve_pub BYTEA NOT NULL CHECK (LENGTH(purse_pub)=32),
+ (reserve_uuid INT8 NOT NULL REFERENCES reserves(reserve_uuid) ON DELETE CASCADE,
,request_timestamp INT8 NOT NULL
,reserve_sig BYTEA NOT NULL CHECK (LENGTH(reserve_sig)=64))
- ,PRIMARY KEY (reserve_pub,request_timestamp)
+ ,PRIMARY KEY (reserve_uuid,request_timestamp)
);
+ --
+ CREATE TABLE IF NOT EXISTS close_requests
+ (reserve_uuid INT8 NOT NULL REFERENCES reserves(reserve_uuid) ON DELETE CASCADE,
+ ,close_timestamp INT8 NOT NULL
+ ,reserve_sig BYTEA NOT NULL CHECK (LENGTH(reserve_sig)=64))
+ ,close_val INT8 NOT NULL
+ ,close_frac INT4 NOT NULL
+ ,PRIMARY KEY (reserve_uuid,close_timestamp)
+ );
+ --
CREATE TABLE IF NOT EXISTS purse_deposits
(purse_deposit_serial_id BIGSERIAL UNIQUE
,purse_pub BYTEA NOT NULL CHECK (LENGTH(purse_pub)=32),
@@ -701,16 +727,35 @@ database.)
,coin_sig BYTEA NOT NULL CHECK(LENGTH(coin_sig)=64)
,PRIMARY KEY (purse_pub,coin_pub)
);
+ --
CREATE TABLE IF NOT EXISTS wads
(wad_serial_id BIGSERIAL UNIQUE
- ,reserve_pub BYTEA NOT NULL REFERENCES reserves (reserve_pub) ON DELETE CASCADE
- ,kyc_date INT8 NOT NULL
- ,kyc_fee_val INT8 NOT NULL
- ,kyc_fee_frac INT4 NOT NULL
- ,payto_uri TEXT NOT NULL
+ ,wad_id BYTEA PRIMARY KEY CHECK (LENGTH(wad_id)=24)
+ ,exchange_url TEXT NOT NULL
+ ,amount_val INT8 NOT NULL
+ ,amount_frac INT4 NOT NULL
+ ,execution_time INT8 NOT NULL
+ ,UNIQUE (exchange_url, execution_time)
+ );
+ --
+ CREATE TABLE IF NOT EXISTS wad_entries
+ (wad_entry_serial_id BIGSERIAL UNIQUE
+ ,wad_serial_id INT8 REFERENCES wads (wad_serial_id) ON DELETE CASCADE
+ ,reserve_pub BYTEA NOT NULL CHECK(LENGTH(reserve_pub)=32)
+ ,purse_pub BYTEA PRIMARY KEY CHECK(LENGTH(purse_pub)=32)
+ ,h_contract BYTEA NOT NULL CHECK(LENGTH(h_contract)=64)
+ ,purse_expiration INT8 NOT NULL
+ ,merge_timestamp INT8 NOT NULL
+ ,amount_with_fee_val INT8 NOT NULL
+ ,amount_with_fee_frac INT4 NOT NULL
+ ,wad_fee_val INT8 NOT NULL
+ ,wad_fee_frac INT4 NOT NULL
+ ,deposit_fees_val INT8 NOT NULL
+ ,deposit_fees_frac INT4 NOT NULL
,reserve_sig BYTEA NOT NULL CHECK (LENGTH(reserve_sig)=64))
- ,PRIMARY KEY (reserve_pub, kyc_date)
+ ,purse_sig BYTEA NOT NULL CHECK (LENGTH(purse_sig)=64))
);
+ -- FIXME: need more tables for exchange RECEIVING a wad!
-- Complete transaction
COMMIT;