forked from cerc-io/ipld-eth-server
Update contract summary output to include transaction info
This commit is contained in:
parent
a23023f7d6
commit
d0602833bb
@ -5,6 +5,8 @@ import (
|
|||||||
|
|
||||||
"log"
|
"log"
|
||||||
|
|
||||||
|
"fmt"
|
||||||
|
|
||||||
"github.com/8thlight/vulcanizedb/cmd"
|
"github.com/8thlight/vulcanizedb/cmd"
|
||||||
"github.com/8thlight/vulcanizedb/pkg/repositories"
|
"github.com/8thlight/vulcanizedb/pkg/repositories"
|
||||||
"github.com/8thlight/vulcanizedb/pkg/watched_contracts"
|
"github.com/8thlight/vulcanizedb/pkg/watched_contracts"
|
||||||
@ -21,5 +23,6 @@ func main() {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalln(err)
|
log.Fatalln(err)
|
||||||
}
|
}
|
||||||
watched_contracts.PrintReport(contractSummary)
|
output := watched_contracts.GenerateConsoleOutput(contractSummary)
|
||||||
|
fmt.Println(output)
|
||||||
}
|
}
|
||||||
|
@ -200,7 +200,7 @@ func (repository Postgres) loadContract(contractRows *sql.Rows) []core.WatchedCo
|
|||||||
for contractRows.Next() {
|
for contractRows.Next() {
|
||||||
var savedContractHash string
|
var savedContractHash string
|
||||||
contractRows.Scan(&savedContractHash)
|
contractRows.Scan(&savedContractHash)
|
||||||
transactionRows, _ := repository.Db.Query(`SELECT tx_hash, tx_nonce, tx_to, tx_from, tx_gaslimit, tx_gasprice, tx_value FROM transactions WHERE tx_to = $1`, savedContractHash)
|
transactionRows, _ := repository.Db.Query(`SELECT tx_hash, tx_nonce, tx_to, tx_from, tx_gaslimit, tx_gasprice, tx_value FROM transactions WHERE tx_to = $1 ORDER BY block_id desc`, savedContractHash)
|
||||||
transactions := repository.loadTransactions(transactionRows)
|
transactions := repository.loadTransactions(transactionRows)
|
||||||
savedContract := core.WatchedContract{Hash: savedContractHash, Transactions: transactions}
|
savedContract := core.WatchedContract{Hash: savedContractHash, Transactions: transactions}
|
||||||
savedContracts = append(savedContracts, savedContract)
|
savedContracts = append(savedContracts, savedContract)
|
||||||
|
34
pkg/watched_contracts/console_presenter.go
Normal file
34
pkg/watched_contracts/console_presenter.go
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
package watched_contracts
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/8thlight/vulcanizedb/pkg/core"
|
||||||
|
)
|
||||||
|
|
||||||
|
func GenerateConsoleOutput(summary *ContractSummary) string {
|
||||||
|
return fmt.Sprintf(template(),
|
||||||
|
summary.ContractHash,
|
||||||
|
summary.NumberOfTransactions,
|
||||||
|
transactionToString(summary.LastTransaction),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
func template() string {
|
||||||
|
return `********************Contract Summary***********************
|
||||||
|
HASH: %v
|
||||||
|
NUMBER OF TRANSACTIONS: %d
|
||||||
|
LAST TRANSACTION:
|
||||||
|
%s
|
||||||
|
`
|
||||||
|
}
|
||||||
|
|
||||||
|
func transactionToString(transaction *core.Transaction) string {
|
||||||
|
if transaction == nil {
|
||||||
|
return "NONE"
|
||||||
|
} else {
|
||||||
|
return fmt.Sprintf(`Hash: %s
|
||||||
|
To: %s
|
||||||
|
From: %s`, transaction.Hash, transaction.To, transaction.From)
|
||||||
|
}
|
||||||
|
}
|
@ -1,10 +0,0 @@
|
|||||||
package watched_contracts
|
|
||||||
|
|
||||||
import "fmt"
|
|
||||||
|
|
||||||
func PrintReport(summary *ContractSummary) {
|
|
||||||
fmt.Printf(`********************Contract Summary***********************
|
|
||||||
|
|
||||||
HASH: %v
|
|
||||||
`, summary.ContractHash)
|
|
||||||
}
|
|
@ -9,7 +9,9 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type ContractSummary struct {
|
type ContractSummary struct {
|
||||||
ContractHash string
|
ContractHash string
|
||||||
|
NumberOfTransactions int
|
||||||
|
LastTransaction *core.Transaction
|
||||||
}
|
}
|
||||||
|
|
||||||
var NewContractNotWatchedErr = func(contractHash string) error {
|
var NewContractNotWatchedErr = func(contractHash string) error {
|
||||||
@ -26,5 +28,17 @@ func NewSummary(repository repositories.Repository, contractHash string) (*Contr
|
|||||||
}
|
}
|
||||||
|
|
||||||
func newContractSummary(contract core.WatchedContract) *ContractSummary {
|
func newContractSummary(contract core.WatchedContract) *ContractSummary {
|
||||||
return &ContractSummary{ContractHash: contract.Hash}
|
return &ContractSummary{
|
||||||
|
ContractHash: contract.Hash,
|
||||||
|
NumberOfTransactions: len(contract.Transactions),
|
||||||
|
LastTransaction: lastTransaction(contract),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func lastTransaction(contract core.WatchedContract) *core.Transaction {
|
||||||
|
if len(contract.Transactions) > 0 {
|
||||||
|
return &contract.Transactions[0]
|
||||||
|
} else {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,7 @@ import (
|
|||||||
. "github.com/onsi/gomega"
|
. "github.com/onsi/gomega"
|
||||||
)
|
)
|
||||||
|
|
||||||
var _ = Describe("The watched contract summary", func() {
|
var _ bool = Describe("The watched contract summary", func() {
|
||||||
|
|
||||||
Context("when the given contract is not being watched", func() {
|
Context("when the given contract is not being watched", func() {
|
||||||
It("returns an error", func() {
|
It("returns an error", func() {
|
||||||
@ -42,6 +42,40 @@ var _ = Describe("The watched contract summary", func() {
|
|||||||
|
|
||||||
Expect(contractSummary.ContractHash).To(Equal("0x123"))
|
Expect(contractSummary.ContractHash).To(Equal("0x123"))
|
||||||
})
|
})
|
||||||
|
|
||||||
|
It("sets the number of transactions", func() {
|
||||||
|
repository := repositories.NewInMemory()
|
||||||
|
watchedContract := core.WatchedContract{Hash: "0x123"}
|
||||||
|
repository.CreateWatchedContract(watchedContract)
|
||||||
|
block := core.Block{
|
||||||
|
Transactions: []core.Transaction{
|
||||||
|
{To: "0x123"},
|
||||||
|
{To: "0x123"},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
repository.CreateBlock(block)
|
||||||
|
|
||||||
|
contractSummary, _ := watched_contracts.NewSummary(repository, "0x123")
|
||||||
|
|
||||||
|
Expect(contractSummary.NumberOfTransactions).To(Equal(2))
|
||||||
|
})
|
||||||
|
|
||||||
|
It("sets the last transaction", func() {
|
||||||
|
repository := repositories.NewInMemory()
|
||||||
|
watchedContract := core.WatchedContract{Hash: "0x123"}
|
||||||
|
repository.CreateWatchedContract(watchedContract)
|
||||||
|
block := core.Block{
|
||||||
|
Transactions: []core.Transaction{
|
||||||
|
{Hash: "TRANSACTION2", To: "0x123"},
|
||||||
|
{Hash: "TRANSACTION1", To: "0x123"},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
repository.CreateBlock(block)
|
||||||
|
|
||||||
|
contractSummary, _ := watched_contracts.NewSummary(repository, "0x123")
|
||||||
|
|
||||||
|
Expect(contractSummary.LastTransaction.Hash).To(Equal("TRANSACTION2"))
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
})
|
})
|
||||||
|
Loading…
Reference in New Issue
Block a user