func (r FutureGetBestBlockResult) Receive() (*chainhash.Hash, int32, error) {
	res, err := receiveFuture(r)
	if err != nil {
		return nil, 0, err
	}
	var bestBlock soterjson.GetBestBlockResult
	err = json.Unmarshal(res, &bestBlock)
	if err != nil {
		return nil, 0, err
	}
	hash, err := chainhash.NewHashFromStr(bestBlock.Hash)
	if err != nil {
		return nil, 0, err
	}
	return hash, bestBlock.Height, nil
}
Receive waits for the response promised by the future and returns the hash
and height of the block in the longest (best) chain.
package rpcclient
import (
	"bytes"
	"encoding/base64"
	"encoding/hex"
	"encoding/json"
	"fmt"
	"github.com/soteria-dag/soterd/soterjson"
	"github.com/soteria-dag/soterd/chaincfg/chainhash"
	"github.com/soteria-dag/soterd/wire"
	"github.com/soteria-dag/soterd/soterutil"
)
type FutureDebugLevelResult chan *response
func (r FutureDebugLevelResult) Receive() (string, error) {
	res, err := receiveFuture(r)
	if err != nil {
		return "", err
	}
	var result string
	err = json.Unmarshal(res, &result)
	if err != nil {
		return "", err
	}
	return result, nil
}
func (c *Client) DebugLevelAsync(levelSpec string) FutureDebugLevelResult {
	cmd := soterjson.NewDebugLevelCmd(levelSpec)
	return c.sendCmd(cmd)
}
func (c *Client) DebugLevel(levelSpec string) (string, error) {
	return c.DebugLevelAsync(levelSpec).Receive()
}
type FutureCreateEncryptedWalletResult chan *response
func (r FutureCreateEncryptedWalletResult) Receive() error {
	_, err := receiveFuture(r)
	return err
}
func (c *Client) CreateEncryptedWalletAsync(passphrase string) FutureCreateEncryptedWalletResult {
	cmd := soterjson.NewCreateEncryptedWalletCmd(passphrase)
	return c.sendCmd(cmd)
}
func (c *Client) CreateEncryptedWallet(passphrase string) error {
	return c.CreateEncryptedWalletAsync(passphrase).Receive()
}
type FutureListAddressTransactionsResult chan *response
func (r FutureListAddressTransactionsResult) Receive() ([]soterjson.ListTransactionsResult, error) {
	res, err := receiveFuture(r)
	if err != nil {
		return nil, err
	}
	var transactions []soterjson.ListTransactionsResult
	err = json.Unmarshal(res, &transactions)
	if err != nil {
		return nil, err
	}
	return transactions, nil
}
func (c *Client) ListAddressTransactionsAsync(addresses []soterutil.Address, account string) FutureListAddressTransactionsResult {
	addrs := make([]string, 0, len(addresses))
	for _, addr := range addresses {
		addrs = append(addrs, addr.EncodeAddress())
	}
	cmd := soterjson.NewListAddressTransactionsCmd(addrs, &account)
	return c.sendCmd(cmd)
}
func (c *Client) ListAddressTransactions(addresses []soterutil.Address, account string) ([]soterjson.ListTransactionsResult, error) {
	return c.ListAddressTransactionsAsync(addresses, account).Receive()
}
type FutureGetBestBlockResult chan *response