/
tx.go
48 lines (41 loc) · 1.31 KB
/
tx.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package postgres
import (
"context"
"database/sql"
"github.com/4406arthur/grape/repository"
)
type TxRepository struct {
DB *sql.DB
}
func NewTxRepository(db *sql.DB) *TxRepository {
return &TxRepository{
DB: db,
}
}
func (db *TxRepository) GetTXByHash(ctx context.Context, hash string) (repository.Tx, error) {
var tx repository.Tx
err := db.DB.QueryRowContext(ctx, "SELECT tx_hash,block_num,tx_from,tx_to,tx_nonce,tx_data,tx_value FROM tx WHERE tx_hash = $1", hash).Scan(
&tx.TxHash, &tx.BlockNum, &tx.TxFrom, &tx.TxTo, &tx.TxNonce, &tx.TxData, &tx.TxValue)
if err != nil {
//TODO: should push this lost block to job queue
// or make a ETH-RPC query then insert
return tx, err
}
return tx, nil
}
func (db *TxRepository) GetTXsByBlockNum(ctx context.Context, id int64) ([]repository.Tx, error) {
stmt, _ := db.DB.PrepareContext(ctx, "SELECT tx_hash,block_num,tx_from,tx_to,tx_nonce,tx_data,tx_value FROM tx WHERE block_num = $1")
rows, _ := stmt.Query(id)
txs := make([]repository.Tx, 0)
for rows.Next() {
var tx repository.Tx
if err := rows.Scan(&tx.TxHash, &tx.BlockNum, &tx.TxFrom, &tx.TxTo, &tx.TxNonce, &tx.TxData, &tx.TxValue); err != nil {
return []repository.Tx{}, err
}
txs = append(txs, tx)
}
if err := rows.Err(); err != nil {
return []repository.Tx{}, err
}
return txs, nil
}