diff --git a/README.md b/README.md index f98309f..d0b0de5 100644 --- a/README.md +++ b/README.md @@ -163,7 +163,7 @@ amount := uint64(1000) receivers := []arksdk.Receiver{ arksdk.NewBitcoinReceiver(recipientOffchainAddr, amount), } -txid, err = arkClient.SendOffchain(ctx, false, receivers) +txid, err = arkClient.SendOffChain(ctx, false, receivers) if err != nil { log.Fatal(err) } @@ -172,7 +172,7 @@ log.Infof("Transaction completed: %s", txid) #### Submit Transaction -`SendOffchain` is useful for simple send operations. But complex contract or collaborative transactions require more flexibility. In this case, you can use the `TransportClient.SubmitTx` and `TransportClient.FinalizeTx` APIs. +`SendOffChain` is useful for simple send operations. But complex contract or collaborative transactions require more flexibility. In this case, you can use the `TransportClient.SubmitTx` and `TransportClient.FinalizeTx` APIs. ```go // Create a new transport client @@ -227,10 +227,10 @@ receivers := []arksdk.Receiver{ arksdk.NewBitcoinReceiver(recipient1OffchainAddr, amount1), arksdk.NewBitcoinReceiver(recipient2OffchainAddr, amount2), } -txid, err = arkClient.SendOffchain(ctx, false, receivers) +txid, err = arkClient.SendOffChain(ctx, false, receivers) ``` -#### Redeem Funds +#### Cooperative Exit To move funds from offchain to onchain: @@ -242,6 +242,53 @@ if err != nil { log.Infof("Redeemed with tx: %s", txid) ``` +### 5. Additional Client Functions + +The `ArkClient` interface exposes a number of utility methods beyond the +basic workflow shown above. Here is a quick overview: + +- `GetVersion()` - return the SDK version. +- `GetConfigData(ctx)` - retrieve Ark server configuration details. +- `Init(ctx, args)` / `InitWithWallet(ctx, args)` - create or restore a wallet. +- `IsLocked(ctx)` - check if the wallet is currently locked. +- `Unlock(ctx, password)` / `Lock(ctx)` - unlock or lock the wallet. +- `Balance(ctx, computeExpiryDetails)` - query onchain and offchain balances. +- `Receive(ctx)` - generate onchain, offchain and boarding addresses. +- `SendOffChain(ctx, withExpiryCoinselect, receivers)` - send funds offchain. +- `Settle(ctx, opts ...) (string, error)` - finalize pending or preconfirmed funds into a commitment transaction. + +- `RegisterIntent(...)` / `DeleteIntent(...)` - manage spend intents for collaborative transactions. +- `CollaborativeExit(ctx, addr, amount, withExpiryCoinselect, opts ...) (string, error)` - redeem offchain funds onchain. +- `Unroll(ctx) error` - broadcast unroll transactions when ready. +- `CompleteUnroll(ctx, to string) (string, error)` - finalize an unroll and sweep to an onchain address. +- `OnboardAgainAllExpiredBoardings(ctx) (string, error)` - onboard again using expired boarding UTXOs. +- `WithdrawFromAllExpiredBoardings(ctx, to string) (string, error)` - withdraw expired boarding amounts onchain. +- `ListVtxos(ctx) (spendable, spent []types.Vtxo, err error)` - list virtual UTXOs. +- `Dump(ctx) (seed string, error)` - export the wallet seed. +- `GetTransactionHistory(ctx)` - fetch past transactions. +- `GetTransactionEventChannel(ctx)` and `GetVtxoEventChannel(ctx)` - subscribe to wallet events. +- `RedeemNotes(ctx, notes, opts ...)` - redeem Ark notes back to your wallet. +- `SignTransaction(ctx, tx)` - sign an arbitrary transaction. +- `NotifyIncomingFunds(ctx, address)` - wait until a specific offchain address receives funds. +- `Reset(ctx)` - clear local caches and state. +- `Stop()` - stop any running listeners. + +### 6. Transport Client + +For lower-level control over transaction batching you can use the `TransportClient` interface directly: + +- `GetInfo(ctx)` - return server configuration and network data. +- `RegisterIntent(ctx, signature, message)` and `DeleteIntent(ctx, signature, message)` - manage collaborative intents. +- `ConfirmRegistration(ctx, intentID)` - confirm intent registration on chain. +- `SubmitTreeNonces(ctx, batchId, cosignerPubkey, nonces)` and `SubmitTreeSignatures(ctx, batchId, cosignerPubkey, sigs)` - coordinate cosigner trees. +- `SubmitSignedForfeitTxs(ctx, signedForfeitTxs, signedCommitmentTx)` - provide fully signed forfeit and commitment transactions. +- `GetEventStream(ctx, topics)` - subscribe to batch events from the server. +- `SubmitTx(ctx, signedArkTx, checkpointTxs)` and `FinalizeTx(ctx, arkTxid, finalCheckpointTxs)` - submit collaborative transactions. +- `GetTransactionsStream(ctx)` - stream transaction notifications. +- `Close()` - close the transport connection. + +See the [pkg.go.dev documentation](https://pkg.go.dev/github.com/arkade-os/go-sdk) for detailed API information. + ## Full Example For a complete end-to-end example demonstrating the usage of the Arkade Go SDK, including setting up multiple clients, boarding, and transferring funds, please refer to our [GitHub repository](https://github.com/arkade-os/go-sdk/blob/master/example/alice_to_bob.go). diff --git a/api-spec/go.mod b/api-spec/go.mod deleted file mode 100644 index 32f0518..0000000 --- a/api-spec/go.mod +++ /dev/null @@ -1,16 +0,0 @@ -module github.com/arkade-os/go-sdk/api-spec - -go 1.24.2 - -require ( - google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7 - google.golang.org/grpc v1.71.0 - google.golang.org/protobuf v1.36.6 -) - -require ( - golang.org/x/net v0.37.0 // indirect - golang.org/x/sys v0.31.0 // indirect - golang.org/x/text v0.23.0 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20250603155806-513f23925822 // indirect -) diff --git a/api-spec/go.sum b/api-spec/go.sum deleted file mode 100644 index 1b68e35..0000000 --- a/api-spec/go.sum +++ /dev/null @@ -1,36 +0,0 @@ -github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= -github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= -github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= -github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= -github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= -github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= -github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= -github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= -github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= -go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= -go.opentelemetry.io/otel v1.34.0 h1:zRLXxLCgL1WyKsPVrgbSdMN4c0FMkDAskSTQP+0hdUY= -go.opentelemetry.io/otel v1.34.0/go.mod h1:OWFPOQ+h4G8xpyjgqo4SxJYdDQ/qmRH+wivy7zzx9oI= -go.opentelemetry.io/otel/metric v1.34.0 h1:+eTR3U0MyfWjRDhmFMxe2SsW64QrZ84AOhvqS7Y+PoQ= -go.opentelemetry.io/otel/metric v1.34.0/go.mod h1:CEDrp0fy2D0MvkXE+dPV7cMi8tWZwX3dmaIhwPOaqHE= -go.opentelemetry.io/otel/sdk v1.34.0 h1:95zS4k/2GOy069d321O8jWgYsW3MzVV+KuSPKp7Wr1A= -go.opentelemetry.io/otel/sdk v1.34.0/go.mod h1:0e/pNiaMAqaykJGKbi+tSjWfNNHMTxoC9qANsCzbyxU= -go.opentelemetry.io/otel/sdk/metric v1.34.0 h1:5CeK9ujjbFVL5c1PhLuStg1wxA7vQv7ce1EK0Gyvahk= -go.opentelemetry.io/otel/sdk/metric v1.34.0/go.mod h1:jQ/r8Ze28zRKoNRdkjCZxfs6YvBTG1+YIqyFVFYec5w= -go.opentelemetry.io/otel/trace v1.34.0 h1:+ouXS2V8Rd4hp4580a8q23bg0azF2nI8cqLYnC8mh/k= -go.opentelemetry.io/otel/trace v1.34.0/go.mod h1:Svm7lSjQD7kG7KJ/MUHPVXSDGz2OX4h0M2jHBhmSfRE= -golang.org/x/net v0.37.0 h1:1zLorHbz+LYj7MQlSf1+2tPIIgibq2eL5xkrGk6f+2c= -golang.org/x/net v0.37.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8= -golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= -golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= -golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY= -golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4= -google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7 h1:FiusG7LWj+4byqhbvmB+Q93B/mOxJLN2DTozDuZm4EU= -google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7/go.mod h1:kXqgZtrWaf6qS3jZOCnCH7WYfrvFjkC51bM8fz3RsCA= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250603155806-513f23925822 h1:fc6jSaCT0vBduLYZHYrBBNY4dsWuvgyff9noRNDdBeE= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250603155806-513f23925822/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A= -google.golang.org/grpc v1.71.0 h1:kF77BGdPTQ4/JZWMlb9VpJ5pa25aqvVqogsxNHHdeBg= -google.golang.org/grpc v1.71.0/go.mod h1:H0GRtasmQOh9LkFoCPDu3ZrwUtD1YGE+b2vYBYd/8Ec= -google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY= -google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY= diff --git a/go.mod b/go.mod index e2c35b6..8c8cc55 100644 --- a/go.mod +++ b/go.mod @@ -4,11 +4,8 @@ go 1.24.2 replace github.com/btcsuite/btcd/btcec/v2 => github.com/btcsuite/btcd/btcec/v2 v2.3.3 -replace github.com/arkade-os/go-sdk/api-spec => ./api-spec - require ( github.com/arkade-os/arkd/pkg/ark-lib v0.0.0-20250708155328-721172a83dba - github.com/arkade-os/go-sdk/api-spec v0.0.0-00010101000000-000000000000 github.com/btcsuite/btcd v0.24.3-0.20240921052913-67b8efd3ba53 github.com/btcsuite/btcd/btcec/v2 v2.3.4 github.com/btcsuite/btcd/btcutil v1.1.5 @@ -29,7 +26,9 @@ require ( github.com/timshannon/badgerhold/v4 v4.0.3 github.com/vulpemventures/go-bip32 v0.0.0-20200624192635-867c159da4d7 golang.org/x/crypto v0.36.0 + google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7 google.golang.org/grpc v1.71.0 + google.golang.org/protobuf v1.36.6 modernc.org/sqlite v1.33.1 ) @@ -148,9 +147,7 @@ require ( golang.org/x/text v0.23.0 // indirect golang.org/x/time v0.6.0 // indirect google.golang.org/genproto v0.0.0-20240812133136-8ffd90a71988 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20250603155806-513f23925822 // indirect - google.golang.org/protobuf v1.36.6 // indirect gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect lukechampine.com/blake3 v1.3.0 // indirect