github.com/linapex/ethereum-go-chinese@v0.0.0-20190316121929-f8b7a73c3fa1/swarm/storage/mock/mock.go (about)

     1  
     2  //<developer>
     3  //    <name>linapex 曹一峰</name>
     4  //    <email>linapex@163.com</email>
     5  //    <wx>superexc</wx>
     6  //    <qqgroup>128148617</qqgroup>
     7  //    <url>https://jsq.ink</url>
     8  //    <role>pku engineer</role>
     9  //    <date>2019-03-16 19:16:45</date>
    10  //</624450120787693568>
    11  
    12  
    13  //包模拟定义了不同实现使用的类型
    14  //模拟仓库。
    15  //
    16  //模拟存储的实现位于目录中
    17  //在此包下:
    18  //
    19  //-db-leveldb后端
    20  //-mem-内存映射后端
    21  //-rpc-可以连接到其他后端的rpc客户端
    22  //
    23  //模拟存储可以实现导入和导出接口
    24  //用于导入和导出它们包含的所有块数据。
    25  //导出的文件是一个tar存档,其中所有文件的名称为
    26  //块键和内容的十六进制表示法
    27  //具有json编码的exportedchunk结构。导出格式
    28  //应该在所有模拟存储实现中保留。
    29  package mock
    30  
    31  import (
    32  	"errors"
    33  	"io"
    34  
    35  	"github.com/ethereum/go-ethereum/common"
    36  )
    37  
    38  //errnotfound表示找不到块。
    39  var ErrNotFound = errors.New("not found")
    40  
    41  //nodestore保存节点地址和对globalStore的引用
    42  //为了只访问和存储一个节点的块数据。
    43  type NodeStore struct {
    44  	store GlobalStorer
    45  	addr  common.Address
    46  }
    47  
    48  //new nodestore创建nodestore的新实例
    49  //使用提供地址的GlobalStrer对数据进行分组。
    50  func NewNodeStore(addr common.Address, store GlobalStorer) *NodeStore {
    51  	return &NodeStore{
    52  		store: store,
    53  		addr:  addr,
    54  	}
    55  }
    56  
    57  //get返回具有地址的节点的键的块数据
    58  //在节点存储初始化时提供。
    59  func (n *NodeStore) Get(key []byte) (data []byte, err error) {
    60  	return n.store.Get(n.addr, key)
    61  }
    62  
    63  //Put为具有地址的节点的键保存块数据
    64  //在节点存储初始化时提供。
    65  func (n *NodeStore) Put(key []byte, data []byte) error {
    66  	return n.store.Put(n.addr, key, data)
    67  }
    68  
    69  //删除删除具有地址的节点的键的块数据
    70  //在节点存储初始化时提供。
    71  func (n *NodeStore) Delete(key []byte) error {
    72  	return n.store.Delete(n.addr, key)
    73  }
    74  
    75  //GlobalStrer定义模拟数据库存储的方法
    76  //存储所有群节点的块数据。
    77  //在测试中用来构造模拟节点库
    78  //并跟踪和验证块。
    79  type GlobalStorer interface {
    80  	Get(addr common.Address, key []byte) (data []byte, err error)
    81  	Put(addr common.Address, key []byte, data []byte) error
    82  	Delete(addr common.Address, key []byte) error
    83  	HasKey(addr common.Address, key []byte) bool
    84  //newnodestore创建nodestore的实例
    85  //用于单个群节点
    86  //地址地址
    87  	NewNodeStore(addr common.Address) *NodeStore
    88  }
    89  
    90  //导入程序定义导入模拟存储数据的方法
    91  //从导出的tar存档。
    92  type Importer interface {
    93  	Import(r io.Reader) (n int, err error)
    94  }
    95  
    96  //导出器定义用于导出模拟存储数据的方法
    97  //去焦油档案馆。
    98  type Exporter interface {
    99  	Export(w io.Writer) (n int, err error)
   100  }
   101  
   102  //exportedchunk是保存在tar存档中的结构,用于
   103  //每个块都是JSON编码的字节。
   104  type ExportedChunk struct {
   105  	Data  []byte           `json:"d"`
   106  	Addrs []common.Address `json:"a"`
   107  }
   108