DB storage for token balances

* store token bounties to DB when changed
* added some TODOs
This commit is contained in:
Teemu Patja 2017-08-22 16:45:10 +03:00
parent de07f873ab
commit f8d00196d6
No known key found for this signature in database
GPG Key ID: F5B7035E6580FD4C
3 changed files with 44 additions and 24 deletions

View File

@ -252,6 +252,7 @@ SELECT
i.issue_number AS issue_number, i.issue_number AS issue_number,
i.issue_id AS issue_id, i.issue_id AS issue_id,
i.balance_eth AS balance, i.balance_eth AS balance,
i.tokens AS tokens,
u.login AS winner_login, u.login AS winner_login,
u.address AS payout_address u.address AS payout_address
FROM issues i, pull_requests p, users u, repositories r FROM issues i, pull_requests p, users u, repositories r
@ -288,6 +289,7 @@ SELECT
i.issue_number AS issue_number, i.issue_number AS issue_number,
i.issue_id AS issue_id, i.issue_id AS issue_id,
i.balance_eth AS balance, i.balance_eth AS balance,
i.tokens AS tokens,
u.address AS payout_address, u.address AS payout_address,
u.login AS payee_login, u.login AS payee_login,
i.payout_hash AS payout_hash i.payout_hash AS payout_hash
@ -329,6 +331,14 @@ updated = timezone('utc'::text, now())
WHERE issue_id = :issue_id; WHERE issue_id = :issue_id;
-- :name update-token-balances :! :n
-- :doc updates issue with given token balances
UPDATE issues
SET tokens = :token_balances::jsonb,
updated = timezone('utc'::text, now())
WHERE contract_address = :contract_address;
-- :name open-bounties :? :* -- :name open-bounties :? :*
-- :doc all bounty issues for given owner -- :doc all bounty issues for given owner
SELECT SELECT
@ -338,6 +348,7 @@ SELECT
i.title AS issue_title, i.title AS issue_title,
i.repo_id AS repo_id, i.repo_id AS repo_id,
i.balance_eth AS balance, i.balance_eth AS balance,
i.tokens AS tokens,
i.confirm_hash AS confirm_hash, i.confirm_hash AS confirm_hash,
i.payout_hash AS payout_hash, i.payout_hash AS payout_hash,
i.payout_receipt AS payout_receipt, i.payout_receipt AS payout_receipt,
@ -349,7 +360,7 @@ FROM issues i, repositories r
WHERE WHERE
r.repo_id = i.repo_id r.repo_id = i.repo_id
AND i.confirm_hash is null AND i.confirm_hash is null
ORDER BY balance desc, updated desc; ORDER BY balance desc, updated desc; -- TODO: order by USD value first
@ -361,7 +372,8 @@ SELECT
i.issue_number AS issue_number, i.issue_number AS issue_number,
i.title AS issue_title, i.title AS issue_title,
i.repo_id AS repo_id, i.repo_id AS repo_id,
i.balance_eth AS balance, i.balance_eth AS balance_eth,
i.tokens AS tokens,
i.confirm_hash AS confirm_hash, i.confirm_hash AS confirm_hash,
i.payout_hash AS payout_hash, i.payout_hash AS payout_hash,
i.payout_receipt AS payout_receipt, i.payout_receipt AS payout_receipt,
@ -384,6 +396,7 @@ SELECT
i.title AS issue_title, i.title AS issue_title,
i.repo_id AS repo_id, i.repo_id AS repo_id,
i.balance_eth AS balance, i.balance_eth AS balance,
i.tokens AS tokens,
i.confirm_hash AS confirm_hash, i.confirm_hash AS confirm_hash,
i.payout_hash AS payout_hash, i.payout_hash AS payout_hash,
i.payout_receipt AS payout_receipt, i.payout_receipt AS payout_receipt,
@ -417,7 +430,8 @@ SELECT
i.comment_id AS comment_id, i.comment_id AS comment_id,
i.issue_number AS issue_number, i.issue_number AS issue_number,
i.issue_id AS issue_id, i.issue_id AS issue_id,
i.balance_eth AS balance i.balance_eth AS balance,
i.tokens AS tokens
FROM issues i, repositories r FROM issues i, repositories r
WHERE r.repo_id = i.repo_id WHERE r.repo_id = i.repo_id
AND contract_address IS NOT NULL AND contract_address IS NOT NULL
@ -430,6 +444,7 @@ SELECT
i.issue_id AS issue_id, i.issue_id AS issue_id,
i.issue_number AS issue_number, i.issue_number AS issue_number,
i.balance_eth AS balance, i.balance_eth AS balance,
i.tokens AS tokens,
r.owner AS owner, r.owner AS owner,
r.repo AS repo r.repo AS repo
FROM issues i, repositories r FROM issues i, repositories r
@ -438,13 +453,7 @@ AND r.repo_id = i.repo_id
AND r.owner = :owner AND r.owner = :owner
AND r.repo = :repo; AND r.repo = :repo;
-- :name get-balance :? :1 -- :name update-eth-balance :! :n
-- :doc gets current balance of a wallet attached to a given issue
SELECT balance_eth AS balance
FROM issues
WHERE contract_address = :contract_address;
-- :name update-balance :! :n
-- :doc updates balance of a wallet attached to a given issue -- :doc updates balance of a wallet attached to a given issue
UPDATE issues UPDATE issues
SET balance_eth = :balance, SET balance_eth = :balance,
@ -484,7 +493,7 @@ pr.commit_sha = i.commit_sha
AND u.id = pr.user_id AND u.id = pr.user_id
AND i.payout_receipt IS NOT NULL AND i.payout_receipt IS NOT NULL
GROUP BY u.id GROUP BY u.id
ORDER BY total_eth DESC; ORDER BY total_eth DESC; -- TODO: this should work with value_usd
-- :name bounties-activity :? :* -- :name bounties-activity :? :*

View File

@ -64,13 +64,14 @@
(jdbc/with-db-connection [con-db *db*] (jdbc/with-db-connection [con-db *db*]
(db/list-failed-deployments con-db))) (db/list-failed-deployments con-db)))
(defn get-balance (defn update-eth-balance
[contract-address]
(jdbc/with-db-connection [con-db *db*]
(db/get-balance con-db {:contract_address contract-address})))
(defn update-balance
[contract-address balance] [contract-address balance]
(jdbc/with-db-connection [con-db *db*] (jdbc/with-db-connection [con-db *db*]
(db/update-balance con-db {:contract_address contract-address (db/update-eth-balance con-db {:contract_address contract-address
:balance balance}))) :balance balance})))
(defn update-token-balances
[contract-address balances]
(jdbc/with-db-connection [con-db *db*]
(db/update-token-balances con-db {:contract_address contract-address
:token_balances balances})))

View File

@ -157,16 +157,23 @@
repo :repo repo :repo
comment-id :comment_id comment-id :comment_id
issue-id :issue_id issue-id :issue_id
old-balance :balance db-balance-eth :balance
db-tokens :tokens
issue-number :issue_number} (db-bounties/open-bounty-contracts)] issue-number :issue_number} (db-bounties/open-bounty-contracts)]
(when comment-id (when comment-id
(let [current-balance-eth-str (eth/get-balance-eth contract-address 6) (let [current-balance-eth-str (eth/get-balance-eth contract-address 6)
current-balance-eth (read-string current-balance-eth-str)] current-balance-eth (read-string current-balance-eth-str)
current-token-balances (multisig/token-balances contract-address)]
(log/debug "update-balances" current-balance-eth (log/debug "update-balances" current-balance-eth
current-balance-eth-str owner repo issue-number) current-balance-eth-str owner repo issue-number)
(when-not (float= old-balance current-balance-eth) (when (or
(not (float= db-balance-eth current-balance-eth))
(not= db-tokens current-token-balances))
(log/debug "balances differ") (log/debug "balances differ")
(issues/update-balance contract-address current-balance-eth) (-> contract-address
(issues/update-eth-balance current-balance-eth)
(issues/update-token-balances current-token-balances))
;; TODO: comment and comment image will show tokens and USD value
(bounties/update-bounty-comment-image issue-id (bounties/update-bounty-comment-image issue-id
owner owner
repo repo
@ -204,8 +211,11 @@
+ key total-usd -> current total USD value for all funds" + key total-usd -> current total USD value for all funds"
[bounty-addr] [bounty-addr]
(let [token-balances (multisig/token-balances bounty-addr) (let [token-balances (multisig/token-balances bounty-addr)
eth-balance (read-string (eth/get-balance-eth bounty-addr 4))] eth-balance (read-string (eth/get-balance-eth bounty-addr 4))
(merge token-balances {:ETH eth-balance}))) all-funds
(merge token-balances
{:ETH eth-balance})]
(merge all-funds {:total-usd (fiat-util/bounty-usd-value all-funds)})))