Ejemplo n.º 1
0
func (nc *Conn) Sync(hash string, count int, wait bool) ([]extratypes.NameSyncEvent, error) {
	cSyncCalls.Add(1)

	cmd, err := extratypes.NewNameSyncCmd(newID(), hash, count, wait)
	if err != nil {
		return nil, err
	}

	r, err := btcjson.RpcSend(nc.Username, nc.Password, nc.Server, cmd)
	if err != nil {
		return nil, err
	}

	if r.Error != nil {
		if r.Error.Code == rpcInvalidAddressOrKey {
			return nil, ErrSyncNoSuchBlock
		}
		return nil, r.Error
	}

	if r.Result == nil {
		return nil, fmt.Errorf("got nil result")
	}

	if nsr, ok := r.Result.(extratypes.NameSyncReply); ok {
		return []extratypes.NameSyncEvent(nsr), nil
	}

	return nil, fmt.Errorf("bad reply")
}
Ejemplo n.º 2
0
func (nc *Conn) Filter(regexp string, maxage, from, count int) (names []extratypes.NameFilterItem, err error) {
	cFilterCalls.Add(1)

	cmd, err := extratypes.NewNameFilterCmd(newID(), regexp, maxage, from, count)
	if err != nil {
		return nil, err
	}

	r, err := btcjson.RpcSend(nc.Username, nc.Password, nc.Server, cmd)
	if err != nil {
		return nil, err
	}

	if r.Error != nil {
		return nil, r.Error
	}

	if r.Result == nil {
		return nil, fmt.Errorf("got nil result")
	}

	if nsr, ok := r.Result.(extratypes.NameFilterReply); ok {
		return []extratypes.NameFilterItem(nsr), nil
	}

	return nil, fmt.Errorf("bad reply")
}
Ejemplo n.º 3
0
// Query the Namecoin daemon for a Namecoin domain (e.g. d/example).
// If the domain exists, returns the value stored in Namecoin, which should be JSON.
// Note that this will return domain data even if the domain is expired.
func (nc *Conn) Query(name string) (v string, err error) {
	cQueryCalls.Add(1)

	cmd, err := extratypes.NewNameShowCmd(newID(), name)
	if err != nil {
		//log.Info("NC NEWCMD ", err)
		return "", err
	}

	r, err := btcjson.RpcSend(nc.Username, nc.Password, nc.Server, cmd)
	if err != nil {
		return "", err
	}

	if r.Error != nil {
		//log.Info("RPC error: ", r.Error)
		if r.Error.Code == -4 {
			return "", merr.ErrNoSuchDomain
		}
		return "", r.Error
	}

	if r.Result == nil {
		//log.Info("NC NILRESULT")
		return "", fmt.Errorf("got nil result")
	}

	if nsr, ok := r.Result.(*extratypes.NameShowReply); ok {
		//log.Info("NC OK")
		return nsr.Value, nil
	}

	//log.Info("NC BADREPLY")
	return "", fmt.Errorf("bad reply")
}
Ejemplo n.º 4
0
func (nc *Conn) CurHeight() (int, error) {
	cCurHeightCalls.Add(1)

	cmd, err := btcjson.NewGetInfoCmd(newID())
	if err != nil {
		return 0, err
	}

	r, err := btcjson.RpcSend(nc.Username, nc.Password, nc.Server, cmd)
	if err != nil {
		return 0, err
	}

	if r.Error != nil {
		return 0, r.Error
	}

	if r.Result == nil {
		return 0, fmt.Errorf("got nil result")
	}

	if rep, ok := r.Result.(*btcjson.InfoResult); ok {
		return int(rep.Blocks), nil
	}

	return 0, fmt.Errorf("bad reply")
}