@buildonspark/spark-sdk 0.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/graphql/client.d.ts +24 -0
- package/dist/graphql/client.js +177 -0
- package/dist/graphql/client.js.map +1 -0
- package/dist/graphql/mutations/CompleteCoopExit.d.ts +1 -0
- package/dist/graphql/mutations/CompleteCoopExit.js +19 -0
- package/dist/graphql/mutations/CompleteCoopExit.js.map +1 -0
- package/dist/graphql/mutations/CompleteLeavesSwap.d.ts +1 -0
- package/dist/graphql/mutations/CompleteLeavesSwap.js +17 -0
- package/dist/graphql/mutations/CompleteLeavesSwap.js.map +1 -0
- package/dist/graphql/mutations/RequestCoopExit.d.ts +1 -0
- package/dist/graphql/mutations/RequestCoopExit.js +20 -0
- package/dist/graphql/mutations/RequestCoopExit.js.map +1 -0
- package/dist/graphql/mutations/RequestLightningReceive.d.ts +1 -0
- package/dist/graphql/mutations/RequestLightningReceive.js +26 -0
- package/dist/graphql/mutations/RequestLightningReceive.js.map +1 -0
- package/dist/graphql/mutations/RequestLightningSend.d.ts +1 -0
- package/dist/graphql/mutations/RequestLightningSend.js +18 -0
- package/dist/graphql/mutations/RequestLightningSend.js.map +1 -0
- package/dist/graphql/mutations/RequestSwapLeaves.d.ts +1 -0
- package/dist/graphql/mutations/RequestSwapLeaves.js +26 -0
- package/dist/graphql/mutations/RequestSwapLeaves.js.map +1 -0
- package/dist/graphql/objects/BitcoinNetwork.d.ts +17 -0
- package/dist/graphql/objects/BitcoinNetwork.js +20 -0
- package/dist/graphql/objects/BitcoinNetwork.js.map +1 -0
- package/dist/graphql/objects/CompleteCoopExitInput.d.ts +7 -0
- package/dist/graphql/objects/CompleteCoopExitInput.js +14 -0
- package/dist/graphql/objects/CompleteCoopExitInput.js.map +1 -0
- package/dist/graphql/objects/CompleteCoopExitOutput.d.ts +7 -0
- package/dist/graphql/objects/CompleteCoopExitOutput.js +19 -0
- package/dist/graphql/objects/CompleteCoopExitOutput.js.map +1 -0
- package/dist/graphql/objects/CompleteLeavesSwapInput.d.ts +8 -0
- package/dist/graphql/objects/CompleteLeavesSwapInput.js +16 -0
- package/dist/graphql/objects/CompleteLeavesSwapInput.js.map +1 -0
- package/dist/graphql/objects/CompleteLeavesSwapOutput.d.ts +7 -0
- package/dist/graphql/objects/CompleteLeavesSwapOutput.js +19 -0
- package/dist/graphql/objects/CompleteLeavesSwapOutput.js.map +1 -0
- package/dist/graphql/objects/Connection.d.ts +16 -0
- package/dist/graphql/objects/Connection.js +56 -0
- package/dist/graphql/objects/Connection.js.map +1 -0
- package/dist/graphql/objects/CoopExitFeeEstimateInput.d.ts +7 -0
- package/dist/graphql/objects/CoopExitFeeEstimateInput.js +14 -0
- package/dist/graphql/objects/CoopExitFeeEstimateInput.js.map +1 -0
- package/dist/graphql/objects/CoopExitFeeEstimateOutput.d.ts +8 -0
- package/dist/graphql/objects/CoopExitFeeEstimateOutput.js +26 -0
- package/dist/graphql/objects/CoopExitFeeEstimateOutput.js.map +1 -0
- package/dist/graphql/objects/CoopExitRequest.d.ts +32 -0
- package/dist/graphql/objects/CoopExitRequest.js +64 -0
- package/dist/graphql/objects/CoopExitRequest.js.map +1 -0
- package/dist/graphql/objects/CurrencyAmount.d.ts +24 -0
- package/dist/graphql/objects/CurrencyAmount.js +30 -0
- package/dist/graphql/objects/CurrencyAmount.js.map +1 -0
- package/dist/graphql/objects/CurrencyUnit.d.ts +27 -0
- package/dist/graphql/objects/CurrencyUnit.js +30 -0
- package/dist/graphql/objects/CurrencyUnit.js.map +1 -0
- package/dist/graphql/objects/Entity.d.ts +16 -0
- package/dist/graphql/objects/Entity.js +141 -0
- package/dist/graphql/objects/Entity.js.map +1 -0
- package/dist/graphql/objects/Invoice.d.ts +15 -0
- package/dist/graphql/objects/Invoice.js +45 -0
- package/dist/graphql/objects/Invoice.js.map +1 -0
- package/dist/graphql/objects/Leaf.d.ts +11 -0
- package/dist/graphql/objects/Leaf.js +29 -0
- package/dist/graphql/objects/Leaf.js.map +1 -0
- package/dist/graphql/objects/LeavesSwapFeeEstimateInput.d.ts +6 -0
- package/dist/graphql/objects/LeavesSwapFeeEstimateInput.js +12 -0
- package/dist/graphql/objects/LeavesSwapFeeEstimateInput.js.map +1 -0
- package/dist/graphql/objects/LeavesSwapFeeEstimateOutput.d.ts +8 -0
- package/dist/graphql/objects/LeavesSwapFeeEstimateOutput.js +26 -0
- package/dist/graphql/objects/LeavesSwapFeeEstimateOutput.js.map +1 -0
- package/dist/graphql/objects/LeavesSwapRequest.d.ts +32 -0
- package/dist/graphql/objects/LeavesSwapRequest.js +87 -0
- package/dist/graphql/objects/LeavesSwapRequest.js.map +1 -0
- package/dist/graphql/objects/LightningReceiveFeeEstimateInput.d.ts +8 -0
- package/dist/graphql/objects/LightningReceiveFeeEstimateInput.js +15 -0
- package/dist/graphql/objects/LightningReceiveFeeEstimateInput.js.map +1 -0
- package/dist/graphql/objects/LightningReceiveFeeEstimateOutput.d.ts +8 -0
- package/dist/graphql/objects/LightningReceiveFeeEstimateOutput.js +26 -0
- package/dist/graphql/objects/LightningReceiveFeeEstimateOutput.js.map +1 -0
- package/dist/graphql/objects/LightningReceiveRequest.d.ts +31 -0
- package/dist/graphql/objects/LightningReceiveRequest.js +93 -0
- package/dist/graphql/objects/LightningReceiveRequest.js.map +1 -0
- package/dist/graphql/objects/LightningReceiveRequestStatus.d.ts +16 -0
- package/dist/graphql/objects/LightningReceiveRequestStatus.js +19 -0
- package/dist/graphql/objects/LightningReceiveRequestStatus.js.map +1 -0
- package/dist/graphql/objects/LightningSendFeeEstimateInput.d.ts +6 -0
- package/dist/graphql/objects/LightningSendFeeEstimateInput.js +12 -0
- package/dist/graphql/objects/LightningSendFeeEstimateInput.js.map +1 -0
- package/dist/graphql/objects/LightningSendFeeEstimateOutput.d.ts +8 -0
- package/dist/graphql/objects/LightningSendFeeEstimateOutput.js +26 -0
- package/dist/graphql/objects/LightningSendFeeEstimateOutput.js.map +1 -0
- package/dist/graphql/objects/LightningSendRequest.d.ts +32 -0
- package/dist/graphql/objects/LightningSendRequest.js +78 -0
- package/dist/graphql/objects/LightningSendRequest.js.map +1 -0
- package/dist/graphql/objects/LightningSendRequestStatus.d.ts +15 -0
- package/dist/graphql/objects/LightningSendRequestStatus.js +18 -0
- package/dist/graphql/objects/LightningSendRequestStatus.js.map +1 -0
- package/dist/graphql/objects/PageInfo.d.ts +11 -0
- package/dist/graphql/objects/PageInfo.js +26 -0
- package/dist/graphql/objects/PageInfo.js.map +1 -0
- package/dist/graphql/objects/RequestCoopExitInput.d.ts +7 -0
- package/dist/graphql/objects/RequestCoopExitInput.js +14 -0
- package/dist/graphql/objects/RequestCoopExitInput.js.map +1 -0
- package/dist/graphql/objects/RequestCoopExitOutput.d.ts +7 -0
- package/dist/graphql/objects/RequestCoopExitOutput.js +19 -0
- package/dist/graphql/objects/RequestCoopExitOutput.js.map +1 -0
- package/dist/graphql/objects/RequestLeavesSwapInput.d.ts +13 -0
- package/dist/graphql/objects/RequestLeavesSwapInput.js +25 -0
- package/dist/graphql/objects/RequestLeavesSwapInput.js.map +1 -0
- package/dist/graphql/objects/RequestLeavesSwapOutput.d.ts +7 -0
- package/dist/graphql/objects/RequestLeavesSwapOutput.js +19 -0
- package/dist/graphql/objects/RequestLeavesSwapOutput.js.map +1 -0
- package/dist/graphql/objects/RequestLightningReceiveInput.d.ts +16 -0
- package/dist/graphql/objects/RequestLightningReceiveInput.js +21 -0
- package/dist/graphql/objects/RequestLightningReceiveInput.js.map +1 -0
- package/dist/graphql/objects/RequestLightningReceiveOutput.d.ts +7 -0
- package/dist/graphql/objects/RequestLightningReceiveOutput.js +19 -0
- package/dist/graphql/objects/RequestLightningReceiveOutput.js.map +1 -0
- package/dist/graphql/objects/RequestLightningSendInput.d.ts +7 -0
- package/dist/graphql/objects/RequestLightningSendInput.js +14 -0
- package/dist/graphql/objects/RequestLightningSendInput.js.map +1 -0
- package/dist/graphql/objects/RequestLightningSendOutput.d.ts +7 -0
- package/dist/graphql/objects/RequestLightningSendOutput.js +19 -0
- package/dist/graphql/objects/RequestLightningSendOutput.js.map +1 -0
- package/dist/graphql/objects/SparkCoopExitRequestStatus.d.ts +11 -0
- package/dist/graphql/objects/SparkCoopExitRequestStatus.js +14 -0
- package/dist/graphql/objects/SparkCoopExitRequestStatus.js.map +1 -0
- package/dist/graphql/objects/SparkLeavesSwapRequestStatus.d.ts +11 -0
- package/dist/graphql/objects/SparkLeavesSwapRequestStatus.js +14 -0
- package/dist/graphql/objects/SparkLeavesSwapRequestStatus.js.map +1 -0
- package/dist/graphql/objects/SparkTransferToLeavesConnection.d.ts +19 -0
- package/dist/graphql/objects/SparkTransferToLeavesConnection.js +45 -0
- package/dist/graphql/objects/SparkTransferToLeavesConnection.js.map +1 -0
- package/dist/graphql/objects/SwapLeaf.d.ts +9 -0
- package/dist/graphql/objects/SwapLeaf.js +23 -0
- package/dist/graphql/objects/SwapLeaf.js.map +1 -0
- package/dist/graphql/objects/Transfer.d.ts +24 -0
- package/dist/graphql/objects/Transfer.js +82 -0
- package/dist/graphql/objects/Transfer.js.map +1 -0
- package/dist/graphql/objects/UserLeafInput.d.ts +8 -0
- package/dist/graphql/objects/UserLeafInput.js +16 -0
- package/dist/graphql/objects/UserLeafInput.js.map +1 -0
- package/dist/graphql/objects/WalletUser.d.ts +21 -0
- package/dist/graphql/objects/WalletUser.js +48 -0
- package/dist/graphql/objects/WalletUser.js.map +1 -0
- package/dist/graphql/objects/index.d.ts +41 -0
- package/dist/graphql/objects/index.js +13 -0
- package/dist/graphql/objects/index.js.map +1 -0
- package/dist/graphql/queries/CoopExitFeeEstimate.d.ts +1 -0
- package/dist/graphql/queries/CoopExitFeeEstimate.js +18 -0
- package/dist/graphql/queries/CoopExitFeeEstimate.js.map +1 -0
- package/dist/graphql/queries/CurrentUser.d.ts +1 -0
- package/dist/graphql/queries/CurrentUser.js +10 -0
- package/dist/graphql/queries/CurrentUser.js.map +1 -0
- package/dist/graphql/queries/LightningReceiveFeeEstimate.d.ts +1 -0
- package/dist/graphql/queries/LightningReceiveFeeEstimate.js +18 -0
- package/dist/graphql/queries/LightningReceiveFeeEstimate.js.map +1 -0
- package/dist/graphql/queries/LightningSendFeeEstimate.d.ts +1 -0
- package/dist/graphql/queries/LightningSendFeeEstimate.js +16 -0
- package/dist/graphql/queries/LightningSendFeeEstimate.js.map +1 -0
- package/dist/proto/common.d.ts +58 -0
- package/dist/proto/common.js +350 -0
- package/dist/proto/common.js.map +1 -0
- package/dist/proto/google/protobuf/descriptor.d.ts +1228 -0
- package/dist/proto/google/protobuf/descriptor.js +5070 -0
- package/dist/proto/google/protobuf/descriptor.js.map +1 -0
- package/dist/proto/google/protobuf/duration.d.ts +99 -0
- package/dist/proto/google/protobuf/duration.js +90 -0
- package/dist/proto/google/protobuf/duration.js.map +1 -0
- package/dist/proto/google/protobuf/empty.d.ts +33 -0
- package/dist/proto/google/protobuf/empty.js +46 -0
- package/dist/proto/google/protobuf/empty.js.map +1 -0
- package/dist/proto/google/protobuf/timestamp.d.ts +128 -0
- package/dist/proto/google/protobuf/timestamp.js +90 -0
- package/dist/proto/google/protobuf/timestamp.js.map +1 -0
- package/dist/proto/mock.d.ts +48 -0
- package/dist/proto/mock.js +103 -0
- package/dist/proto/mock.js.map +1 -0
- package/dist/proto/spark.d.ts +1101 -0
- package/dist/proto/spark.js +9565 -0
- package/dist/proto/spark.js.map +1 -0
- package/dist/proto/spark_authn.d.ts +111 -0
- package/dist/proto/spark_authn.js +517 -0
- package/dist/proto/spark_authn.js.map +1 -0
- package/dist/proto/validate/validate.d.ts +1087 -0
- package/dist/proto/validate/validate.js +4437 -0
- package/dist/proto/validate/validate.js.map +1 -0
- package/dist/services/config.d.ts +24 -0
- package/dist/services/config.js +29 -0
- package/dist/services/config.js.map +1 -0
- package/dist/services/connection.d.ts +21 -0
- package/dist/services/connection.js +154 -0
- package/dist/services/connection.js.map +1 -0
- package/dist/services/coop-exit.d.ts +20 -0
- package/dist/services/coop-exit.js +102 -0
- package/dist/services/coop-exit.js.map +1 -0
- package/dist/services/deposit.d.ts +21 -0
- package/dist/services/deposit.js +214 -0
- package/dist/services/deposit.js.map +1 -0
- package/dist/services/lightning.d.ts +31 -0
- package/dist/services/lightning.js +196 -0
- package/dist/services/lightning.js.map +1 -0
- package/dist/services/token-transactions.d.ts +17 -0
- package/dist/services/token-transactions.js +297 -0
- package/dist/services/token-transactions.js.map +1 -0
- package/dist/services/transfer.d.ts +63 -0
- package/dist/services/transfer.js +499 -0
- package/dist/services/transfer.js.map +1 -0
- package/dist/services/tree-creation.d.ts +30 -0
- package/dist/services/tree-creation.js +404 -0
- package/dist/services/tree-creation.js.map +1 -0
- package/dist/signer/signer.d.ts +97 -0
- package/dist/signer/signer.js +239 -0
- package/dist/signer/signer.js.map +1 -0
- package/dist/spark-sdk.d.ts +87 -0
- package/dist/spark-sdk.js +675 -0
- package/dist/spark-sdk.js.map +1 -0
- package/dist/tests/adaptor-signature.test.d.ts +1 -0
- package/dist/tests/adaptor-signature.test.js +34 -0
- package/dist/tests/adaptor-signature.test.js.map +1 -0
- package/dist/tests/bitcoin.test.d.ts +1 -0
- package/dist/tests/bitcoin.test.js +77 -0
- package/dist/tests/bitcoin.test.js.map +1 -0
- package/dist/tests/coop-exit.test.d.ts +1 -0
- package/dist/tests/coop-exit.test.js +140 -0
- package/dist/tests/coop-exit.test.js.map +1 -0
- package/dist/tests/deposit.test.d.ts +1 -0
- package/dist/tests/deposit.test.js +57 -0
- package/dist/tests/deposit.test.js.map +1 -0
- package/dist/tests/keys.test.d.ts +1 -0
- package/dist/tests/keys.test.js +53 -0
- package/dist/tests/keys.test.js.map +1 -0
- package/dist/tests/lightning.test.d.ts +1 -0
- package/dist/tests/lightning.test.js +175 -0
- package/dist/tests/lightning.test.js.map +1 -0
- package/dist/tests/secret-sharing.test.d.ts +1 -0
- package/dist/tests/secret-sharing.test.js +41 -0
- package/dist/tests/secret-sharing.test.js.map +1 -0
- package/dist/tests/swap.test.d.ts +1 -0
- package/dist/tests/swap.test.js +131 -0
- package/dist/tests/swap.test.js.map +1 -0
- package/dist/tests/test-util.d.ts +24 -0
- package/dist/tests/test-util.js +137 -0
- package/dist/tests/test-util.js.map +1 -0
- package/dist/tests/tokens.test.d.ts +1 -0
- package/dist/tests/tokens.test.js +42 -0
- package/dist/tests/tokens.test.js.map +1 -0
- package/dist/tests/transfer.test.d.ts +1 -0
- package/dist/tests/transfer.test.js +175 -0
- package/dist/tests/transfer.test.js.map +1 -0
- package/dist/tests/tree-creation.test.d.ts +1 -0
- package/dist/tests/tree-creation.test.js +32 -0
- package/dist/tests/tree-creation.test.js.map +1 -0
- package/dist/tests/utils/spark-testing-wallet.d.ts +14 -0
- package/dist/tests/utils/spark-testing-wallet.js +13 -0
- package/dist/tests/utils/spark-testing-wallet.js.map +1 -0
- package/dist/tests/utils/test-faucet.d.ts +22 -0
- package/dist/tests/utils/test-faucet.js +148 -0
- package/dist/tests/utils/test-faucet.js.map +1 -0
- package/dist/types/index.d.ts +3 -0
- package/dist/types/index.js +4 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/adaptor-signature.d.ts +7 -0
- package/dist/utils/adaptor-signature.js +114 -0
- package/dist/utils/adaptor-signature.js.map +1 -0
- package/dist/utils/bitcoin.d.ts +12 -0
- package/dist/utils/bitcoin.js +87 -0
- package/dist/utils/bitcoin.js.map +1 -0
- package/dist/utils/crypto.d.ts +1 -0
- package/dist/utils/crypto.js +14 -0
- package/dist/utils/crypto.js.map +1 -0
- package/dist/utils/index.d.ts +14 -0
- package/dist/utils/index.js +15 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/keys.d.ts +7 -0
- package/dist/utils/keys.js +68 -0
- package/dist/utils/keys.js.map +1 -0
- package/dist/utils/network.d.ts +11 -0
- package/dist/utils/network.js +26 -0
- package/dist/utils/network.js.map +1 -0
- package/dist/utils/proof.d.ts +1 -0
- package/dist/utils/proof.js +12 -0
- package/dist/utils/proof.js.map +1 -0
- package/dist/utils/response-validation.d.ts +1 -0
- package/dist/utils/response-validation.js +16 -0
- package/dist/utils/response-validation.js.map +1 -0
- package/dist/utils/secret-sharing.d.ts +26 -0
- package/dist/utils/secret-sharing.js +175 -0
- package/dist/utils/secret-sharing.js.map +1 -0
- package/dist/utils/signing.d.ts +12 -0
- package/dist/utils/signing.js +67 -0
- package/dist/utils/signing.js.map +1 -0
- package/dist/utils/token-hashing.d.ts +3 -0
- package/dist/utils/token-hashing.js +117 -0
- package/dist/utils/token-hashing.js.map +1 -0
- package/dist/utils/token-keyshares.d.ts +5 -0
- package/dist/utils/token-keyshares.js +17 -0
- package/dist/utils/token-keyshares.js.map +1 -0
- package/dist/utils/token-transactions.d.ts +5 -0
- package/dist/utils/token-transactions.js +40 -0
- package/dist/utils/token-transactions.js.map +1 -0
- package/dist/utils/transaction.d.ts +8 -0
- package/dist/utils/transaction.js +33 -0
- package/dist/utils/transaction.js.map +1 -0
- package/dist/utils/wasm-wrapper.d.ts +2 -0
- package/dist/utils/wasm-wrapper.js +36 -0
- package/dist/utils/wasm-wrapper.js.map +1 -0
- package/dist/utils/wasm.d.ts +54 -0
- package/dist/utils/wasm.js +26 -0
- package/dist/utils/wasm.js.map +1 -0
- package/dist/wasm/spark_bindings.d.ts +229 -0
- package/dist/wasm/spark_bindings.js +1097 -0
- package/dist/wasm/spark_bindings.js.map +1 -0
- package/dist/wasm/spark_bindings_bg.wasm +0 -0
- package/package.json +140 -0
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
//@ts-nocheck
|
|
2
|
+
import { afterEach, beforeAll, describe, expect, it } from "@jest/globals";
|
|
3
|
+
import { hexToBytes } from "@noble/curves/abstract/utils";
|
|
4
|
+
import { equalBytes, sha256 } from "@scure/btc-signer/utils";
|
|
5
|
+
import { TransferStatus } from "../proto/spark.js";
|
|
6
|
+
import { WalletConfigService } from "../services/config.js";
|
|
7
|
+
import { ConnectionManager } from "../services/connection.js";
|
|
8
|
+
import { LightningService } from "../services/lightning.js";
|
|
9
|
+
import { TransferService } from "../services/transfer.js";
|
|
10
|
+
import { Network } from "../utils/network.js";
|
|
11
|
+
import { createNewTree, getTestWalletConfig } from "./test-util.js";
|
|
12
|
+
import { SparkWalletTesting } from "./utils/spark-testing-wallet.js";
|
|
13
|
+
import { BitcoinFaucet } from "./utils/test-faucet.js";
|
|
14
|
+
async function cleanUp() {
|
|
15
|
+
const config = getTestWalletConfig();
|
|
16
|
+
const preimage = hexToBytes("2d059c3ede82a107aa1452c0bea47759be3c5c6e5342be6a310f6c3a907d9f4c");
|
|
17
|
+
const paymentHash = sha256(preimage);
|
|
18
|
+
for (const operator of Object.values(config.signingOperators)) {
|
|
19
|
+
const client = ConnectionManager.createMockClient(operator.address);
|
|
20
|
+
await client.clean_up_preimage_share({
|
|
21
|
+
paymentHash,
|
|
22
|
+
});
|
|
23
|
+
client.close();
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
const fakeInvoiceCreator = async () => {
|
|
27
|
+
return "lnbcrt123450n1pnj6uf4pp5l26hsdxssmr52vd4xmn5xran7puzx34hpr6uevaq7ta0ayzrp8esdqqcqzpgxqyz5vqrzjqtr2vd60g57hu63rdqk87u3clac6jlfhej4kldrrjvfcw3mphcw8sqqqqzp3jlj6zyqqqqqqqqqqqqqq9qsp5w22fd8aqn7sdum7hxdf59ptgk322fkv589ejxjltngvgehlcqcyq9qxpqysgqvykwsxdx64qrj0s5pgcgygmrpj8w25jsjgltwn09yp24l9nvghe3dl3y0ycy70ksrlqmcn42hxn24e0ucuy3g9fjltudvhv4lrhhamgq3stqgp";
|
|
28
|
+
};
|
|
29
|
+
describe("LightningService", () => {
|
|
30
|
+
let userWallet;
|
|
31
|
+
let userConfig;
|
|
32
|
+
let lightningService;
|
|
33
|
+
let transferService;
|
|
34
|
+
let sspWallet;
|
|
35
|
+
let sspConfig;
|
|
36
|
+
let sspLightningService;
|
|
37
|
+
let sspTransferService;
|
|
38
|
+
// Skip all tests if running in GitHub Actions
|
|
39
|
+
const testFn = process.env.GITHUB_ACTIONS ? it.skip : it;
|
|
40
|
+
beforeAll(async () => {
|
|
41
|
+
userWallet = new SparkWalletTesting(Network.LOCAL);
|
|
42
|
+
await userWallet.initWalletFromMnemonic();
|
|
43
|
+
userConfig = new WalletConfigService(Network.LOCAL, userWallet.getSigner());
|
|
44
|
+
const connectionManager = new ConnectionManager(userConfig);
|
|
45
|
+
lightningService = new LightningService(userConfig, connectionManager);
|
|
46
|
+
transferService = new TransferService(userConfig, connectionManager);
|
|
47
|
+
sspWallet = new SparkWalletTesting(Network.LOCAL);
|
|
48
|
+
await sspWallet.initWalletFromMnemonic();
|
|
49
|
+
sspConfig = new WalletConfigService(Network.LOCAL, sspWallet.getSigner());
|
|
50
|
+
const sspConnectionManager = new ConnectionManager(sspConfig);
|
|
51
|
+
sspLightningService = new LightningService(sspConfig, sspConnectionManager);
|
|
52
|
+
sspTransferService = new TransferService(sspConfig, sspConnectionManager);
|
|
53
|
+
});
|
|
54
|
+
afterEach(async () => {
|
|
55
|
+
await cleanUp();
|
|
56
|
+
});
|
|
57
|
+
testFn("should create an invoice", async () => {
|
|
58
|
+
const preimage = hexToBytes("2d059c3ede82a107aa1452c0bea47759be3c5c6e5342be6a310f6c3a907d9f4c");
|
|
59
|
+
const invoice = await lightningService.createLightningInvoiceWithPreImage({
|
|
60
|
+
invoiceCreator: fakeInvoiceCreator,
|
|
61
|
+
amountSats: 100,
|
|
62
|
+
memo: "test",
|
|
63
|
+
preimage,
|
|
64
|
+
});
|
|
65
|
+
expect(invoice).toBeDefined();
|
|
66
|
+
});
|
|
67
|
+
testFn("test receive lightning payment", async () => {
|
|
68
|
+
const faucet = new BitcoinFaucet("http://127.0.0.1:18443", "admin1", "123");
|
|
69
|
+
const preimage = hexToBytes("2d059c3ede82a107aa1452c0bea47759be3c5c6e5342be6a310f6c3a907d9f4c");
|
|
70
|
+
const paymentHash = sha256(preimage);
|
|
71
|
+
const invoice = await lightningService.createLightningInvoiceWithPreImage({
|
|
72
|
+
invoiceCreator: fakeInvoiceCreator,
|
|
73
|
+
amountSats: 100,
|
|
74
|
+
memo: "test",
|
|
75
|
+
preimage,
|
|
76
|
+
});
|
|
77
|
+
expect(invoice).toBeDefined();
|
|
78
|
+
const sspLeafPubKey = await sspWallet.getSigner().generatePublicKey();
|
|
79
|
+
const nodeToSend = await createNewTree(sspWallet, sspLeafPubKey, faucet, 12345n);
|
|
80
|
+
const newLeafPubKey = await sspWallet
|
|
81
|
+
.getSigner()
|
|
82
|
+
.generatePublicKey(sha256("1"));
|
|
83
|
+
const leaves = [
|
|
84
|
+
{
|
|
85
|
+
leaf: nodeToSend,
|
|
86
|
+
signingPubKey: sspLeafPubKey,
|
|
87
|
+
newSigningPubKey: newLeafPubKey,
|
|
88
|
+
},
|
|
89
|
+
];
|
|
90
|
+
const response = await sspLightningService.swapNodesForPreimage({
|
|
91
|
+
leaves,
|
|
92
|
+
receiverIdentityPubkey: await userConfig.signer.getIdentityPublicKey(),
|
|
93
|
+
paymentHash,
|
|
94
|
+
isInboundPayment: true,
|
|
95
|
+
});
|
|
96
|
+
expect(equalBytes(response.preimage, preimage)).toBe(true);
|
|
97
|
+
const senderTransfer = response.transfer;
|
|
98
|
+
expect(senderTransfer).toBeDefined();
|
|
99
|
+
const transfer = await sspTransferService.sendTransferTweakKey(senderTransfer, leaves, new Map());
|
|
100
|
+
expect(transfer.status).toEqual(TransferStatus.TRANSFER_STATUS_SENDER_KEY_TWEAKED);
|
|
101
|
+
const pendingTransfer = await transferService.queryPendingTransfers();
|
|
102
|
+
expect(pendingTransfer.transfers.length).toBe(1);
|
|
103
|
+
const receiverTransfer = pendingTransfer.transfers[0];
|
|
104
|
+
expect(receiverTransfer.id).toEqual(senderTransfer.id);
|
|
105
|
+
const leafPrivKeyMap = await transferService.verifyPendingTransfer(receiverTransfer);
|
|
106
|
+
expect(leafPrivKeyMap.size).toBe(1);
|
|
107
|
+
expect(leafPrivKeyMap.has(nodeToSend.id)).toBe(true);
|
|
108
|
+
expect(equalBytes(leafPrivKeyMap.get(nodeToSend.id), newLeafPubKey)).toBe(true);
|
|
109
|
+
const finalLeafPubKey = await userWallet.getSigner().generatePublicKey();
|
|
110
|
+
const leaf = receiverTransfer.leaves[0].leaf;
|
|
111
|
+
expect(leaf).toBeDefined();
|
|
112
|
+
const claimingNode = {
|
|
113
|
+
leaf: leaf,
|
|
114
|
+
signingPubKey: newLeafPubKey,
|
|
115
|
+
newSigningPubKey: finalLeafPubKey,
|
|
116
|
+
};
|
|
117
|
+
await transferService.claimTransfer(receiverTransfer, [claimingNode]);
|
|
118
|
+
}, 60000);
|
|
119
|
+
testFn("test send lightning payment", async () => {
|
|
120
|
+
const faucet = new BitcoinFaucet("http://127.0.0.1:18443", "admin1", "123");
|
|
121
|
+
const preimage = hexToBytes("2d059c3ede82a107aa1452c0bea47759be3c5c6e5342be6a310f6c3a907d9f4c");
|
|
122
|
+
const paymentHash = sha256(preimage);
|
|
123
|
+
const userLeafPubKey = await userWallet
|
|
124
|
+
.getSigner()
|
|
125
|
+
.generatePublicKey(sha256("1"));
|
|
126
|
+
const nodeToSend = await createNewTree(userWallet, userLeafPubKey, faucet, 12345n);
|
|
127
|
+
const newLeafPubKey = await userWallet
|
|
128
|
+
.getSigner()
|
|
129
|
+
.generatePublicKey(sha256("2"));
|
|
130
|
+
const leaves = [
|
|
131
|
+
{
|
|
132
|
+
leaf: nodeToSend,
|
|
133
|
+
signingPubKey: userLeafPubKey,
|
|
134
|
+
newSigningPubKey: newLeafPubKey,
|
|
135
|
+
},
|
|
136
|
+
];
|
|
137
|
+
const response = await lightningService.swapNodesForPreimage({
|
|
138
|
+
leaves,
|
|
139
|
+
receiverIdentityPubkey: await sspConfig.signer.getIdentityPublicKey(),
|
|
140
|
+
paymentHash,
|
|
141
|
+
isInboundPayment: false,
|
|
142
|
+
invoiceString: await fakeInvoiceCreator(),
|
|
143
|
+
});
|
|
144
|
+
expect(response.transfer).toBeDefined();
|
|
145
|
+
// const refunds = await sspLightningService.queryUserSignedRefunds(
|
|
146
|
+
// paymentHash
|
|
147
|
+
// );
|
|
148
|
+
// let totalValue = 0n;
|
|
149
|
+
// for (const refund of refunds) {
|
|
150
|
+
// const value = sspLightningService.validateUserSignedRefund(refund);
|
|
151
|
+
// totalValue += value;
|
|
152
|
+
// }
|
|
153
|
+
// expect(totalValue).toBe(12345n);
|
|
154
|
+
const transfer = await transferService.sendTransferTweakKey(response.transfer, leaves, new Map());
|
|
155
|
+
expect(transfer.status).toEqual(TransferStatus.TRANSFER_STATUS_SENDER_KEY_TWEAK_PENDING);
|
|
156
|
+
const receiverTransfer = await sspLightningService.providePreimage(preimage);
|
|
157
|
+
expect(receiverTransfer.status).toEqual(TransferStatus.TRANSFER_STATUS_SENDER_KEY_TWEAKED);
|
|
158
|
+
expect(receiverTransfer.id).toEqual(transfer.id);
|
|
159
|
+
const leafPrivKeyMap = await sspTransferService.verifyPendingTransfer(receiverTransfer);
|
|
160
|
+
expect(leafPrivKeyMap.size).toBe(1);
|
|
161
|
+
expect(leafPrivKeyMap.has(nodeToSend.id)).toBe(true);
|
|
162
|
+
expect(equalBytes(leafPrivKeyMap.get(nodeToSend.id), newLeafPubKey)).toBe(true);
|
|
163
|
+
const finalLeafPubKey = await sspWallet
|
|
164
|
+
.getSigner()
|
|
165
|
+
.generatePublicKey(sha256("2"));
|
|
166
|
+
expect(receiverTransfer.leaves[0].leaf).toBeDefined();
|
|
167
|
+
const claimingNode = {
|
|
168
|
+
leaf: receiverTransfer.leaves[0].leaf,
|
|
169
|
+
signingPubKey: newLeafPubKey,
|
|
170
|
+
newSigningPubKey: finalLeafPubKey,
|
|
171
|
+
};
|
|
172
|
+
await sspTransferService.claimTransfer(receiverTransfer, [claimingNode]);
|
|
173
|
+
}, 60000);
|
|
174
|
+
});
|
|
175
|
+
//# sourceMappingURL=lightning.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lightning.test.js","sourceRoot":"","sources":["../../src/tests/lightning.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { describe, expect, it } from "@jest/globals";
|
|
2
|
+
import { secp256k1 } from "@noble/curves/secp256k1";
|
|
3
|
+
import { modInverse, recoverSecret, splitSecretWithProofs, validateShare, } from "../utils/secret-sharing.js";
|
|
4
|
+
describe("Secret Sharing", () => {
|
|
5
|
+
describe("modInverse", () => {
|
|
6
|
+
it("should correctly calculate modular multiplicative inverse", () => {
|
|
7
|
+
// Test cases: [a, m, expected]
|
|
8
|
+
const testCases = [
|
|
9
|
+
[3n, 11n, 4n], // 3 * 4 ≡ 1 (mod 11)
|
|
10
|
+
[10n, 17n, 12n], // 10 * 12 ≡ 1 (mod 17)
|
|
11
|
+
[7n, 13n, 2n], // 7 * 2 ≡ 1 (mod 13)
|
|
12
|
+
[-1n, secp256k1.CURVE.n, secp256k1.CURVE.n - 1n],
|
|
13
|
+
];
|
|
14
|
+
for (const [a, m, expected] of testCases) {
|
|
15
|
+
const result = modInverse(a, m);
|
|
16
|
+
expect(result).toBe(expected);
|
|
17
|
+
// Normalize the result of (a * result) before taking modulo
|
|
18
|
+
const product = a * result;
|
|
19
|
+
const normalizedProduct = ((product % m) + m) % m;
|
|
20
|
+
expect(normalizedProduct).toBe(1n);
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
it("should throw error when modular inverse doesn't exist", () => {
|
|
24
|
+
expect(() => modInverse(4n, 8n)).toThrow("Modular inverse does not exist");
|
|
25
|
+
expect(() => modInverse(6n, 9n)).toThrow("Modular inverse does not exist");
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
it("test secret sharing", () => {
|
|
29
|
+
const fieldModulus = secp256k1.CURVE.n;
|
|
30
|
+
const secret = 56223216183876340914672117764605975762373003965917245943571257601961255596156n;
|
|
31
|
+
const threshold = 3;
|
|
32
|
+
const numberOfShares = 5;
|
|
33
|
+
const shares = splitSecretWithProofs(secret, fieldModulus, threshold, numberOfShares);
|
|
34
|
+
for (const share of shares) {
|
|
35
|
+
validateShare(share);
|
|
36
|
+
}
|
|
37
|
+
const recoveredSecret = recoverSecret(shares.slice(0, threshold));
|
|
38
|
+
expect(recoveredSecret).toBe(secret);
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
//# sourceMappingURL=secret-sharing.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secret-sharing.test.js","sourceRoot":"","sources":["../../src/tests/secret-sharing.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EACL,UAAU,EACV,aAAa,EACb,qBAAqB,EACrB,aAAa,GACd,MAAM,4BAA4B,CAAC;AAEpC,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;QAC1B,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;YACnE,+BAA+B;YAC/B,MAAM,SAAS,GAA+B;gBAC5C,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,qBAAqB;gBACpC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,uBAAuB;gBACxC,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,qBAAqB;gBACpC,CAAC,CAAC,EAAE,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC;aACjD,CAAC;YAEF,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,IAAI,SAAS,EAAE,CAAC;gBACzC,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAChC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAE9B,4DAA4D;gBAC5D,MAAM,OAAO,GAAG,CAAC,GAAG,MAAM,CAAC;gBAC3B,MAAM,iBAAiB,GAAG,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;gBAClD,MAAM,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACrC,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;YAC/D,MAAM,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CACtC,gCAAgC,CACjC,CAAC;YACF,MAAM,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CACtC,gCAAgC,CACjC,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qBAAqB,EAAE,GAAG,EAAE;QAC7B,MAAM,YAAY,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;QACvC,MAAM,MAAM,GACV,8EAA8E,CAAC;QACjF,MAAM,SAAS,GAAG,CAAC,CAAC;QACpB,MAAM,cAAc,GAAG,CAAC,CAAC;QAEzB,MAAM,MAAM,GAAG,qBAAqB,CAClC,MAAM,EACN,YAAY,EACZ,SAAS,EACT,cAAc,CACf,CAAC;QAEF,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,aAAa,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;QAED,MAAM,eAAe,GAAG,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;QAClE,MAAM,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
//@ts-nocheck
|
|
2
|
+
import { describe, expect, it } from "@jest/globals";
|
|
3
|
+
import { equalBytes, hexToBytes } from "@noble/curves/abstract/utils";
|
|
4
|
+
import { secp256k1 } from "@noble/curves/secp256k1";
|
|
5
|
+
import { sha256 } from "@scure/btc-signer/utils";
|
|
6
|
+
import { WalletConfigService } from "../services/config.js";
|
|
7
|
+
import { ConnectionManager } from "../services/connection.js";
|
|
8
|
+
import { TransferService } from "../services/transfer.js";
|
|
9
|
+
import { applyAdaptorToSignature, generateAdaptorFromSignature, } from "../utils/adaptor-signature.js";
|
|
10
|
+
import { computeTaprootKeyNoScript, getSigHashFromTx, } from "../utils/bitcoin.js";
|
|
11
|
+
import { Network } from "../utils/network.js";
|
|
12
|
+
import { createNewTree } from "./test-util.js";
|
|
13
|
+
import { SparkWalletTesting } from "./utils/spark-testing-wallet.js";
|
|
14
|
+
import { BitcoinFaucet } from "./utils/test-faucet.js";
|
|
15
|
+
describe("swap", () => {
|
|
16
|
+
const testFn = process.env.GITHUB_ACTIONS ? it.skip : it;
|
|
17
|
+
testFn("test swap", async () => {
|
|
18
|
+
const faucet = new BitcoinFaucet("http://127.0.0.1:18443", "admin1", "123");
|
|
19
|
+
// Initiate sender
|
|
20
|
+
const senderWallet = new SparkWalletTesting(Network.LOCAL);
|
|
21
|
+
await senderWallet.initWalletFromMnemonic();
|
|
22
|
+
const senderPubkey = await senderWallet.getIdentityPublicKey();
|
|
23
|
+
const senderConfig = new WalletConfigService(Network.LOCAL, senderWallet.getSigner());
|
|
24
|
+
const senderConnectionManager = new ConnectionManager(senderConfig);
|
|
25
|
+
const senderTransferService = new TransferService(senderConfig, senderConnectionManager);
|
|
26
|
+
// Initiate receiver
|
|
27
|
+
const receiverWallet = new SparkWalletTesting(Network.LOCAL);
|
|
28
|
+
await receiverWallet.initWalletFromMnemonic();
|
|
29
|
+
const receiverPubkey = await receiverWallet.getIdentityPublicKey();
|
|
30
|
+
const receiverConfig = new WalletConfigService(Network.LOCAL, receiverWallet.getSigner());
|
|
31
|
+
const receiverConnectionManager = new ConnectionManager(receiverConfig);
|
|
32
|
+
const receiverTransferService = new TransferService(receiverConfig, receiverConnectionManager);
|
|
33
|
+
const senderLeafPubKey = await senderWallet
|
|
34
|
+
.getSigner()
|
|
35
|
+
.generatePublicKey();
|
|
36
|
+
const senderRootNode = await createNewTree(senderWallet, senderLeafPubKey, faucet);
|
|
37
|
+
const receiverLeafPubKey = await receiverWallet
|
|
38
|
+
.getSigner()
|
|
39
|
+
.generatePublicKey();
|
|
40
|
+
const receiverRootNode = await createNewTree(receiverWallet, receiverLeafPubKey, faucet);
|
|
41
|
+
// Sender initiates transfer
|
|
42
|
+
const senderNewLeafPubKey = await senderWallet
|
|
43
|
+
.getSigner()
|
|
44
|
+
.generatePublicKey(sha256("1"));
|
|
45
|
+
const senderTransferNode = {
|
|
46
|
+
leaf: senderRootNode,
|
|
47
|
+
signingPubKey: senderLeafPubKey,
|
|
48
|
+
newSigningPubKey: senderNewLeafPubKey,
|
|
49
|
+
};
|
|
50
|
+
const senderLeavesToTransfer = [senderTransferNode];
|
|
51
|
+
// Get signature for refunds (normal flow)
|
|
52
|
+
const { transfer: senderTransfer, signatureMap: senderRefundSignatureMap, leafDataMap: senderLeafDataMap, } = await senderTransferService.sendTransferSignRefund(senderLeavesToTransfer, hexToBytes(receiverPubkey), new Date(Date.now() + 10 * 60 * 1000));
|
|
53
|
+
expect(senderRefundSignatureMap.size).toBe(1);
|
|
54
|
+
const senderSignature = senderRefundSignatureMap.get(senderRootNode.id);
|
|
55
|
+
expect(senderSignature).toBeDefined();
|
|
56
|
+
expect(senderLeafDataMap.size).toBe(1);
|
|
57
|
+
const { adaptorPrivateKey, adaptorSignature } = generateAdaptorFromSignature(senderSignature);
|
|
58
|
+
const adaptorPubKey = secp256k1.getPublicKey(adaptorPrivateKey);
|
|
59
|
+
const receiverNewLeafPubKey = await receiverWallet
|
|
60
|
+
.getSigner()
|
|
61
|
+
.generatePublicKey(sha256("1"));
|
|
62
|
+
const receiverTransferNode = {
|
|
63
|
+
leaf: receiverRootNode,
|
|
64
|
+
signingPubKey: receiverLeafPubKey,
|
|
65
|
+
newSigningPubKey: receiverNewLeafPubKey,
|
|
66
|
+
};
|
|
67
|
+
const receiverLeavesToTransfer = [receiverTransferNode];
|
|
68
|
+
const { transfer: receiverTransfer, signatureMap: receiverRefundSignatureMap, leafDataMap: receiverLeafDataMap, signingResults: operatorSigningResults, } = await receiverTransferService.sendSwapSignRefund(receiverLeavesToTransfer, hexToBytes(senderPubkey), new Date(Date.now() + 10 * 60 * 1000), adaptorPubKey);
|
|
69
|
+
const newReceiverRefundSignatureMap = new Map();
|
|
70
|
+
for (const [nodeId, signature] of receiverRefundSignatureMap.entries()) {
|
|
71
|
+
const leafData = receiverLeafDataMap.get(nodeId);
|
|
72
|
+
if (!leafData?.refundTx) {
|
|
73
|
+
throw new Error(`No refund tx for leaf ${nodeId}`);
|
|
74
|
+
}
|
|
75
|
+
const sighash = getSigHashFromTx(leafData.refundTx, 0, leafData.tx.getOutput(leafData.vout));
|
|
76
|
+
let verifyingPubkey;
|
|
77
|
+
for (const signingResult of operatorSigningResults) {
|
|
78
|
+
if (signingResult.leafId === nodeId) {
|
|
79
|
+
verifyingPubkey = signingResult.verifyingKey;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
expect(verifyingPubkey).toBeDefined();
|
|
83
|
+
const taprootKey = computeTaprootKeyNoScript(verifyingPubkey.slice(1, 33));
|
|
84
|
+
const adaptorSig = applyAdaptorToSignature(taprootKey.slice(1, 33), sighash, signature, adaptorPrivateKey);
|
|
85
|
+
newReceiverRefundSignatureMap.set(nodeId, adaptorSig);
|
|
86
|
+
}
|
|
87
|
+
const senderTransferTweakKey = await senderTransferService.sendTransferTweakKey(senderTransfer, senderLeavesToTransfer, senderRefundSignatureMap);
|
|
88
|
+
const pendingTransfer = await receiverTransferService.queryPendingTransfers();
|
|
89
|
+
expect(pendingTransfer.transfers.length).toBe(1);
|
|
90
|
+
const receiverPendingTransfer = pendingTransfer.transfers[0];
|
|
91
|
+
expect(receiverPendingTransfer.id).toBe(senderTransferTweakKey.id);
|
|
92
|
+
const leafPrivKeyMap = await receiverTransferService.verifyPendingTransfer(receiverPendingTransfer);
|
|
93
|
+
expect(leafPrivKeyMap.size).toBe(1);
|
|
94
|
+
expect(leafPrivKeyMap.get(senderRootNode.id)).toBeDefined();
|
|
95
|
+
const bytesEqual = equalBytes(leafPrivKeyMap.get(senderRootNode.id), senderNewLeafPubKey);
|
|
96
|
+
expect(bytesEqual).toBe(true);
|
|
97
|
+
expect(receiverPendingTransfer.leaves[0].leaf).toBeDefined();
|
|
98
|
+
const finalLeafPubKey = await receiverWallet
|
|
99
|
+
.getSigner()
|
|
100
|
+
.generatePublicKey(sha256("2"));
|
|
101
|
+
const claimingNode = {
|
|
102
|
+
leaf: receiverPendingTransfer.leaves[0].leaf,
|
|
103
|
+
signingPubKey: senderNewLeafPubKey,
|
|
104
|
+
newSigningPubKey: finalLeafPubKey,
|
|
105
|
+
};
|
|
106
|
+
const leavesToClaim = [claimingNode];
|
|
107
|
+
await receiverTransferService.claimTransfer(receiverPendingTransfer, leavesToClaim);
|
|
108
|
+
await receiverTransferService.sendTransferTweakKey(receiverTransfer, receiverLeavesToTransfer, newReceiverRefundSignatureMap);
|
|
109
|
+
const sPendingTransfer = await senderTransferService.queryPendingTransfers();
|
|
110
|
+
expect(sPendingTransfer.transfers.length).toBe(1);
|
|
111
|
+
const senderPendingTransfer = sPendingTransfer.transfers[0];
|
|
112
|
+
expect(senderPendingTransfer.id).toBe(receiverTransfer.id);
|
|
113
|
+
const senderLeafPrivKeyMap = await senderTransferService.verifyPendingTransfer(senderPendingTransfer);
|
|
114
|
+
expect(senderLeafPrivKeyMap.size).toBe(1);
|
|
115
|
+
expect(senderLeafPrivKeyMap.get(receiverRootNode.id)).toBeDefined();
|
|
116
|
+
const bytesEqual_1 = equalBytes(senderLeafPrivKeyMap.get(receiverRootNode.id), receiverNewLeafPubKey);
|
|
117
|
+
expect(bytesEqual_1).toBe(true);
|
|
118
|
+
expect(senderPendingTransfer.leaves[0].leaf).toBeDefined();
|
|
119
|
+
const finalLeafPubKey_1 = await senderWallet
|
|
120
|
+
.getSigner()
|
|
121
|
+
.generatePublicKey(sha256("3"));
|
|
122
|
+
const claimingNode_1 = {
|
|
123
|
+
leaf: senderPendingTransfer.leaves[0].leaf,
|
|
124
|
+
signingPubKey: receiverNewLeafPubKey,
|
|
125
|
+
newSigningPubKey: finalLeafPubKey_1,
|
|
126
|
+
};
|
|
127
|
+
const leavesToClaim_1 = [claimingNode_1];
|
|
128
|
+
await senderTransferService.claimTransfer(senderPendingTransfer, leavesToClaim_1);
|
|
129
|
+
}, 30000);
|
|
130
|
+
});
|
|
131
|
+
//# sourceMappingURL=swap.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swap.test.js","sourceRoot":"","sources":["../../src/tests/swap.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { TreeNode } from "../proto/spark.js";
|
|
2
|
+
import { SigningOperator, WalletConfig } from "../services/config.js";
|
|
3
|
+
import { Network } from "../utils/network.js";
|
|
4
|
+
import { SparkWalletTesting } from "./utils/spark-testing-wallet.js";
|
|
5
|
+
import { BitcoinFaucet } from "./utils/test-faucet.js";
|
|
6
|
+
export declare const LOCAL_WALLET_CONFIG: {
|
|
7
|
+
network: Network;
|
|
8
|
+
coodinatorIdentifier: string;
|
|
9
|
+
frostSignerAddress: string;
|
|
10
|
+
threshold: number;
|
|
11
|
+
signingOperators: Record<string, SigningOperator>;
|
|
12
|
+
};
|
|
13
|
+
export declare const REGTEST_WALLET_CONFIG: {
|
|
14
|
+
network: Network;
|
|
15
|
+
coodinatorIdentifier: string;
|
|
16
|
+
frostSignerAddress: string;
|
|
17
|
+
threshold: number;
|
|
18
|
+
signingOperators: Record<string, SigningOperator>;
|
|
19
|
+
};
|
|
20
|
+
export declare function getRegtestSigningOperators(): Record<string, SigningOperator>;
|
|
21
|
+
export declare function getLocalSigningOperators(): Record<string, SigningOperator>;
|
|
22
|
+
export declare function getTestWalletConfig(): WalletConfig;
|
|
23
|
+
export declare function getTestWalletConfigWithIdentityKey(identityPrivateKey: Uint8Array): WalletConfig;
|
|
24
|
+
export declare function createNewTree(wallet: SparkWalletTesting, pubKey: Uint8Array, faucet: BitcoinFaucet, amountSats?: bigint): Promise<TreeNode>;
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
//@ts-nocheck
|
|
2
|
+
import { hexToBytes } from "@noble/curves/abstract/utils";
|
|
3
|
+
import { secp256k1 } from "@noble/curves/secp256k1";
|
|
4
|
+
import { Address, OutScript, Transaction } from "@scure/btc-signer";
|
|
5
|
+
import { WalletConfigService, } from "../services/config.js";
|
|
6
|
+
import { ConnectionManager } from "../services/connection.js";
|
|
7
|
+
import { DepositService } from "../services/deposit.js";
|
|
8
|
+
import { getP2TRAddressFromPublicKey } from "../utils/bitcoin.js";
|
|
9
|
+
import { getNetwork, Network } from "../utils/network.js";
|
|
10
|
+
export const LOCAL_WALLET_CONFIG = {
|
|
11
|
+
network: Network.REGTEST,
|
|
12
|
+
coodinatorIdentifier: "0000000000000000000000000000000000000000000000000000000000000001",
|
|
13
|
+
frostSignerAddress: "unix:///tmp/frost_0.sock",
|
|
14
|
+
threshold: 3,
|
|
15
|
+
signingOperators: getLocalSigningOperators(),
|
|
16
|
+
};
|
|
17
|
+
export const REGTEST_WALLET_CONFIG = {
|
|
18
|
+
network: Network.REGTEST,
|
|
19
|
+
coodinatorIdentifier: "0000000000000000000000000000000000000000000000000000000000000001",
|
|
20
|
+
frostSignerAddress: "unix:///tmp/frost_0.sock",
|
|
21
|
+
threshold: 3,
|
|
22
|
+
signingOperators: getRegtestSigningOperators(),
|
|
23
|
+
};
|
|
24
|
+
export function getRegtestSigningOperators() {
|
|
25
|
+
const pubkeys = [
|
|
26
|
+
"03acd9a5a88db102730ff83dee69d69088cc4c9d93bbee893e90fd5051b7da9651",
|
|
27
|
+
"02d2d103cacb1d6355efeab27637c74484e2a7459e49110c3fe885210369782e23",
|
|
28
|
+
"0350f07ffc21bfd59d31e0a7a600e2995273938444447cb9bc4c75b8a895dbb853",
|
|
29
|
+
];
|
|
30
|
+
const pubkeyBytesArray = pubkeys.map((pubkey) => hexToBytes(pubkey));
|
|
31
|
+
return {
|
|
32
|
+
"0000000000000000000000000000000000000000000000000000000000000001": {
|
|
33
|
+
id: 0,
|
|
34
|
+
identifier: "0000000000000000000000000000000000000000000000000000000000000001",
|
|
35
|
+
address: "https://0.spark.dev.dev.sparkinfra.net",
|
|
36
|
+
identityPublicKey: pubkeyBytesArray[0],
|
|
37
|
+
},
|
|
38
|
+
"0000000000000000000000000000000000000000000000000000000000000002": {
|
|
39
|
+
id: 1,
|
|
40
|
+
identifier: "0000000000000000000000000000000000000000000000000000000000000002",
|
|
41
|
+
address: "https://1.spark.dev.dev.sparkinfra.net",
|
|
42
|
+
identityPublicKey: pubkeyBytesArray[1],
|
|
43
|
+
},
|
|
44
|
+
"0000000000000000000000000000000000000000000000000000000000000003": {
|
|
45
|
+
id: 2,
|
|
46
|
+
identifier: "0000000000000000000000000000000000000000000000000000000000000003",
|
|
47
|
+
address: "https://2.spark.dev.dev.sparkinfra.net",
|
|
48
|
+
identityPublicKey: pubkeyBytesArray[2],
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
export function getLocalSigningOperators() {
|
|
53
|
+
const pubkeys = [
|
|
54
|
+
"0322ca18fc489ae25418a0e768273c2c61cabb823edfb14feb891e9bec62016510",
|
|
55
|
+
"0341727a6c41b168f07eb50865ab8c397a53c7eef628ac1020956b705e43b6cb27",
|
|
56
|
+
"0305ab8d485cc752394de4981f8a5ae004f2becfea6f432c9a59d5022d8764f0a6",
|
|
57
|
+
"0352aef4d49439dedd798ac4aef1e7ebef95f569545b647a25338398c1247ffdea",
|
|
58
|
+
"02c05c88cc8fc181b1ba30006df6a4b0597de6490e24514fbdd0266d2b9cd3d0ba",
|
|
59
|
+
];
|
|
60
|
+
const pubkeyBytesArray = pubkeys.map((pubkey) => hexToBytes(pubkey));
|
|
61
|
+
return {
|
|
62
|
+
"0000000000000000000000000000000000000000000000000000000000000001": {
|
|
63
|
+
id: 0,
|
|
64
|
+
identifier: "0000000000000000000000000000000000000000000000000000000000000001",
|
|
65
|
+
address: "https://localhost:8535",
|
|
66
|
+
identityPublicKey: pubkeyBytesArray[0],
|
|
67
|
+
},
|
|
68
|
+
"0000000000000000000000000000000000000000000000000000000000000002": {
|
|
69
|
+
id: 1,
|
|
70
|
+
identifier: "0000000000000000000000000000000000000000000000000000000000000002",
|
|
71
|
+
address: "https://localhost:8536",
|
|
72
|
+
identityPublicKey: pubkeyBytesArray[1],
|
|
73
|
+
},
|
|
74
|
+
"0000000000000000000000000000000000000000000000000000000000000003": {
|
|
75
|
+
id: 2,
|
|
76
|
+
identifier: "0000000000000000000000000000000000000000000000000000000000000003",
|
|
77
|
+
address: "https://localhost:8537",
|
|
78
|
+
identityPublicKey: pubkeyBytesArray[2],
|
|
79
|
+
},
|
|
80
|
+
"0000000000000000000000000000000000000000000000000000000000000004": {
|
|
81
|
+
id: 3,
|
|
82
|
+
identifier: "0000000000000000000000000000000000000000000000000000000000000004",
|
|
83
|
+
address: "https://localhost:8538",
|
|
84
|
+
identityPublicKey: pubkeyBytesArray[3],
|
|
85
|
+
},
|
|
86
|
+
"0000000000000000000000000000000000000000000000000000000000000005": {
|
|
87
|
+
id: 4,
|
|
88
|
+
identifier: "0000000000000000000000000000000000000000000000000000000000000005",
|
|
89
|
+
address: "https://localhost:8539",
|
|
90
|
+
identityPublicKey: pubkeyBytesArray[4],
|
|
91
|
+
},
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
export function getTestWalletConfig() {
|
|
95
|
+
const identityPrivateKey = secp256k1.utils.randomPrivateKey();
|
|
96
|
+
return getTestWalletConfigWithIdentityKey(identityPrivateKey);
|
|
97
|
+
}
|
|
98
|
+
export function getTestWalletConfigWithIdentityKey(identityPrivateKey) {
|
|
99
|
+
return {
|
|
100
|
+
...LOCAL_WALLET_CONFIG,
|
|
101
|
+
identityPrivateKey,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
export async function createNewTree(wallet, pubKey, faucet, amountSats = 100000n) {
|
|
105
|
+
const faucetCoin = await faucet.fund();
|
|
106
|
+
const configService = new WalletConfigService(Network.LOCAL, wallet.getSigner());
|
|
107
|
+
const connectionManager = new ConnectionManager(configService);
|
|
108
|
+
const depositService = new DepositService(configService, connectionManager);
|
|
109
|
+
const depositResp = await depositService.generateDepositAddress({
|
|
110
|
+
signingPubkey: pubKey,
|
|
111
|
+
});
|
|
112
|
+
if (!depositResp.depositAddress) {
|
|
113
|
+
throw new Error("deposit address not found");
|
|
114
|
+
}
|
|
115
|
+
const depositTx = new Transaction();
|
|
116
|
+
depositTx.addInput(faucetCoin.outpoint);
|
|
117
|
+
// Add the main output
|
|
118
|
+
const addr = Address(getNetwork(Network.LOCAL)).decode(depositResp.depositAddress.address);
|
|
119
|
+
const script = OutScript.encode(addr);
|
|
120
|
+
depositTx.addOutput({ script, amount: amountSats });
|
|
121
|
+
const treeResp = await depositService.createTreeRoot({
|
|
122
|
+
signingPubKey: pubKey,
|
|
123
|
+
verifyingKey: depositResp.depositAddress.verifyingKey,
|
|
124
|
+
depositTx,
|
|
125
|
+
vout: 0,
|
|
126
|
+
});
|
|
127
|
+
const signedDepositTx = await faucet.signFaucetCoin(depositTx, faucetCoin.txout, faucetCoin.key);
|
|
128
|
+
await faucet.broadcastTx(signedDepositTx.hex);
|
|
129
|
+
// Mine just 1 block instead of waiting for many confirmations
|
|
130
|
+
const randomKey = secp256k1.utils.randomPrivateKey();
|
|
131
|
+
const randomPubKey = secp256k1.getPublicKey(randomKey);
|
|
132
|
+
const randomAddress = getP2TRAddressFromPublicKey(randomPubKey, Network.LOCAL);
|
|
133
|
+
await faucet.generateToAddress(1, randomAddress);
|
|
134
|
+
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
135
|
+
return treeResp.nodes[0];
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=test-util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-util.js","sourceRoot":"","sources":["../../src/tests/test-util.ts"],"names":[],"mappings":"AAAA,aAAa;AAEb,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEpE,OAAO,EAGL,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAI1D,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,OAAO,EAAE,OAAO,CAAC,OAAO;IACxB,oBAAoB,EAClB,kEAAkE;IACpE,kBAAkB,EAAE,0BAA0B;IAC9C,SAAS,EAAE,CAAC;IACZ,gBAAgB,EAAE,wBAAwB,EAAE;CAC7C,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,OAAO,EAAE,OAAO,CAAC,OAAO;IACxB,oBAAoB,EAClB,kEAAkE;IACpE,kBAAkB,EAAE,0BAA0B;IAC9C,SAAS,EAAE,CAAC;IACZ,gBAAgB,EAAE,0BAA0B,EAAE;CAC/C,CAAC;AAEF,MAAM,UAAU,0BAA0B;IACxC,MAAM,OAAO,GAAG;QACd,oEAAoE;QACpE,oEAAoE;QACpE,oEAAoE;KACrE,CAAC;IAEF,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IAErE,OAAO;QACL,kEAAkE,EAAE;YAClE,EAAE,EAAE,CAAC;YACL,UAAU,EACR,kEAAkE;YACpE,OAAO,EAAE,wCAAwC;YAEjD,iBAAiB,EAAE,gBAAgB,CAAC,CAAC,CAAC;SACvC;QACD,kEAAkE,EAAE;YAClE,EAAE,EAAE,CAAC;YACL,UAAU,EACR,kEAAkE;YACpE,OAAO,EAAE,wCAAwC;YAEjD,iBAAiB,EAAE,gBAAgB,CAAC,CAAC,CAAC;SACvC;QACD,kEAAkE,EAAE;YAClE,EAAE,EAAE,CAAC;YACL,UAAU,EACR,kEAAkE;YACpE,OAAO,EAAE,wCAAwC;YACjD,iBAAiB,EAAE,gBAAgB,CAAC,CAAC,CAAC;SACvC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wBAAwB;IACtC,MAAM,OAAO,GAAG;QACd,oEAAoE;QACpE,oEAAoE;QACpE,oEAAoE;QACpE,oEAAoE;QACpE,oEAAoE;KACrE,CAAC;IAEF,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IAErE,OAAO;QACL,kEAAkE,EAAE;YAClE,EAAE,EAAE,CAAC;YACL,UAAU,EACR,kEAAkE;YACpE,OAAO,EAAE,wBAAwB;YACjC,iBAAiB,EAAE,gBAAgB,CAAC,CAAC,CAAC;SACvC;QACD,kEAAkE,EAAE;YAClE,EAAE,EAAE,CAAC;YACL,UAAU,EACR,kEAAkE;YACpE,OAAO,EAAE,wBAAwB;YACjC,iBAAiB,EAAE,gBAAgB,CAAC,CAAC,CAAC;SACvC;QACD,kEAAkE,EAAE;YAClE,EAAE,EAAE,CAAC;YACL,UAAU,EACR,kEAAkE;YACpE,OAAO,EAAE,wBAAwB;YACjC,iBAAiB,EAAE,gBAAgB,CAAC,CAAC,CAAC;SACvC;QACD,kEAAkE,EAAE;YAClE,EAAE,EAAE,CAAC;YACL,UAAU,EACR,kEAAkE;YACpE,OAAO,EAAE,wBAAwB;YACjC,iBAAiB,EAAE,gBAAgB,CAAC,CAAC,CAAC;SACvC;QACD,kEAAkE,EAAE;YAClE,EAAE,EAAE,CAAC;YACL,UAAU,EACR,kEAAkE;YACpE,OAAO,EAAE,wBAAwB;YACjC,iBAAiB,EAAE,gBAAgB,CAAC,CAAC,CAAC;SACvC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,MAAM,kBAAkB,GAAG,SAAS,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC;IAC9D,OAAO,kCAAkC,CAAC,kBAAkB,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,kCAAkC,CAChD,kBAA8B;IAE9B,OAAO;QACL,GAAG,mBAAmB;QACtB,kBAAkB;KACH,CAAC;AACpB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,MAA0B,EAC1B,MAAkB,EAClB,MAAqB,EACrB,aAAqB,OAAQ;IAE7B,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;IAEvC,MAAM,aAAa,GAAG,IAAI,mBAAmB,CAC3C,OAAO,CAAC,KAAK,EACb,MAAM,CAAC,SAAS,EAAE,CACnB,CAAC;IACF,MAAM,iBAAiB,GAAG,IAAI,iBAAiB,CAAC,aAAa,CAAC,CAAC;IAC/D,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,aAAa,EAAE,iBAAiB,CAAC,CAAC;IAE5E,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,sBAAsB,CAAC;QAC9D,aAAa,EAAE,MAAM;KACtB,CAAC,CAAC;IAEH,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,WAAW,EAAE,CAAC;IACpC,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAExC,sBAAsB;IACtB,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CACpD,WAAW,CAAC,cAAc,CAAC,OAAO,CACnC,CAAC;IACF,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACtC,SAAS,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;IAEpD,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,cAAc,CAAC;QACnD,aAAa,EAAE,MAAM;QACrB,YAAY,EAAE,WAAW,CAAC,cAAc,CAAC,YAAY;QACrD,SAAS;QACT,IAAI,EAAE,CAAC;KACR,CAAC,CAAC;IAEH,MAAM,eAAe,GAAG,MAAM,MAAM,CAAC,cAAc,CACjD,SAAS,EACT,UAAU,CAAC,KAAK,EAChB,UAAU,CAAC,GAAG,CACf,CAAC;IAEF,MAAM,MAAM,CAAC,WAAW,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;IAE9C,8DAA8D;IAC9D,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC;IACrD,MAAM,YAAY,GAAG,SAAS,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IACvD,MAAM,aAAa,GAAG,2BAA2B,CAC/C,YAAY,EACZ,OAAO,CAAC,KAAK,CACd,CAAC;IAEF,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;IAEjD,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;IACzD,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC3B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { numberToBytesBE } from "@noble/curves/abstract/utils";
|
|
2
|
+
import { hashTokenTransaction } from "../utils/token-hashing.js";
|
|
3
|
+
describe("hash token transaction", () => {
|
|
4
|
+
it("should produce the exact same hash", () => {
|
|
5
|
+
const tokenAmount = 1000n;
|
|
6
|
+
const tokenPublicKey = new Uint8Array([
|
|
7
|
+
242, 155, 208, 90, 72, 211, 120, 244, 69, 99, 28, 101, 149, 222, 123, 50,
|
|
8
|
+
252, 63, 99, 54, 137, 226, 7, 224, 163, 122, 93, 248, 42, 159, 173, 45,
|
|
9
|
+
]);
|
|
10
|
+
const identityPubKey = new Uint8Array([
|
|
11
|
+
25, 155, 208, 90, 72, 211, 120, 244, 69, 99, 28, 101, 149, 222, 123, 50,
|
|
12
|
+
252, 63, 99, 54, 137, 226, 7, 224, 163, 122, 93, 248, 42, 159, 173, 46,
|
|
13
|
+
]);
|
|
14
|
+
const tokenTransaction = {
|
|
15
|
+
tokenInput: {
|
|
16
|
+
$case: "mintInput",
|
|
17
|
+
mintInput: {
|
|
18
|
+
issuerPublicKey: tokenPublicKey,
|
|
19
|
+
issuerProvidedTimestamp: 100,
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
outputLeaves: [
|
|
23
|
+
{
|
|
24
|
+
id: "db1a4e48-0fc5-4f6c-8a80-d9d6c561a436",
|
|
25
|
+
ownerPublicKey: identityPubKey,
|
|
26
|
+
withdrawBondSats: 10000,
|
|
27
|
+
withdrawLocktime: 100,
|
|
28
|
+
tokenPublicKey: tokenPublicKey,
|
|
29
|
+
tokenAmount: numberToBytesBE(tokenAmount, 16),
|
|
30
|
+
revocationPublicKey: new Uint8Array(0),
|
|
31
|
+
},
|
|
32
|
+
],
|
|
33
|
+
sparkOperatorIdentityPublicKeys: [],
|
|
34
|
+
};
|
|
35
|
+
const hash = hashTokenTransaction(tokenTransaction, false);
|
|
36
|
+
expect(Array.from(hash)).toEqual([
|
|
37
|
+
169, 30, 146, 172, 90, 113, 89, 157, 142, 5, 138, 251, 237, 122, 65, 135,
|
|
38
|
+
47, 178, 192, 116, 107, 24, 176, 162, 78, 238, 80, 166, 38, 129, 151, 167,
|
|
39
|
+
]);
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
//# sourceMappingURL=tokens.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens.test.js","sourceRoot":"","sources":["../../src/tests/tokens.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEjE,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,WAAW,GAAW,KAAK,CAAC;QAElC,MAAM,cAAc,GAAG,IAAI,UAAU,CAAC;YACpC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;YACxE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;SACvE,CAAC,CAAC;QAEH,MAAM,cAAc,GAAG,IAAI,UAAU,CAAC;YACpC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;YACvE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;SACvE,CAAC,CAAC;QAEH,MAAM,gBAAgB,GAAG;YACvB,UAAU,EAAE;gBACV,KAAK,EAAE,WAAoB;gBAC3B,SAAS,EAAE;oBACT,eAAe,EAAE,cAAc;oBAC/B,uBAAuB,EAAE,GAAG;iBAC7B;aACF;YACD,YAAY,EAAE;gBACZ;oBACE,EAAE,EAAE,sCAAsC;oBAC1C,cAAc,EAAE,cAAc;oBAC9B,gBAAgB,EAAE,KAAK;oBACvB,gBAAgB,EAAE,GAAG;oBACrB,cAAc,EAAE,cAAc;oBAC9B,WAAW,EAAE,eAAe,CAAC,WAAW,EAAE,EAAE,CAAC;oBAC7C,mBAAmB,EAAE,IAAI,UAAU,CAAC,CAAC,CAAC;iBACvC;aACF;YACD,+BAA+B,EAAE,EAAE;SACpC,CAAC;QAEF,MAAM,IAAI,GAAG,oBAAoB,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;QAE3D,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;YAC/B,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG;YACxE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;SAC1E,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|