first draft of service API for p2p payments
This commit is contained in:
parent
6ffc2c68a3
commit
c782dfe2aa
@ -1 +1 @@
|
|||||||
Subproject commit 0958add542378a6ca9c411e2dc19527834e9f645
|
Subproject commit 25eb78f2d0e20a137020dd0ab1c6474123843dbe
|
@ -1540,6 +1540,7 @@ COMMENT ON COLUMN close_requests.close_val
|
|||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS purse_deposits
|
CREATE TABLE IF NOT EXISTS purse_deposits
|
||||||
(purse_deposit_serial_id BIGSERIAL UNIQUE
|
(purse_deposit_serial_id BIGSERIAL UNIQUE
|
||||||
|
,partner_serial_id INT8 REFERENCES partners(partner_serial_id) ON DELETE CASCADE
|
||||||
,purse_pub BYTEA NOT NULL CHECK (LENGTH(purse_pub)=32)
|
,purse_pub BYTEA NOT NULL CHECK (LENGTH(purse_pub)=32)
|
||||||
,coin_pub BYTEA NOT NULL REFERENCES known_coins (coin_pub) ON DELETE CASCADE
|
,coin_pub BYTEA NOT NULL REFERENCES known_coins (coin_pub) ON DELETE CASCADE
|
||||||
,amount_with_fee_val INT8 NOT NULL
|
,amount_with_fee_val INT8 NOT NULL
|
||||||
@ -1549,6 +1550,8 @@ CREATE TABLE IF NOT EXISTS purse_deposits
|
|||||||
); -- partition by purse_pub, plus a materialized index by coin_pub!
|
); -- partition by purse_pub, plus a materialized index by coin_pub!
|
||||||
COMMENT ON TABLE purse_deposits
|
COMMENT ON TABLE purse_deposits
|
||||||
IS 'Requests depositing coins into a purse';
|
IS 'Requests depositing coins into a purse';
|
||||||
|
COMMENT ON COLUMN purse_deposits.partner_serial_id
|
||||||
|
IS 'identifies the partner exchange, NULL in case the target purse lives at this exchange';
|
||||||
COMMENT ON COLUMN purse_deposits.purse_pub
|
COMMENT ON COLUMN purse_deposits.purse_pub
|
||||||
IS 'Public key of the purse';
|
IS 'Public key of the purse';
|
||||||
COMMENT ON COLUMN purse_deposits.coin_pub
|
COMMENT ON COLUMN purse_deposits.coin_pub
|
||||||
|
@ -2727,6 +2727,7 @@ TALER_wallet_purse_status_verify (
|
|||||||
/**
|
/**
|
||||||
* Sign a request to deposit a coin into a purse.
|
* Sign a request to deposit a coin into a purse.
|
||||||
*
|
*
|
||||||
|
* @param exchange_base_url URL of the exchange hosting the purse
|
||||||
* @param purse_pub purse’s public key
|
* @param purse_pub purse’s public key
|
||||||
* @param amount amount of the coin's value to transfer to the purse
|
* @param amount amount of the coin's value to transfer to the purse
|
||||||
* @param coin_priv key identifying the coin to be deposited
|
* @param coin_priv key identifying the coin to be deposited
|
||||||
@ -2734,6 +2735,7 @@ TALER_wallet_purse_status_verify (
|
|||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
TALER_wallet_purse_deposit_sign (
|
TALER_wallet_purse_deposit_sign (
|
||||||
|
const char *exchange_base_url,
|
||||||
const struct TALER_PurseContractPublicKeyP *purse_pub,
|
const struct TALER_PurseContractPublicKeyP *purse_pub,
|
||||||
const struct TALER_Amount *amount,
|
const struct TALER_Amount *amount,
|
||||||
const struct TALER_CoinSpendPrivateKeyP *coin_priv,
|
const struct TALER_CoinSpendPrivateKeyP *coin_priv,
|
||||||
@ -2743,6 +2745,7 @@ TALER_wallet_purse_deposit_sign (
|
|||||||
/**
|
/**
|
||||||
* Verify a purse deposit request.
|
* Verify a purse deposit request.
|
||||||
*
|
*
|
||||||
|
* @param exchange_base_url URL of the exchange hosting the purse
|
||||||
* @param purse_pub purse’s public key
|
* @param purse_pub purse’s public key
|
||||||
* @param amount amount of the coin's value to transfer to the purse
|
* @param amount amount of the coin's value to transfer to the purse
|
||||||
* @param coin_pub key identifying the coin that is being deposited
|
* @param coin_pub key identifying the coin that is being deposited
|
||||||
@ -2751,6 +2754,7 @@ TALER_wallet_purse_deposit_sign (
|
|||||||
*/
|
*/
|
||||||
enum GNUNET_GenericReturnValue
|
enum GNUNET_GenericReturnValue
|
||||||
TALER_wallet_purse_deposit_verify (
|
TALER_wallet_purse_deposit_verify (
|
||||||
|
const char *exchange_base_url,
|
||||||
const struct TALER_PurseContractPublicKeyP *purse_pub,
|
const struct TALER_PurseContractPublicKeyP *purse_pub,
|
||||||
const struct TALER_Amount *amount,
|
const struct TALER_Amount *amount,
|
||||||
const struct TALER_CoinSpendPublicKeyP *coin_pub,
|
const struct TALER_CoinSpendPublicKeyP *coin_pub,
|
||||||
|
@ -4104,7 +4104,7 @@ struct TALER_EXCHANGE_PurseDeposit
|
|||||||
/**
|
/**
|
||||||
* Hash of the denomination's public key.
|
* Hash of the denomination's public key.
|
||||||
*/
|
*/
|
||||||
struct TALER_DenominationHash h_denom_pub;
|
struct TALER_DenominationHashP h_denom_pub;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Amount of the coin to transfer into the purse.
|
* Amount of the coin to transfer into the purse.
|
||||||
@ -4144,7 +4144,7 @@ TALER_EXCHANGE_purse_create_with_deposit (
|
|||||||
const struct TALER_Amount *purse_value_after_fees,
|
const struct TALER_Amount *purse_value_after_fees,
|
||||||
unsigned int num_deposits,
|
unsigned int num_deposits,
|
||||||
const struct TALER_EXCHANGE_PurseDeposit *deposits,
|
const struct TALER_EXCHANGE_PurseDeposit *deposits,
|
||||||
TALER_EXCHANGE_PurseCreateCallback cb,
|
TALER_EXCHANGE_PurseCreateDepositCallback cb,
|
||||||
void *cb_cls);
|
void *cb_cls);
|
||||||
|
|
||||||
|
|
||||||
@ -4155,7 +4155,7 @@ TALER_EXCHANGE_purse_create_with_deposit (
|
|||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
TALER_EXCHANGE_purse_create_with_deposit_cancel (
|
TALER_EXCHANGE_purse_create_with_deposit_cancel (
|
||||||
struct TALER_EXCHANGE_PurseCreateHandle *pch);
|
struct TALER_EXCHANGE_PurseCreateDepositHandle *pch);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -4198,7 +4198,12 @@ struct TALER_EXCHANGE_AccountMergeHandle;
|
|||||||
* with a reserve.
|
* with a reserve.
|
||||||
*
|
*
|
||||||
* @param ctx the context
|
* @param ctx the context
|
||||||
* @param url HTTP base URL for the exchange
|
* @param url HTTP base URL for the exchange with the purse
|
||||||
|
* @param reserve_exchange_url base URL of the exchange with the reserve
|
||||||
|
* @param reserve_priv private key of the reserve to merge into
|
||||||
|
* @param purse_pub public key of the purse to merge
|
||||||
|
* @param merge_priv private key granting us the right to merge
|
||||||
|
* @param merge_timestamp when is the merge happening (current time)
|
||||||
* @param cb function to call with the exchange's result
|
* @param cb function to call with the exchange's result
|
||||||
* @param cb_cls closure for @a cb
|
* @param cb_cls closure for @a cb
|
||||||
* @return the request handle; NULL upon error
|
* @return the request handle; NULL upon error
|
||||||
@ -4207,11 +4212,12 @@ struct TALER_EXCHANGE_AccountMergeHandle *
|
|||||||
TALER_EXCHANGE_account_merge (
|
TALER_EXCHANGE_account_merge (
|
||||||
struct GNUNET_CURL_Context *ctx,
|
struct GNUNET_CURL_Context *ctx,
|
||||||
const char *url,
|
const char *url,
|
||||||
|
const char *reserve_exchange_url,
|
||||||
const struct TALER_ReservePrivateKeyP *reserve_priv,
|
const struct TALER_ReservePrivateKeyP *reserve_priv,
|
||||||
const struct TALER_PurseContractPublicKeyP *purse_pub,
|
const struct TALER_PurseContractPublicKeyP *purse_pub,
|
||||||
const struct TALER_PurseMergePrivateKeyP *merge_priv,
|
const struct TALER_PurseMergePrivateKeyP *merge_priv,
|
||||||
struct GNUNET_TIME_Timestamp merge_timestamp,
|
struct GNUNET_TIME_Timestamp merge_timestamp,
|
||||||
TALER_EXCHANGE_PurseCreateCallback cb,
|
TALER_EXCHANGE_AccountMergeCallback cb,
|
||||||
void *cb_cls);
|
void *cb_cls);
|
||||||
|
|
||||||
|
|
||||||
@ -4271,6 +4277,7 @@ struct TALER_EXCHANGE_PurseCreateMergeHandle;
|
|||||||
* @param contract_terms contract the purse is about
|
* @param contract_terms contract the purse is about
|
||||||
* @param min_age minimum age we need to prove for the purse
|
* @param min_age minimum age we need to prove for the purse
|
||||||
* @param purse_expiration when will the unmerged purse expire
|
* @param purse_expiration when will the unmerged purse expire
|
||||||
|
* @paran merge_timestamp when should the merge happen (use current time)
|
||||||
* @param purse_value_after_fees target amount in the purse
|
* @param purse_value_after_fees target amount in the purse
|
||||||
* @param cb function to call with the exchange's result
|
* @param cb function to call with the exchange's result
|
||||||
* @param cb_cls closure for @a cb
|
* @param cb_cls closure for @a cb
|
||||||
@ -4280,11 +4287,12 @@ struct TALER_EXCHANGE_PurseCreateMergeHandle *
|
|||||||
TALER_EXCHANGE_purse_create_with_merge (
|
TALER_EXCHANGE_purse_create_with_merge (
|
||||||
struct GNUNET_CURL_Context *ctx,
|
struct GNUNET_CURL_Context *ctx,
|
||||||
const char *url,
|
const char *url,
|
||||||
const struct TALER_PurseReservePrivateKeyP *reserve_priv,
|
const struct TALER_ReservePrivateKeyP *reserve_priv,
|
||||||
const struct TALER_PurseContractPrivateKeyP *purse_priv,
|
const struct TALER_PurseContractPrivateKeyP *purse_priv,
|
||||||
const json_t *contract_terms,
|
const json_t *contract_terms,
|
||||||
uint32_t min_age,
|
uint32_t min_age,
|
||||||
struct GNUNET_TIME_Timestamp purse_expiration,
|
struct GNUNET_TIME_Timestamp purse_expiration,
|
||||||
|
struct GNUNET_TIME_Timestamp merge_timestamp,
|
||||||
const struct TALER_Amount *purse_value_after_fees,
|
const struct TALER_Amount *purse_value_after_fees,
|
||||||
TALER_EXCHANGE_PurseCreateMergeCallback cb,
|
TALER_EXCHANGE_PurseCreateMergeCallback cb,
|
||||||
void *cb_cls);
|
void *cb_cls);
|
||||||
@ -4317,16 +4325,16 @@ struct TALER_EXCHANGE_PurseDepositResponse
|
|||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function called with information about a deposit-into-purse
|
* Function called with information about a purse-deposit
|
||||||
* operation.
|
* operation.
|
||||||
*
|
*
|
||||||
* @param cls closure
|
* @param cls closure
|
||||||
* @param pcr HTTP response data
|
* @param pdr HTTP response data
|
||||||
*/
|
*/
|
||||||
typedef void
|
typedef void
|
||||||
(*TALER_EXCHANGE_PurseDepositCallback) (
|
(*TALER_EXCHANGE_PurseDepositCallback) (
|
||||||
void *cls,
|
void *cls,
|
||||||
const struct TALER_EXCHANGE_PurseDepositResponse *amr);
|
const struct TALER_EXCHANGE_PurseDepositResponse *pdr);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -4336,35 +4344,41 @@ struct TALER_EXCHANGE_PurseDepositHandle;
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Inform the exchange that a purse should be merged
|
* Inform the exchange that a deposit should be made into
|
||||||
* with a reserve.
|
* a purse.
|
||||||
*
|
*
|
||||||
* @param ctx the context
|
* @param ctx the context
|
||||||
* @param url HTTP base URL for the exchange
|
* @param url HTTP base URL for the exchange where we make the deposit
|
||||||
|
* @param purse_exchange_url base URL of the exchange hosting the purse
|
||||||
|
* @param purse_pub public key of the purse to merge
|
||||||
|
* @param min_age minimum age we need to prove for the purse
|
||||||
|
* @param num_deposits length of the @a deposits array
|
||||||
|
* @param deposits array of deposits to make into the purse
|
||||||
* @param cb function to call with the exchange's result
|
* @param cb function to call with the exchange's result
|
||||||
* @param cb_cls closure for @a cb
|
* @param cb_cls closure for @a cb
|
||||||
* @return the request handle; NULL upon error
|
* @return the request handle; NULL upon error
|
||||||
*/
|
*/
|
||||||
struct TALER_EXCHANGE_AccountMergeHandle *
|
struct TALER_EXCHANGE_PurseDepositHandle *
|
||||||
TALER_EXCHANGE_account_merge (
|
TALER_EXCHANGE_purse_deposit (
|
||||||
struct GNUNET_CURL_Context *ctx,
|
struct GNUNET_CURL_Context *ctx,
|
||||||
const char *url,
|
const char *url,
|
||||||
const struct TALER_ReservePrivateKeyP *reserve_priv,
|
const char *purse_exchange_url,
|
||||||
const struct TALER_PurseContractPublicKeyP *purse_pub,
|
const struct TALER_PurseContractPublicKeyP *purse_pub,
|
||||||
const struct TALER_PurseMergePrivateKeyP *merge_priv,
|
uint32_t min_age,
|
||||||
struct GNUNET_TIME_Timestamp merge_timestamp,
|
unsigned int num_deposits,
|
||||||
TALER_EXCHANGE_PurseCreateCallback cb,
|
const struct TALER_EXCHANGE_PurseDeposit *deposits,
|
||||||
|
TALER_EXCHANGE_PurseDepositCallback cb,
|
||||||
void *cb_cls);
|
void *cb_cls);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Cancel #TALER_EXCHANGE_account_merge() operation.
|
* Cancel #TALER_EXCHANGE_purse_deposit() operation.
|
||||||
*
|
*
|
||||||
* @param amh handle of the operation to cancel
|
* @param amh handle of the operation to cancel
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
TALER_EXCHANGE_account_merge_cancel (
|
TALER_EXCHANGE_purse_deposit_cancel (
|
||||||
struct TALER_EXCHANGE_AccountMergeHandle *amh);
|
struct TALER_EXCHANGE_PurseDepositHandle *amh);
|
||||||
|
|
||||||
|
|
||||||
#endif /* _TALER_EXCHANGE_SERVICE_H */
|
#endif /* _TALER_EXCHANGE_SERVICE_H */
|
||||||
|
@ -902,11 +902,17 @@ struct TALER_PurseDepositPS
|
|||||||
*/
|
*/
|
||||||
struct TALER_PurseContractPublicKeyP purse_pub;
|
struct TALER_PurseContractPublicKeyP purse_pub;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Hash of the base URL of the exchange hosting the
|
||||||
|
* @e purse_pub.
|
||||||
|
*/
|
||||||
|
struct GNUNET_HashCode h_exchange_base_url;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
TALER_wallet_purse_deposit_sign (
|
TALER_wallet_purse_deposit_sign (
|
||||||
|
const char *exchange_base_url,
|
||||||
const struct TALER_PurseContractPublicKeyP *purse_pub,
|
const struct TALER_PurseContractPublicKeyP *purse_pub,
|
||||||
const struct TALER_Amount *amount,
|
const struct TALER_Amount *amount,
|
||||||
const struct TALER_CoinSpendPrivateKeyP *coin_priv,
|
const struct TALER_CoinSpendPrivateKeyP *coin_priv,
|
||||||
@ -918,6 +924,9 @@ TALER_wallet_purse_deposit_sign (
|
|||||||
.purse_pub = *purse_pub,
|
.purse_pub = *purse_pub,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
GNUNET_CRYPTO_hash (exchange_base_url,
|
||||||
|
strlen (exchange_base_url) + 1,
|
||||||
|
&pm.h_exchange_base_url);
|
||||||
TALER_amount_hton (&pm.coin_amount,
|
TALER_amount_hton (&pm.coin_amount,
|
||||||
amount);
|
amount);
|
||||||
GNUNET_CRYPTO_eddsa_sign (&coin_priv->eddsa_priv,
|
GNUNET_CRYPTO_eddsa_sign (&coin_priv->eddsa_priv,
|
||||||
@ -928,6 +937,7 @@ TALER_wallet_purse_deposit_sign (
|
|||||||
|
|
||||||
enum GNUNET_GenericReturnValue
|
enum GNUNET_GenericReturnValue
|
||||||
TALER_wallet_purse_deposit_verify (
|
TALER_wallet_purse_deposit_verify (
|
||||||
|
const char *exchange_base_url,
|
||||||
const struct TALER_PurseContractPublicKeyP *purse_pub,
|
const struct TALER_PurseContractPublicKeyP *purse_pub,
|
||||||
const struct TALER_Amount *amount,
|
const struct TALER_Amount *amount,
|
||||||
const struct TALER_CoinSpendPublicKeyP *coin_pub,
|
const struct TALER_CoinSpendPublicKeyP *coin_pub,
|
||||||
@ -939,6 +949,9 @@ TALER_wallet_purse_deposit_verify (
|
|||||||
.purse_pub = *purse_pub,
|
.purse_pub = *purse_pub,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
GNUNET_CRYPTO_hash (exchange_base_url,
|
||||||
|
strlen (exchange_base_url) + 1,
|
||||||
|
&pm.h_exchange_base_url);
|
||||||
TALER_amount_hton (&pm.coin_amount,
|
TALER_amount_hton (&pm.coin_amount,
|
||||||
amount);
|
amount);
|
||||||
return GNUNET_CRYPTO_eddsa_verify (
|
return GNUNET_CRYPTO_eddsa_verify (
|
||||||
|
Loading…
Reference in New Issue
Block a user