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