From a56f78af67ba2b515f396d7a150ac86f6a75335f Mon Sep 17 00:00:00 2001 From: Maran Date: Wed, 4 Jun 2014 15:54:39 +0200 Subject: [PATCH] Implement getStateKeyVal for JS bindings. Gives JS the option to 'loop' over contract key/val storage --- ethpub/types.go | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) 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()), " ")