rpc: implement CalculateInputs for RPC client
Using getunspents RPC call.
This commit is contained in:
parent
826a29cc98
commit
d93499cc6f
2 changed files with 41 additions and 7 deletions
|
@ -11,7 +11,10 @@ import (
|
|||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/CityOfZion/neo-go/pkg/core"
|
||||
"github.com/CityOfZion/neo-go/pkg/core/transaction"
|
||||
"github.com/CityOfZion/neo-go/pkg/crypto/keys"
|
||||
"github.com/CityOfZion/neo-go/pkg/util"
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
|
@ -152,6 +155,29 @@ func (c *Client) SetClient(cli *http.Client) {
|
|||
}
|
||||
}
|
||||
|
||||
// CalculateInputs creates input transactions for the specified amount of given
|
||||
// asset belonging to specified address. This implementation uses GetUnspents
|
||||
// JSON-RPC call internally, so make sure your RPC server suppors that.
|
||||
func (c *Client) CalculateInputs(address string, asset util.Uint256, cost util.Fixed8) ([]transaction.Input, util.Fixed8, error) {
|
||||
var utxos core.UnspentBalances
|
||||
|
||||
resp, err := c.GetUnspents(address)
|
||||
if err != nil || resp.Error != nil {
|
||||
if err == nil {
|
||||
err = fmt.Errorf("remote returned %d: %s", resp.Error.Code, resp.Error.Message)
|
||||
}
|
||||
return nil, util.Fixed8(0), errors.Wrapf(err, "cannot get balance for address %v", address)
|
||||
}
|
||||
for _, ubi := range resp.Result.Balance {
|
||||
if asset.Equals(ubi.AssetHash) {
|
||||
utxos = ubi.Unspents
|
||||
break
|
||||
}
|
||||
}
|
||||
return unspentsToInputs(utxos, cost)
|
||||
|
||||
}
|
||||
|
||||
func (c *Client) performRequest(method string, p params, v interface{}) error {
|
||||
var (
|
||||
r = request{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue