github.com/MetalBlockchain/metalgo@v1.11.9/chains/atomic/prefixes.go (about) 1 // Copyright (C) 2019-2024, Ava Labs, Inc. All rights reserved. 2 // See the file LICENSE for licensing terms. 3 4 package atomic 5 6 import ( 7 "bytes" 8 9 "github.com/MetalBlockchain/metalgo/database" 10 "github.com/MetalBlockchain/metalgo/database/prefixdb" 11 "github.com/MetalBlockchain/metalgo/ids" 12 ) 13 14 var ( 15 inboundSmallerValuePrefix = []byte{0} 16 inboundSmallerIndexPrefix = []byte{1} 17 inboundLargerValuePrefix = []byte{2} 18 inboundLargerIndexPrefix = []byte{3} 19 20 // note that inbound and outbound have their smaller and larger values 21 // swapped 22 23 // inbound specifies the prefixes to use for inbound shared memory 24 // ie. reading and deleting a message received from another chain. 25 inbound = prefixes{ 26 smallerValuePrefix: inboundSmallerValuePrefix, 27 smallerIndexPrefix: inboundSmallerIndexPrefix, 28 largerValuePrefix: inboundLargerValuePrefix, 29 largerIndexPrefix: inboundLargerIndexPrefix, 30 } 31 // outbound specifies the prefixes to use for outbound shared memory 32 // ie. writing a message to another chain. 33 outbound = prefixes{ 34 smallerValuePrefix: inboundLargerValuePrefix, 35 smallerIndexPrefix: inboundLargerIndexPrefix, 36 largerValuePrefix: inboundSmallerValuePrefix, 37 largerIndexPrefix: inboundSmallerIndexPrefix, 38 } 39 ) 40 41 type prefixes struct { 42 smallerValuePrefix []byte 43 smallerIndexPrefix []byte 44 largerValuePrefix []byte 45 largerIndexPrefix []byte 46 } 47 48 func (p *prefixes) getValueDB(myChainID, peerChainID ids.ID, db database.Database) database.Database { 49 if bytes.Compare(myChainID[:], peerChainID[:]) == -1 { 50 return prefixdb.New(p.smallerValuePrefix, db) 51 } 52 return prefixdb.New(p.largerValuePrefix, db) 53 } 54 55 func (p *prefixes) getValueAndIndexDB(myChainID, peerChainID ids.ID, db database.Database) (database.Database, database.Database) { 56 var valueDB, indexDB database.Database 57 if bytes.Compare(myChainID[:], peerChainID[:]) == -1 { 58 valueDB = prefixdb.New(p.smallerValuePrefix, db) 59 indexDB = prefixdb.New(p.smallerIndexPrefix, db) 60 } else { 61 valueDB = prefixdb.New(p.largerValuePrefix, db) 62 indexDB = prefixdb.New(p.largerIndexPrefix, db) 63 } 64 return valueDB, indexDB 65 }