本文整理汇总了Golang中github.com/piotrnar/gocoin/lib/btc.NewAddrFromString函数的典型用法代码示例。如果您正苦于以下问题:Golang NewAddrFromString函数的具体用法?Golang NewAddrFromString怎么用?Golang NewAddrFromString使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了NewAddrFromString函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: ReloadMiners
func ReloadMiners() {
d, _ := ioutil.ReadFile("miners.json")
if d != nil {
var MinerIdFile [][3]string
e := json.Unmarshal(d, &MinerIdFile)
if e != nil {
println("miners.json", e.Error())
return
}
MinerIds = nil
for _, r := range MinerIdFile {
var rec oneMinerId
rec.Name = r[0]
if r[1] != "" {
rec.Tag = []byte(r[1])
} else {
if a, _ := btc.NewAddrFromString(r[2]); a != nil {
rec.Tag = a.OutScript()
} else {
println("Error in miners.json for", r[0])
continue
}
}
MinerIds = append(MinerIds, rec)
}
}
}
示例2: load_wallet
func load_wallet(fn string) (addrs []*btc.BtcAddr) {
f, e := os.Open(fn)
if e != nil {
println(e.Error())
return
}
defer f.Close()
rd := bufio.NewReader(f)
linenr := 0
for {
var l string
l, e = rd.ReadString('\n')
l = strings.Trim(l, " \t\r\n")
linenr++
if len(l) > 0 {
if l[0] == '@' {
fmt.Println("netsted wallet in line", linenr, "- ignore it")
} else if l[0] != '#' {
ls := strings.SplitN(l, " ", 2)
if len(ls) > 0 {
a, e := btc.NewAddrFromString(ls[0])
if e != nil {
println(fmt.Sprint(fn, ":", linenr), e.Error())
} else {
addrs = append(addrs, a)
}
}
}
}
if e != nil {
break
}
}
return
}
示例3: parse_spend
// parse the "-send ..." parameter
func parse_spend() {
outs := strings.Split(*send, ",")
for i := range outs {
tmp := strings.Split(strings.Trim(outs[i], " "), "=")
if len(tmp) != 2 {
println("The outputs must be in a format address1=amount1[,addressN=amountN]")
cleanExit(1)
}
a, e := btc.NewAddrFromString(tmp[0])
if e != nil {
println("NewAddrFromString:", e.Error())
cleanExit(1)
}
assert_address_version(a)
am, er := btc.StringToSatoshis(tmp[1])
if er != nil {
println("Incorrect amount: ", tmp[1], er.Error())
cleanExit(1)
}
if *subfee {
am -= curFee
}
sendTo = append(sendTo, oneSendTo{addr: a, amount: am})
spendBtc += am
}
}
示例4: list_unspent
func list_unspent(addr string) {
fmt.Println("Checking unspent coins for addr", addr)
defer func() { // in case if ad.OutScript() would panic
if r := recover(); r != nil {
err := r.(error)
fmt.Println("main panic recovered:", err.Error())
}
}()
var ad *btc.BtcAddr
var e error
ad, e = btc.NewAddrFromString(addr)
if e != nil {
println(e.Error())
return
}
sa := ad.StealthAddr
exp_scr := ad.OutScript()
var walk chain.FunctionWalkUnspent
var unsp chain.AllUnspentTx
if sa == nil {
walk = func(db *qdb.DB, k qdb.KeyType, rec *chain.OneWalkRecord) uint32 {
if bytes.Equal(rec.Script(), exp_scr) {
unsp = append(unsp, rec.ToUnspent(ad))
}
return 0
}
} else {
wallet.FetchStealthKeys()
d := wallet.FindStealthSecret(sa)
if d == nil {
fmt.Println("No matching secret found in your wallet/stealth folder")
return
}
walk = func(db *qdb.DB, k qdb.KeyType, rec *chain.OneWalkRecord) uint32 {
if !rec.IsStealthIdx() {
return 0
}
fl, uo := wallet.CheckStealthRec(db, k, rec, ad, d, true)
if uo != nil {
unsp = append(unsp, uo)
}
return fl
}
}
common.BlockChain.Unspent.BrowseUTXO(false, walk)
sort.Sort(unsp)
var sum uint64
for i := range unsp {
if len(unsp) < 200 {
fmt.Println(unsp[i].String())
}
sum += unsp[i].Value
}
fmt.Printf("Total %.8f unspent BTC in %d outputs at address %s\n",
float64(sum)/1e8, len(unsp), ad.String())
}
示例5: main
func main() {
var testnet bool
if len(os.Args) != 2 {
fmt.Println("Specify one P2KH bitcoin address to see it's P2SH-P2WPKH deposit address")
fmt.Println("WARNING: Make sure the input address comes from an uncompressed key!!!!!")
return
}
aa, er := btc.NewAddrFromString(os.Args[1])
if er != nil {
println(er.Error())
return
}
if btc.AddrVerPubkey(false) == aa.Version {
} else if btc.AddrVerPubkey(true) == aa.Version {
testnet = true
} else {
fmt.Println("This does nto seem to be P2KH type address")
return
}
h160 := btc.Rimp160AfterSha256(append([]byte{0, 20}, aa.Hash160[:]...))
aa = btc.NewAddrFromHash160(h160[:], btc.AddrVerScript(testnet))
fmt.Println(aa.String())
}
示例6: get_change_addr
// return the change addrress or nil if there will be no change
func get_change_addr() (chng *btc.BtcAddr) {
if *change != "" {
var e error
chng, e = btc.NewAddrFromString(*change)
if e != nil {
println("Change address:", e.Error())
cleanExit(1)
}
assert_address_version(chng)
return
}
// If change address not specified, send it back to the first input
for idx := range unspentOuts {
if unspentOuts[idx].stealth {
continue // cannot send change to a stelath address since we don't know the scankey
}
uo := getUO(&unspentOuts[idx].TxPrevOut)
if k := pkscr_to_key(uo.Pk_script); k != nil {
chng = k.BtcAddr
return
}
}
fmt.Println("ERROR: Could not determine address where to send change. Add -change switch")
cleanExit(1)
return
}
示例7: get_change_addr
// return the change addrress or nil if there will be no change
func get_change_addr() (chng *btc.BtcAddr) {
if *change != "" {
var e error
chng, e = btc.NewAddrFromString(*change)
if e != nil {
println("Change address:", e.Error())
os.Exit(1)
}
return
}
// If change address not specified, send it back to the first input
uo := UO(unspentOuts[0])
for j := range publ_addrs {
if publ_addrs[j].Owns(uo.Pk_script) {
if is_stealth[j] {
println("Cannot send change to a stealth address. Use -change param")
os.Exit(1)
}
chng = publ_addrs[j]
return
}
}
fmt.Println("You do not own the address of the first input, nor specified -change")
os.Exit(1)
return
}
示例8: address_to_key
func address_to_key(addr string) *btc.PrivateAddr {
a, e := btc.NewAddrFromString(addr)
if e != nil {
println("Cannot Decode address", addr)
println(e.Error())
cleanExit(1)
}
return hash_to_key(a.Hash160[:])
}
示例9: do_scan_stealth
func do_scan_stealth(p string, ignore_prefix bool) {
ad, _ := btc.NewAddrFromString(p)
if ad == nil {
fmt.Println("Specify base58 encoded bitcoin address")
return
}
sa := ad.StealthAddr
if sa == nil {
fmt.Println("Specify base58 encoded stealth address")
return
}
if sa.Version != btc.StealthAddressVersion(common.Testnet) {
fmt.Println("Incorrect version of the stealth address")
return
}
if len(sa.SpendKeys) != 1 {
fmt.Println("Currently only single spend keys are supported. This address has", len(sa.SpendKeys))
return
}
//fmt.Println("scankey", hex.EncodeToString(sa.ScanKey[:]))
if ignore_prefix {
sa.Prefix = []byte{0}
fmt.Println("Ignoring Prefix inside the address")
} else if len(sa.Prefix) == 0 {
fmt.Println("Prefix not present in the address")
} else {
fmt.Println("Prefix", sa.Prefix[0], hex.EncodeToString(sa.Prefix[1:]))
}
wallet.FetchStealthKeys()
d := wallet.FindStealthSecret(sa)
if d == nil {
fmt.Println("No matching secret found in your wallet/stealth folder")
return
}
var unsp chain.AllUnspentTx
common.BlockChain.Unspent.BrowseUTXO(true, func(db *qdb.DB, k qdb.KeyType, rec *chain.OneWalkRecord) uint32 {
if !rec.IsStealthIdx() {
return 0
}
fl, uo := wallet.CheckStealthRec(db, k, rec, ad, d, true)
if uo != nil {
unsp = append(unsp, uo)
}
return fl
})
sort.Sort(unsp)
os.RemoveAll("balance")
os.MkdirAll("balance/", 0770)
utxt, _ := os.Create("balance/unspent.txt")
fmt.Print(wallet.DumpBalance(unsp, utxt, true, false))
}
示例10: ValidateAddress
func ValidateAddress(addr string) interface{} {
a, e := btc.NewAddrFromString(addr)
if e != nil {
return new(InvalidAddressResponse)
}
res := new(ValidAddressResponse)
res.IsValid = true
res.Address = addr
res.ScriptPubKey = hex.EncodeToString(a.OutScript())
return res
//res.IsMine = false
//res.IsWatchOnly = false
//res.IsScript = false
}
示例11: parse_batch
// parse the "-batch ..." parameter
func parse_batch() {
f, e := os.Open(*batch)
if e == nil {
defer f.Close()
td := bufio.NewReader(f)
var lcnt int
for {
li, _, _ := td.ReadLine()
if li == nil {
break
}
lcnt++
tmp := strings.SplitN(strings.Trim(string(li), " "), "=", 2)
if len(tmp) < 2 {
println("Error in the batch file line", lcnt)
cleanExit(1)
}
if tmp[0][0] == '#' {
continue // Just a comment-line
}
a, e := btc.NewAddrFromString(tmp[0])
if e != nil {
println("NewAddrFromString:", e.Error())
cleanExit(1)
}
assert_address_version(a)
am, e := btc.StringToSatoshis(tmp[1])
if e != nil {
println("StringToSatoshis:", e.Error())
cleanExit(1)
}
sendTo = append(sendTo, oneSendTo{addr: a, amount: am})
spendBtc += am
}
} else {
println(e.Error())
cleanExit(1)
}
}
示例12: dump_prvkey
func dump_prvkey() {
if *dumppriv == "*" {
// Dump all private keys
for i := range priv_keys {
if len(publ_addrs[i].Pubkey) == 33 {
fmt.Println(sec2b58com(priv_keys[i]), publ_addrs[i].String(), labels[i])
} else {
fmt.Println(sec2b58unc(priv_keys[i]), publ_addrs[i].String(), labels[i])
}
}
} else {
// single key
a, e := btc.NewAddrFromString(*dumppriv)
if e != nil {
println("Dump Private Key:", e.Error())
return
}
if a.Version != AddrVerPubkey() {
println("Dump Private Key: Version byte mismatch", a.Version, AddrVerPubkey())
return
}
for i := range priv_keys {
if publ_addrs[i].Hash160 == a.Hash160 {
fmt.Println("Public address:", publ_addrs[i].String(), labels[i])
fmt.Println("Public hexdump:", hex.EncodeToString(publ_addrs[i].Pubkey))
fmt.Println("Public compressed:", len(publ_addrs[i].Pubkey) == 33)
if len(publ_addrs[i].Pubkey) == 33 {
fmt.Println("Private encoded:", sec2b58com(priv_keys[i]))
} else {
fmt.Println("Private encoded:", sec2b58unc(priv_keys[i]))
}
fmt.Println("Private hexdump:", hex.EncodeToString(priv_keys[i]))
return
}
}
println("Dump Private Key:", a.String(), "not found it the wallet")
}
}
示例13: list_unspent
func list_unspent(addr string) {
fmt.Println("Checking unspent coins for addr", addr)
ad, e := btc.NewAddrFromString(addr)
if e != nil {
println(e.Error())
return
}
unsp := wallet.GetAllUnspent(ad)
if len(unsp) == 0 {
fmt.Println(ad.String(), "has no coins")
} else {
var tot uint64
sort.Sort(unsp)
for i := range unsp {
tot += unsp[i].Value
}
fmt.Println(ad.String(), "has", btc.UintToBtc(tot), "BTC in", len(unsp), "records:")
for i := range unsp {
fmt.Println(unsp[i].String())
}
}
}
示例14: dl_payment
func dl_payment(w http.ResponseWriter, r *http.Request) {
if !ipchecker(r) {
return
}
var err string
if len(r.Form["outcnt"]) == 1 {
var thisbal chain.AllUnspentTx
var pay_cmd string
var totalinput, spentsofar uint64
var change_addr *btc.BtcAddr
var multisig_input []*wallet.MultisigAddr
addrs_to_msign := make(map[string]bool)
tx := new(btc.Tx)
tx.Version = 1
tx.Lock_time = 0
outcnt, _ := strconv.ParseUint(r.Form["outcnt"][0], 10, 32)
wallet.BalanceMutex.Lock()
for i := 1; i <= int(outcnt); i++ {
is := fmt.Sprint(i)
if len(r.Form["txout"+is]) == 1 && r.Form["txout"+is][0] == "on" {
hash := btc.NewUint256FromString(r.Form["txid"+is][0])
if hash != nil {
vout, er := strconv.ParseUint(r.Form["txvout"+is][0], 10, 32)
if er == nil {
var po = btc.TxPrevOut{Hash: hash.Hash, Vout: uint32(vout)}
for j := range wallet.MyBalance {
if wallet.MyBalance[j].TxPrevOut == po {
thisbal = append(thisbal, wallet.MyBalance[j])
// Add the input to our tx
tin := new(btc.TxIn)
tin.Input = wallet.MyBalance[j].TxPrevOut
tin.Sequence = 0xffffffff
tx.TxIn = append(tx.TxIn, tin)
// Add new multisig address description
_, msi := wallet.IsMultisig(wallet.MyBalance[j].BtcAddr)
multisig_input = append(multisig_input, msi)
if msi != nil {
for ai := range msi.ListOfAddres {
addrs_to_msign[msi.ListOfAddres[ai]] = true
}
}
// Add the value to total input value
totalinput += wallet.MyBalance[j].Value
// If no change specified, use the first input addr as it
if change_addr == nil {
change_addr = wallet.MyBalance[j].BtcAddr
}
}
}
}
}
}
}
wallet.BalanceMutex.Unlock()
for i := 1; ; i++ {
adridx := fmt.Sprint("adr", i)
btcidx := fmt.Sprint("btc", i)
if len(r.Form[adridx]) != 1 || len(r.Form[btcidx]) != 1 {
break
}
if len(r.Form[adridx][0]) > 1 {
addr, er := btc.NewAddrFromString(r.Form[adridx][0])
if er == nil {
am, er := btc.StringToSatoshis(r.Form[btcidx][0])
if er == nil && am > 0 {
if pay_cmd == "" {
pay_cmd = "wallet -useallinputs -send "
} else {
pay_cmd += ","
}
pay_cmd += addr.Enc58str + "=" + btc.UintToBtc(am)
outs, er := btc.NewSpendOutputs(addr, am, common.CFG.Testnet)
if er != nil {
err = er.Error()
goto error
}
tx.TxOut = append(tx.TxOut, outs...)
spentsofar += am
} else {
err = "Incorrect amount (" + r.Form[btcidx][0] + ") for Output #" + fmt.Sprint(i)
goto error
}
} else {
err = "Incorrect address (" + r.Form[adridx][0] + ") for Output #" + fmt.Sprint(i)
goto error
//.........这里部分代码省略.........
示例15: list_unspent
func list_unspent(addr string) {
fmt.Println("Checking unspent coins for addr", addr)
defer func() { // in case if ad.OutScript() would panic
if r := recover(); r != nil {
err := r.(error)
fmt.Println("main panic recovered:", err.Error())
}
}()
var ad *btc.BtcAddr
var e error
ad, e = btc.NewAddrFromString(addr)
if e != nil {
println(e.Error())
return
}
sa := ad.StealthAddr
var walk chain.FunctionWalkUnspent
var unsp chain.AllUnspentTx
if sa == nil {
exp_scr := ad.OutScript()
walk = func(tx *chain.QdbRec) {
for idx, rec := range tx.Outs {
if rec != nil && bytes.Equal(rec.PKScr, exp_scr) {
unsp = append(unsp, tx.ToUnspent(uint32(idx), ad))
}
}
}
} else {
var c, spen_exp []byte
var rec, out *chain.QdbTxOut
var h160 [20]byte
wallet.FetchStealthKeys()
d := wallet.FindStealthSecret(sa)
if d == nil {
fmt.Println("No matching secret found in your wallet/stealth folder")
return
}
walk = func(tx *chain.QdbRec) {
for i := 0; i < len(tx.Outs)-1; i++ {
if rec = tx.Outs[i]; rec == nil {
continue
}
if out = tx.Outs[i+1]; out == nil {
continue
}
if !rec.IsStealthIdx() || !out.IsP2KH() || !ad.StealthAddr.CheckNonce(rec.PKScr[3:40]) {
continue
}
c = btc.StealthDH(rec.PKScr[7:40], d)
spen_exp = btc.DeriveNextPublic(sa.SpendKeys[0][:], c)
btc.RimpHash(spen_exp, h160[:])
if bytes.Equal(out.PKScr[3:23], h160[:]) {
uo := new(chain.OneUnspentTx)
uo.TxPrevOut.Hash = tx.TxID
uo.TxPrevOut.Vout = uint32(i + 1)
uo.Value = out.Value
uo.MinedAt = tx.InBlock
uo.BtcAddr = btc.NewAddrFromHash160(h160[:], btc.AddrVerPubkey(common.CFG.Testnet))
uo.FixDestString()
uo.BtcAddr.StealthAddr = sa
uo.BtcAddr.Extra = ad.Extra
uo.StealthC = c
unsp = append(unsp, uo)
}
}
}
}
common.BlockChain.Unspent.BrowseUTXO(false, walk)
sort.Sort(unsp)
var sum uint64
for i := range unsp {
if len(unsp) < 200 {
fmt.Println(unsp[i].String())
}
sum += unsp[i].Value
}
fmt.Printf("Total %.8f unspent BTC in %d outputs at address %s\n",
float64(sum)/1e8, len(unsp), ad.String())
}