diff --git a/CHANGELOG.md b/CHANGELOG.md index 74b923b..5f3a83a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,13 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +### [0.0.1-alpha.26](https://github.com/DIG-Network/dig-chia-sdk/compare/v0.0.1-alpha.25...v0.0.1-alpha.26) (2024-09-18) + + +### Features + +* add payment hint generator ([0a3da7b](https://github.com/DIG-Network/dig-chia-sdk/commit/0a3da7bbdc7bf4d42511a62feecc29dd31fd3709)) + ### [0.0.1-alpha.25](https://github.com/DIG-Network/dig-chia-sdk/compare/v0.0.1-alpha.24...v0.0.1-alpha.25) (2024-09-18) diff --git a/package-lock.json b/package-lock.json index 7d80e13..0118297 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,14 +1,15 @@ { "name": "@dignetwork/dig-sdk", - "version": "0.0.1-alpha.25", + "version": "0.0.1-alpha.26", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@dignetwork/dig-sdk", - "version": "0.0.1-alpha.25", + "version": "0.0.1-alpha.26", "license": "ISC", "dependencies": { + "@dignetwork/datalayer-driver": "^0.1.24", "bip39": "^3.1.0", "chia-bls": "^1.0.2", "chia-config-loader": "^1.0.1", @@ -167,6 +168,96 @@ "node": ">=12" } }, + "node_modules/@dignetwork/datalayer-driver": { + "version": "0.1.24", + "resolved": "https://registry.npmjs.org/@dignetwork/datalayer-driver/-/datalayer-driver-0.1.24.tgz", + "integrity": "sha512-hugjLwHfC1zZyyJCzJhcqNd3GbKSu3vFa55r4nL0TKj2fNiQwsOl86JyETMgbnto2aMmezYXey+gzjac/DVZYg==", + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@dignetwork/datalayer-driver-darwin-arm64": "0.1.24", + "@dignetwork/datalayer-driver-darwin-x64": "0.1.24", + "@dignetwork/datalayer-driver-linux-arm64-gnu": "0.1.24", + "@dignetwork/datalayer-driver-linux-x64-gnu": "0.1.24", + "@dignetwork/datalayer-driver-win32-x64-msvc": "0.1.24" + } + }, + "node_modules/@dignetwork/datalayer-driver-darwin-arm64": { + "version": "0.1.24", + "resolved": "https://registry.npmjs.org/@dignetwork/datalayer-driver-darwin-arm64/-/datalayer-driver-darwin-arm64-0.1.24.tgz", + "integrity": "sha512-nbdNoMyJkTSIiq7ZTFJarkG+1+kfHaB7ZhfkciglrJctJlaUXqs5h6FXIurQm9UnbKpqAzaaIUbTk0kEpDRx9w==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@dignetwork/datalayer-driver-darwin-x64": { + "version": "0.1.24", + "resolved": "https://registry.npmjs.org/@dignetwork/datalayer-driver-darwin-x64/-/datalayer-driver-darwin-x64-0.1.24.tgz", + "integrity": "sha512-yIMIROWdknS77IawAYh54zi+9OQlCJBdsfC1dyx8+IzyjjAtpDzv0n3aOBA6UaCAnUKMcv2Kmx/6nEG0wquPkw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@dignetwork/datalayer-driver-linux-arm64-gnu": { + "version": "0.1.24", + "resolved": "https://registry.npmjs.org/@dignetwork/datalayer-driver-linux-arm64-gnu/-/datalayer-driver-linux-arm64-gnu-0.1.24.tgz", + "integrity": "sha512-61mX90Ganm3vUMawoc/vrfe8433K8013eIkKvwVTpdt6HPXeqK/I1frrg4HFE/ylyu3RTGlVGVFyjnz6y7L4SA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@dignetwork/datalayer-driver-linux-x64-gnu": { + "version": "0.1.24", + "resolved": "https://registry.npmjs.org/@dignetwork/datalayer-driver-linux-x64-gnu/-/datalayer-driver-linux-x64-gnu-0.1.24.tgz", + "integrity": "sha512-hf/MYwFmQzoEJsVbFikEJv18dsKW86fc1uxxRze5O+dLk+yrVlX5p0nKErmLyND3qegvcAPfGNsQwBlEnhpeIw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@dignetwork/datalayer-driver-win32-x64-msvc": { + "version": "0.1.24", + "resolved": "https://registry.npmjs.org/@dignetwork/datalayer-driver-win32-x64-msvc/-/datalayer-driver-win32-x64-msvc-0.1.24.tgz", + "integrity": "sha512-gMtwmtfl7R4MjhdYd2soR9yJcVfcEL6IF0XLegnoC1IjTTpzW4TbkHJp/mbnrgzPG9fcHYVy/Ida+rxyKsqdnQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, "node_modules/@ethereumjs/rlp": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-4.0.1.tgz", diff --git a/package.json b/package.json index 14a0ee9..1218fd1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@dignetwork/dig-sdk", - "version": "0.0.1-alpha.25", + "version": "0.0.1-alpha.26", "description": "", "type": "commonjs", "main": "./dist/index.js", @@ -25,6 +25,7 @@ "LICENSE" ], "dependencies": { + "@dignetwork/datalayer-driver": "^0.1.24", "bip39": "^3.1.0", "chia-bls": "^1.0.2", "chia-config-loader": "^1.0.1", diff --git a/src/DigNetwork/DigPeer.ts b/src/DigNetwork/DigPeer.ts index 9cf14a0..a78072f 100644 --- a/src/DigNetwork/DigPeer.ts +++ b/src/DigNetwork/DigPeer.ts @@ -195,7 +195,8 @@ export class DigPeer { public static sendEqualBulkPayments( walletName: string, addresses: string[], - totalAmount: bigint + totalAmount: bigint, + memo: string[] ): Promise { // Use a Set to ensure unique addresses const uniqueAddresses = Array.from(new Set(addresses)); @@ -213,6 +214,7 @@ export class DigPeer { (puzzleHash) => ({ puzzleHash, amount: amountPerPuzzleHash, + memo, }) ); @@ -241,7 +243,12 @@ export class DigPeer { walletName ); - const coinSpends = await sendXch(publicSyntheticKey, coins, outputs, totalFee); + const coinSpends = await sendXch( + publicSyntheticKey, + coins, + outputs, + totalFee + ); const sig = signCoinSpends( coinSpends, @@ -258,11 +265,40 @@ export class DigPeer { await FullNodePeer.waitForConfirmation(getCoinId(coins[0])); } - public async sendPayment(walletName: string, amount: bigint): Promise { + public async sendPayment( + walletName: string, + amount: bigint, + memo: string[] = [] + ): Promise { const paymentAddress = await this.contentServer.getPaymentAddress(); const paymentAddressPuzzleHash = addressToPuzzleHash(paymentAddress); - return DigPeer.sendBulkPayments(walletName, [ - { puzzleHash: paymentAddressPuzzleHash, amount }, - ]); + const output: { puzzleHash: Buffer; amount: bigint; memo: string[] } = { + puzzleHash: paymentAddressPuzzleHash, + amount, + memo, + }; + + return DigPeer.sendBulkPayments(walletName, [output]); + } + + public createPaymentHint(storeId: Buffer) { + // Ensure the input is a 32-byte buffer + if (!Buffer.isBuffer(storeId) || storeId.length !== 32) { + throw new Error("Invalid input. Must be a 32-byte buffer."); + } + + // Define the seed + const seed = "dig"; + + // Combine the seed and the original buffer + const combinedBuffer = Buffer.concat([Buffer.from(seed), storeId]); + + // Apply SHA-256 hash to the combined buffer + const hash = crypto.createHash("sha256"); + hash.update(combinedBuffer); + const transformedBuffer = hash.digest(); + + // Return the 32-byte hash as a hex string + return transformedBuffer.toString("hex"); } }