github.com/ava-labs/subnet-evm@v0.6.4/trie/trie_id.go (about) 1 // (c) 2023, Ava Labs, Inc. 2 // 3 // This file is a derived work, based on the go-ethereum library whose original 4 // notices appear below. 5 // 6 // It is distributed under a license compatible with the licensing terms of the 7 // original code from which it is derived. 8 // 9 // Much love to the original authors for their work. 10 // ********** 11 // Copyright 2022 The go-ethereum Authors 12 // This file is part of the go-ethereum library. 13 // 14 // The go-ethereum library is free software: you can redistribute it and/or modify 15 // it under the terms of the GNU Lesser General Public License as published by 16 // the Free Software Foundation, either version 3 of the License, or 17 // (at your option) any later version. 18 // 19 // The go-ethereum library is distributed in the hope that it will be useful, 20 // but WITHOUT ANY WARRANTY; without even the implied warranty of 21 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 22 // GNU Lesser General Public License for more details. 23 // 24 // You should have received a copy of the GNU Lesser General Public License 25 // along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/> 26 27 package trie 28 29 import "github.com/ethereum/go-ethereum/common" 30 31 // ID is the identifier for uniquely identifying a trie. 32 type ID struct { 33 StateRoot common.Hash // The root of the corresponding state(block.root) 34 Owner common.Hash // The contract address hash which the trie belongs to 35 Root common.Hash // The root hash of trie 36 } 37 38 // StateTrieID constructs an identifier for state trie with the provided state root. 39 func StateTrieID(root common.Hash) *ID { 40 return &ID{ 41 StateRoot: root, 42 Owner: common.Hash{}, 43 Root: root, 44 } 45 } 46 47 // StorageTrieID constructs an identifier for storage trie which belongs to a certain 48 // state and contract specified by the stateRoot and owner. 49 func StorageTrieID(stateRoot common.Hash, owner common.Hash, root common.Hash) *ID { 50 return &ID{ 51 StateRoot: stateRoot, 52 Owner: owner, 53 Root: root, 54 } 55 } 56 57 // TrieID constructs an identifier for a standard trie(not a second-layer trie) 58 // with provided root. It's mostly used in tests and some other tries like CHT trie. 59 func TrieID(root common.Hash) *ID { 60 return &ID{ 61 StateRoot: root, 62 Owner: common.Hash{}, 63 Root: root, 64 } 65 }