aboutsummaryrefslogtreecommitdiffstats
path: root/vm
diff options
context:
space:
mode:
Diffstat (limited to 'vm')
-rw-r--r--vm/log.go33
-rw-r--r--vm/vm_debug.go4
2 files changed, 33 insertions, 4 deletions
diff --git a/vm/log.go b/vm/log.go
index 954d2ec91..bc72a0423 100644
--- a/vm/log.go
+++ b/vm/log.go
@@ -1,9 +1,38 @@
package vm
-import "math/big"
+import "github.com/ethereum/go-ethereum/ethutil"
type Log struct {
Address []byte
- Topics []*big.Int
+ Topics [][]byte
Data []byte
}
+
+func NewLogFromValue(decoder *ethutil.Value) Log {
+ log := Log{
+ Address: decoder.Get(0).Bytes(),
+ Data: decoder.Get(2).Bytes(),
+ }
+
+ it := decoder.Get(1).NewIterator()
+ for it.Next() {
+ log.Topics = append(log.Topics, it.Value().Bytes())
+ }
+
+ return log
+}
+
+func (self Log) RlpData() interface{} {
+ return []interface{}{self.Address, ethutil.ByteSliceToInterface(self.Topics), self.Data}
+}
+
+type Logs []Log
+
+func (self Logs) RlpData() interface{} {
+ data := make([]interface{}, len(self))
+ for i, log := range self {
+ data[i] = log.RlpData()
+ }
+
+ return data
+}
diff --git a/vm/vm_debug.go b/vm/vm_debug.go
index 1e45813bc..b3fbfe341 100644
--- a/vm/vm_debug.go
+++ b/vm/vm_debug.go
@@ -704,11 +704,11 @@ func (self *DebugVm) RunClosure(closure *Closure) (ret []byte, err error) {
self.Printf(" => [%d] %x [0] %x", n, x.Bytes(), y.Bytes())
case LOG0, LOG1, LOG2, LOG3, LOG4:
n := int(op - LOG0)
- topics := make([]*big.Int, n)
+ topics := make([][]byte, n)
mSize, mStart := stack.Pop().Int64(), stack.Pop().Int64()
data := mem.Geti(mStart, mSize)
for i := 0; i < n; i++ {
- topics[i] = stack.Pop()
+ topics[i] = stack.Pop().Bytes()
}
self.env.AddLog(Log{closure.Address(), topics, data})
case MLOAD: