aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorzelig <viktor.tron@gmail.com>2014-06-25 23:13:27 +0800
committerzelig <viktor.tron@gmail.com>2014-06-25 23:13:27 +0800
commit4141cc39d0aa3956313aa4aa912ad81858f9bbc3 (patch)
tree4ada58c75c1d82fc65cb6ef4e6ec48e0c8604993
parentf58c7ac5a6f5d77649c1c07dce94bf6d5c146c31 (diff)
parentd8c675afbf98178ffa447e4d36b77bbdad3f9ec0 (diff)
downloaddexon-4141cc39d0aa3956313aa4aa912ad81858f9bbc3.tar
dexon-4141cc39d0aa3956313aa4aa912ad81858f9bbc3.tar.gz
dexon-4141cc39d0aa3956313aa4aa912ad81858f9bbc3.tar.bz2
dexon-4141cc39d0aa3956313aa4aa912ad81858f9bbc3.tar.lz
dexon-4141cc39d0aa3956313aa4aa912ad81858f9bbc3.tar.xz
dexon-4141cc39d0aa3956313aa4aa912ad81858f9bbc3.tar.zst
dexon-4141cc39d0aa3956313aa4aa912ad81858f9bbc3.zip
Merge remote-tracking branch 'upstream/develop' into feature/logging
-rw-r--r--ethchain/vm.go4
-rw-r--r--ethpub/pub.go35
-rw-r--r--ethpub/types.go1
-rw-r--r--ethrpc/packages.go14
4 files changed, 48 insertions, 6 deletions
diff --git a/ethchain/vm.go b/ethchain/vm.go
index 3a999f0a4..66005e814 100644
--- a/ethchain/vm.go
+++ b/ethchain/vm.go
@@ -597,7 +597,9 @@ func (vm *Vm) RunClosure(closure *Closure, hook DebugHook) (ret []byte, err erro
// Generate a new address
addr := ethutil.CreateAddress(closure.caller.Address(), closure.caller.N())
// Create a new contract
- contract := NewContract(addr, value, []byte(""))
+ contract := vm.state.NewStateObject(addr)
+ contract.Amount = value
+
// Set the init script
contract.initScript = mem.Get(offset.Int64(), size.Int64())
// Transfer all remaining gas to the new
diff --git a/ethpub/pub.go b/ethpub/pub.go
index a49ee2f12..647e689ce 100644
--- a/ethpub/pub.go
+++ b/ethpub/pub.go
@@ -1,7 +1,9 @@
package ethpub
import (
+ "bytes"
"encoding/hex"
+ "encoding/json"
"github.com/ethereum/eth-go/ethchain"
"github.com/ethereum/eth-go/ethutil"
"github.com/ethereum/eth-go/ethlog"
@@ -84,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)
}
@@ -126,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
@@ -145,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)))
}
diff --git a/ethpub/types.go b/ethpub/types.go
index 352598148..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 {
diff --git a/ethrpc/packages.go b/ethrpc/packages.go
index 1c4fb99f6..3f57f6982 100644
--- a/ethrpc/packages.go
+++ b/ethrpc/packages.go
@@ -6,6 +6,7 @@ import (
"github.com/ethereum/eth-go/ethpub"
"github.com/ethereum/eth-go/ethutil"
"math/big"
+ "strings"
)
type EthereumApi struct {
@@ -174,9 +175,16 @@ func (p *EthereumApi) GetStorageAt(args *GetStorageArgs, reply *string) error {
return err
}
state := p.ethp.GetStateObject(args.Address)
- // Convert the incoming string (which is a bigint) into hex
- i, _ := new(big.Int).SetString(args.Key, 10)
- hx := ethutil.Hex(i.Bytes())
+
+ var hx string
+ if strings.Index(args.Key, "0x") == 0 {
+ hx = string([]byte(args.Key)[2:])
+ } else {
+ // Convert the incoming string (which is a bigint) into hex
+ i, _ := new(big.Int).SetString(args.Key, 10)
+ hx = ethutil.Hex(i.Bytes())
+ }
+ ethutil.Config.Log.Debugf("[JSON] GetStorageAt(%s, %s)\n", args.Address, hx)
value := state.GetStorage(hx)
*reply = NewSuccessRes(GetStorageAtRes{Address: args.Address, Key: args.Key, Value: value})
return nil