瀏覽代碼

Block size

obscuren 11 年之前
父節點
當前提交
6afc16399f
共有 4 個文件被更改,包括 35 次插入2 次删除
  1. 6 1
      ethchain/block.go
  2. 2 1
      ethpipe/js_types.go
  3. 15 0
      ethutil/size.go
  4. 12 0
      ethutil/size_test.go

+ 6 - 1
ethchain/block.go

@@ -351,7 +351,7 @@ func (block *Block) header() []interface{} {
 
 func (block *Block) String() string {
 	return fmt.Sprintf(`
-	BLOCK(%x):
+	BLOCK(%x): Size: %v
 	PrevHash:   %x
 	UncleSha:   %x
 	Coinbase:   %x
@@ -368,6 +368,7 @@ func (block *Block) String() string {
 	NumTx:      %v
 `,
 		block.Hash(),
+		block.Size(),
 		block.PrevHash,
 		block.UncleSha,
 		block.Coinbase,
@@ -384,3 +385,7 @@ func (block *Block) String() string {
 		len(block.transactions),
 	)
 }
+
+func (self *Block) Size() ethutil.StorageSize {
+	return ethutil.StorageSize(len(self.RlpEncode()))
+}

+ 2 - 1
ethpipe/js_types.go

@@ -14,6 +14,7 @@ import (
 // Block interface exposed to QML
 type JSBlock struct {
 	ref          *ethchain.Block
+	Size         string `json:"size"`
 	Number       int    `json:"number"`
 	Hash         string `json:"hash"`
 	Transactions string `json:"transactions"`
@@ -40,7 +41,7 @@ func NewJSBlock(block *ethchain.Block) *JSBlock {
 		return nil
 	}
 
-	return &JSBlock{ref: block, Number: int(block.Number.Uint64()), GasUsed: block.GasUsed.String(), GasLimit: block.GasLimit.String(), Hash: ethutil.Bytes2Hex(block.Hash()), Transactions: string(txJson), Time: block.Time, Coinbase: ethutil.Bytes2Hex(block.Coinbase)}
+	return &JSBlock{ref: block, Size: block.Size().String(), Number: int(block.Number.Uint64()), GasUsed: block.GasUsed.String(), GasLimit: block.GasLimit.String(), Hash: ethutil.Bytes2Hex(block.Hash()), Transactions: string(txJson), Time: block.Time, Coinbase: ethutil.Bytes2Hex(block.Coinbase)}
 }
 
 func (self *JSBlock) ToString() string {

+ 15 - 0
ethutil/size.go

@@ -0,0 +1,15 @@
+package ethutil
+
+import "fmt"
+
+type StorageSize float64
+
+func (self StorageSize) String() string {
+	if self > 1000000 {
+		return fmt.Sprintf("%.2f mB", self/1000000)
+	} else if self > 1000 {
+		return fmt.Sprintf("%.2f kB", self/1000)
+	} else {
+		return fmt.Sprintf("%.2f B", self)
+	}
+}

+ 12 - 0
ethutil/size_test.go

@@ -0,0 +1,12 @@
+package ethutil
+
+import (
+	"fmt"
+	"testing"
+)
+
+func TestSize(t *testing.T) {
+	fmt.Println(StorageSize(2381273))
+	fmt.Println(StorageSize(2192))
+	fmt.Println(StorageSize(12))
+}