Skip to content

marselester/bitgo-v2

Repository files navigation

Go client for BitGo.com API v2

Documentation Go Report Card Travis CI

This is unofficial API client. There are no plans to implement all resources.

This API call will consolidate Bitcoin Cash of 585951a5df8380e0e3063e9f wallet using max 0.001 BCH unspents with 5000 satoshis/kb fee rate. You can stop consolidation by cancelling a ctx context.

c := bitgo.NewClient(
	bitgo.WithCoin("bch"),
	bitgo.WithAccesToken("swordfish"),
)
tx, err := c.Wallet.Consolidate(ctx, "585951a5df8380e0e3063e9f", &bitgo.WalletConsolidateParams{
	WalletPassphrase: "root",
	MaxValue:         100000,
	FeeRate:          5000,
})
if err != nil {
	log.Fatalf("Failed to coalesce unspents: %v", err)
}
fmt.Printf("Consolidated transaction ID: %s", tx.TxID)

There is a CLI program to consolidate unspensts of a wallet.

$ go build ./cmd/consolidate/
$ ./consolidate -token=swordfish -coin=bch -wallet=585951a5df8380e0e3063e9f -passphrase=root -max-value=0.001 -fee-rate=5000
5885a7e6c7802206f69655ed763d14f101cf46501aef38e275c67c72cfcedb75

Also you can perform periodic consolidation with consolidated just like you would do with consolidate program. In this example consolidation runs every 12 hours.

$ go build ./cmd/consolidated/
$ ./consolidated -schedule=12h -token=swordfish -coin=bch -wallet=585951a5df8380e0e3063e9f -passphrase=root -max-value=0.001 -fee-rate=5000
5885a7e6c7802206f69655ed763d14f101cf46501aef38e275c67c72cfcedb75

This API call will retrieve the unspent transaction outputs (UTXOs) within a wallet. For example, we want to request 58ae81a5df8380e0e307e876 wallet's confirmed unspents and print amounts in BTC. You can stop pagination by cancelling a ctx context.

c := bitgo.NewClient(
	bitgo.WithCoin("bch"),
	bitgo.WithAccesToken("swordfish"),
)
params := url.Values{}
params.Set("minConfirms", "1")
err := c.Wallet.Unspents(ctx, "58ae81a5df8380e0e307e876", params, func(list *bitgo.UnspentList) {
	for _, utxo := range list.Unspents {
		fmt.Printf("%0.8f\n", toBitcoins(utxo.Value))
	}
})

There is a CLI program to list all unspensts of a wallet.

$ go build ./cmd/utxo/
$ ./utxo -token=swordfish -coin=bch -wallet=58ae81a5df8380e0e307e876 -min-confirms=1
0.00000117
0.00000001
0.00000001
0.00000562
0.00000001
0.00000562

You can use it to get a rough idea about unspents available in the wallet.

$ ./utxo -token=swordfish -coin=bch -wallet=58ae81a5df8380e0e307e876 > unspents.txt
$ sort unspents.txt | uniq -c | sort -n -r
   3 0.00000001
   2 0.00000562
   1 0.00000117

Error Handling

Dave Cheney recommends asserting errors for behaviour, not type.

package main

import (
	"fmt"

	"github.com/marselester/bitgo-v2"
	"github.com/pkg/errors"
)

// IsUnauthorized returns true if err caused by authentication problem.
func IsUnauthorized(err error) bool {
	e, ok := errors.Cause(err).(interface {
		IsUnauthorized() bool
	})
	return ok && e.IsUnauthorized()
}

func main() {
	err := bitgo.Error{Type: bitgo.ErrorTypeAuthentication}
	fmt.Println(IsUnauthorized(err))
	fmt.Println(IsUnauthorized(fmt.Errorf("")))
	fmt.Println(IsUnauthorized(nil))
	// Output: true
	// false
	// false
}

Testing

Quick tutorial on how to fuzz by Damian Gryski. Copy JSON files from testdata into workdir/corpus as sample inputs.

$ go-fuzz-build github.com/marselester/bitgo-v2
$ go-fuzz -bin=bitgo-fuzz.zip -workdir=workdir

About

Go client for BitGo.com API v2

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages