aboutsummaryrefslogtreecommitdiffstats
path: root/xeth/xeth.go
diff options
context:
space:
mode:
Diffstat (limited to 'xeth/xeth.go')
-rw-r--r--xeth/xeth.go42
1 files changed, 24 insertions, 18 deletions
diff --git a/xeth/xeth.go b/xeth/xeth.go
index 70172a1c8..cf500cd59 100644
--- a/xeth/xeth.go
+++ b/xeth/xeth.go
@@ -32,12 +32,14 @@ type Backend interface {
Peers() []*p2p.Peer
BlockDb() ethutil.Database
StateDb() ethutil.Database
+ ExtraDb() ethutil.Database
EventMux() *event.TypeMux
Whisper() *whisper.Whisper
IsMining() bool
StartMining() error
StopMining()
+ Version() string
}
// Frontend should be implemented by users of XEth. Its methods are
@@ -114,19 +116,27 @@ func (self *XEth) State() *State { return self.state }
func (self *XEth) Whisper() *Whisper { return self.whisper }
func (self *XEth) BlockByHash(strHash string) *Block {
- hash := fromHex(strHash)
+ hash := ethutil.FromHex(strHash)
block := self.chainManager.GetBlock(hash)
return NewBlock(block)
}
func (self *XEth) EthBlockByHash(strHash string) *types.Block {
- hash := fromHex(strHash)
+ hash := ethutil.FromHex(strHash)
block := self.chainManager.GetBlock(hash)
return block
}
+func (self *XEth) EthTransactionByHash(hash string) *types.Transaction {
+ data, _ := self.eth.ExtraDb().Get(ethutil.FromHex(hash))
+ if len(data) != 0 {
+ return types.NewTransactionFromBytes(data)
+ }
+ return nil
+}
+
func (self *XEth) BlockByNumber(num int64) *Block {
if num == -1 {
return NewBlock(self.chainManager.CurrentBlock())
@@ -223,7 +233,7 @@ func (self *XEth) IsContract(address string) bool {
}
func (self *XEth) SecretToAddress(key string) string {
- pair, err := crypto.NewKeyPairFromSec(fromHex(key))
+ pair, err := crypto.NewKeyPairFromSec(ethutil.FromHex(key))
if err != nil {
return ""
}
@@ -231,10 +241,6 @@ func (self *XEth) SecretToAddress(key string) string {
return toHex(pair.Address())
}
-func (self *XEth) Execute(addr, value, gas, price, data string) (string, error) {
- return "", nil
-}
-
type KeyVal struct {
Key string `json:"key"`
Value string `json:"value"`
@@ -267,7 +273,7 @@ func (self *XEth) FromAscii(str string) string {
str = str[2:]
}
- return string(bytes.Trim(fromHex(str), "\x00"))
+ return string(bytes.Trim(ethutil.FromHex(str), "\x00"))
}
func (self *XEth) FromNumber(str string) string {
@@ -275,11 +281,11 @@ func (self *XEth) FromNumber(str string) string {
str = str[2:]
}
- return ethutil.BigD(fromHex(str)).String()
+ return ethutil.BigD(ethutil.FromHex(str)).String()
}
func (self *XEth) PushTx(encodedTx string) (string, error) {
- tx := types.NewTransactionFromBytes(fromHex(encodedTx))
+ tx := types.NewTransactionFromBytes(ethutil.FromHex(encodedTx))
err := self.eth.TxPool().Add(tx)
if err != nil {
return "", err
@@ -300,12 +306,12 @@ var (
func (self *XEth) Call(fromStr, toStr, valueStr, gasStr, gasPriceStr, dataStr string) (string, error) {
statedb := self.State().State() //self.chainManager.TransState()
msg := callmsg{
- from: statedb.GetOrNewStateObject(fromHex(fromStr)),
- to: fromHex(toStr),
+ from: statedb.GetOrNewStateObject(ethutil.FromHex(fromStr)),
+ to: ethutil.FromHex(toStr),
gas: ethutil.Big(gasStr),
gasPrice: ethutil.Big(gasPriceStr),
value: ethutil.Big(valueStr),
- data: fromHex(dataStr),
+ data: ethutil.FromHex(dataStr),
}
if msg.gas.Cmp(big.NewInt(0)) == 0 {
msg.gas = defaultGas
@@ -333,9 +339,9 @@ func (self *XEth) Transact(fromStr, toStr, valueStr, gasStr, gasPriceStr, codeSt
contractCreation bool
)
- from = fromHex(fromStr)
- data = fromHex(codeStr)
- to = fromHex(toStr)
+ from = ethutil.FromHex(fromStr)
+ data = ethutil.FromHex(codeStr)
+ to = ethutil.FromHex(toStr)
if len(to) == 0 {
contractCreation = true
}
@@ -348,7 +354,7 @@ func (self *XEth) Transact(fromStr, toStr, valueStr, gasStr, gasPriceStr, codeSt
}
state := self.chainManager.TxState()
- nonce := state.GetNonce(from)
+ nonce := state.NewNonce(from) //state.GetNonce(from)
tx.SetNonce(nonce)
if err := self.sign(tx, from, false); err != nil {
@@ -357,7 +363,7 @@ func (self *XEth) Transact(fromStr, toStr, valueStr, gasStr, gasPriceStr, codeSt
if err := self.eth.TxPool().Add(tx); err != nil {
return "", err
}
- state.SetNonce(from, nonce+1)
+ //state.IncrementNonce(from)
if contractCreation {
addr := core.AddressFromMessage(tx)