本文整理汇总了Golang中github.com/decred/dcrd/chaincfg/chainhash.Hash类的典型用法代码示例。如果您正苦于以下问题:Golang Hash类的具体用法?Golang Hash怎么用?Golang Hash使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Hash类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: updateSSRtxRecord
// updateSSRtxRecord updates an SSRtx record in the SSRtx records bucket.
func updateSSRtxRecord(tx walletdb.Tx, hash *chainhash.Hash,
record *ssrtxRecord) error {
// Fetch the current content of the key.
// Possible buggy behaviour: If deserialization fails,
// we won't detect it here. We assume we're throwing
// ErrSSRtxsNotFound.
oldRecords, _ := fetchSSRtxRecords(tx, hash)
// Don't reinsert records we already have.
if ssrtxRecordExistsInRecords(record, oldRecords) {
return nil
}
bucket := tx.RootBucket().Bucket(ssrtxRecordsBucketName)
var records []*ssrtxRecord
// Either create a slice if currently nothing exists for this
// key in the db, or append the entry to the slice.
if oldRecords == nil {
records = make([]*ssrtxRecord, 1)
records[0] = record
} else {
records = append(oldRecords, record)
}
// Write the serialized SSRtxs keyed by the sstx hash.
serializedSSRtxsRecords := serializeSSRtxRecords(records)
err := bucket.Put(hash.Bytes(), serializedSSRtxsRecords)
if err != nil {
str := fmt.Sprintf("failed to store ssrtx records '%s'", hash)
return stakeStoreError(ErrDatabase, str, err)
}
return nil
}
开发者ID:frankbraun,项目名称:dcrwallet,代码行数:36,代码来源:db.go
示例2: FetchHeightRange
// FetchHeightRange looks up a range of blocks by the start and ending
// heights. Fetch is inclusive of the start height and exclusive of the
// ending height. To fetch all hashes from the start height until no
// more are present, use the special id `AllShas'.
func (db *LevelDb) FetchHeightRange(startHeight, endHeight int64) (rshalist []chainhash.Hash, err error) {
db.dbLock.Lock()
defer db.dbLock.Unlock()
var endidx int64
if endHeight == database.AllShas {
endidx = startHeight + 500
} else {
endidx = endHeight
}
shalist := make([]chainhash.Hash, 0, endidx-startHeight)
for height := startHeight; height < endidx; height++ {
// TODO(drahn) fix blkFile from height
key := int64ToKey(height)
blkVal, lerr := db.lDb.Get(key, db.ro)
if lerr != nil {
break
}
var sha chainhash.Hash
sha.SetBytes(blkVal[0:32])
shalist = append(shalist, sha)
}
if err != nil {
return
}
//log.Tracef("FetchIdxRange idx %v %v returned %v shas err %v", startHeight, endHeight, len(shalist), err)
return shalist, nil
}
开发者ID:ironbits,项目名称:dcrd,代码行数:37,代码来源:block.go
示例3: parsesha
func parsesha(argstr string) (argtype int, height int64, psha *chainhash.Hash, err error) {
var sha chainhash.Hash
var hashbuf string
switch len(argstr) {
case 64:
hashbuf = argstr
case 66:
if argstr[0:2] != "0x" {
log.Infof("prefix is %v", argstr[0:2])
err = ErrBadShaPrefix
return
}
hashbuf = argstr[2:]
default:
if len(argstr) <= 16 {
// assume value is height
argtype = ArgHeight
var h int
h, err = strconv.Atoi(argstr)
if err == nil {
height = int64(h)
return
}
log.Infof("Unable to parse height %v, err %v", height, err)
}
err = ErrBadShaLen
return
}
var buf [32]byte
for idx, ch := range hashbuf {
var val rune
switch {
case ch >= '0' && ch <= '9':
val = ch - '0'
case ch >= 'a' && ch <= 'f':
val = ch - 'a' + rune(10)
case ch >= 'A' && ch <= 'F':
val = ch - 'A' + rune(10)
default:
err = ErrBadShaChar
return
}
b := buf[31-idx/2]
if idx&1 == 1 {
b |= byte(val)
} else {
b |= (byte(val) << 4)
}
buf[31-idx/2] = b
}
sha.SetBytes(buf[0:32])
psha = &sha
return
}
开发者ID:ironbits,项目名称:dcrd,代码行数:58,代码来源:showblock.go
示例4: GetBlockAsync
// GetBlockAsync returns an instance of a type that can be used to get the
// result of the RPC at some future time by invoking the Receive function on the
// returned instance.
//
// See GetBlock for the blocking version and more details.
func (c *Client) GetBlockAsync(blockHash *chainhash.Hash) FutureGetBlockResult {
hash := ""
if blockHash != nil {
hash = blockHash.String()
}
cmd := dcrjson.NewGetBlockCmd(hash, dcrjson.Bool(false), nil)
return c.sendCmd(cmd)
}
开发者ID:decred,项目名称:dcrrpcclient,代码行数:14,代码来源:chain.go
示例5: hashInSlice
// hashInSlice returns whether a hash exists in a slice or not.
func hashInSlice(h *chainhash.Hash, list []*chainhash.Hash) bool {
for _, hash := range list {
if h.IsEqual(hash) {
return true
}
}
return false
}
开发者ID:alexlyp,项目名称:dcrd,代码行数:10,代码来源:ticketdb_test.go
示例6: GetHeadersAsync
// GetHeadersAsync returns an instance of a type that can be used to get the result
// of the RPC at some future time by invoking the Receive function on the returned instance.
//
// See GetHeaders for the blocking version and more details.
func (c *Client) GetHeadersAsync(blockLocators []chainhash.Hash, hashStop *chainhash.Hash) FutureGetHeadersResult {
concatenatedLocators := make([]byte, chainhash.HashSize*len(blockLocators))
for i := range blockLocators {
copy(concatenatedLocators[i*chainhash.HashSize:], blockLocators[i][:])
}
cmd := dcrjson.NewGetHeadersCmd(hex.EncodeToString(concatenatedLocators),
hashStop.String())
return c.sendCmd(cmd)
}
开发者ID:decred,项目名称:dcrrpcclient,代码行数:13,代码来源:extensions.go
示例7: GetRawTransactionAsync
// GetRawTransactionAsync returns an instance of a type that can be used to get
// the result of the RPC at some future time by invoking the Receive function on
// the returned instance.
//
// See GetRawTransaction for the blocking version and more details.
func (c *Client) GetRawTransactionAsync(txHash *chainhash.Hash) FutureGetRawTransactionResult {
hash := ""
if txHash != nil {
hash = txHash.String()
}
cmd := dcrjson.NewGetRawTransactionCmd(hash, dcrjson.Int(0))
return c.sendCmd(cmd)
}
开发者ID:Action-Committee,项目名称:dcrrpcclient,代码行数:14,代码来源:rawtransactions.go
示例8: GetTxOutAsync
// GetTxOutAsync returns an instance of a type that can be used to get
// the result of the RPC at some future time by invoking the Receive function on
// the returned instance.
//
// See GetTxOut for the blocking version and more details.
func (c *Client) GetTxOutAsync(txHash *chainhash.Hash, index uint32, mempool bool) FutureGetTxOutResult {
hash := ""
if txHash != nil {
hash = txHash.String()
}
cmd := dcrjson.NewGetTxOutCmd(hash, index, &mempool)
return c.sendCmd(cmd)
}
开发者ID:decred,项目名称:dcrrpcclient,代码行数:14,代码来源:chain.go
示例9: GetBlockVerboseAsync
// GetBlockVerboseAsync returns an instance of a type that can be used to get
// the result of the RPC at some future time by invoking the Receive function on
// the returned instance.
//
// See GetBlockVerbose for the blocking version and more details.
func (c *Client) GetBlockVerboseAsync(blockHash *chainhash.Hash, verboseTx bool) FutureGetBlockVerboseResult {
hash := ""
if blockHash != nil {
hash = blockHash.String()
}
cmd := dcrjson.NewGetBlockCmd(hash, dcrjson.Bool(true), &verboseTx)
return c.sendCmd(cmd)
}
开发者ID:decred,项目名称:dcrrpcclient,代码行数:14,代码来源:chain.go
示例10: fetchSStxRecord
// fetchSStxRecord retrieves a tx record from the sstx records bucket
// with the given hash.
func fetchSStxRecord(tx walletdb.Tx, hash *chainhash.Hash) (*sstxRecord, error) {
bucket := tx.RootBucket().Bucket(sstxRecordsBucketName)
key := hash.Bytes()
val := bucket.Get(key)
if val == nil {
str := fmt.Sprintf("missing sstx record for hash '%s'", hash.String())
return nil, stakeStoreError(ErrSStxNotFound, str, nil)
}
return deserializeSStxRecord(val)
}
开发者ID:frankbraun,项目名称:dcrwallet,代码行数:14,代码来源:db.go
示例11: assertAddrIndexTipIsUpdated
func assertAddrIndexTipIsUpdated(db database.Db, t *testing.T, newestSha *chainhash.Hash, newestBlockIdx int64) {
// Safe to ignore error, since height will be < 0 in "error" case.
sha, height, _ := db.FetchAddrIndexTip()
if newestBlockIdx != height {
t.Fatalf("Height of address index tip failed to update, "+
"expected %v, got %v", newestBlockIdx, height)
}
if !bytes.Equal(newestSha.Bytes(), sha.Bytes()) {
t.Fatalf("Sha of address index tip failed to update, "+
"expected %v, got %v", newestSha, sha)
}
}
开发者ID:zebbra2014,项目名称:dcrd,代码行数:12,代码来源:operational_test.go
示例12: fetchSSRtxRecords
// fetchSSRtxRecords retrieves SSRtx records from the SSRtxRecords bucket with
// the given hash.
func fetchSSRtxRecords(ns walletdb.ReadBucket, hash *chainhash.Hash) ([]*ssrtxRecord,
error) {
bucket := ns.NestedReadBucket(ssrtxRecordsBucketName)
key := hash.Bytes()
val := bucket.Get(key)
if val == nil {
str := fmt.Sprintf("missing ssrtx records for hash '%s'", hash.String())
return nil, stakeStoreError(ErrSSRtxsNotFound, str, nil)
}
return deserializeSSRtxRecords(val)
}
开发者ID:jcvernaleo,项目名称:btcwallet,代码行数:16,代码来源:db.go
示例13: fetchSStxRecordSStxTicketHash160
// fetchSStxRecordSStxTicketHash160 retrieves a ticket 0th output script or
// pubkeyhash from the sstx records bucket with the given hash.
func fetchSStxRecordSStxTicketHash160(ns walletdb.ReadBucket,
hash *chainhash.Hash) (hash160 []byte, p2sh bool, err error) {
bucket := ns.NestedReadBucket(sstxRecordsBucketName)
key := hash.Bytes()
val := bucket.Get(key)
if val == nil {
str := fmt.Sprintf("missing sstx record for hash '%s'", hash.String())
return nil, false, stakeStoreError(ErrSStxNotFound, str, nil)
}
return deserializeSStxTicketHash160(val)
}
开发者ID:decred,项目名称:dcrwallet,代码行数:16,代码来源:db.go
示例14: fetchBlockShaByHeight
// fetchBlockShaByHeight returns a block hash based on its height in the
// block chain.
func (db *LevelDb) fetchBlockShaByHeight(height int64) (rsha *chainhash.Hash, err error) {
key := int64ToKey(height)
blkVal, err := db.lDb.Get(key, db.ro)
if err != nil {
log.Tracef("failed to find height %v", height)
return // exists ???
}
var sha chainhash.Hash
sha.SetBytes(blkVal[0:32])
return &sha, nil
}
开发者ID:ironbits,项目名称:dcrd,代码行数:16,代码来源:block.go
示例15: fetchAddrIndexTip
// fetchAddrIndexTip returns the last block height and block sha to be indexed.
// Meta-data about the address tip is currently cached in memory, and will be
// updated accordingly by functions that modify the state. This function is
// used on start up to load the info into memory. Callers will use the public
// version of this function below, which returns our cached copy.
func (db *LevelDb) fetchAddrIndexTip() (*chainhash.Hash, int64, error) {
db.dbLock.Lock()
defer db.dbLock.Unlock()
data, err := db.lDb.Get(addrIndexMetaDataKey, db.ro)
if err != nil {
return &chainhash.Hash{}, -1, database.ErrAddrIndexDoesNotExist
}
var blkSha chainhash.Hash
blkSha.SetBytes(data[0:32])
blkHeight := binary.LittleEndian.Uint64(data[32:])
return &blkSha, int64(blkHeight), nil
}
开发者ID:ironbits,项目名称:dcrd,代码行数:21,代码来源:block.go
示例16: newDummyCredit
// newDummyCredit creates a new credit with the given hash and outpointIdx,
// locked to the votingpool address identified by the given
// series/index/branch.
func newDummyCredit(t *testing.T, pool *Pool, series uint32, index Index, branch Branch,
txSha []byte, outpointIdx uint32) credit {
var hash chainhash.Hash
if err := hash.SetBytes(txSha); err != nil {
t.Fatal(err)
}
// Ensure the address defined by the given series/branch/index is present on
// the set of used addresses as that's a requirement of WithdrawalAddress.
TstEnsureUsedAddr(t, pool, series, branch, index)
addr := TstNewWithdrawalAddress(t, pool, series, branch, index)
c := wtxmgr.Credit{
OutPoint: wire.OutPoint{
Hash: hash,
Index: outpointIdx,
},
}
return newCredit(c, *addr)
}
开发者ID:frankbraun,项目名称:dcrwallet,代码行数:21,代码来源:input_selection_wb_test.go
示例17: removeStakePoolInvalUserTickets
// removeStakePoolInvalUserTickets removes the ticket hash from the inval
// ticket bucket.
func removeStakePoolInvalUserTickets(ns walletdb.ReadWriteBucket, scriptHash [20]byte,
record *chainhash.Hash) error {
// Fetch the current content of the key.
// Possible buggy behaviour: If deserialization fails,
// we won't detect it here. We assume we're throwing
// ErrPoolUserInvalTcktsNotFound.
oldRecords, _ := fetchStakePoolUserInvalTickets(ns, scriptHash)
// Don't need to remove records that don't exist.
if !duplicateExistsInInvalTickets(record, oldRecords) {
return nil
}
var newRecords []*chainhash.Hash
for i := range oldRecords {
if record.IsEqual(oldRecords[i]) {
newRecords = append(oldRecords[:i:i], oldRecords[i+1:]...)
}
}
if newRecords == nil {
return nil
}
bucket := ns.NestedReadWriteBucket(metaBucketName)
key := make([]byte, stakePoolInvalidPrefixSize+scriptHashSize)
copy(key[0:stakePoolInvalidPrefixSize], stakePoolInvalidPrefix)
copy(key[stakePoolInvalidPrefixSize:stakePoolInvalidPrefixSize+scriptHashSize],
scriptHash[:])
// Write the serialized invalid user ticket hashes.
serializedRecords := serializeUserInvalTickets(newRecords)
err := bucket.Put(key, serializedRecords)
if err != nil {
str := fmt.Sprintf("failed to store pool user invalid ticket "+
"records '%x'", scriptHash)
return stakeStoreError(ErrDatabase, str, err)
}
return nil
}
开发者ID:jcvernaleo,项目名称:btcwallet,代码行数:45,代码来源:db.go
示例18: updateSStxRecordVoteBits
// updateSStxRecordVoteBits updates an individual ticket's intended voteBits
// which are used to override the default voteBits when voting.
func updateSStxRecordVoteBits(ns walletdb.ReadWriteBucket, hash *chainhash.Hash,
voteBits stake.VoteBits) error {
if len(voteBits.ExtendedBits) > stake.MaxSingleBytePushLength-2 {
str := fmt.Sprintf("voteBitsExt too long (got %v bytes, want max %v)",
len(voteBits.ExtendedBits), stake.MaxSingleBytePushLength-2)
return stakeStoreError(ErrData, str, nil)
}
bucket := ns.NestedReadWriteBucket(sstxRecordsBucketName)
key := hash.Bytes()
val := bucket.Get(key)
if val == nil {
str := fmt.Sprintf("missing sstx record for hash '%s'", hash.String())
return stakeStoreError(ErrSStxNotFound, str, nil)
}
valLen := len(val)
valCopy := make([]byte, valLen, valLen)
copy(valCopy, val)
// Move the cursor to the voteBits position and rewrite it.
curPos := 0
curPos += int64Size
curPos += int32Size
// Write the intended votebits length (uint8).
valCopy[curPos] = byte(int16Size + len(voteBits.ExtendedBits))
curPos += int8Size
// Write the first two bytes for the intended votebits.
byteOrder.PutUint16(valCopy[curPos:curPos+int16Size], voteBits.Bits)
curPos += int16Size
// Copy the remaining data from voteBitsExt.
copy(valCopy[curPos:], voteBits.ExtendedBits[:])
err := bucket.Put(key, valCopy)
if err != nil {
str := fmt.Sprintf("failed to update sstxrecord votebits for '%s'", hash)
return stakeStoreError(ErrDatabase, str, err)
}
return nil
}
开发者ID:jcvernaleo,项目名称:btcwallet,代码行数:45,代码来源:db.go
示例19: fetchSStxRecordVoteBits
// fetchSStxRecordVoteBits fetches an individual ticket's intended voteBits
// which are used to override the default voteBits when voting.
func fetchSStxRecordVoteBits(ns walletdb.ReadBucket, hash *chainhash.Hash) (bool,
stake.VoteBits, error) {
bucket := ns.NestedReadBucket(sstxRecordsBucketName)
key := hash.Bytes()
val := bucket.Get(key)
if val == nil {
str := fmt.Sprintf("missing sstx record for hash '%s'", hash.String())
return false, stake.VoteBits{}, stakeStoreError(ErrSStxNotFound, str, nil)
}
valLen := len(val)
valCopy := make([]byte, valLen, valLen)
copy(valCopy, val)
// Move the cursor to the voteBits position and rewrite it.
curPos := 0
curPos += int64Size
curPos += int32Size
// Read the intended votebits length (uint8). If it is unset, return now.
// Check it for sanity.
voteBitsLen := uint8(val[curPos])
if voteBitsLen == 0 {
return false, stake.VoteBits{}, nil
}
if voteBitsLen < 2 || voteBitsLen > stake.MaxSingleBytePushLength {
str := fmt.Sprintf("corrupt votebits length '%v'", voteBitsLen)
return false, stake.VoteBits{}, stakeStoreError(ErrData, str, nil)
}
curPos += int8Size
// Read the first two bytes for the intended votebits.
voteBits := byteOrder.Uint16(valCopy[curPos : curPos+int16Size])
curPos += int16Size
// Retrieve the extended vote bits.
voteBitsExt := make([]byte, voteBitsLen-int16Size)
copy(voteBitsExt[:], valCopy[curPos:(curPos+int(voteBitsLen)-int16Size)])
return true, stake.VoteBits{Bits: voteBits, ExtendedBits: voteBitsExt}, nil
}
开发者ID:jcvernaleo,项目名称:btcwallet,代码行数:44,代码来源:db.go
示例20: GenerateSSGenBlockRef
// GenerateSSGenBlockRef generates an OP_RETURN push for the block header hash and
// height which the block votes on.
func GenerateSSGenBlockRef(blockHash chainhash.Hash, height uint32) ([]byte,
error) {
// Prefix
dataPushes := []byte{
0x6a, // OP_RETURN
0x24, // OP_DATA_36
}
// Serialize the block hash and height
blockHashBytes := blockHash.Bytes()
blockHeightBytes := make([]byte, 4)
binary.LittleEndian.PutUint32(blockHeightBytes, height)
blockData := append(blockHashBytes, blockHeightBytes...)
// Concatenate the prefix and block data
blockDataOut := append(dataPushes, blockData...)
return blockDataOut, nil
}
开发者ID:zebbra2014,项目名称:dcrd,代码行数:22,代码来源:standard.go
注:本文中的github.com/decred/dcrd/chaincfg/chainhash.Hash类示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论