aboutsummaryrefslogtreecommitdiffstats
path: root/ethpub
diff options
context:
space:
mode:
authorobscuren <geffobscura@gmail.com>2014-06-27 01:55:14 +0800
committerobscuren <geffobscura@gmail.com>2014-06-27 01:55:14 +0800
commit9d5a3f013121c319f9cf679d9afc4e40661a0284 (patch)
treef57ecbea40ca0354bb050d70a10851669412a581 /ethpub
parent3f1f8438ed8bf7b63ea5172090a5c7025cb093f0 (diff)
parenta98e6a262a21ff08c28495bab5180a1c15826d40 (diff)
downloadgo-tangerine-9d5a3f013121c319f9cf679d9afc4e40661a0284.tar
go-tangerine-9d5a3f013121c319f9cf679d9afc4e40661a0284.tar.gz
go-tangerine-9d5a3f013121c319f9cf679d9afc4e40661a0284.tar.bz2
go-tangerine-9d5a3f013121c319f9cf679d9afc4e40661a0284.tar.lz
go-tangerine-9d5a3f013121c319f9cf679d9afc4e40661a0284.tar.xz
go-tangerine-9d5a3f013121c319f9cf679d9afc4e40661a0284.tar.zst
go-tangerine-9d5a3f013121c319f9cf679d9afc4e40661a0284.zip
Merge branch 'release/0.5.15'
Diffstat (limited to 'ethpub')
-rw-r--r--ethpub/pub.go40
-rw-r--r--ethpub/types.go9
2 files changed, 46 insertions, 3 deletions
diff --git a/ethpub/pub.go b/ethpub/pub.go
index b475453af..1bc9e0ce7 100644
--- a/ethpub/pub.go
+++ b/ethpub/pub.go
@@ -1,14 +1,19 @@
package ethpub
import (
+ "bytes"
"encoding/hex"
+ "encoding/json"
"github.com/ethereum/eth-go/ethchain"
+ "github.com/ethereum/eth-go/ethlog"
"github.com/ethereum/eth-go/ethutil"
"math/big"
"strings"
"sync/atomic"
)
+var logger = ethlog.NewLogger("PUB")
+
type PEthereum struct {
manager ethchain.EthManager
stateManager *ethchain.StateManager
@@ -81,6 +86,36 @@ func (lib *PEthereum) GetCoinBase() string {
return lib.SecretToAddress(hex.EncodeToString(key))
}
+func (lib *PEthereum) GetTransactionsFor(address string, asJson bool) interface{} {
+ sBlk := lib.manager.BlockChain().LastBlockHash
+ blk := lib.manager.BlockChain().GetBlock(sBlk)
+ addr := []byte(ethutil.FromHex(address))
+
+ var txs []*PTx
+
+ for ; blk != nil; blk = lib.manager.BlockChain().GetBlock(sBlk) {
+ sBlk = blk.PrevHash
+
+ // Loop through all transactions to see if we missed any while being offline
+ for _, tx := range blk.Transactions() {
+ if bytes.Compare(tx.Sender(), addr) == 0 || bytes.Compare(tx.Recipient, addr) == 0 {
+ ptx := NewPTx(tx)
+ //TODO: somehow move this to NewPTx
+ ptx.Confirmations = int(lib.manager.BlockChain().LastBlockNumber - blk.BlockInfo().Number)
+ txs = append(txs, ptx)
+ }
+ }
+ }
+ if asJson {
+ txJson, err := json.Marshal(txs)
+ if err != nil {
+ return nil
+ }
+ return string(txJson)
+ }
+ return txs
+}
+
func (lib *PEthereum) GetStorage(address, storageAddress string) string {
return lib.GetStateObject(address).GetStorage(storageAddress)
}
@@ -123,7 +158,6 @@ func GetAddressFromNameReg(stateManager *ethchain.StateManager, name string) []b
return nil
}
-
func (lib *PEthereum) createTx(key, recipient, valueStr, gasStr, gasPriceStr, scriptStr string) (*PReceipt, error) {
var hash []byte
var contractCreation bool
@@ -142,7 +176,7 @@ func (lib *PEthereum) createTx(key, recipient, valueStr, gasStr, gasPriceStr, sc
var keyPair *ethutil.KeyPair
var err error
if key[0:2] == "0x" {
- keyPair, err = ethutil.NewKeyPairFromSec([]byte(ethutil.FromHex(key[0:2])))
+ keyPair, err = ethutil.NewKeyPairFromSec([]byte(ethutil.FromHex(key[2:])))
} else {
keyPair, err = ethutil.NewKeyPairFromSec([]byte(ethutil.FromHex(key)))
}
@@ -191,7 +225,7 @@ func (lib *PEthereum) createTx(key, recipient, valueStr, gasStr, gasPriceStr, sc
lib.txPool.QueueTransaction(tx)
if contractCreation {
- ethutil.Config.Log.Infof("Contract addr %x", tx.CreationAddress())
+ logger.Infof("Contract addr %x", tx.CreationAddress())
}
return NewPReciept(contractCreation, tx.CreationAddress(), tx.Hash(), keyPair.Address()), nil
diff --git a/ethpub/types.go b/ethpub/types.go
index 31b92f6ed..0ced68ad1 100644
--- a/ethpub/types.go
+++ b/ethpub/types.go
@@ -99,6 +99,7 @@ type PTx struct {
Data string `json:"data"`
Contract bool `json:"isContract"`
CreatesContract bool `json:"createsContract"`
+ Confirmations int `json:"confirmations"`
}
func NewPTx(tx *ethchain.Transaction) *PTx {
@@ -244,6 +245,14 @@ func (c *PStateObject) Script() string {
return ""
}
+func (c *PStateObject) HexScript() string {
+ if c.object != nil {
+ return ethutil.Hex(c.object.Script())
+ }
+
+ return ""
+}
+
type PStorageState struct {
StateAddress string
Address string