Add multisig wallet owners
This commit is contained in:
parent
21a9682c5c
commit
fcbf26e775
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<configuration>
|
||||
<statusListener class="ch.qos.logback.core.status.NopStatusListener" />
|
||||
<statusListener class="ch.qos.logback.core.status.NopStatusListener"/>
|
||||
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<!-- encoders are assigned the type
|
||||
ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
|
||||
|
@ -32,8 +32,8 @@
|
|||
<AppenderRef ref="STDOUT"/>
|
||||
<AppenderRef ref="FILE"/>
|
||||
</logger>
|
||||
<root level="INFO">
|
||||
<appender-ref ref="STDOUT" />
|
||||
<appender-ref ref="FILE" />
|
||||
<root level="DEBUG">
|
||||
<appender-ref ref="STDOUT"/>
|
||||
<appender-ref ref="FILE"/>
|
||||
</root>
|
||||
</configuration>
|
||||
|
|
|
@ -40,6 +40,12 @@ SELECT *
|
|||
FROM users
|
||||
WHERE id = :id;
|
||||
|
||||
-- :name get-repo-owner :? :1
|
||||
SELECT *
|
||||
FROM users u
|
||||
INNER JOIN repositories r ON r.user_id = u.id
|
||||
WHERE r.repo_id = :repo_id;
|
||||
|
||||
-- Repositories --------------------------------------------------------------------
|
||||
|
||||
-- :name toggle-repository! :<! :1
|
||||
|
@ -111,6 +117,7 @@ WITH t AS (
|
|||
i.title AS title,
|
||||
i.transaction_hash AS transaction_hash,
|
||||
i.contract_address AS contract_address,
|
||||
i.repo_id AS repo_id,
|
||||
r.login AS login,
|
||||
r.repo AS repo
|
||||
FROM issues i
|
||||
|
@ -120,7 +127,7 @@ WITH t AS (
|
|||
UPDATE issues i
|
||||
SET contract_address = :contract_address
|
||||
FROM t
|
||||
RETURNING t.issue_id, t.issue_number, t.title, t.transaction_hash, t.contract_address, t.login, t.repo;
|
||||
RETURNING t.issue_id, t.issue_number, t.title, t.transaction_hash, t.contract_address, t.login, t.repo, t.repo_id;
|
||||
|
||||
-- :name list-pending-deployments :? :*
|
||||
-- :doc retrieves pending transaction ids
|
||||
|
|
|
@ -35,3 +35,9 @@
|
|||
[user-id token]
|
||||
(jdbc/with-db-connection [con-db *db*]
|
||||
(db/update-user-token! con-db {:id user-id :token token})))
|
||||
|
||||
(defn get-repo-owner
|
||||
"Gets repository owner by given repository id"
|
||||
[repo-id]
|
||||
(jdbc/with-db-connection [con-db *db*]
|
||||
(db/get-repo-owner {:repo_id repo-id})))
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
[org.httpkit.client :refer [post]]
|
||||
[clojure.java.io :as io]
|
||||
[commiteth.config :refer [env]]
|
||||
[clojure.string :refer [join]]
|
||||
[clojure.tools.logging :as log]))
|
||||
|
||||
(def eth-rpc-url "http://localhost:8545")
|
||||
|
@ -18,6 +19,7 @@
|
|||
options {:body body}
|
||||
response (:body @(post eth-rpc-url options))
|
||||
result (json/read-str response :key-fn keyword)]
|
||||
(log/debug body "\n" result)
|
||||
(when-let [error (:error result)]
|
||||
(log/error "Method: " method ", error: " error))
|
||||
(:result result)))
|
||||
|
@ -55,3 +57,24 @@
|
|||
(send-transaction (eth-account) nil 1
|
||||
{:gas 1248650
|
||||
:data contract-code})))
|
||||
|
||||
(defn- format-param
|
||||
[param]
|
||||
(if (number? param)
|
||||
(format "%064x" param)
|
||||
(clojure.string/replace (format "%64s" (subs param 2)) " " "0")))
|
||||
|
||||
(defn- format-call-params
|
||||
[method-id & params]
|
||||
(let [params (join (map format-param params))]
|
||||
(str method-id params)))
|
||||
|
||||
(defn call
|
||||
[contract method-id & params]
|
||||
(let [data (apply format-call-params method-id params)]
|
||||
(eth-rpc "eth_call" [{:to contract :data data} "latest"])))
|
||||
|
||||
(defn execute
|
||||
[from contract method-id & params]
|
||||
(let [data (apply format-call-params method-id params)]
|
||||
(send-transaction from contract 1 {:data data})))
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
(ns commiteth.eth.multisig-wallet
|
||||
(:require [commiteth.eth.core :as eth]))
|
||||
|
||||
(defn is-owner?
|
||||
[contract address]
|
||||
(eth/call contract "0x0ed5bc12" address))
|
||||
|
||||
(defn get-owner
|
||||
[contract index]
|
||||
(eth/call contract "0xc41a360a" index))
|
||||
|
||||
(defn add-owner
|
||||
[contract owner]
|
||||
(eth/execute (eth/eth-account) contract "0x7065cb48" owner))
|
|
@ -1,7 +1,9 @@
|
|||
(ns commiteth.scheduler
|
||||
(:require [commiteth.eth.core :as eth]
|
||||
[commiteth.eth.multisig-wallet :as wallet]
|
||||
[commiteth.github.core :as github]
|
||||
[commiteth.db.issues :as issues]
|
||||
[commiteth.db.users :as users]
|
||||
[overtone.at-at :refer [every mk-pool]]
|
||||
[clojure.tools.logging :as log]
|
||||
[mount.core :as mount]))
|
||||
|
@ -9,17 +11,20 @@
|
|||
(def pool (mk-pool))
|
||||
|
||||
(defn update-issue-contract-address []
|
||||
(println "Hi.")
|
||||
(for [{issue-id :issue_id
|
||||
transaction-hash :transaction_hash} (issues/list-pending-deployments)]
|
||||
(when-let [receipt (eth/get-transaction-receipt transaction-hash)]
|
||||
(log/info "transaction receipt for issue #" issue-id ": " receipt)
|
||||
(when-let [contract-address (:contractAddress receipt)]
|
||||
(let [issue (issues/update-contract-address issue-id contract-address)
|
||||
(let [issue (issues/update-contract-address issue-id contract-address)
|
||||
{user :login
|
||||
repo :repo
|
||||
repo-id :repo_id
|
||||
issue-number :issue_number} issue
|
||||
balance (eth/get-balance-eth contract-address 4)]
|
||||
(github/post-comment user repo issue-number contract-address balance))))))
|
||||
balance (eth/get-balance-eth contract-address 4)
|
||||
repo-owner-address (:address (users/get-repo-owner repo-id))]
|
||||
(github/post-comment user repo issue-number contract-address balance)
|
||||
(wallet/add-owner contract-address (eth/eth-account))
|
||||
(wallet/add-owner contract-address repo-owner-address))))))
|
||||
|
||||
(mount/defstate scheduler :start (every (* 5 60 1000) update-issue-contract-address pool))
|
||||
|
|
Loading…
Reference in New Issue