diff options
author | Maran <maran.hidskes@gmail.com> | 2014-06-04 21:54:39 +0800 |
---|---|---|
committer | Maran <maran.hidskes@gmail.com> | 2014-06-04 21:54:39 +0800 |
commit | a56f78af67ba2b515f396d7a150ac86f6a75335f (patch) | |
tree | 048e5b78719ab7e1a1cc96e573b5ebaf8085269e /ethpub | |
parent | d7b882977c4289bc2aabb51e1cf6b3577bc02aca (diff) | |
download | dexon-a56f78af67ba2b515f396d7a150ac86f6a75335f.tar.gz dexon-a56f78af67ba2b515f396d7a150ac86f6a75335f.tar.zst dexon-a56f78af67ba2b515f396d7a150ac86f6a75335f.zip |
Implement getStateKeyVal for JS bindings.
Gives JS the option to 'loop' over contract key/val storage
Diffstat (limited to 'ethpub')
-rw-r--r-- | ethpub/types.go | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/ethpub/types.go b/ethpub/types.go index 4967eda49..6893c7e09 100644 --- a/ethpub/types.go +++ b/ethpub/types.go @@ -207,6 +207,31 @@ func (c *PStateObject) IsContract() bool { return false } +type KeyVal struct { + Key string + Value string +} + +func (c *PStateObject) StateKeyVal(asJson bool) interface{} { + var values []KeyVal + if c.object != nil { + c.object.State().EachStorage(func(name string, value *ethutil.Value) { + values = append(values, KeyVal{name, ethutil.Hex(value.Bytes())}) + }) + } + + if asJson { + valuesJson, err := json.Marshal(values) + if err != nil { + return nil + } + fmt.Println(string(valuesJson)) + return string(valuesJson) + } + + return values +} + func (c *PStateObject) Script() string { if c.object != nil { return strings.Join(ethchain.Disassemble(c.object.Script()), " ") |