本文整理汇总了Golang中github.com/wchh/gocoin/lib/btc.NewUint256函数的典型用法代码示例。如果您正苦于以下问题:Golang NewUint256函数的具体用法?Golang NewUint256怎么用?Golang NewUint256使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了NewUint256函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: xml_balance
func xml_balance(w http.ResponseWriter, r *http.Request) {
if !ipchecker(r) {
return
}
w.Header()["Content-Type"] = []string{"text/xml"}
w.Write([]byte("<unspent>"))
wallet.BalanceMutex.Lock()
for i := range wallet.MyBalance {
w.Write([]byte("<output>"))
fmt.Fprint(w, "<txid>", btc.NewUint256(wallet.MyBalance[i].TxPrevOut.Hash[:]).String(), "</txid>")
fmt.Fprint(w, "<vout>", wallet.MyBalance[i].TxPrevOut.Vout, "</vout>")
fmt.Fprint(w, "<value>", wallet.MyBalance[i].Value, "</value>")
fmt.Fprint(w, "<inblock>", wallet.MyBalance[i].MinedAt, "</inblock>")
fmt.Fprint(w, "<blocktime>", get_block_time(wallet.MyBalance[i].MinedAt), "</blocktime>")
fmt.Fprint(w, "<addr>", wallet.MyBalance[i].DestAddr(), "</addr>")
fmt.Fprint(w, "<addrorg>", wallet.MyBalance[i].BtcAddr.String(), "</addrorg>")
fmt.Fprint(w, "<wallet>", html.EscapeString(wallet.MyBalance[i].BtcAddr.Extra.Wallet), "</wallet>")
fmt.Fprint(w, "<label>", html.EscapeString(wallet.MyBalance[i].BtcAddr.Extra.Label), "</label>")
fmt.Fprint(w, "<virgin>", fmt.Sprint(wallet.MyBalance[i].BtcAddr.Extra.Virgin), "</virgin>")
w.Write([]byte("</output>"))
}
wallet.BalanceMutex.Unlock()
w.Write([]byte("</unspent>"))
}
开发者ID:wchh,项目名称:gocoin,代码行数:26,代码来源:wallets.go
示例2: AcceptBlock
// This function either appends a new block at the end of the existing chain
// in which case it also applies all the transactions to the unspent database.
// If the block does is not the heighest, it is added to the chain, but maked
// as an orphan - its transaction will be verified only if the chain would swap
// to its branch later on.
func (ch *Chain) AcceptBlock(bl *btc.Block) (e error) {
prevblk, ok := ch.BlockIndex[btc.NewUint256(bl.ParentHash()).BIdx()]
if !ok {
panic("This should not happen")
}
// create new BlockTreeNode
cur := new(BlockTreeNode)
cur.BlockHash = bl.Hash
cur.Parent = prevblk
cur.Height = prevblk.Height + 1
cur.BlockSize = uint32(len(bl.Raw))
cur.TxCount = uint32(bl.TxCount)
copy(cur.BlockHeader[:], bl.Raw[:80])
// Add this block to the block index
ch.BlockIndexAccess.Lock()
prevblk.addChild(cur)
ch.BlockIndex[cur.BlockHash.BIdx()] = cur
ch.BlockIndexAccess.Unlock()
if ch.BlockTreeEnd == prevblk {
// The head of out chain - apply the transactions
var changes *BlockChanges
changes, e = ch.ProcessBlockTransactions(bl, cur.Height, bl.LastKnownHeight)
if e != nil {
// ProcessBlockTransactions failed, so trash the block.
println("ProcessBlockTransactions ", cur.BlockHash.String(), cur.Height, e.Error())
ch.BlockIndexAccess.Lock()
cur.Parent.delChild(cur)
delete(ch.BlockIndex, cur.BlockHash.BIdx())
ch.BlockIndexAccess.Unlock()
} else {
// ProcessBlockTransactions succeeded, so save the block as "trusted".
bl.Trusted = true
ch.Blocks.BlockAdd(cur.Height, bl)
// Apply the block's trabnsactions to the unspent database:
ch.Unspent.CommitBlockTxs(changes, bl.Hash.Hash[:])
if !ch.DoNotSync {
ch.Blocks.Sync()
}
ch.BlockTreeEnd = cur // Advance the head
}
} else {
// The block's parent is not the current head of the chain...
// Save the block, though do not makt it as "trusted" just yet
ch.Blocks.BlockAdd(cur.Height, bl)
// If it has a bigger height than the current head,
// ... move the coin state into a new branch.
if cur.Height > ch.BlockTreeEnd.Height {
ch.MoveToBlock(cur)
}
}
return
}
开发者ID:wchh,项目名称:gocoin,代码行数:64,代码来源:chain_accept.go
示例3: DecodeTx
func DecodeTx(tx *btc.Tx) (s string, missinginp bool, totinp, totout uint64, e error) {
s += fmt.Sprintln("Transaction details (for your information):")
s += fmt.Sprintln(len(tx.TxIn), "Input(s):")
for i := range tx.TxIn {
s += fmt.Sprintf(" %3d %s", i, tx.TxIn[i].Input.String())
var po *btc.TxOut
inpid := btc.NewUint256(tx.TxIn[i].Input.Hash[:])
if txinmem, ok := network.TransactionsToSend[inpid.BIdx()]; ok {
s += fmt.Sprint(" mempool")
if int(tx.TxIn[i].Input.Vout) >= len(txinmem.TxOut) {
s += fmt.Sprintf(" - Vout TOO BIG (%d/%d)!", int(tx.TxIn[i].Input.Vout), len(txinmem.TxOut))
} else {
po = txinmem.TxOut[tx.TxIn[i].Input.Vout]
}
} else {
po, _ = common.BlockChain.Unspent.UnspentGet(&tx.TxIn[i].Input)
if po != nil {
s += fmt.Sprintf("%8d", po.BlockHeight)
}
}
if po != nil {
ok := script.VerifyTxScript(tx.TxIn[i].ScriptSig, po.Pk_script, i, tx, script.VER_P2SH|script.VER_DERSIG)
if !ok {
s += fmt.Sprintln("\nERROR: The transacion does not have a valid signature.")
e = errors.New("Invalid signature")
return
}
totinp += po.Value
ads := "???"
if ad := btc.NewAddrFromPkScript(po.Pk_script, common.Testnet); ad != nil {
ads = ad.String()
}
s += fmt.Sprintf(" %15.8f BTC @ %s\n", float64(po.Value)/1e8, ads)
} else {
s += fmt.Sprintln(" - UNKNOWN INPUT")
missinginp = true
}
}
s += fmt.Sprintln(len(tx.TxOut), "Output(s):")
for i := range tx.TxOut {
totout += tx.TxOut[i].Value
adr := btc.NewAddrFromPkScript(tx.TxOut[i].Pk_script, common.Testnet)
if adr != nil {
s += fmt.Sprintf(" %15.8f BTC to adr %s\n", float64(tx.TxOut[i].Value)/1e8, adr.String())
} else {
s += fmt.Sprintf(" %15.8f BTC to scr %s\n", float64(tx.TxOut[i].Value)/1e8, hex.EncodeToString(tx.TxOut[i].Pk_script))
}
}
if missinginp {
s += fmt.Sprintln("WARNING: There are missing inputs and we cannot calc input BTC amount.")
s += fmt.Sprintln("If there is somethign wrong with this transaction, you can loose money...")
} else {
s += fmt.Sprintf("All OK: %.8f BTC in -> %.8f BTC out, with %.8f BTC fee\n", float64(totinp)/1e8,
float64(totout)/1e8, float64(totinp-totout)/1e8)
}
return
}
开发者ID:wchh,项目名称:gocoin,代码行数:59,代码来源:usif.go
示例4: output_tx_xml
func output_tx_xml(w http.ResponseWriter, id string) {
txid := btc.NewUint256FromString(id)
w.Write([]byte("<tx>"))
fmt.Fprint(w, "<id>", id, "</id>")
if t2s, ok := network.TransactionsToSend[txid.BIdx()]; ok {
w.Write([]byte("<status>OK</status>"))
tx := t2s.Tx
w.Write([]byte("<inputs>"))
for i := range tx.TxIn {
w.Write([]byte("<input>"))
var po *btc.TxOut
inpid := btc.NewUint256(tx.TxIn[i].Input.Hash[:])
if txinmem, ok := network.TransactionsToSend[inpid.BIdx()]; ok {
if int(tx.TxIn[i].Input.Vout) < len(txinmem.TxOut) {
po = txinmem.TxOut[tx.TxIn[i].Input.Vout]
}
} else {
po, _ = common.BlockChain.Unspent.UnspentGet(&tx.TxIn[i].Input)
}
if po != nil {
ok := script.VerifyTxScript(tx.TxIn[i].ScriptSig, po.Pk_script, i, tx, script.VER_P2SH|script.VER_DERSIG)
if !ok {
w.Write([]byte("<status>Script FAILED</status>"))
} else {
w.Write([]byte("<status>OK</status>"))
}
fmt.Fprint(w, "<value>", po.Value, "</value>")
ads := "???"
if ad := btc.NewAddrFromPkScript(po.Pk_script, common.Testnet); ad != nil {
ads = ad.String()
}
fmt.Fprint(w, "<addr>", ads, "</addr>")
fmt.Fprint(w, "<block>", po.BlockHeight, "</block>")
} else {
w.Write([]byte("<status>UNKNOWN INPUT</status>"))
}
w.Write([]byte("</input>"))
}
w.Write([]byte("</inputs>"))
w.Write([]byte("<outputs>"))
for i := range tx.TxOut {
w.Write([]byte("<output>"))
fmt.Fprint(w, "<value>", tx.TxOut[i].Value, "</value>")
adr := btc.NewAddrFromPkScript(tx.TxOut[i].Pk_script, common.Testnet)
if adr != nil {
fmt.Fprint(w, "<addr>", adr.String(), "</addr>")
} else {
fmt.Fprint(w, "<addr>", "scr:"+hex.EncodeToString(tx.TxOut[i].Pk_script), "</addr>")
}
w.Write([]byte("</output>"))
}
w.Write([]byte("</outputs>"))
} else {
w.Write([]byte("<status>Not found</status>"))
}
w.Write([]byte("</tx>"))
}
开发者ID:wchh,项目名称:gocoin,代码行数:58,代码来源:txs.go
示例5: TxInvNotify
// Handle tx-inv notifications
func (c *OneConnection) TxInvNotify(hash []byte) {
if NeedThisTx(btc.NewUint256(hash), nil) {
var b [1 + 4 + 32]byte
b[0] = 1 // One inv
b[1] = 1 // Tx
copy(b[5:37], hash)
c.SendRawMsg("getdata", b[:])
}
}
开发者ID:wchh,项目名称:gocoin,代码行数:10,代码来源:txpool.go
示例6: DumpBalance
// Call it only from the Chain thread
func DumpBalance(mybal chain.AllUnspentTx, utxt *os.File, details, update_balance bool) (s string) {
var sum uint64
BalanceMutex.Lock()
for i := range mybal {
sum += mybal[i].Value
if details {
if i < 100 {
s += fmt.Sprintf("%7d %s\n", 1+common.Last.Block.Height-mybal[i].MinedAt,
mybal[i].String())
} else if i == 100 {
s += fmt.Sprintln("List of unspent outputs truncated to 100 records")
}
}
// update the balance/ folder
if utxt != nil {
po, e := common.BlockChain.Unspent.UnspentGet(&mybal[i].TxPrevOut)
if e != nil {
println("UnspentGet:", e.Error())
println("This should not happen - please, report a bug.")
println("You can probably fix it by launching the client with -rescan")
os.Exit(1)
}
txid := btc.NewUint256(mybal[i].TxPrevOut.Hash[:])
// Store the unspent line in balance/unspent.txt
fmt.Fprintln(utxt, mybal[i].UnspentTextLine())
// store the entire transactiojn in balance/<txid>.tx
fn := "balance/" + txid.String()[:64] + ".tx"
txf, _ := os.Open(fn)
if txf == nil {
// Do it only once per txid
txf, _ = os.Create(fn)
if txf == nil {
println("Cannot create ", fn)
os.Exit(1)
}
GetRawTransaction(po.BlockHeight, txid, txf)
}
txf.Close()
}
}
if update_balance {
LastBalance = sum
}
BalanceMutex.Unlock()
s += fmt.Sprintf("Total balance: %.8f BTC in %d unspent outputs\n", float64(sum)/1e8, len(mybal))
if utxt != nil {
utxt.Close()
}
return
}
开发者ID:wchh,项目名称:gocoin,代码行数:56,代码来源:balance.go
示例7: baned_txs
func baned_txs(par string) {
fmt.Println("Rejected transactions:")
cnt := 0
network.TxMutex.Lock()
for k, v := range network.TransactionsRejected {
cnt++
fmt.Println("", cnt, btc.NewUint256(k[:]).String(), "-", v.Size, "bytes",
"-", v.Reason, "-", time.Now().Sub(v.Time).String(), "ago")
}
network.TxMutex.Unlock()
}
开发者ID:wchh,项目名称:gocoin,代码行数:11,代码来源:txcmds.go
示例8: send_all_tx
func send_all_tx(par string) {
network.TxMutex.Lock()
for k, v := range network.TransactionsToSend {
if v.Own != 0 {
cnt := network.NetRouteInv(1, btc.NewUint256(k[:]), nil)
v.Invsentcnt += cnt
fmt.Println("INV for TxID", v.Hash.String(), "sent to", cnt, "node(s)")
}
}
network.TxMutex.Unlock()
}
开发者ID:wchh,项目名称:gocoin,代码行数:11,代码来源:txcmds.go
示例9: loadBlockIndex
// Loads block index from the disk
func (ch *Chain) loadBlockIndex() {
ch.BlockIndex = make(map[[btc.Uint256IdxLen]byte]*BlockTreeNode, BlockMapInitLen)
ch.BlockTreeRoot = new(BlockTreeNode)
ch.BlockTreeRoot.BlockHash = ch.Genesis
ch.BlockIndex[ch.Genesis.BIdx()] = ch.BlockTreeRoot
ch.Blocks.LoadBlockIndex(ch, nextBlock)
tlb := ch.Unspent.LastBlockHash
//println("Building tree from", len(ch.BlockIndex), "nodes")
for _, v := range ch.BlockIndex {
if AbortNow {
return
}
if v == ch.BlockTreeRoot {
// skip root block (should be only one)
continue
}
par, ok := ch.BlockIndex[btc.NewUint256(v.BlockHeader[4:36]).BIdx()]
if !ok {
panic(v.BlockHash.String() + " has no Parent " + btc.NewUint256(v.BlockHeader[4:36]).String())
}
/*if par.Height+1 != v.Height {
panic("height mismatch")
}*/
v.Parent = par
v.Parent.addChild(v)
}
if tlb == nil {
//println("No last block - full rescan will be needed")
ch.BlockTreeEnd = ch.BlockTreeRoot
return
} else {
//println("Last Block Hash:", btc.NewUint256(tlb).String())
var ok bool
ch.BlockTreeEnd, ok = ch.BlockIndex[btc.NewUint256(tlb).BIdx()]
if !ok {
panic("Last btc.Block Hash not found")
}
}
}
开发者ID:wchh,项目名称:gocoin,代码行数:42,代码来源:chain_load.go
示例10: chkblock
func chkblock(bl *btc.Block) (er error) {
// Check timestamp (must not be higher than now +2 hours)
if int64(bl.BlockTime()) > time.Now().Unix()+2*60*60 {
er = errors.New("CheckBlock() : block timestamp too far in the future")
return
}
MemBlockChainMutex.Lock()
if prv, pres := MemBlockChain.BlockIndex[bl.Hash.BIdx()]; pres {
MemBlockChainMutex.Unlock()
if prv.Parent == nil {
// This is genesis block
er = errors.New("Genesis")
return
} else {
return
}
}
prevblk, ok := MemBlockChain.BlockIndex[btc.NewUint256(bl.ParentHash()).BIdx()]
if !ok {
er = errors.New("CheckBlock: " + bl.Hash.String() + " parent not found")
return
}
// Check proof of work
gnwr := MemBlockChain.GetNextWorkRequired(prevblk, bl.BlockTime())
if bl.Bits() != gnwr {
if !Testnet || ((prevblk.Height+1)%2016) != 0 {
MemBlockChainMutex.Unlock()
er = errors.New(fmt.Sprint("CheckBlock: Incorrect proof of work at block", prevblk.Height+1))
return
}
}
cur := new(chain.BlockTreeNode)
cur.BlockHash = bl.Hash
cur.Parent = prevblk
cur.Height = prevblk.Height + 1
cur.TxCount = uint32(bl.TxCount)
copy(cur.BlockHeader[:], bl.Raw[:80])
prevblk.Childs = append(prevblk.Childs, cur)
MemBlockChain.BlockIndex[cur.BlockHash.BIdx()] = cur
MemBlockChainMutex.Unlock()
LastBlock.Mutex.Lock()
if cur.Height > LastBlock.node.Height {
LastBlock.node = cur
}
LastBlock.Mutex.Unlock()
return
}
开发者ID:wchh,项目名称:gocoin,代码行数:53,代码来源:hdrs.go
示例11: execute_test_tx
func execute_test_tx(t *testing.T, tv *testvector) bool {
if len(tv.inps) == 0 {
t.Error("Vector has no inputs")
return false
}
rd, er := hex.DecodeString(tv.tx)
if er != nil {
t.Error(er.Error())
return false
}
tx, _ := btc.NewTx(rd)
if tx == nil {
t.Error("Canot decode tx")
return false
}
tx.Size = uint32(len(rd))
ha := btc.Sha2Sum(rd)
tx.Hash = btc.NewUint256(ha[:])
if skip_broken_tests(tx) {
return false
}
oks := 0
for i := range tx.TxIn {
var j int
for j = range tv.inps {
if bytes.Equal(tx.TxIn[i].Input.Hash[:], tv.inps[j].txid.Hash[:]) &&
tx.TxIn[i].Input.Vout == uint32(tv.inps[j].vout) {
break
}
}
if j >= len(tv.inps) {
t.Error("Matching input not found")
continue
}
pk, er := btc.DecodeScript(tv.inps[j].pkscr)
if er != nil {
t.Error(er.Error())
continue
}
var ss []byte
if tv.inps[j].vout >= 0 {
ss = tx.TxIn[i].ScriptSig
}
if VerifyTxScript(ss, pk, i, tx, tv.ver_flags) {
oks++
}
}
return oks == len(tx.TxIn)
}
开发者ID:wchh,项目名称:gocoin,代码行数:52,代码来源:tx_test.go
示例12: nextBlock
func nextBlock(ch *Chain, hash, header []byte, height, blen, txs uint32) {
bh := btc.NewUint256(hash[:])
if _, ok := ch.BlockIndex[bh.BIdx()]; ok {
println("nextBlock:", bh.String(), "- already in")
return
}
v := new(BlockTreeNode)
v.BlockHash = bh
v.Height = height
v.BlockSize = blen
v.TxCount = txs
copy(v.BlockHeader[:], header)
ch.BlockIndex[v.BlockHash.BIdx()] = v
}
开发者ID:wchh,项目名称:gocoin,代码行数:14,代码来源:chain_load.go
示例13: parseLocatorsPayload
// Read VLen followed by the number of locators
// parse the payload of getblocks and getheaders messages
func parseLocatorsPayload(pl []byte) (h2get []*btc.Uint256, hashstop *btc.Uint256, er error) {
var cnt uint64
var h [32]byte
var ver uint32
b := bytes.NewReader(pl)
// version
if er = binary.Read(b, binary.LittleEndian, &ver); er != nil {
return
}
// hash count
cnt, er = btc.ReadVLen(b)
if er != nil {
return
}
// block locator hashes
if cnt > 0 {
h2get = make([]*btc.Uint256, cnt)
for i := 0; i < int(cnt); i++ {
if _, er = b.Read(h[:]); er != nil {
return
}
h2get[i] = btc.NewUint256(h[:])
}
}
// hash_stop
if _, er = b.Read(h[:]); er != nil {
return
}
hashstop = btc.NewUint256(h[:])
return
}
开发者ID:wchh,项目名称:gocoin,代码行数:39,代码来源:data.go
示例14: BlockTrusted
func (db *BlockDB) BlockTrusted(hash []byte) {
idx := btc.NewUint256(hash).BIdx()
db.mutex.Lock()
cur, ok := db.blockIndex[idx]
if !ok {
db.mutex.Unlock()
println("BlockTrusted: no such block")
return
}
if !cur.trusted {
//fmt.Println("mark", btc.NewUint256(hash).String(), "as trusted")
db.setBlockFlag(cur, BLOCK_TRUSTED)
}
db.mutex.Unlock()
}
开发者ID:wchh,项目名称:gocoin,代码行数:15,代码来源:blockdb.go
示例15: walk
func walk(ch *chain.Chain, hash, hdr []byte, height, blen, txs uint32) {
bh := btc.NewUint256(hash)
if _, ok := bidx[bh.Hash]; ok {
println("walk: ", bh.String(), "already in")
return
}
v := new(chain.BlockTreeNode)
v.BlockHash = bh
v.Height = height
v.BlockSize = blen
v.TxCount = txs
copy(v.BlockHeader[:], hdr)
bidx[bh.Hash] = v
cnt++
}
开发者ID:wchh,项目名称:gocoin,代码行数:15,代码来源:bootdat_qt.go
示例16: GetStats
// Return DB statistics
func (db *UnspentDB) GetStats() (s string) {
var tot, outcnt, sum, sumcb, stealth_uns, stealth_tot uint64
var mincnt, maxcnt, totdatasize, unspendable uint64
for i := range db.tdb {
dbcnt := uint64(db.dbN(i).Count())
if i == 0 {
mincnt, maxcnt = dbcnt, dbcnt
} else if dbcnt < mincnt {
mincnt = dbcnt
} else if dbcnt > maxcnt {
maxcnt = dbcnt
}
tot += dbcnt
db.dbN(i).Browse(func(k qdb.KeyType, v []byte) uint32 {
totdatasize += uint64(len(v) + 8)
rec := NewQdbRecStatic(k, v)
for idx, r := range rec.Outs {
if r != nil {
outcnt++
sum += r.Value
if rec.Coinbase {
sumcb += r.Value
}
if len(r.PKScr) > 0 && r.PKScr[0] == 0x6a {
unspendable++
}
if r.IsStealthIdx() && idx+1 < len(rec.Outs) {
if rec.Outs[idx+1] != nil {
stealth_uns++
}
stealth_tot++
}
}
}
return 0
})
}
s = fmt.Sprintf("UNSPENT: %.8f BTC in %d outs from %d txs. %.8f BTC in coinbase.\n",
float64(sum)/1e8, outcnt, tot, float64(sumcb)/1e8)
s += fmt.Sprintf(" Defrags:%d Recs/db : %d..%d TotalData:%.1fMB MaxTxOutCnt:%d \n",
db.defragCount, mincnt, maxcnt, float64(totdatasize)/1e6, len(rec_outs))
s += fmt.Sprintf(" Last Block : %s @ %d\n", btc.NewUint256(db.LastBlockHash).String(),
db.LastBlockHeight)
s += fmt.Sprintf(" Number of unspendable outputs: %d. Number of stealth indexes: %d / %d spent\n",
unspendable, stealth_uns, stealth_tot)
return
}
开发者ID:wchh,项目名称:gocoin,代码行数:48,代码来源:qdb_unspent.go
示例17: blockWanted
// Called from network threads
func blockWanted(h []byte) (yes bool) {
idx := btc.NewUint256(h).BIdx()
MutexRcv.Lock()
_, ok := ReceivedBlocks[idx]
MutexRcv.Unlock()
if !ok {
if atomic.LoadUint32(&common.CFG.Net.MaxBlockAtOnce) == 0 || !blocksLimitReached(idx) {
yes = true
common.CountSafe("BlockWanted")
} else {
common.CountSafe("BlockInProgress")
}
} else {
common.CountSafe("BlockUnwanted")
}
return
}
开发者ID:wchh,项目名称:gocoin,代码行数:18,代码来源:data.go
示例18: ProcessInv
func (c *OneConnection) ProcessInv(pl []byte) {
if len(pl) < 37 {
//println(c.PeerAddr.Ip(), "inv payload too short", len(pl))
c.DoS("InvEmpty")
return
}
c.InvsRecieved++
cnt, of := btc.VLen(pl)
if len(pl) != of+36*cnt {
println("inv payload length mismatch", len(pl), of, cnt)
}
var blinv2ask []byte
for i := 0; i < cnt; i++ {
typ := binary.LittleEndian.Uint32(pl[of : of+4])
common.CountSafe(fmt.Sprint("InvGot", typ))
if typ == 2 {
if blockWanted(pl[of+4 : of+36]) {
blinv2ask = append(blinv2ask, pl[of+4:of+36]...)
}
} else if typ == 1 {
if common.CFG.TXPool.Enabled {
c.TxInvNotify(pl[of+4 : of+36])
}
}
of += 36
}
if len(blinv2ask) > 0 {
bu := new(bytes.Buffer)
btc.WriteVlen(bu, uint64(len(blinv2ask)/32))
for i := 0; i < len(blinv2ask); i += 32 {
bh := btc.NewUint256(blinv2ask[i : i+32])
c.Mutex.Lock()
c.GetBlockInProgress[bh.BIdx()] = &oneBlockDl{hash: bh, start: time.Now()}
c.Mutex.Unlock()
binary.Write(bu, binary.LittleEndian, uint32(2))
bu.Write(bh.Hash[:])
}
c.SendRawMsg("getdata", bu.Bytes())
}
return
}
开发者ID:wchh,项目名称:gocoin,代码行数:46,代码来源:invs.go
示例19: BlockInvalid
func (db *BlockDB) BlockInvalid(hash []byte) {
idx := btc.NewUint256(hash).BIdx()
db.mutex.Lock()
cur, ok := db.blockIndex[idx]
if !ok {
db.mutex.Unlock()
println("BlockInvalid: no such block")
return
}
if cur.trusted {
println("Looks like your UTXO database is corrupt")
println("To rebuild it, remove folder: " + db.dirname + "unspent4")
panic("Trusted block cannot be invalid")
}
//println("mark", btc.NewUint256(hash).String(), "as invalid")
db.setBlockFlag(cur, BLOCK_INVALID)
delete(db.blockIndex, idx)
db.mutex.Unlock()
}
开发者ID:wchh,项目名称:gocoin,代码行数:19,代码来源:blockdb.go
示例20: LoadBlockIndex
func (db *BlockDB) LoadBlockIndex(ch *Chain, walk func(ch *Chain, hash, hdr []byte, height, blen, txs uint32)) (e error) {
var b [136]byte
var bh, txs uint32
var maxdatfilepos int64
validpos, _ := db.blockindx.Seek(0, os.SEEK_SET)
for !AbortNow {
_, e := db.blockindx.Read(b[:])
if e != nil {
break
}
if (b[0] & BLOCK_INVALID) != 0 {
// just ignore it
continue
}
ob := new(oneBl)
ob.trusted = (b[0] & BLOCK_TRUSTED) != 0
ob.compressed = (b[0] & BLOCK_COMPRSD) != 0
ob.snappied = (b[0] & BLOCK_SNAPPED) != 0
bh = binary.LittleEndian.Uint32(b[36:40])
ob.fpos = binary.LittleEndian.Uint64(b[40:48])
ob.blen = binary.LittleEndian.Uint32(b[48:52])
txs = binary.LittleEndian.Uint32(b[52:56])
ob.ipos = validpos
BlockHash := b[4:36]
db.blockIndex[btc.NewUint256(BlockHash).BIdx()] = ob
if int64(ob.fpos)+int64(ob.blen) > maxdatfilepos {
maxdatfilepos = int64(ob.fpos) + int64(ob.blen)
}
walk(ch, b[4:36], b[56:136], bh, ob.blen, txs)
validpos += 136
}
// In case if there was some trash at the end of data or index file, this should truncate it:
db.blockindx.Seek(validpos, os.SEEK_SET)
db.blockdata.Seek(maxdatfilepos, os.SEEK_SET)
return
}
开发者ID:wchh,项目名称:gocoin,代码行数:41,代码来源:blockdb.go
注:本文中的github.com/wchh/gocoin/lib/btc.NewUint256函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论