本文整理汇总了Golang中github.com/piotrnar/gocoin/lib/btc.NewTx函数的典型用法代码示例。如果您正苦于以下问题:Golang NewTx函数的具体用法?Golang NewTx怎么用?Golang NewTx使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了NewTx函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: 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
}
示例2: ParseTxNet
// Handle incoming "tx" msg
func (c *OneConnection) ParseTxNet(pl []byte) {
if uint32(len(pl)) > atomic.LoadUint32(&common.CFG.TXPool.MaxTxSize) {
common.CountSafe("TxRejectedBig")
return
}
tx, le := btc.NewTx(pl)
if tx == nil {
c.DoS("TxRejectedBroken")
return
}
if le != len(pl) {
c.DoS("TxRejectedLenMismatch")
return
}
if len(tx.TxIn) < 1 {
c.Misbehave("TxRejectedNoInputs", 100)
return
}
tx.SetHash(pl)
NeedThisTx(tx.Hash, func() {
// This body is called with a locked TxMutex
tx.Raw = pl
select {
case NetTxs <- &TxRcvd{conn: c, tx: tx, raw: pl}:
TransactionsPending[tx.Hash.BIdx()] = true
default:
common.CountSafe("TxRejectedFullQ")
//println("NetTxsFULL")
}
})
}
示例3: 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
}
if !tx.IsCoinBase() {
for i := range tx.TxIn {
if tx.TxIn[i].Input.IsNull() {
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)
}
示例4: ParseTxNet
// Handle incoming "tx" msg
func (c *OneConnection) ParseTxNet(pl []byte) {
tid := btc.NewSha2Hash(pl)
NeedThisTx(tid, func() {
// This body is called with a locked TxMutex
if uint32(len(pl)) > atomic.LoadUint32(&common.CFG.TXPool.MaxTxSize) {
common.CountSafe("TxTooBig")
RejectTx(tid, len(pl), TX_REJECTED_TOO_BIG)
return
}
tx, le := btc.NewTx(pl)
if tx == nil {
RejectTx(tid, len(pl), TX_REJECTED_FORMAT)
c.DoS("TxBroken")
return
}
if le != len(pl) {
RejectTx(tid, len(pl), TX_REJECTED_LEN_MISMATCH)
c.DoS("TxLenMismatch")
return
}
if len(tx.TxIn) < 1 {
RejectTx(tid, len(pl), TX_REJECTED_EMPTY_INPUT)
c.DoS("TxNoInputs")
return
}
tx.Hash = tid
select {
case NetTxs <- &TxRcvd{conn: c, tx: tx, raw: pl}:
TransactionsPending[tid.BIdx()] = true
default:
common.CountSafe("NetTxsFULL")
}
})
}
示例5: init
func init() {
rd, _ := hex.DecodeString("0100000001b14bdcbc3e01bdaad36cc08e81e69c82e1060bc14e518db2b49aa43ad90ba26000000000490047304402203f16c6f40162ab686621ef3000b04e75418a0c0cb2d8aebeac894ae360ac1e780220ddc15ecdfc3507ac48e1681a33eb60996631bf6bf5bc0a0682c4db743ce7ca2b01ffffffff0140420f00000000001976a914660d4ef3a743e3e696ad990364e555c271ad504b88ac00000000")
dummy_tx, _ := btc.NewTx(rd)
dummy_tx.Size = uint32(len(rd))
ha := btc.Sha2Sum(rd)
dummy_tx.Hash = btc.NewUint256(ha[:])
}
示例6: output_utxo_tx_xml
func output_utxo_tx_xml(w http.ResponseWriter, minedid, minedat string) {
txid := btc.NewUint256FromString(minedid)
if txid == nil {
return
}
block_number, er := strconv.ParseUint(minedat, 10, 32)
if er != nil {
return
}
lck := new(usif.OneLock)
lck.In.Add(1)
lck.Out.Add(1)
usif.LocksChan <- lck
lck.In.Wait()
w.Write([]byte("<tx>"))
fmt.Fprint(w, "<id>", minedid, "</id>")
if dat, er := common.BlockChain.GetRawTx(uint32(block_number), txid); er == nil {
w.Write([]byte("<status>OK</status>"))
w.Write([]byte(fmt.Sprint("<size>", len(dat), "</size>")))
tx, _ := btc.NewTx(dat)
output_tx_xml(w, tx)
} else {
w.Write([]byte("<status>Not found</status>"))
}
w.Write([]byte("</tx>"))
lck.Out.Done()
}
示例7: GetAverageFee
func GetAverageFee() float64 {
Last.Mutex.Lock()
end := Last.Block
Last.Mutex.Unlock()
LockCfg()
blocks := CFG.AverageFeeBlocks
UnlockCfg()
if blocks <= 0 {
blocks = 1 // at leats one block
}
AverageFeeMutex.Lock()
defer AverageFeeMutex.Unlock()
if end.Height == averageFeeLastBlock && averageFeeLastCount == blocks {
return AverageFee_SPB // we've already calculated for this block
}
averageFeeLastBlock = end.Height
averageFeeLastCount = blocks
AverageFeeBytes = 0
AverageFeeTotal = 0
for blocks > 0 {
bl, _, e := BlockChain.Blocks.BlockGet(end.BlockHash)
if e != nil {
return 0
}
block, e := btc.NewBlock(bl)
if e != nil {
return 0
}
cbasetx, cbasetxlen := btc.NewTx(bl[block.TxOffset:])
for o := range cbasetx.TxOut {
AverageFeeTotal += cbasetx.TxOut[o].Value
}
AverageFeeTotal -= btc.GetBlockReward(end.Height)
AverageFeeBytes += uint64(len(bl) - block.TxOffset - cbasetxlen) /*do not count block header and conibase tx */
blocks--
end = end.Parent
}
if AverageFeeBytes == 0 {
if AverageFeeTotal != 0 {
panic("Impossible that miner gest a fee with no transactions in the block")
}
AverageFee_SPB = 0
} else {
AverageFee_SPB = float64(AverageFeeTotal) / float64(AverageFeeBytes)
}
return AverageFee_SPB
}
示例8: BlocksMiner
func BlocksMiner(bl []byte) (string, int) {
for i, m := range MinerIds {
if MinedBy(bl, m.Tag) {
return m.Name, i
}
}
bt, _ := btc.NewBlock(bl)
cbtx, _ := btc.NewTx(bl[bt.TxOffset:])
adr := btc.NewAddrFromPkScript(cbtx.TxOut[0].Pk_script, Testnet)
if adr != nil {
return adr.String(), -1
}
return "", -1
}
示例9: raw_tx_from_file
func raw_tx_from_file(fn string) *btc.Tx {
dat := sys.GetRawData(fn)
if dat == nil {
fmt.Println("Cannot fetch raw transaction data")
return nil
}
tx, txle := btc.NewTx(dat)
if tx != nil {
tx.SetHash(dat)
if txle != len(dat) {
fmt.Println("WARNING: Raw transaction length mismatch", txle, len(dat))
}
}
return tx
}
示例10: main
func main() {
load_dll()
pkscript, _ := hex.DecodeString("76a9147d22f6c9cca35cb4071971fe442da58546aaeb5988ac")
d, _ := hex.DecodeString("0100000002232e0afdd9bcad5e3ace8a19ab8ad0ed8cebd6213b098e36cdc8b25af1d5cd30010000006b483045022077768255f192427bd2841555cfc86fdb7332e18c5c530b3b6028cd034a339f9c022100b3876037f63559ca8a2766a86c8dc62d41c869abc539ab983ce8eccf448f117f012102a33ac1e78cd3ff49bde292da2efcf273509d0869fe81571dfb49528c8287a8fcffffffff2fc90cf473e6ce6177818f705f6e96c7ad42f921f23b660ea27f653346e6a8a9010000006a47304402206d5be8061f712fba560b9966e037f7c53cff377b0c15d8c62bd0a2bcb195048602200522601341cdf574e3a39ba0397d8fe5608e37fd46b3fda2684386207ca9bf69012102a33ac1e78cd3ff49bde292da2efcf273509d0869fe81571dfb49528c8287a8fcffffffff0200a86100000000001976a914ff8e92b694527dd77660f873eb3a86eda5ed459f88ac70110100000000001976a9147d22f6c9cca35cb4071971fe442da58546aaeb5988ac00000000")
tx, _ := btc.NewTx(d)
i := 0
flags := uint32(script.STANDARD_VERIFY_FLAGS)
println(flags)
res := script.VerifyTxScript(pkscript, i, tx, flags)
println("Gocoin:", res)
if use_consensus_lib {
res = consensus_verify_script(pkscript, i, tx, flags)
println("Consen:", res)
}
}
示例11: raw_tx_from_file
func raw_tx_from_file(fn string) *btc.Tx {
d, er := ioutil.ReadFile(fn)
if er != nil {
fmt.Println(er.Error())
return nil
}
dat, er := hex.DecodeString(string(d))
if er != nil {
fmt.Println("hex.DecodeString failed - assume binary transaction file")
dat = d
}
tx, txle := btc.NewTx(dat)
if tx != nil && txle != len(dat) {
fmt.Println("WARNING: Raw transaction length mismatch", txle, len(dat))
}
return tx
}
示例12: LoadRawTx
func LoadRawTx(buf []byte) (s string) {
txd, er := hex.DecodeString(string(buf))
if er != nil {
txd = buf
}
// At this place we should have raw transaction in txd
tx, le := btc.NewTx(txd)
if tx == nil || le != len(txd) {
s += fmt.Sprintln("Could not decode transaction file or it has some extra data")
return
}
tx.SetHash(txd)
network.TxMutex.Lock()
defer network.TxMutex.Unlock()
if _, ok := network.TransactionsToSend[tx.Hash.BIdx()]; ok {
s += fmt.Sprintln("TxID", tx.Hash.String(), "was already in the pool")
return
}
var missinginp bool
var totinp, totout uint64
var sigops uint
s, missinginp, totinp, totout, sigops, er = DecodeTxSops(tx)
if er != nil {
return
}
if missinginp {
network.TransactionsToSend[tx.Hash.BIdx()] = &network.OneTxToSend{Tx: tx, Data: txd, Own: 2, Firstseen: time.Now(),
Volume: totout, SigopsCost: sigops}
} else {
network.TransactionsToSend[tx.Hash.BIdx()] = &network.OneTxToSend{Tx: tx, Data: txd, Own: 1, Firstseen: time.Now(),
Volume: totinp, Fee: totinp - totout, SigopsCost: sigops}
}
network.TransactionsToSendSize += uint64(len(txd))
s += fmt.Sprintln("Transaction added to the memory pool. Please double check its details above.")
s += fmt.Sprintln("If it does what you intended, you can send it the network.\nUse TxID:", tx.Hash.String())
return
}
示例13: TestSighash
func TestSighash(t *testing.T) {
var arr [][]interface{}
dat, er := ioutil.ReadFile("../test/sighash.json")
if er != nil {
println(er.Error())
return
}
r := bytes.NewBuffer(dat)
d := json.NewDecoder(r)
d.UseNumber()
er = d.Decode(&arr)
if er != nil {
println(er.Error())
return
}
for i := range arr {
if len(arr[i]) == 5 {
tmp, _ := hex.DecodeString(arr[i][0].(string))
tx, _ := btc.NewTx(tmp)
if tx == nil {
t.Error("Cannot decode tx from text number", i)
continue
}
tmp, _ = hex.DecodeString(arr[i][1].(string)) // script
iidx, _ := arr[i][2].(json.Number).Int64()
htype, _ := arr[i][3].(json.Number).Int64()
got := tx.SignatureHash(tmp, int(iidx), int32(htype))
exp := btc.NewUint256FromString(arr[i][4].(string))
if !bytes.Equal(exp.Hash[:], got) {
t.Error("SignatureHash mismatch at index", i)
}
}
}
}
示例14: json_blocks
func json_blocks(w http.ResponseWriter, r *http.Request) {
if !ipchecker(r) {
return
}
type one_block struct {
Height uint32
Timestamp uint32
Hash string
TxCnt int
Size int
Version uint32
Reward uint64
Miner string
Received uint32
TimeDl, TimeVer int
WasteCnt uint
}
var blks []*one_block
common.Last.Mutex.Lock()
end := common.Last.Block
common.Last.Mutex.Unlock()
for cnt := uint32(0); end != nil && cnt < atomic.LoadUint32(&common.CFG.WebUI.ShowBlocks); cnt++ {
bl, _, e := common.BlockChain.Blocks.BlockGet(end.BlockHash)
if e != nil {
return
}
block, e := btc.NewBlock(bl)
if e != nil {
return
}
b := new(one_block)
b.Height = end.Height
b.Timestamp = block.BlockTime()
b.Hash = end.BlockHash.String()
b.TxCnt = block.TxCount
b.Size = len(bl)
b.Version = block.Version()
cbasetx, _ := btc.NewTx(bl[block.TxOffset:])
for o := range cbasetx.TxOut {
b.Reward += cbasetx.TxOut[o].Value
}
b.Miner, _ = common.TxMiner(cbasetx)
network.MutexRcv.Lock()
rb := network.ReceivedBlocks[end.BlockHash.BIdx()]
network.MutexRcv.Unlock()
b.Received = uint32(rb.Time.Unix())
if rb.TmDownload != 0 {
b.TimeDl = int(rb.TmDownload / time.Millisecond)
} else {
b.TimeDl = -1
}
if rb.TmAccept != 0 {
b.TimeVer = int(rb.TmAccept / time.Millisecond)
} else {
b.TimeVer = -1
}
b.WasteCnt = rb.Cnt
blks = append(blks, b)
end = end.Parent
}
bx, er := json.Marshal(blks)
if er == nil {
w.Header()["Content-Type"] = []string{"application/json"}
w.Write(bx)
} else {
println(er.Error())
}
}
示例15: p_blocks
func p_blocks(w http.ResponseWriter, r *http.Request) {
if !ipchecker(r) {
return
}
blks := load_template("blocks.html")
onerow := load_template("blocks_row.html")
common.Last.Mutex.Lock()
end := common.Last.Block
common.Last.Mutex.Unlock()
for cnt := uint32(0); end != nil && cnt < atomic.LoadUint32(&common.CFG.WebUI.ShowBlocks); cnt++ {
bl, _, e := common.BlockChain.Blocks.BlockGet(end.BlockHash)
if e != nil {
return
}
block, e := btc.NewBlock(bl)
if e != nil {
return
}
cbasetx, _ := btc.NewTx(bl[block.TxOffset:])
s := onerow
s = strings.Replace(s, "{BLOCK_NUMBER}", fmt.Sprint(end.Height), 1)
s = strings.Replace(s, "{BLOCK_TIMESTAMP}",
time.Unix(int64(block.BlockTime()), 0).Format("Mon 15:04:05"), 1)
s = strings.Replace(s, "{BLOCK_HASH}", end.BlockHash.String(), 1)
s = strings.Replace(s, "{BLOCK_TXS}", fmt.Sprint(block.TxCount), 1)
s = strings.Replace(s, "{BLOCK_SIZE}", fmt.Sprintf("%.1f", float64(len(bl))/1000), 1)
var rew uint64
for o := range cbasetx.TxOut {
rew += cbasetx.TxOut[o].Value
}
s = strings.Replace(s, "<!--BLOCK_VERSION-->", fmt.Sprint(block.Version()), 1)
s = strings.Replace(s, "{BLOCK_REWARD}", fmt.Sprintf("%.2f", float64(rew)/1e8), 1)
mi, _ := common.TxMiner(cbasetx)
if len(mi) > 10 {
mi = mi[:10]
}
s = strings.Replace(s, "{BLOCK_MINER}", mi, 1)
network.MutexRcv.Lock()
rb := network.ReceivedBlocks[end.BlockHash.BIdx()]
network.MutexRcv.Unlock()
if rb.TmDownload != 0 {
s = strings.Replace(s, "{TIME_TO_DOWNLOAD}", fmt.Sprint(int(rb.TmDownload/time.Millisecond)), 1)
} else {
s = strings.Replace(s, "{TIME_TO_DOWNLOAD}", "", 1)
}
if rb.TmAccept != 0 {
s = strings.Replace(s, "{TIME_TO_ACCEPT}", fmt.Sprint(int(rb.TmAccept/time.Millisecond)), 1)
} else {
s = strings.Replace(s, "{TIME_TO_ACCEPT}", "", 1)
}
if rb.Cnt != 0 {
s = strings.Replace(s, "{WASTED_BLOCKS}", fmt.Sprint(rb.Cnt), 1)
} else {
s = strings.Replace(s, "{WASTED_BLOCKS}", "", 1)
}
s = strings.Replace(s, "{TIME_RECEIVED}", rb.Time.Format("15:04:05"), 1)
blks = templ_add(blks, "<!--BLOCK_ROW-->", s)
end = end.Parent
}
write_html_head(w, r)
w.Write([]byte(blks))
write_html_tail(w)
}