You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
94 lines
2.4 KiB
94 lines
2.4 KiB
// Copyright (c) 2013-2014 The btcsuite developers |
|
// Use of this source code is governed by an ISC |
|
// license that can be found in the LICENSE file. |
|
|
|
package database_test |
|
|
|
import ( |
|
"fmt" |
|
|
|
"github.com/btcsuite/btcd/chaincfg" |
|
"github.com/btcsuite/btcd/database" |
|
_ "github.com/btcsuite/btcd/database/memdb" |
|
"github.com/btcsuite/btcutil" |
|
) |
|
|
|
// This example demonstrates creating a new database and inserting the genesis |
|
// block into it. |
|
func ExampleCreateDB() { |
|
// Notice in these example imports that the memdb driver is loaded. |
|
// Ordinarily this would be whatever driver(s) your application |
|
// requires. |
|
// import ( |
|
// "github.com/btcsuite/btcd/database" |
|
// _ "github.com/btcsuite/btcd/database/memdb" |
|
// ) |
|
|
|
// Create a database and schedule it to be closed on exit. This example |
|
// uses a memory-only database to avoid needing to write anything to |
|
// the disk. Typically, you would specify a persistent database driver |
|
// such as "leveldb" and give it a database name as the second |
|
// parameter. |
|
db, err := database.CreateDB("memdb") |
|
if err != nil { |
|
fmt.Println(err) |
|
return |
|
} |
|
defer db.Close() |
|
|
|
// Insert the main network genesis block. |
|
genesis := btcutil.NewBlock(chaincfg.MainNetParams.GenesisBlock) |
|
newHeight, err := db.InsertBlock(genesis) |
|
if err != nil { |
|
fmt.Println(err) |
|
return |
|
} |
|
|
|
fmt.Println("New height:", newHeight) |
|
|
|
// Output: |
|
// New height: 0 |
|
} |
|
|
|
// exampleLoadDB is used in the example to elide the setup code. |
|
func exampleLoadDB() (database.Db, error) { |
|
db, err := database.CreateDB("memdb") |
|
if err != nil { |
|
return nil, err |
|
} |
|
|
|
// Insert the main network genesis block. |
|
genesis := btcutil.NewBlock(chaincfg.MainNetParams.GenesisBlock) |
|
_, err = db.InsertBlock(genesis) |
|
if err != nil { |
|
return nil, err |
|
} |
|
|
|
return db, err |
|
} |
|
|
|
// This example demonstrates querying the database for the most recent best |
|
// block height and hash. |
|
func ExampleDb_newestSha() { |
|
// Load a database for the purposes of this example and schedule it to |
|
// be closed on exit. See the CreateDB example for more details on what |
|
// this step is doing. |
|
db, err := exampleLoadDB() |
|
if err != nil { |
|
fmt.Println(err) |
|
return |
|
} |
|
defer db.Close() |
|
|
|
latestHash, latestHeight, err := db.NewestSha() |
|
if err != nil { |
|
fmt.Println(err) |
|
return |
|
} |
|
fmt.Println("Latest hash:", latestHash) |
|
fmt.Println("Latest height:", latestHeight) |
|
|
|
// Output: |
|
// Latest hash: 000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f |
|
// Latest height: 0 |
|
}
|
|
|