diff options
Diffstat (limited to 'xeth/xeth.go')
-rw-r--r-- | xeth/xeth.go | 42 |
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) |