本文整理匯總了Golang中github.com/piotrnar/gocoin/lib/btc.Uint256類的典型用法代碼示例。如果您正苦於以下問題:Golang Uint256類的具體用法?Golang Uint256怎麽用?Golang Uint256使用的例子?那麽, 這裏精選的類代碼示例或許可以為您提供幫助。
在下文中一共展示了Uint256類的15個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Golang代碼示例。
示例1: addToCache
// Make sure to call with the mutex locked
func (db *BlockDB) addToCache(h *btc.Uint256, bl []byte, str *btc.Block) (crec *BlckCachRec) {
if db.cache == nil {
return
}
crec = db.cache[h.BIdx()]
if crec != nil {
crec.Data = bl
if str != nil {
crec.Block = str
}
crec.LastUsed = time.Now()
return
}
if len(db.cache) >= db.max_cached_blocks {
var oldest_t time.Time
var oldest_k [btc.Uint256IdxLen]byte
for k, v := range db.cache {
if oldest_t.IsZero() || v.LastUsed.Before(oldest_t) {
oldest_t = v.LastUsed
oldest_k = k
}
}
delete(db.cache, oldest_k)
}
crec = &BlckCachRec{LastUsed: time.Now(), Data: bl, Block: str}
db.cache[h.BIdx()] = crec
return
}
示例2: GetTxFromBlockrIo
// Download raw transaction from blockr.io
func GetTxFromBlockrIo(txid *btc.Uint256) (raw []byte) {
url := "http://btc.blockr.io/api/v1/tx/raw/" + txid.String()
r, er := http.Get(url)
if er == nil {
if r.StatusCode == 200 {
defer r.Body.Close()
c, _ := ioutil.ReadAll(r.Body)
var txx struct {
Status string
Data struct {
Tx struct {
Hex string
}
}
}
er = json.Unmarshal(c[:], &txx)
if er == nil {
raw, _ = hex.DecodeString(txx.Data.Tx.Hex)
}
} else {
fmt.Println("btc.blockr.io StatusCode=", r.StatusCode)
}
}
if er != nil {
fmt.Println("btc.blockr.io:", er.Error())
}
return
}
示例3: SendCmpctBlk
func (c *OneConnection) SendCmpctBlk(hash *btc.Uint256) {
crec := GetchBlockForBIP152(hash)
if crec == nil {
fmt.Println(c.ConnID, "cmpctblock not sent for", hash.String())
return
}
k0 := binary.LittleEndian.Uint64(crec.BIP152[8:16])
k1 := binary.LittleEndian.Uint64(crec.BIP152[16:24])
msg := new(bytes.Buffer)
msg.Write(crec.Data[:80])
msg.Write(crec.BIP152[:8])
btc.WriteVlen(msg, uint64(len(crec.Block.Txs)-1)) // all except coinbase
for i := 1; i < len(crec.Block.Txs); i++ {
var lsb [8]byte
var hasz *btc.Uint256
if c.Node.SendCmpctVer == 2 {
hasz = crec.Block.Txs[i].WTxID()
} else {
hasz = crec.Block.Txs[i].Hash
}
binary.LittleEndian.PutUint64(lsb[:], siphash.Hash(k0, k1, hasz.Hash[:]))
msg.Write(lsb[:6])
}
msg.Write([]byte{1}) // one preffiled tx
msg.Write([]byte{0}) // coinbase - index 0
if c.Node.SendCmpctVer == 2 {
msg.Write(crec.Block.Txs[0].Raw) // coinbase - index 0
} else {
crec.Block.Txs[0].WriteSerialized(msg) // coinbase - index 0
}
c.SendRawMsg("cmpctblock", msg.Bytes())
}
示例4: RejectTx
// Adds a transaction to the rejected list or not, it it has been mined already
// Make sure to call it with locked TxMutex.
// Returns the OneTxRejected or nil if it has not been added.
func RejectTx(id *btc.Uint256, size int, why byte) *OneTxRejected {
rec := new(OneTxRejected)
rec.Id = id
rec.Time = time.Now()
rec.Size = uint32(size)
rec.Reason = why
TransactionsRejected[id.BIdx()] = rec
return rec
}
示例5: GetTxFromWebBTC
// Download raw transaction from webbtc.com
func GetTxFromWebBTC(txid *btc.Uint256) (raw []byte) {
url := "http://webbtc.com/tx/" + txid.String() + ".bin"
r, er := http.Get(url)
if er == nil && r.StatusCode == 200 {
raw, _ = ioutil.ReadAll(r.Body)
r.Body.Close()
}
return
}
示例6: txChecker
func txChecker(h *btc.Uint256) bool {
TxMutex.Lock()
rec, ok := TransactionsToSend[h.BIdx()]
TxMutex.Unlock()
if ok && rec.Own != 0 {
return false // Assume own txs as non-trusted
}
if ok {
common.CountSafe("TxScrBoosted")
} else {
common.CountSafe("TxScrMissed")
}
return ok
}
示例7: GetTxFromWeb
// Download raw transaction from a web server (try one after another)
func GetTxFromWeb(txid *btc.Uint256) (raw []byte) {
raw = GetTxFromExplorer(txid)
if raw != nil && txid.Equal(btc.NewSha2Hash(raw)) {
println("GetTxFromExplorer - OK")
return
}
raw = GetTxFromWebBTC(txid)
if raw != nil && txid.Equal(btc.NewSha2Hash(raw)) {
println("GetTxFromWebBTC - OK")
return
}
raw = GetTxFromBlockrIo(txid)
if raw != nil && txid.Equal(btc.NewSha2Hash(raw)) {
println("GetTxFromBlockrIo - OK")
return
}
raw = GetTxFromBlockchainInfo(txid)
if raw != nil && txid.Equal(btc.NewSha2Hash(raw)) {
println("GetTxFromBlockchainInfo - OK")
return
}
return
}
示例8: BlockGetExt
func (db *BlockDB) BlockGetExt(hash *btc.Uint256) (cacherec *BlckCachRec, trusted bool, e error) {
db.mutex.Lock()
rec, ok := db.blockIndex[hash.BIdx()]
if !ok {
db.mutex.Unlock()
e = errors.New("btc.Block not in the index")
return
}
trusted = rec.trusted
if db.cache != nil {
if crec, hit := db.cache[hash.BIdx()]; hit {
cacherec = crec
crec.LastUsed = time.Now()
db.mutex.Unlock()
return
}
}
db.mutex.Unlock()
bl := make([]byte, rec.blen)
// we will re-open the data file, to not spoil the writting pointer
f, e := os.Open(db.dirname + "blockchain.dat")
if e != nil {
return
}
_, e = f.Seek(int64(rec.fpos), os.SEEK_SET)
if e == nil {
_, e = f.Read(bl[:])
}
f.Close()
if rec.compressed {
if rec.snappied {
bl, _ = snappy.Decode(nil, bl)
} else {
gz, _ := gzip.NewReader(bytes.NewReader(bl))
bl, _ = ioutil.ReadAll(gz)
gz.Close()
}
}
db.mutex.Lock()
cacherec = db.addToCache(hash, bl, nil)
db.mutex.Unlock()
return
}
示例9: NetRouteInvExt
// This function is called from the main thread (or from an UI)
func NetRouteInvExt(typ uint32, h *btc.Uint256, fromConn *OneConnection, fee_spkb uint64) (cnt uint) {
common.CountSafe(fmt.Sprint("NetRouteInv", typ))
// Prepare the inv
inv := new([36]byte)
binary.LittleEndian.PutUint32(inv[0:4], typ)
copy(inv[4:36], h.Bytes())
// Append it to PendingInvs in each open connection
Mutex_net.Lock()
for _, v := range OpenCons {
if v != fromConn { // except the one that this inv came from
send_inv := true
v.Mutex.Lock()
if typ == MSG_TX {
if v.Node.DoNotRelayTxs {
send_inv = false
common.CountSafe("SendInvNoTxNode")
} else if v.X.MinFeeSPKB > 0 && uint64(v.X.MinFeeSPKB) > fee_spkb {
send_inv = false
common.CountSafe("SendInvFeeTooLow")
}
/* This is to prevent sending own txs to "spying" peers:
else if fromConn==nil && v.X.InvsRecieved==0 {
send_inv = false
common.CountSafe("SendInvOwnBlocked")
}
*/
}
if send_inv {
if len(v.PendingInvs) < 500 {
if typ, ok := v.InvDone.Map[hash2invid(inv[4:36])]; ok {
common.CountSafe(fmt.Sprint("SendInvSame-", typ))
} else {
v.PendingInvs = append(v.PendingInvs, inv)
cnt++
}
} else {
common.CountSafe("SendInvFull")
}
}
v.Mutex.Unlock()
}
}
Mutex_net.Unlock()
return
}
示例10: GetTxFromWebBTC
// Download raw transaction from webbtc.com
func GetTxFromWebBTC(txid *btc.Uint256) (raw []byte) {
url := "https://webbtc.com/tx/" + txid.String() + ".bin"
r, er := http.Get(url)
if er == nil {
if r.StatusCode == 200 {
raw, _ = ioutil.ReadAll(r.Body)
r.Body.Close()
} else {
fmt.Println("webbtc.com StatusCode=", r.StatusCode)
}
}
if er != nil {
fmt.Println("webbtc.com:", er.Error())
}
return
}
示例11: GetTxFromBlockchainInfo
// Download (and re-assemble) raw transaction from blockexplorer.com
func GetTxFromBlockchainInfo(txid *btc.Uint256) (rawtx []byte) {
url := "https://blockchain.info/tx/" + txid.String() + "?format=hex"
r, er := http.Get(url)
if er == nil {
if r.StatusCode == 200 {
defer r.Body.Close()
rawhex, _ := ioutil.ReadAll(r.Body)
rawtx, er = hex.DecodeString(string(rawhex))
} else {
fmt.Println("blockchain.info StatusCode=", r.StatusCode)
}
}
if er != nil {
fmt.Println("blockexplorer.com:", er.Error())
}
return
}
示例12: addToCache
func (db *BlockDB) addToCache(h *btc.Uint256, bl []byte) {
if rec, ok := db.cache[h.BIdx()]; ok {
rec.used = time.Now()
return
}
if uint(len(db.cache)) >= MaxCachedBlocks {
var oldest_t time.Time
var oldest_k [btc.Uint256IdxLen]byte
for k, v := range db.cache {
if oldest_t.IsZero() || v.used.Before(oldest_t) {
oldest_t = v.used
oldest_k = k
}
}
delete(db.cache, oldest_k)
}
db.cache[h.BIdx()] = &cacheRecord{used: time.Now(), data: bl}
}
示例13: tx_from_balance
// Get tx with given id from the balance folder, of from cache
func tx_from_balance(txid *btc.Uint256, error_is_fatal bool) (tx *btc.Tx) {
if tx = loadedTxs[txid.Hash]; tx != nil {
return // we have it in cache already
}
fn := "balance/" + txid.String() + ".tx"
buf, er := ioutil.ReadFile(fn)
if er == nil && buf != nil {
var th [32]byte
btc.ShaHash(buf, th[:])
if txid.Hash == th {
tx, _ = btc.NewTx(buf)
if error_is_fatal && tx == nil {
println("Transaction is corrupt:", txid.String())
cleanExit(1)
}
} else if error_is_fatal {
println("Transaction file is corrupt:", txid.String())
cleanExit(1)
}
} else if error_is_fatal {
println("Error reading transaction file:", fn)
if er != nil {
println(er.Error())
}
cleanExit(1)
}
loadedTxs[txid.Hash] = tx // store it in the cache
return
}
示例14: GetchBlockForBIP152
func GetchBlockForBIP152(hash *btc.Uint256) (crec *chain.BlckCachRec) {
crec, _, _ = common.BlockChain.Blocks.BlockGetExt(hash)
if crec == nil {
fmt.Println("BlockGetExt failed for", hash.String())
return
}
if crec.Block == nil {
crec.Block, _ = btc.NewBlock(crec.Data)
if crec.Block == nil {
fmt.Println("SendCmpctBlk: btc.NewBlock() failed for", hash.String())
return
}
}
if len(crec.Block.Txs) == 0 {
if crec.Block.BuildTxList() != nil {
fmt.Println("SendCmpctBlk: bl.BuildTxList() failed for", hash.String())
return
}
}
if len(crec.BIP152) != 24 {
crec.BIP152 = make([]byte, 24)
copy(crec.BIP152[:8], crec.Data[48:56]) // set the nonce to 8 middle-bytes of block's merkle_root
sha := sha256.New()
sha.Write(crec.Data[:80])
sha.Write(crec.BIP152[:8])
copy(crec.BIP152[8:24], sha.Sum(nil)[0:16])
}
return
}
示例15: GetTxFromExplorer
// Download (and re-assemble) raw transaction from blockexplorer.com
func GetTxFromExplorer(txid *btc.Uint256) (rawtx []byte) {
url := "http://blockexplorer.com/api/rawtx/" + txid.String()
r, er := http.Get(url)
if er == nil {
if r.StatusCode == 200 {
defer r.Body.Close()
c, _ := ioutil.ReadAll(r.Body)
var txx struct {
Raw string `json:"rawtx"`
}
er = json.Unmarshal(c[:], &txx)
if er == nil {
rawtx, er = hex.DecodeString(txx.Raw)
}
} else {
fmt.Println("blockexplorer.com StatusCode=", r.StatusCode)
}
}
if er != nil {
fmt.Println("blockexplorer.com:", er.Error())
}
return
}