A more civilized DASH Wallet SDK for a less civilized age...
- Install
- Web Browsers
- Node.js & Bundlers
- Usage
- API
<script src="https://unpkg.com/@dashincubator/secp256k1@1.x/secp256k1.js"></script>
<script src="https://unpkg.com/dashkeys@1.x/dashkeys.js"></script>
<script src="https://unpkg.com/dashsight@1.x/dashsight.js"></script>
<script src="https://unpkg.com/dashsight@1.x/dashsocket.js"></script>
<script src="https://unpkg.com/dashtx@0.x/dashtx.js"></script>
<script src="https://unpkg.com/dashwallet@0.5/dashwallet.js"></script>
-
Install
node
# Mac, Linux curl -sS https://webi.sh/node | sh # Windows curl.exe https://webi.ms/node | powershell
-
Install the
dashwallet
librarynpm install --save dashwallet0.5 npm install --save @dashincubator/secp256k1@1.7
-
Install
dashwallet-cli
for testing locallynpm install --location=global dashwallet-cli@0.5
// TODO
// (look at dashwallet-cli to see current usage)
Creates a wallet instance with the given config
- DashSight adapter - or any
interface matching:
getTxs(addr, page)
getUtxos(addr)
instantSend(txHex)
safe
wallets
addresses
- Storage adapter
save()
storage adapter (and "safe").
let w = await Wallet.create({ storage, safe, dashsight });
Generates a complete PrivateWallet
object.
Wallet.generate({
name: "main",
label: "Main",
priority: 1, // lower sorts higher
});
{
"name": "main",
"label": "Main",
"device": null,
"contact": null,
"priority": 1,
"phrase": "zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo wrong",
"created_at": "2022-02-22T22:02:22.000Z",
"archived_at": null
}
Generates a complete addrInfo
object.
Wallet.generateAddress({
wallet: "main",
hdpath: "m/44'/5'/0'/0",
index: 0,
});
{
"checked_at": 0,
"hdpath": "m/44'/5'/0'/0",
"index": 0,
"txs": [],
"utxos": [],
"wallet": "main"
}
Generates a complete PayWallet
object.
{
"name": "@johndoe",
"label": "@johndoe",
"device": null,
"contact": "@johndoe",
"priority": 1668919000655,
"xpub": "xpubXXXX...XXXX",
"address": "Xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"created_at": "2022-02-22T22:02:22.000Z",
"archived_at": null
}
Show spendable duffs / satoshis per each wallet.
You may need to await wallet.sync()
first.
await wallet.balances();
{
"main": 1212000,
"@johndoe:1": 120000
}
Generate or show an xpub
for your contact, and import their xpub for you, if
any.
await wallet.befriend({
handle: "@johndoe",
// optional (either or, not both)
xpub: "<the-xpub-that-john-doe-gave-to-you>",
addr: "<a-static-pay-addr-from-john-doe>",
});
["<xpub-YOU-should-give-to-john>", "xpub-JOHN-gave-to-you", "addr-from-JOHN"]
TODO: Creates a clean (fingerprint-free) transaction.
Creates a dirty (fingerprint) transaction (hex string) for the given amount to
the given contact using utxo
s from across all PrivateWallet
s.
await wallet.createDirtyTx({ handle, amount, utxos });
{
"hex": "abc123...",
"utxos": [
{
"address": "...",
"outputIndex": 0,
"satoshis": 1000,
"script": "...",
"txId": "..."
}
]
}
The result can be used with dashsight.instantSend(tx.hex)
.
Finds your PrivateWallet
for the given contact.
await wallet.findChangeWallet({ handle: "@johndoe" });
Returns a PrivateWallet
, as described above.
Finds the xpub-only (pay-to, send-only) wallet for the given contact.
await wallet.findFriend({ handle: "@johndoe" });
Returns a PayWallet
, as described above.
Find the next unused change address for the PrivateWallet
associated with the
given contact, or from the main
wallet as a fallback.
await wallet.nextChangAddr({ handle: "@johndoe" });
Returns a PayAddr.
"Xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
(Re)index addresses for each wallet and fetch latest transactions for the next few addresses.
let now = Date.now();
let staletime = 60 * 1000; // 0 to force immediate sync
await wallet.sync({ now, staletime });
Get all utxos across all PrivateWallet
s.
await wallet.utxos();
The results are in dashcore/bitcore format:
[
txId: '<hex-tx-id>',
outputIndex: 0,
address: "Xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
script: 'xxxx...',
satoshis: 100000000
]
There's no response, just updates to safe.addresses
, and store.save()
will
be called.