aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bun.lock17
-rw-r--r--package.json1
-rw-r--r--src/routes/(app)/ark/+page.svelte73
3 files changed, 91 insertions, 0 deletions
diff --git a/bun.lock b/bun.lock
index d4da774e..1dae550b 100644
--- a/bun.lock
+++ b/bun.lock
@@ -4,6 +4,7 @@
"": {
"name": "coinos",
"dependencies": {
+ "@arkade-os/sdk": "^0.2.3",
"@capacitor/status-bar": "^7.0.3",
"@tailwindcss/postcss": "^4.1.13",
"@tailwindcss/vite": "^4.1.13",
@@ -72,6 +73,8 @@
"packages": {
"@alloc/quick-lru": ["@alloc/[email protected]", "", {}, "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw=="],
+ "@arkade-os/sdk": ["@arkade-os/[email protected]", "", { "dependencies": { "@noble/curves": "1.9.1", "@noble/hashes": "1.8.0", "@noble/secp256k1": "2.2.3", "@scure/base": "1.2.6", "@scure/btc-signer": "1.8.1", "bip68": "1.0.4" } }, "sha512-N2O39qu410wtGFzvddKBYuvXf5DGHzWYO/MdHbI4j502bkd2pFG24S3D8eiFpTJTvx2ji/jxMHL9MZIWkLYdWA=="],
+
"@babel/code-frame": ["@babel/[email protected]", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg=="],
"@babel/helper-validator-identifier": ["@babel/[email protected]", "", {}, "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow=="],
@@ -208,6 +211,8 @@
"@noble/hashes": ["@noble/[email protected]", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="],
+ "@noble/secp256k1": ["@noble/[email protected]", "", {}, "sha512-l7r5oEQym9Us7EAigzg30/PQAvynhMt2uoYtT3t26eGDVm9Yii5mZ5jWSWmZ/oSIR2Et0xfc6DXrG0bZ787V3w=="],
+
"@nodelib/fs.scandir": ["@nodelib/[email protected]", "", { "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="],
"@nodelib/fs.stat": ["@nodelib/[email protected]", "", {}, "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="],
@@ -438,6 +443,8 @@
"bip21": ["[email protected]", "", { "dependencies": { "query-string": "^9.0.0" } }, "sha512-uJ3opZiOUs9x+Q+D6ezcIQje3ymIXyFFEbx1C8wRVSERxQ0rXTG4FJuj8neYUDNJhwsvTy9f2dYMaUMq+3/fIw=="],
+ "bip68": ["[email protected]", "", {}, "sha512-O1htyufFTYy3EO0JkHg2CLykdXEtV2ssqw47Gq9A0WByp662xpJnMEB9m43LZjsSDjIAOozWRExlFQk2hlV1XQ=="],
+
"bitcoin-address-validation": ["[email protected]", "", { "dependencies": { "base58-js": "^3.0.2", "bech32": "^2.0.0", "sha256-uint8array": "^0.10.3" } }, "sha512-R1X1c9EdgjgjTpjshjk5e16TbgF7HYasxBcu7l5ScWMxVs53845vMUg5PvnQ/R/3h8Grly6Y52DgH6/77gazLQ=="],
"bl": ["[email protected]", "", { "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", "readable-stream": "^3.4.0" } }, "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w=="],
@@ -1244,6 +1251,12 @@
"zxing-wasm": ["[email protected]", "", { "dependencies": { "@types/emscripten": "^1.40.1", "type-fest": "^4.41.0" } }, "sha512-RyHxVaAHsLSDzmwcAG05IF8sVOE5Ta2JT1dRDh0mzVZOIiDXZstsjkqvKHasN1n4lvFSbX7ngkHDufnt/XI07Q=="],
+ "@arkade-os/sdk/@noble/curves": ["@noble/[email protected]", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA=="],
+
+ "@arkade-os/sdk/@scure/base": ["@scure/[email protected]", "", {}, "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg=="],
+
+ "@arkade-os/sdk/@scure/btc-signer": ["@scure/[email protected]", "", { "dependencies": { "@noble/curves": "~1.9.0", "@noble/hashes": "~1.8.0", "@scure/base": "~1.2.5", "micro-packed": "~0.7.3" } }, "sha512-8nX9T++dFyKpvqksNHfSi9CgRsGnHAQtCdIQ1y1GmbCGLpV97v4MUyemUUT6uDumKL3oo3m4niyY6A32nmdLuQ=="],
+
"@capacitor/assets/@capacitor/cli": ["@capacitor/[email protected]", "", { "dependencies": { "@ionic/cli-framework-output": "^2.2.5", "@ionic/utils-fs": "^3.1.6", "@ionic/utils-subprocess": "^2.1.11", "@ionic/utils-terminal": "^2.3.3", "commander": "^9.3.0", "debug": "^4.3.4", "env-paths": "^2.2.0", "kleur": "^4.1.4", "native-run": "^2.0.0", "open": "^8.4.0", "plist": "^3.0.5", "prompts": "^2.4.2", "rimraf": "^4.4.1", "semver": "^7.3.7", "tar": "^6.1.11", "tslib": "^2.4.0", "xml2js": "^0.5.0" }, "bin": { "cap": "bin/capacitor", "capacitor": "bin/capacitor" } }, "sha512-qN8LDlREMhrYhOvVXahoJVNkP8LP55/YPRJrzTAFrMqlNJC18L3CzgWYIblFPnuwfbH/RxbfoZT/ydkwgVpMrw=="],
"@capacitor/cli/commander": ["[email protected]", "", {}, "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA=="],
@@ -1436,6 +1449,10 @@
"xml2js/xmlbuilder": ["[email protected]", "", {}, "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA=="],
+ "@arkade-os/sdk/@scure/btc-signer/@noble/curves": ["@noble/[email protected]", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw=="],
+
+ "@arkade-os/sdk/@scure/btc-signer/micro-packed": ["[email protected]", "", { "dependencies": { "@scure/base": "~1.2.5" } }, "sha512-2Milxs+WNC00TRlem41oRswvw31146GiSaoCT7s3Xi2gMUglW5QBeqlQaZeHr5tJx9nm3i57LNXPqxOOaWtTYg=="],
+
"@capacitor/assets/@capacitor/cli/@ionic/utils-subprocess": ["@ionic/[email protected]", "", { "dependencies": { "@ionic/utils-array": "2.1.6", "@ionic/utils-fs": "3.1.7", "@ionic/utils-process": "2.1.11", "@ionic/utils-stream": "3.1.6", "@ionic/utils-terminal": "2.3.4", "cross-spawn": "^7.0.3", "debug": "^4.0.0", "tslib": "^2.0.1" } }, "sha512-nGYvyGVjU0kjPUcSRFr4ROTraT3w/7r502f5QJEsMRKTqa4eEzCshtwRk+/mpASm0kgBN5rrjYA5A/OZg8ahqg=="],
"@capacitor/assets/@capacitor/cli/commander": ["[email protected]", "", {}, "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ=="],
diff --git a/package.json b/package.json
index a0c110cb..9898e250 100644
--- a/package.json
+++ b/package.json
@@ -69,6 +69,7 @@
},
"type": "module",
"dependencies": {
+ "@arkade-os/sdk": "^0.2.3",
"@capacitor/status-bar": "^7.0.3",
"@tailwindcss/postcss": "^4.1.13",
"@tailwindcss/vite": "^4.1.13",
diff --git a/src/routes/(app)/ark/+page.svelte b/src/routes/(app)/ark/+page.svelte
new file mode 100644
index 00000000..c9bd69e0
--- /dev/null
+++ b/src/routes/(app)/ark/+page.svelte
@@ -0,0 +1,73 @@
+<script>
+ import { bytesToHex, randomBytes } from "@noble/hashes/utils";
+ import { Ramps, SingleKey, Wallet } from "@arkade-os/sdk";
+ import { onMount } from "svelte";
+
+ let boardingAddress = $state();
+ let wallet;
+
+ onMount(async () => {
+ // const secret = bytesToHex(randomBytes(32));
+ const secret =
+ "35fe135be231e9cac13835853ab07c4a11b8b745c575755df53a3bf5dd146ca1";
+ const identity = SingleKey.fromHex(secret);
+
+ // create a wallet instance
+ wallet = await Wallet.create({
+ identity,
+ arkServerUrl: "https://mutinynet.arkade.sh",
+ });
+
+ // You can receive bitcoin offchain instantly! No inbound liquidity!
+ const address = await wallet.getAddress();
+ console.log("Ark Address:", address);
+
+ const balance = await wallet.getBalance();
+ // total is spendable in settlement
+ console.log("Total :", balance.total);
+ // available is spendable in offchain transactions
+ console.log("Available :", balance.available);
+
+ const vtxos = await wallet.getVtxos();
+ console.log("Number of VTXOs:", vtxos.length);
+
+ // Log important information about each VTXO
+ vtxos.forEach((vtxo, index) => {
+ console.log(`VTXO #${index + 1}:`);
+ console.log(` ID: ${vtxo.txid}:${vtxo.vout}`);
+ console.log(` Amount: ${vtxo.value} sats`);
+ console.log(` Batch ID: ${vtxo.virtualStatus.batchTxID}`);
+ console.log(` Status: ${vtxo.virtualStatus.state}`); // "preconfirmed" | "settled" | "swept" | "spent";
+ });
+
+ // Get boarding UTXOs
+ const boardingUtxos = await wallet.getBoardingUtxos();
+ console.log("Number of boarding UTXOs:", boardingUtxos.length);
+
+ // Log important information about each boarding UTXO
+ boardingUtxos.forEach((utxo, index) => {
+ console.log(`Boarding UTXO #${index + 1}:`);
+ console.log(` TXID: ${utxo.txid}`);
+ console.log(` Output Index: ${utxo.vout}`);
+ console.log(` Amount: ${utxo.value} sats`);
+ console.log(
+ ` Status: ${utxo.status.confirmed ? "Confirmed" : "Unconfirmed"}`,
+ );
+ });
+
+ // Get a boarding address
+ boardingAddress = await wallet.getBoardingAddress();
+ console.log("Boarding Address:", boardingAddress);
+ });
+
+ const board = async () => {
+ console.log("BOARDING");
+ const commitmentTxid = await new Ramps(wallet).onboard();
+
+ console.log("Commitment transaction ID:", commitmentTxid);
+ };
+</script>
+
+{boardingAddress}
+
+<button onclick={board}>Board</button>