@leather.io/stacks 1.5.9 → 1.5.11

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/index.js CHANGED
@@ -147,6 +147,7 @@ import {
147
147
  makeUnsignedSTXTokenTransfer
148
148
  } from "@stacks/transactions";
149
149
  import BigNumber from "bignumber.js";
150
+ import { assertUnreachable } from "@leather.io/utils";
150
151
 
151
152
  // src/transactions/post-condition.utils.ts
152
153
  import { hexToBytes } from "@noble/hashes/utils";
@@ -156,7 +157,7 @@ function getPostConditionFromString(postCondition) {
156
157
  try {
157
158
  const reader = new BytesReader(hexToBytes(postCondition));
158
159
  return deserializePostCondition(reader);
159
- } catch (err) {
160
+ } catch {
160
161
  throw new Error("Not a serialized post condition");
161
162
  }
162
163
  }
@@ -212,15 +213,18 @@ function generateUnsignedStxTokenTransfer(options) {
212
213
  return makeUnsignedSTXTokenTransfer({ ...options, ...parsedOptions });
213
214
  }
214
215
  async function generateStacksUnsignedTransaction(options) {
215
- const isValid = isTransactionTypeSupported(options.txType);
216
- if (!isValid) throw new Error(`Invalid Transaction Type: ${options.txType}`);
217
- switch (options.txType) {
216
+ const { txType } = options;
217
+ const isValid = isTransactionTypeSupported(txType);
218
+ if (!isValid) throw new Error(`Invalid Transaction Type: ${txType}`);
219
+ switch (txType) {
218
220
  case "token_transfer" /* StxTokenTransfer */:
219
221
  return generateUnsignedStxTokenTransfer(options);
220
222
  case "contract_call" /* ContractCall */:
221
223
  return generateUnsignedContractCall(options);
222
224
  case "smart_contract" /* ContractDeploy */:
223
225
  return generateUnsignedContractDeploy(options);
226
+ default:
227
+ assertUnreachable(txType);
224
228
  }
225
229
  }
226
230
 
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/signer/signer.ts","../src/stacks.utils.ts","../src/transactions/generate-unsigned-transaction.ts","../src/transactions/post-condition.utils.ts","../src/transactions/transaction.types.ts","../src/message-signing.ts"],"sourcesContent":["import {\n AddressVersion,\n StacksTransaction,\n TransactionSigner,\n createStacksPrivateKey,\n createStacksPublicKey,\n publicKeyToAddress,\n} from '@stacks/transactions';\n\nimport {\n Signer,\n decomposeDescriptor,\n deriveRootKeychainFromMnemonic,\n extractKeyFromDescriptor,\n} from '@leather.io/crypto';\nimport { NetworkModes } from '@leather.io/models';\nimport { whenNetwork } from '@leather.io/utils';\n\nimport { deriveStxPrivateKey, extractStacksDerivationPathAccountIndex } from '../stacks.utils';\n\n// Warning: mutatitive. Ideally there would be a tx.clone() method\nexport function signStacksTransaction(tx: StacksTransaction, privateKey: string) {\n const signer = new TransactionSigner(tx);\n signer.signOrigin(createStacksPrivateKey(privateKey));\n return tx;\n}\n\nexport type StacksSignerFn = (tx: StacksTransaction) => Promise<StacksTransaction>;\n\nexport interface StacksSigner extends Signer {\n descriptor: string;\n keyOrigin: string;\n address: string;\n accountIndex: number;\n network: NetworkModes;\n sign: StacksSignerFn;\n}\n\nexport function createSignFnFromMnemonic(\n keyOrigin: string,\n getMnemonicFn: () => Promise<{ mnemonic: string; passphrase?: string }>\n) {\n return async (tx: StacksTransaction) => {\n const { mnemonic, passphrase } = await getMnemonicFn();\n const keychain = await deriveRootKeychainFromMnemonic(mnemonic, passphrase);\n const privateKey = deriveStxPrivateKey({\n keychain,\n index: extractStacksDerivationPathAccountIndex(keyOrigin),\n });\n return signStacksTransaction(tx, privateKey);\n };\n}\n\ninterface InitalizeStacksSignerArgs {\n descriptor: string;\n network: NetworkModes;\n signFn: StacksSignerFn;\n}\nexport function initalizeStacksSigner(args: InitalizeStacksSignerArgs): StacksSigner {\n const { descriptor, network, signFn } = args;\n\n const publicKey = createStacksPublicKey(extractKeyFromDescriptor(descriptor));\n\n return {\n ...decomposeDescriptor(descriptor),\n // here we overwrite the accountIndex with the derivation path account index for stx\n accountIndex: extractStacksDerivationPathAccountIndex(descriptor),\n publicKey: publicKey.data,\n network,\n address: publicKeyToAddress(\n whenNetwork(network)({\n mainnet: AddressVersion.MainnetSingleSig,\n testnet: AddressVersion.TestnetSingleSig,\n }),\n publicKey\n ),\n sign: signFn,\n };\n}\n","import { bytesToHex } from '@noble/hashes/utils';\nimport { HDKey } from '@scure/bip32';\nimport { compressPrivateKey } from '@stacks/encryption';\nimport { ChainID, createStacksPrivateKey, getPublicKey } from '@stacks/transactions';\n\nimport {\n DerivationPathDepth,\n createDescriptor,\n createKeyOriginPath,\n extractAddressIndexFromPath,\n} from '@leather.io/crypto';\nimport type { NetworkModes } from '@leather.io/models';\nimport { assertIsTruthy, isString, toHexString } from '@leather.io/utils';\n\nexport const stxDerivationWithAccount = `m/44'/5757'/0'/0/{account}`;\n\nexport function makeAccountIndexDerivationPathFactory(derivationPath: string) {\n return (account: number) => derivationPath.replace('{account}', account.toString());\n}\n\nexport function extractStacksDerivationPathAccountIndex(path: string) {\n if (!path.includes('5757')) throw new Error('Not a valid Stacks derivation path: ' + path);\n return extractAddressIndexFromPath(path);\n}\n\n/**\n * Stacks accounts always use the same derivation path, regardless of network\n */\nexport const makeStxDerivationPath =\n makeAccountIndexDerivationPathFactory(stxDerivationWithAccount);\n\nexport function stacksChainIdToCoreNetworkMode(chainId: ChainID): NetworkModes {\n return whenStacksChainId(chainId)({ [ChainID.Mainnet]: 'mainnet', [ChainID.Testnet]: 'testnet' });\n}\n\ninterface WhenStacksChainIdMap<T> {\n [ChainID.Mainnet]: T;\n [ChainID.Testnet]: T;\n}\nexport function whenStacksChainId(chainId: ChainID) {\n return <T>(chainIdMap: WhenStacksChainIdMap<T>): T => chainIdMap[chainId];\n}\n\n// From `@stacks/wallet-sdk` package we are trying not to use\nexport function deriveStxPrivateKey({ keychain, index }: { keychain: HDKey; index: number }) {\n if (keychain.depth !== DerivationPathDepth.Root) throw new Error('Root keychain must be depth 0');\n const accountKeychain = keychain.derive(makeStxDerivationPath(index));\n assertIsTruthy(accountKeychain.privateKey);\n return bytesToHex(compressPrivateKey(accountKeychain.privateKey));\n}\n\nexport function deriveStxPublicKey({ keychain, index }: { keychain: HDKey; index: number }) {\n return getPublicKey(createStacksPrivateKey(deriveStxPrivateKey({ keychain, index })));\n}\n\nexport function stacksRootKeychainToAccountDescriptor(keychain: HDKey, accountIndex: number) {\n const fingerprint = toHexString(keychain.fingerprint);\n const publicKey = deriveStxPublicKey({ keychain, index: accountIndex });\n return createDescriptor(\n createKeyOriginPath(fingerprint, makeStxDerivationPath(accountIndex)),\n bytesToHex(publicKey.data)\n );\n}\n\nexport function getStacksBurnAddress(chainId: ChainID): string {\n switch (chainId) {\n case ChainID.Mainnet:\n return 'SP00000000000003SCNSJTCSE62ZF4MSE';\n case ChainID.Testnet:\n default:\n return 'ST000000000000000000002AMW42H';\n }\n}\n\nexport function cleanHex(hexWithMaybePrefix: string): string {\n if (!isString(hexWithMaybePrefix)) return hexWithMaybePrefix;\n return hexWithMaybePrefix.startsWith('0x')\n ? hexWithMaybePrefix.replace('0x', '')\n : hexWithMaybePrefix;\n}\n\n/**\n * Gets the contract name of a fully qualified name of an asset.\n *\n * @param contractId - the source string: [principal].[contract-name] or [principal].[contract-name]::[asset-name]\n */\nexport function getStacksContractName(contractId: string): string {\n if (contractId.includes('.')) {\n const parts = contractId?.split('.');\n if (contractId.includes('::')) {\n return parts[1].split('::')[0];\n }\n return parts[1];\n }\n return contractId;\n}\n\n/**\n * Gets the asset name from a a fully qualified name of an asset.\n *\n * @param contractId - the fully qualified name of the asset: [principal].[contract-name]::[asset-name]\n */\nexport function getStacksContractAssetName(contractId: string): string {\n if (!contractId.includes('::')) return contractId;\n return contractId.split('::')[1];\n}\n\n/**\n * Gets the parts that make up a fully qualified name of an asset.\n *\n * @param contractId - the fully qualified name of the asset: [principal].[contract-name]::[asset-name]\n */\nexport function getStacksContractIdStringParts(contractId: string): {\n contractAddress: string;\n contractAssetName: string;\n contractName: string;\n} {\n if (!contractId.includes('.') || !contractId.includes('::')) {\n return {\n contractAddress: contractId,\n contractAssetName: contractId,\n contractName: contractId,\n };\n }\n\n const contractAddress = contractId.split('.')[0];\n const contractAssetName = getStacksContractAssetName(contractId);\n const contractName = getStacksContractName(contractId);\n\n return {\n contractAddress,\n contractAssetName,\n contractName,\n };\n}\n","import { hexToBytes } from '@noble/hashes/utils';\nimport {\n deserializeCV,\n makeUnsignedContractCall,\n makeUnsignedContractDeploy,\n makeUnsignedSTXTokenTransfer,\n} from '@stacks/transactions';\nimport BigNumber from 'bignumber.js';\n\nimport { cleanHex } from '../stacks.utils';\nimport { getPostConditions } from './post-condition.utils';\nimport {\n StacksUnsignedContractCallOptions,\n StacksUnsignedContractDeployOptions,\n StacksUnsignedTokenTransferOptions,\n StacksUnsignedTransactionOptions,\n TransactionTypes,\n isTransactionTypeSupported,\n} from './transaction.types';\n\nexport function initNonce(nonce: number | string) {\n return new BigNumber(nonce, 10);\n}\n\nexport function generateUnsignedContractCall(options: StacksUnsignedContractCallOptions) {\n const { fee, functionArgs, nonce, postConditions } = options;\n\n const fnArgs = functionArgs.map(arg => deserializeCV(hexToBytes(cleanHex(arg))));\n\n const parsedOptions = {\n fee: fee.amount.toString(),\n functionArgs: fnArgs,\n nonce: initNonce(nonce).toString(),\n postConditions: getPostConditions(postConditions),\n };\n\n return makeUnsignedContractCall({ ...options, ...parsedOptions });\n}\n\nexport function generateUnsignedContractDeploy(options: StacksUnsignedContractDeployOptions) {\n const { fee, nonce, postConditions } = options;\n\n const parsedOptions = {\n fee: fee.amount.toString(),\n nonce: initNonce(nonce).toString(),\n postConditions: getPostConditions(postConditions),\n };\n\n return makeUnsignedContractDeploy({ ...options, ...parsedOptions });\n}\n\nexport function generateUnsignedStxTokenTransfer(options: StacksUnsignedTokenTransferOptions) {\n const { amount, fee, nonce } = options;\n\n const parsedOptions = {\n amount: amount.amount.toString(),\n fee: fee.amount.toString(),\n nonce: initNonce(nonce).toString(),\n };\n\n return makeUnsignedSTXTokenTransfer({ ...options, ...parsedOptions });\n}\n\nexport async function generateStacksUnsignedTransaction(options: StacksUnsignedTransactionOptions) {\n const isValid = isTransactionTypeSupported(options.txType);\n\n if (!isValid) throw new Error(`Invalid Transaction Type: ${options.txType}`);\n\n switch (options.txType) {\n case TransactionTypes.StxTokenTransfer:\n return generateUnsignedStxTokenTransfer(options);\n case TransactionTypes.ContractCall:\n return generateUnsignedContractCall(options);\n case TransactionTypes.ContractDeploy:\n return generateUnsignedContractDeploy(options);\n }\n}\n","import { hexToBytes } from '@noble/hashes/utils';\nimport { BytesReader, PostCondition, deserializePostCondition } from '@stacks/transactions';\n\nimport { isString } from '@leather.io/utils';\n\nexport function getPostConditionFromString(postCondition: string): PostCondition {\n try {\n const reader = new BytesReader(hexToBytes(postCondition));\n return deserializePostCondition(reader);\n } catch (err) {\n throw new Error('Not a serialized post condition');\n }\n}\n\nexport function getPostCondition(postCondition: string | PostCondition): PostCondition {\n return isString(postCondition) ? getPostConditionFromString(postCondition) : postCondition;\n}\n\nexport function getPostConditions(\n postConditions?: (string | PostCondition)[]\n): PostCondition[] | undefined {\n return postConditions?.map(getPostCondition);\n}\n","import {\n UnsignedContractCallOptions,\n UnsignedContractDeployOptions,\n UnsignedTokenTransferOptions,\n} from '@stacks/transactions';\n\nimport { Money, ReplaceTypes } from '@leather.io/models';\n\nexport enum TransactionTypes {\n ContractCall = 'contract_call',\n ContractDeploy = 'smart_contract',\n StxTokenTransfer = 'token_transfer',\n}\n\nexport function isTransactionTypeSupported(txType: TransactionTypes) {\n return (\n txType === TransactionTypes.ContractCall ||\n txType === TransactionTypes.ContractDeploy ||\n txType === TransactionTypes.StxTokenTransfer\n );\n}\n\nexport type StacksUnsignedContractCallOptions = ReplaceTypes<\n UnsignedContractCallOptions,\n {\n fee: Money;\n functionArgs: string[];\n nonce: number | string;\n }\n> & { txType: TransactionTypes.ContractCall };\n\nexport type StacksUnsignedContractDeployOptions = ReplaceTypes<\n UnsignedContractDeployOptions,\n {\n fee: Money;\n nonce: number | string;\n }\n> & { txType: TransactionTypes.ContractDeploy };\n\nexport type StacksUnsignedTokenTransferOptions = ReplaceTypes<\n UnsignedTokenTransferOptions,\n {\n amount: Money;\n fee: Money;\n nonce: number | string;\n }\n> & { txType: TransactionTypes.StxTokenTransfer };\n\nexport type StacksUnsignedTransactionOptions =\n | StacksUnsignedContractCallOptions\n | StacksUnsignedContractDeployOptions\n | StacksUnsignedTokenTransferOptions;\n","import { bytesToHex } from '@noble/hashes/utils';\nimport { hashMessage } from '@stacks/encryption';\nimport {\n ClarityValue,\n StacksPrivateKey,\n getPublicKey,\n publicKeyToString,\n signMessageHashRsv,\n signStructuredData,\n} from '@stacks/transactions';\n\ninterface SignatureData {\n signature: string;\n publicKey: string;\n}\n\nexport function signMessage(message: string, privateKey: StacksPrivateKey): SignatureData {\n const hash = hashMessage(message);\n return {\n signature: signMessageHashRsv({ privateKey, messageHash: bytesToHex(hash) }).data,\n publicKey: publicKeyToString(getPublicKey(privateKey)),\n };\n}\n\nexport function signStructuredDataMessage(\n message: ClarityValue,\n domain: ClarityValue,\n privateKey: StacksPrivateKey\n): SignatureData {\n const signature = signStructuredData({\n message,\n domain,\n privateKey,\n }).data;\n\n return {\n signature,\n publicKey: publicKeyToString(getPublicKey(privateKey)),\n };\n}\n"],"mappings":"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","names":["createStacksPrivateKey","createStacksPrivateKey","hexToBytes","isString","TransactionTypes","hexToBytes","bytesToHex","getPublicKey"]}
1
+ {"version":3,"sources":["../src/signer/signer.ts","../src/stacks.utils.ts","../src/transactions/generate-unsigned-transaction.ts","../src/transactions/post-condition.utils.ts","../src/transactions/transaction.types.ts","../src/message-signing.ts"],"sourcesContent":["import {\n AddressVersion,\n StacksTransaction,\n TransactionSigner,\n createStacksPrivateKey,\n createStacksPublicKey,\n publicKeyToAddress,\n} from '@stacks/transactions';\n\nimport {\n Signer,\n decomposeDescriptor,\n deriveRootKeychainFromMnemonic,\n extractKeyFromDescriptor,\n} from '@leather.io/crypto';\nimport { NetworkModes } from '@leather.io/models';\nimport { whenNetwork } from '@leather.io/utils';\n\nimport { deriveStxPrivateKey, extractStacksDerivationPathAccountIndex } from '../stacks.utils';\n\n// Warning: mutatitive. Ideally there would be a tx.clone() method\nexport function signStacksTransaction(tx: StacksTransaction, privateKey: string) {\n const signer = new TransactionSigner(tx);\n signer.signOrigin(createStacksPrivateKey(privateKey));\n return tx;\n}\n\nexport type StacksSignerFn = (tx: StacksTransaction) => Promise<StacksTransaction>;\n\nexport interface StacksSigner extends Signer {\n descriptor: string;\n keyOrigin: string;\n address: string;\n accountIndex: number;\n network: NetworkModes;\n sign: StacksSignerFn;\n}\n\nexport function createSignFnFromMnemonic(\n keyOrigin: string,\n getMnemonicFn: () => Promise<{ mnemonic: string; passphrase?: string }>\n) {\n return async (tx: StacksTransaction) => {\n const { mnemonic, passphrase } = await getMnemonicFn();\n const keychain = await deriveRootKeychainFromMnemonic(mnemonic, passphrase);\n const privateKey = deriveStxPrivateKey({\n keychain,\n index: extractStacksDerivationPathAccountIndex(keyOrigin),\n });\n return signStacksTransaction(tx, privateKey);\n };\n}\n\ninterface InitalizeStacksSignerArgs {\n descriptor: string;\n network: NetworkModes;\n signFn: StacksSignerFn;\n}\nexport function initalizeStacksSigner(args: InitalizeStacksSignerArgs): StacksSigner {\n const { descriptor, network, signFn } = args;\n\n const publicKey = createStacksPublicKey(extractKeyFromDescriptor(descriptor));\n\n return {\n ...decomposeDescriptor(descriptor),\n // here we overwrite the accountIndex with the derivation path account index for stx\n accountIndex: extractStacksDerivationPathAccountIndex(descriptor),\n publicKey: publicKey.data,\n network,\n address: publicKeyToAddress(\n whenNetwork(network)({\n mainnet: AddressVersion.MainnetSingleSig,\n testnet: AddressVersion.TestnetSingleSig,\n }),\n publicKey\n ),\n sign: signFn,\n };\n}\n","import { bytesToHex } from '@noble/hashes/utils';\nimport { HDKey } from '@scure/bip32';\nimport { compressPrivateKey } from '@stacks/encryption';\nimport { ChainID, createStacksPrivateKey, getPublicKey } from '@stacks/transactions';\n\nimport {\n DerivationPathDepth,\n createDescriptor,\n createKeyOriginPath,\n extractAddressIndexFromPath,\n} from '@leather.io/crypto';\nimport type { NetworkModes } from '@leather.io/models';\nimport { assertIsTruthy, isString, toHexString } from '@leather.io/utils';\n\nexport const stxDerivationWithAccount = `m/44'/5757'/0'/0/{account}`;\n\nexport function makeAccountIndexDerivationPathFactory(derivationPath: string) {\n return (account: number) => derivationPath.replace('{account}', account.toString());\n}\n\nexport function extractStacksDerivationPathAccountIndex(path: string) {\n if (!path.includes('5757')) throw new Error('Not a valid Stacks derivation path: ' + path);\n return extractAddressIndexFromPath(path);\n}\n\n/**\n * Stacks accounts always use the same derivation path, regardless of network\n */\nexport const makeStxDerivationPath =\n makeAccountIndexDerivationPathFactory(stxDerivationWithAccount);\n\nexport function stacksChainIdToCoreNetworkMode(chainId: ChainID): NetworkModes {\n return whenStacksChainId(chainId)({ [ChainID.Mainnet]: 'mainnet', [ChainID.Testnet]: 'testnet' });\n}\n\ninterface WhenStacksChainIdMap<T> {\n [ChainID.Mainnet]: T;\n [ChainID.Testnet]: T;\n}\nexport function whenStacksChainId(chainId: ChainID) {\n return <T>(chainIdMap: WhenStacksChainIdMap<T>): T => chainIdMap[chainId];\n}\n\n// From `@stacks/wallet-sdk` package we are trying not to use\nexport function deriveStxPrivateKey({ keychain, index }: { keychain: HDKey; index: number }) {\n if (keychain.depth !== DerivationPathDepth.Root) throw new Error('Root keychain must be depth 0');\n const accountKeychain = keychain.derive(makeStxDerivationPath(index));\n assertIsTruthy(accountKeychain.privateKey);\n return bytesToHex(compressPrivateKey(accountKeychain.privateKey));\n}\n\nexport function deriveStxPublicKey({ keychain, index }: { keychain: HDKey; index: number }) {\n return getPublicKey(createStacksPrivateKey(deriveStxPrivateKey({ keychain, index })));\n}\n\nexport function stacksRootKeychainToAccountDescriptor(keychain: HDKey, accountIndex: number) {\n const fingerprint = toHexString(keychain.fingerprint);\n const publicKey = deriveStxPublicKey({ keychain, index: accountIndex });\n return createDescriptor(\n createKeyOriginPath(fingerprint, makeStxDerivationPath(accountIndex)),\n bytesToHex(publicKey.data)\n );\n}\n\nexport function getStacksBurnAddress(chainId: ChainID): string {\n switch (chainId) {\n case ChainID.Mainnet:\n return 'SP00000000000003SCNSJTCSE62ZF4MSE';\n case ChainID.Testnet:\n default:\n return 'ST000000000000000000002AMW42H';\n }\n}\n\nexport function cleanHex(hexWithMaybePrefix: string): string {\n if (!isString(hexWithMaybePrefix)) return hexWithMaybePrefix;\n return hexWithMaybePrefix.startsWith('0x')\n ? hexWithMaybePrefix.replace('0x', '')\n : hexWithMaybePrefix;\n}\n\n/**\n * Gets the contract name of a fully qualified name of an asset.\n *\n * @param contractId - the source string: [principal].[contract-name] or [principal].[contract-name]::[asset-name]\n */\nexport function getStacksContractName(contractId: string): string {\n if (contractId.includes('.')) {\n const parts = contractId?.split('.');\n if (contractId.includes('::')) {\n return parts[1].split('::')[0];\n }\n return parts[1];\n }\n return contractId;\n}\n\n/**\n * Gets the asset name from a a fully qualified name of an asset.\n *\n * @param contractId - the fully qualified name of the asset: [principal].[contract-name]::[asset-name]\n */\nexport function getStacksContractAssetName(contractId: string): string {\n if (!contractId.includes('::')) return contractId;\n return contractId.split('::')[1];\n}\n\n/**\n * Gets the parts that make up a fully qualified name of an asset.\n *\n * @param contractId - the fully qualified name of the asset: [principal].[contract-name]::[asset-name]\n */\nexport function getStacksContractIdStringParts(contractId: string): {\n contractAddress: string;\n contractAssetName: string;\n contractName: string;\n} {\n if (!contractId.includes('.') || !contractId.includes('::')) {\n return {\n contractAddress: contractId,\n contractAssetName: contractId,\n contractName: contractId,\n };\n }\n\n const contractAddress = contractId.split('.')[0];\n const contractAssetName = getStacksContractAssetName(contractId);\n const contractName = getStacksContractName(contractId);\n\n return {\n contractAddress,\n contractAssetName,\n contractName,\n };\n}\n","import { hexToBytes } from '@noble/hashes/utils';\nimport {\n deserializeCV,\n makeUnsignedContractCall,\n makeUnsignedContractDeploy,\n makeUnsignedSTXTokenTransfer,\n} from '@stacks/transactions';\nimport BigNumber from 'bignumber.js';\n\nimport { assertUnreachable } from '@leather.io/utils';\n\nimport { cleanHex } from '../stacks.utils';\nimport { getPostConditions } from './post-condition.utils';\nimport {\n StacksUnsignedContractCallOptions,\n StacksUnsignedContractDeployOptions,\n StacksUnsignedTokenTransferOptions,\n StacksUnsignedTransactionOptions,\n TransactionTypes,\n isTransactionTypeSupported,\n} from './transaction.types';\n\nexport function initNonce(nonce: number | string) {\n return new BigNumber(nonce, 10);\n}\n\nexport function generateUnsignedContractCall(options: StacksUnsignedContractCallOptions) {\n const { fee, functionArgs, nonce, postConditions } = options;\n\n const fnArgs = functionArgs.map(arg => deserializeCV(hexToBytes(cleanHex(arg))));\n\n const parsedOptions = {\n fee: fee.amount.toString(),\n functionArgs: fnArgs,\n nonce: initNonce(nonce).toString(),\n postConditions: getPostConditions(postConditions),\n };\n\n return makeUnsignedContractCall({ ...options, ...parsedOptions });\n}\n\nexport function generateUnsignedContractDeploy(options: StacksUnsignedContractDeployOptions) {\n const { fee, nonce, postConditions } = options;\n\n const parsedOptions = {\n fee: fee.amount.toString(),\n nonce: initNonce(nonce).toString(),\n postConditions: getPostConditions(postConditions),\n };\n\n return makeUnsignedContractDeploy({ ...options, ...parsedOptions });\n}\n\nexport function generateUnsignedStxTokenTransfer(options: StacksUnsignedTokenTransferOptions) {\n const { amount, fee, nonce } = options;\n\n const parsedOptions = {\n amount: amount.amount.toString(),\n fee: fee.amount.toString(),\n nonce: initNonce(nonce).toString(),\n };\n\n return makeUnsignedSTXTokenTransfer({ ...options, ...parsedOptions });\n}\n\nexport async function generateStacksUnsignedTransaction(options: StacksUnsignedTransactionOptions) {\n const { txType } = options;\n\n const isValid = isTransactionTypeSupported(txType);\n\n if (!isValid) throw new Error(`Invalid Transaction Type: ${txType}`);\n\n switch (txType) {\n case TransactionTypes.StxTokenTransfer:\n return generateUnsignedStxTokenTransfer(options);\n case TransactionTypes.ContractCall:\n return generateUnsignedContractCall(options);\n case TransactionTypes.ContractDeploy:\n return generateUnsignedContractDeploy(options);\n default:\n assertUnreachable(txType);\n }\n}\n","import { hexToBytes } from '@noble/hashes/utils';\nimport { BytesReader, PostCondition, deserializePostCondition } from '@stacks/transactions';\n\nimport { isString } from '@leather.io/utils';\n\nexport function getPostConditionFromString(postCondition: string): PostCondition {\n try {\n const reader = new BytesReader(hexToBytes(postCondition));\n return deserializePostCondition(reader);\n } catch {\n throw new Error('Not a serialized post condition');\n }\n}\n\nexport function getPostCondition(postCondition: string | PostCondition): PostCondition {\n return isString(postCondition) ? getPostConditionFromString(postCondition) : postCondition;\n}\n\nexport function getPostConditions(\n postConditions?: (string | PostCondition)[]\n): PostCondition[] | undefined {\n return postConditions?.map(getPostCondition);\n}\n","import {\n UnsignedContractCallOptions,\n UnsignedContractDeployOptions,\n UnsignedTokenTransferOptions,\n} from '@stacks/transactions';\n\nimport { Money, ReplaceTypes } from '@leather.io/models';\n\nexport enum TransactionTypes {\n ContractCall = 'contract_call',\n ContractDeploy = 'smart_contract',\n StxTokenTransfer = 'token_transfer',\n}\n\nexport function isTransactionTypeSupported(txType: TransactionTypes) {\n return (\n txType === TransactionTypes.ContractCall ||\n txType === TransactionTypes.ContractDeploy ||\n txType === TransactionTypes.StxTokenTransfer\n );\n}\n\nexport type StacksUnsignedContractCallOptions = ReplaceTypes<\n UnsignedContractCallOptions,\n {\n fee: Money;\n functionArgs: string[];\n nonce: number | string;\n }\n> & { txType: TransactionTypes.ContractCall };\n\nexport type StacksUnsignedContractDeployOptions = ReplaceTypes<\n UnsignedContractDeployOptions,\n {\n fee: Money;\n nonce: number | string;\n }\n> & { txType: TransactionTypes.ContractDeploy };\n\nexport type StacksUnsignedTokenTransferOptions = ReplaceTypes<\n UnsignedTokenTransferOptions,\n {\n amount: Money;\n fee: Money;\n nonce: number | string;\n }\n> & { txType: TransactionTypes.StxTokenTransfer };\n\nexport type StacksUnsignedTransactionOptions =\n | StacksUnsignedContractCallOptions\n | StacksUnsignedContractDeployOptions\n | StacksUnsignedTokenTransferOptions;\n","import { bytesToHex } from '@noble/hashes/utils';\nimport { hashMessage } from '@stacks/encryption';\nimport {\n ClarityValue,\n StacksPrivateKey,\n getPublicKey,\n publicKeyToString,\n signMessageHashRsv,\n signStructuredData,\n} from '@stacks/transactions';\n\ninterface SignatureData {\n signature: string;\n publicKey: string;\n}\n\nexport function signMessage(message: string, privateKey: StacksPrivateKey): SignatureData {\n const hash = hashMessage(message);\n return {\n signature: signMessageHashRsv({ privateKey, messageHash: bytesToHex(hash) }).data,\n publicKey: publicKeyToString(getPublicKey(privateKey)),\n };\n}\n\nexport function signStructuredDataMessage(\n message: ClarityValue,\n domain: ClarityValue,\n privateKey: StacksPrivateKey\n): SignatureData {\n const signature = signStructuredData({\n message,\n domain,\n privateKey,\n }).data;\n\n return {\n signature,\n publicKey: publicKeyToString(getPublicKey(privateKey)),\n };\n}\n"],"mappings":"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","names":["createStacksPrivateKey","createStacksPrivateKey","hexToBytes","isString","TransactionTypes","hexToBytes","bytesToHex","getPublicKey"]}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@leather.io/stacks",
3
3
  "author": "leather.io",
4
4
  "description": "Stacks package for Leather",
5
- "version": "1.5.9",
5
+ "version": "1.5.11",
6
6
  "license": "MIT",
7
7
  "type": "module",
8
8
  "exports": {
@@ -16,10 +16,10 @@
16
16
  "@stacks/stacks-blockchain-api-types": "7.8.2",
17
17
  "@stacks/transactions": "6.17.0",
18
18
  "bignumber.js": "9.1.2",
19
- "@leather.io/constants": "0.15.1",
20
- "@leather.io/crypto": "1.6.24",
21
- "@leather.io/utils": "0.22.4",
22
- "@leather.io/models": "0.24.1"
19
+ "@leather.io/constants": "0.15.3",
20
+ "@leather.io/crypto": "1.6.26",
21
+ "@leather.io/models": "0.24.3",
22
+ "@leather.io/utils": "0.22.6"
23
23
  },
24
24
  "devDependencies": {
25
25
  "tsup": "8.1.0",