aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorobscuren <geffobscura@gmail.com>2014-05-05 17:56:25 +0800
committerobscuren <geffobscura@gmail.com>2014-05-05 17:56:25 +0800
commit7c91159449c528daa099aec5a3744aa8a6b5a826 (patch)
treee25dc33bdd0d833aceb99fea06c93181a0e59c57
parent1f6df0cd522842095c5ca723d2e11fc6b97b8b6a (diff)
downloaddexon-7c91159449c528daa099aec5a3744aa8a6b5a826.tar
dexon-7c91159449c528daa099aec5a3744aa8a6b5a826.tar.gz
dexon-7c91159449c528daa099aec5a3744aa8a6b5a826.tar.bz2
dexon-7c91159449c528daa099aec5a3744aa8a6b5a826.tar.lz
dexon-7c91159449c528daa099aec5a3744aa8a6b5a826.tar.xz
dexon-7c91159449c528daa099aec5a3744aa8a6b5a826.tar.zst
dexon-7c91159449c528daa099aec5a3744aa8a6b5a826.zip
Added different storage notification object
-rw-r--r--ethchain/state_manager.go2
-rw-r--r--ethchain/state_object.go6
-rw-r--r--ethpub/pub.go12
-rw-r--r--ethpub/types.go36
4 files changed, 45 insertions, 11 deletions
diff --git a/ethchain/state_manager.go b/ethchain/state_manager.go
index 02d0345d7..501ec102b 100644
--- a/ethchain/state_manager.go
+++ b/ethchain/state_manager.go
@@ -350,7 +350,7 @@ func (sm *StateManager) notifyChanges() {
for stateObjectAddr, mappedObjects := range sm.manifest.storageChanges {
for addr, value := range mappedObjects {
- sm.Ethereum.Reactor().Post("storage:"+stateObjectAddr+":"+addr, value.String())
+ sm.Ethereum.Reactor().Post("storage:"+stateObjectAddr+":"+addr, &StorageState{[]byte(stateObjectAddr), []byte(addr), value})
}
}
}
diff --git a/ethchain/state_object.go b/ethchain/state_object.go
index 4ec91d2e0..617646077 100644
--- a/ethchain/state_object.go
+++ b/ethchain/state_object.go
@@ -186,3 +186,9 @@ type CachedStateObject struct {
Nonce uint64
Object *StateObject
}
+
+type StorageState struct {
+ StateAddress []byte
+ Address []byte
+ Value *big.Int
+}
diff --git a/ethpub/pub.go b/ethpub/pub.go
index c6f177124..5f23018f7 100644
--- a/ethpub/pub.go
+++ b/ethpub/pub.go
@@ -47,6 +47,18 @@ func (lib *PEthereum) GetStateObject(address string) *PStateObject {
return NewPStateObject(nil)
}
+func (lib *PEthereum) GetStorage(address, storageAddress string) string {
+ return lib.GetStateObject(address).GetStorage(storageAddress)
+}
+
+func (lib *PEthereum) GetTxCount(address string) int {
+ return lib.GetStateObject(address).Nonce()
+}
+
+func (lib *PEthereum) IsContract(address string) bool {
+ return lib.GetStateObject(address).IsContract()
+}
+
func (lib *PEthereum) Transact(key, recipient, valueStr, gasStr, gasPriceStr, dataStr string) (*PReceipt, error) {
return lib.createTx(key, recipient, valueStr, gasStr, gasPriceStr, dataStr, "")
}
diff --git a/ethpub/types.go b/ethpub/types.go
index bf06ce2f6..7ae476339 100644
--- a/ethpub/types.go
+++ b/ethpub/types.go
@@ -59,16 +59,6 @@ func NewPReciept(contractCreation bool, creationAddress, hash, address []byte) *
}
}
-/*
-type PKeyRing struct {
- Keys []interface{}
-}
-
-func NewPKeyRing(keys []interface{}) *PKeyRing {
- return &PKeyRing{Keys: keys}
-}
-*/
-
type PStateObject struct {
object *ethchain.StateObject
}
@@ -105,3 +95,29 @@ func (c *PStateObject) Address() string {
return ""
}
+
+func (c *PStateObject) Nonce() int {
+ if c.object != nil {
+ return int(c.object.Nonce)
+ }
+
+ return 0
+}
+
+func (c *PStateObject) IsContract() bool {
+ if c.object != nil {
+ return len(c.object.Script()) > 0
+ }
+
+ return false
+}
+
+type PStorageState struct {
+ StateAddress string
+ Address string
+ Value string
+}
+
+func NewPStorageState(storageObject *ethchain.StorageState) *PStorageState {
+ return &PStorageState{ethutil.Hex(storageObject.StateAddress), ethutil.Hex(storageObject.Address), storageObject.Value.String()}
+}