Merge remote-tracking branch 'upstream/develop' into feature/logging
This commit is contained in:
commit
4141cc39d0
@ -597,7 +597,9 @@ func (vm *Vm) RunClosure(closure *Closure, hook DebugHook) (ret []byte, err erro
|
|||||||
// Generate a new address
|
// Generate a new address
|
||||||
addr := ethutil.CreateAddress(closure.caller.Address(), closure.caller.N())
|
addr := ethutil.CreateAddress(closure.caller.Address(), closure.caller.N())
|
||||||
// Create a new contract
|
// Create a new contract
|
||||||
contract := NewContract(addr, value, []byte(""))
|
contract := vm.state.NewStateObject(addr)
|
||||||
|
contract.Amount = value
|
||||||
|
|
||||||
// Set the init script
|
// Set the init script
|
||||||
contract.initScript = mem.Get(offset.Int64(), size.Int64())
|
contract.initScript = mem.Get(offset.Int64(), size.Int64())
|
||||||
// Transfer all remaining gas to the new
|
// Transfer all remaining gas to the new
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
package ethpub
|
package ethpub
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
"encoding/hex"
|
"encoding/hex"
|
||||||
|
"encoding/json"
|
||||||
"github.com/ethereum/eth-go/ethchain"
|
"github.com/ethereum/eth-go/ethchain"
|
||||||
"github.com/ethereum/eth-go/ethutil"
|
"github.com/ethereum/eth-go/ethutil"
|
||||||
"github.com/ethereum/eth-go/ethlog"
|
"github.com/ethereum/eth-go/ethlog"
|
||||||
@ -84,6 +86,36 @@ func (lib *PEthereum) GetCoinBase() string {
|
|||||||
return lib.SecretToAddress(hex.EncodeToString(key))
|
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 {
|
func (lib *PEthereum) GetStorage(address, storageAddress string) string {
|
||||||
return lib.GetStateObject(address).GetStorage(storageAddress)
|
return lib.GetStateObject(address).GetStorage(storageAddress)
|
||||||
}
|
}
|
||||||
@ -126,7 +158,6 @@ func GetAddressFromNameReg(stateManager *ethchain.StateManager, name string) []b
|
|||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (lib *PEthereum) createTx(key, recipient, valueStr, gasStr, gasPriceStr, scriptStr string) (*PReceipt, error) {
|
func (lib *PEthereum) createTx(key, recipient, valueStr, gasStr, gasPriceStr, scriptStr string) (*PReceipt, error) {
|
||||||
var hash []byte
|
var hash []byte
|
||||||
var contractCreation bool
|
var contractCreation bool
|
||||||
@ -145,7 +176,7 @@ func (lib *PEthereum) createTx(key, recipient, valueStr, gasStr, gasPriceStr, sc
|
|||||||
var keyPair *ethutil.KeyPair
|
var keyPair *ethutil.KeyPair
|
||||||
var err error
|
var err error
|
||||||
if key[0:2] == "0x" {
|
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 {
|
} else {
|
||||||
keyPair, err = ethutil.NewKeyPairFromSec([]byte(ethutil.FromHex(key)))
|
keyPair, err = ethutil.NewKeyPairFromSec([]byte(ethutil.FromHex(key)))
|
||||||
}
|
}
|
||||||
|
@ -99,6 +99,7 @@ type PTx struct {
|
|||||||
Data string `json:"data"`
|
Data string `json:"data"`
|
||||||
Contract bool `json:"isContract"`
|
Contract bool `json:"isContract"`
|
||||||
CreatesContract bool `json:"createsContract"`
|
CreatesContract bool `json:"createsContract"`
|
||||||
|
Confirmations int `json:"confirmations"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewPTx(tx *ethchain.Transaction) *PTx {
|
func NewPTx(tx *ethchain.Transaction) *PTx {
|
||||||
|
@ -6,6 +6,7 @@ import (
|
|||||||
"github.com/ethereum/eth-go/ethpub"
|
"github.com/ethereum/eth-go/ethpub"
|
||||||
"github.com/ethereum/eth-go/ethutil"
|
"github.com/ethereum/eth-go/ethutil"
|
||||||
"math/big"
|
"math/big"
|
||||||
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
type EthereumApi struct {
|
type EthereumApi struct {
|
||||||
@ -174,9 +175,16 @@ func (p *EthereumApi) GetStorageAt(args *GetStorageArgs, reply *string) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
state := p.ethp.GetStateObject(args.Address)
|
state := p.ethp.GetStateObject(args.Address)
|
||||||
// Convert the incoming string (which is a bigint) into hex
|
|
||||||
i, _ := new(big.Int).SetString(args.Key, 10)
|
var hx string
|
||||||
hx := ethutil.Hex(i.Bytes())
|
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)
|
value := state.GetStorage(hx)
|
||||||
*reply = NewSuccessRes(GetStorageAtRes{Address: args.Address, Key: args.Key, Value: value})
|
*reply = NewSuccessRes(GetStorageAtRes{Address: args.Address, Key: args.Key, Value: value})
|
||||||
return nil
|
return nil
|
||||||
|
Loading…
Reference in New Issue
Block a user