本文整理汇总了Golang中github.com/piotrnar/gocoin/btc.NewUint256函数的典型用法代码示例。如果您正苦于以下问题:Golang NewUint256函数的具体用法?Golang NewUint256怎么用?Golang NewUint256使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了NewUint256函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: ProcessGetBlocks
func (c *oneConnection) ProcessGetBlocks(pl []byte) {
b := bytes.NewReader(pl)
var ver uint32
e := binary.Read(b, binary.LittleEndian, &ver)
if e != nil {
println("ProcessGetBlocks:", e.Error(), c.addr.Ip())
return
}
cnt, e := btc.ReadVLen(b)
if e != nil {
println("ProcessGetBlocks:", e.Error(), c.addr.Ip())
return
}
h2get := make([]*btc.Uint256, cnt)
var h [32]byte
for i := 0; i < int(cnt); i++ {
n, _ := b.Read(h[:])
if n != 32 {
println("getblocks too short", c.addr.Ip())
return
}
h2get[i] = btc.NewUint256(h[:])
if dbg > 1 {
println(c.addr.Ip(), "getbl", h2get[i].String())
}
}
n, _ := b.Read(h[:])
if n != 32 {
println("getblocks does not have hash_stop", c.addr.Ip())
return
}
hashstop := btc.NewUint256(h[:])
var maxheight uint32
invs := make(map[[32]byte]bool, 500)
for i := range h2get {
BlockChain.BlockIndexAccess.Lock()
if bl, ok := BlockChain.BlockIndex[h2get[i].BIdx()]; ok {
if bl.Height > maxheight {
maxheight = bl.Height
}
addInvBlockBranch(invs, bl, hashstop)
}
BlockChain.BlockIndexAccess.Unlock()
if len(invs) >= 500 {
break
}
}
inv := new(bytes.Buffer)
btc.WriteVlen(inv, uint32(len(invs)))
for k, _ := range invs {
binary.Write(inv, binary.LittleEndian, uint32(2))
inv.Write(k[:])
}
if dbg > 1 {
fmt.Println(c.addr.Ip(), "getblocks", cnt, maxheight, " ...", len(invs), "invs in resp ->", len(inv.Bytes()))
}
InvsSent++
c.SendRawMsg("inv", inv.Bytes())
}
示例2: ProcessGetData
func (c *OneConnection) ProcessGetData(pl []byte) {
//println(c.PeerAddr.Ip(), "getdata")
b := bytes.NewReader(pl)
cnt, e := btc.ReadVLen(b)
if e != nil {
println("ProcessGetData:", e.Error(), c.PeerAddr.Ip())
return
}
for i := 0; i < int(cnt); i++ {
var typ uint32
var h [32]byte
e = binary.Read(b, binary.LittleEndian, &typ)
if e != nil {
println("ProcessGetData:", e.Error(), c.PeerAddr.Ip())
return
}
n, _ := b.Read(h[:])
if n != 32 {
println("ProcessGetData: pl too short", c.PeerAddr.Ip())
return
}
common.CountSafe(fmt.Sprint("GetdataType", typ))
if typ == 2 {
uh := btc.NewUint256(h[:])
bl, _, er := common.BlockChain.Blocks.BlockGet(uh)
if er == nil {
c.SendRawMsg("block", bl)
} else {
//println("block", uh.String(), er.Error())
}
} else if typ == 1 {
// transaction
uh := btc.NewUint256(h[:])
TxMutex.Lock()
if tx, ok := TransactionsToSend[uh.Hash]; ok && tx.Blocked == 0 {
tx.SentCnt++
tx.Lastsent = time.Now()
TxMutex.Unlock()
c.SendRawMsg("tx", tx.Data)
if common.DebugLevel > 0 {
println("sent tx to", c.PeerAddr.Ip())
}
} else {
TxMutex.Unlock()
}
} else {
if common.DebugLevel > 0 {
println("getdata for type", typ, "not supported yet")
}
}
}
}
示例3: 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", btc.NewUint256(k[:]).String(), "sent to", cnt, "node(s)")
}
}
network.TxMutex.Unlock()
}
示例4: GetBlockData
func (c *OneConnection) GetBlockData(h []byte) {
var b [1 + 4 + 32]byte
b[0] = 1 // One inv
b[1] = 2 // Block
copy(b[5:37], h[:32])
if common.DebugLevel > 1 {
println("GetBlockData", btc.NewUint256(h).String())
}
bh := btc.NewUint256(h)
c.Mutex.Lock()
c.GetBlockInProgress[bh.BIdx()] = &oneBlockDl{hash: bh, start: time.Now()}
c.Mutex.Unlock()
c.SendRawMsg("getdata", b[:])
}
示例5: 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.LockBal()
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].BtcAddr.String(), "</addr>")
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.UnlockBal()
w.Write([]byte("</unspent>"))
}
示例6: list_txs
func list_txs(par string) {
fmt.Println("Transactions in the memory pool:")
cnt := 0
network.TxMutex.Lock()
for k, v := range network.TransactionsToSend {
cnt++
var oe, snt string
if v.Own != 0 {
oe = " *OWN*"
} else {
oe = ""
}
snt = fmt.Sprintf("INV sent %d times, ", v.Invsentcnt)
if v.SentCnt == 0 {
snt = "TX never sent"
} else {
snt = fmt.Sprintf("TX sent %d times, last %s ago", v.SentCnt,
time.Now().Sub(v.Lastsent).String())
}
fmt.Printf("%5d) %s - %d bytes - %s%s\n", cnt,
btc.NewUint256(k[:]).String(), len(v.Data), snt, oe)
}
network.TxMutex.Unlock()
}
示例7: list_txs
func list_txs(par string) {
fmt.Println("Transactions in the memory pool:")
cnt := 0
for k, v := range TransactionsToSend {
fmt.Println(cnt, btc.NewUint256(k[:]).String(), "-", len(v), "bytes")
}
}
示例8: GetBlockData
func GetBlockData(h []byte) []byte {
bl, _, e := BlockChain.Blocks.BlockGet(btc.NewUint256(h))
if e == nil {
return bl
}
println("BlockChain.Blocks.BlockGet failed")
return nil
}
示例9: ProcessGetData
func (c *oneConnection) ProcessGetData(pl []byte) {
//println(c.addr.Ip(), "getdata")
b := bytes.NewReader(pl)
cnt, e := btc.ReadVLen(b)
if e != nil {
println("ProcessGetData:", e.Error(), c.addr.Ip())
return
}
for i := 0; i < int(cnt); i++ {
var typ uint32
var h [32]byte
e = binary.Read(b, binary.LittleEndian, &typ)
if e != nil {
println("ProcessGetData:", e.Error(), c.addr.Ip())
return
}
n, _ := b.Read(h[:])
if n != 32 {
println("ProcessGetData: pl too short", c.addr.Ip())
return
}
if typ == 2 {
uh := btc.NewUint256(h[:])
bl, _, er := BlockChain.Blocks.BlockGet(uh)
if er == nil {
BlockSent++
c.SendRawMsg("block", bl)
} else {
//println("block", uh.String(), er.Error())
}
} else if typ == 1 {
// transaction
uh := btc.NewUint256(h[:])
if tx, ok := TransactionsToSend[uh.Hash]; ok {
c.SendRawMsg("tx", tx)
println("sent tx to", c.addr.Ip())
}
} else {
println("getdata for type", typ, "not supported yet")
}
}
}
示例10: 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[:])
}
}
示例11: DumpBalance
// Call it only from the Chain thread
func DumpBalance(utxt *os.File, details bool) (s string) {
var sum uint64
mutex_bal.Lock()
defer mutex_bal.Unlock()
for i := range MyBalance {
sum += MyBalance[i].Value
if details {
if i < 100 {
s += fmt.Sprintf("%7d %s\n", 1+common.Last.Block.Height-MyBalance[i].MinedAt,
MyBalance[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(&MyBalance[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(MyBalance[i].TxPrevOut.Hash[:])
// Store the unspent line in balance/unspent.txt
fmt.Fprintf(utxt, "%s # %.8f BTC @ %s, %d confs\n", MyBalance[i].TxPrevOut.String(),
float64(MyBalance[i].Value)/1e8, MyBalance[i].BtcAddr.StringLab(),
1+common.Last.Block.Height-MyBalance[i].MinedAt)
// 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()
}
}
LastBalance = sum
s += fmt.Sprintf("Total balance: %.8f BTC in %d unspent outputs\n", float64(sum)/1e8, len(MyBalance))
if utxt != nil {
utxt.Close()
}
return
}
示例12: GetBlockData
func (c *oneConnection) GetBlockData(h []byte) {
var b [1 + 4 + 32]byte
b[0] = 1 // One inv
b[1] = 2 // Block
copy(b[5:37], h[:32])
if dbg > 1 {
println("GetBlockData", btc.NewUint256(h).String())
}
c.SendRawMsg("getdata", b[:])
}
示例13: stats
func (db *unwindDb) stats() (s string) {
var cnt int
for i := range db.tdb {
cnt += db.dbH(i).Count()
}
s = fmt.Sprintf("UNWIND: len:%d last:%d defrags:%d/%d\n",
cnt, db.lastBlockHeight, db.defragCount, db.defragIndex)
s += "Last block: " + btc.NewUint256(db.lastBlockHash[:]).String() + "\n"
return
}
示例14: 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 := btc.VerifyTxScript(tx.TxIn[i].ScriptSig, po.Pk_script, i, tx, true)
if !ok {
s += fmt.Sprintln("\nERROR: The transacion does not have a valid signature.")
e = errors.New("Invalid signature")
return
}
totinp += po.Value
s += fmt.Sprintf(" %15.8f BTC @ %s\n", float64(po.Value)/1e8,
btc.NewAddrFromPkScript(po.Pk_script, common.Testnet).String())
} 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
}
示例15: xmp_txs2s
func xmp_txs2s(w http.ResponseWriter, r *http.Request) {
if !ipchecker(r) {
return
}
r.ParseForm()
if checksid(r) && len(r.Form["del"]) > 0 {
tid := btc.NewUint256FromString(r.Form["del"][0])
if tid != nil {
network.TxMutex.Lock()
delete(network.TransactionsToSend, tid.Hash)
network.TxMutex.Unlock()
}
}
if checksid(r) && len(r.Form["send"]) > 0 {
tid := btc.NewUint256FromString(r.Form["send"][0])
if tid != nil {
network.TxMutex.Lock()
if ptx, ok := network.TransactionsToSend[tid.Hash]; ok {
network.TxMutex.Unlock()
cnt := network.NetRouteInv(1, tid, nil)
ptx.Invsentcnt += cnt
}
}
}
w.Header()["Content-Type"] = []string{"text/xml"}
if len(r.Form["id"]) > 0 {
output_tx_xml(w, r.Form["id"][0])
return
}
w.Write([]byte("<txpool>"))
network.TxMutex.Lock()
for k, v := range network.TransactionsToSend {
w.Write([]byte("<tx>"))
fmt.Fprint(w, "<id>", btc.NewUint256(k[:]).String(), "</id>")
fmt.Fprint(w, "<time>", v.Firstseen.Unix(), "</time>")
fmt.Fprint(w, "<len>", len(v.Data), "</len>")
fmt.Fprint(w, "<own>", v.Own, "</own>")
fmt.Fprint(w, "<firstseen>", v.Firstseen.Unix(), "</firstseen>")
fmt.Fprint(w, "<invsentcnt>", v.Invsentcnt, "</invsentcnt>")
fmt.Fprint(w, "<sentcnt>", v.SentCnt, "</sentcnt>")
fmt.Fprint(w, "<sentlast>", v.Lastsent.Unix(), "</sentlast>")
fmt.Fprint(w, "<volume>", v.Volume, "</volume>")
fmt.Fprint(w, "<fee>", v.Fee, "</fee>")
fmt.Fprint(w, "<blocked>", v.Blocked, "</blocked>")
w.Write([]byte("</tx>"))
}
network.TxMutex.Unlock()
w.Write([]byte("</txpool>"))
}