@leather.io/stacks 1.18.0 → 1.19.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/index.d.ts +13 -2
- package/dist/index.js +50 -0
- package/dist/index.js.map +1 -1
- package/package.json +5 -5
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as _stacks_common from '@stacks/common';
|
|
2
2
|
import { PrivateKey } from '@stacks/common';
|
|
3
3
|
import * as _stacks_transactions from '@stacks/transactions';
|
|
4
|
-
import { ClarityValue, StacksTransactionWire, AssetString, ContractIdString, UnsignedContractCallOptions, UnsignedContractDeployOptions, UnsignedTokenTransferOptions, TxBroadcastResultRejected, PostConditionWire, PostCondition, ContractCallPayload, ClarityAbi } from '@stacks/transactions';
|
|
4
|
+
import { ClarityValue, StacksTransactionWire, AssetString, ContractIdString, UnsignedContractCallOptions, UnsignedContractDeployOptions, UnsignedTokenTransferOptions, TxBroadcastResultRejected, PostConditionWire, PostCondition, ContractCallPayload, ClarityAbi, TupleCV, ResponseOkCV, ResponseErrorCV, UIntCV, ListCV, PrincipalCV, NoneCV, SomeCV } from '@stacks/transactions';
|
|
5
5
|
import { Signer } from '@leather.io/crypto';
|
|
6
6
|
import { NetworkModes, Money, ReplaceTypes, ChainId as ChainId$1, TransactionErrorKey } from '@leather.io/models';
|
|
7
7
|
import { HDKey } from '@scure/bip32';
|
|
@@ -289,4 +289,15 @@ declare function getSerializedUnsignedStacksTxPayload(transaction: StacksTransac
|
|
|
289
289
|
|
|
290
290
|
declare function generateRandomStacksAddress(): string;
|
|
291
291
|
|
|
292
|
-
|
|
292
|
+
declare function parseClarityUintResponse(response: ClarityValue): bigint;
|
|
293
|
+
declare function isClarityTuple(cv: ClarityValue): cv is TupleCV;
|
|
294
|
+
declare function isClarityResponseOk(cv: ClarityValue): cv is ResponseOkCV;
|
|
295
|
+
declare function isClarityResponseError(cv: ClarityValue): cv is ResponseErrorCV;
|
|
296
|
+
declare function isClarityUInt(cv: ClarityValue): cv is UIntCV;
|
|
297
|
+
declare function isClarityList(cv: ClarityValue): cv is ListCV;
|
|
298
|
+
declare function isClarityPrincipal(cv: ClarityValue): cv is PrincipalCV;
|
|
299
|
+
declare function isClarityOptionalNone(cv: ClarityValue): cv is NoneCV;
|
|
300
|
+
declare function isClarityOptionalSome(cv: ClarityValue): cv is SomeCV;
|
|
301
|
+
declare function getClarityPrincipal(cv: PrincipalCV): string;
|
|
302
|
+
|
|
303
|
+
export { type SignatureData, StacksError, type StacksErrorKey, type StacksSignMessageFn, type StacksSignStructuredMessageFn, type StacksSigner, type StacksSignerFn, type StacksUnsignedContractCallOptions, type StacksUnsignedContractDeployOptions, type StacksUnsignedTokenTransferOptions, type StacksUnsignedTransactionOptions, TEST_ACCOUNT_1_STX_ADDRESS, TEST_ACCOUNT_1_STX_ADDRESS_SM, TEST_ACCOUNT_2_STX_ADDRESS, TEST_TESTNET_ACCOUNT_2_STX_ADDRESS, TEST_TESTNET_ACCOUNT_2_STX_ADDRESS_SN, TransactionTypes, clarityContractSchema, cleanHex, contractPrincipalSchema, createSignFnFromMnemonic, createSignMessageFnFromMnemonic, createSignStructuredDataMessageFnFromMnemonic, createSip10FnArgs, createSip9FnArgs, createTransferSip10TxHex, deriveStxPrivateKey, deriveStxPublicKey, ensurePostConditionWireFormat, extractStacksDerivationPathAccountIndex, formatAssetString, formatContractId, formatContractIdString, generateRandomStacksAddress, generateStacksUnsignedTransaction, getClarityPrincipal, getErrorMessage, getEstimatedUnsignedStacksTxByteLength, getPostCondition, getPostConditionFromString, getPostConditions, getPrincipalFromAssetString, getSerializedUnsignedStacksTxPayload, getSip10TransferAmount, getSip10TransferRecipient, getSip9TransferRecipient, getStacksAssetStringParts, getStacksBurnAddress, getStacksContractAssetName, getStacksContractName, getUnsignedContractCallParsedOptions, getUnsignedContractDeployParsedOptions, getUnsignedStxTokenTransferParsedOptions, initNonce, initalizeStacksSigner, isClarityList, isClarityOptionalNone, isClarityOptionalSome, isClarityPrincipal, isClarityResponseError, isClarityResponseOk, isClarityTuple, isClarityUInt, isSip10Transfer, isSip10TransferContactCall, isSip9Transfer, isSip9TransferContactCall, isTransactionTypeSupported, isValidAddressChain, isValidContractLength, isValidStacksAddress, isValidStacksMemo, isValidStacksTransaction, makeAccountIndexDerivationPathFactory, makeStxDerivationPath, parseClarityUintResponse, principalSchema, signMessage, signStacksTransaction, signStructuredDataMessage, stacksChainIdToCoreNetworkMode, stacksMemoSchema, stacksRootKeychainToAccountDescriptor, standardPrincipalSchema, stxDerivationWithAccount, validatePayerNotRecipient, whenStacksChainId };
|
package/dist/index.js
CHANGED
|
@@ -704,6 +704,46 @@ function generateRandomStacksAddress() {
|
|
|
704
704
|
const randomAddress = getAddressFromPrivateKey(privateKeyString);
|
|
705
705
|
return randomAddress;
|
|
706
706
|
}
|
|
707
|
+
|
|
708
|
+
// src/clarity.ts
|
|
709
|
+
import {
|
|
710
|
+
ClarityType as ClarityType3
|
|
711
|
+
} from "@stacks/transactions";
|
|
712
|
+
function parseClarityUintResponse(response) {
|
|
713
|
+
if (response.type === ClarityType3.ResponseOk && response.value.type === ClarityType3.UInt) {
|
|
714
|
+
return BigInt(response.value.value);
|
|
715
|
+
} else if (response.type === ClarityType3.UInt) {
|
|
716
|
+
return BigInt(response.value);
|
|
717
|
+
}
|
|
718
|
+
throw new Error("Invalid Clarity response format");
|
|
719
|
+
}
|
|
720
|
+
function isClarityTuple(cv) {
|
|
721
|
+
return cv.type === ClarityType3.Tuple;
|
|
722
|
+
}
|
|
723
|
+
function isClarityResponseOk(cv) {
|
|
724
|
+
return cv.type === ClarityType3.ResponseOk;
|
|
725
|
+
}
|
|
726
|
+
function isClarityResponseError(cv) {
|
|
727
|
+
return cv.type === ClarityType3.ResponseErr;
|
|
728
|
+
}
|
|
729
|
+
function isClarityUInt(cv) {
|
|
730
|
+
return cv.type === ClarityType3.UInt;
|
|
731
|
+
}
|
|
732
|
+
function isClarityList(cv) {
|
|
733
|
+
return cv.type === ClarityType3.List;
|
|
734
|
+
}
|
|
735
|
+
function isClarityPrincipal(cv) {
|
|
736
|
+
return cv.type === ClarityType3.PrincipalStandard || cv.type === ClarityType3.PrincipalContract;
|
|
737
|
+
}
|
|
738
|
+
function isClarityOptionalNone(cv) {
|
|
739
|
+
return cv.type === ClarityType3.OptionalNone;
|
|
740
|
+
}
|
|
741
|
+
function isClarityOptionalSome(cv) {
|
|
742
|
+
return cv.type === ClarityType3.OptionalSome;
|
|
743
|
+
}
|
|
744
|
+
function getClarityPrincipal(cv) {
|
|
745
|
+
return cv.value;
|
|
746
|
+
}
|
|
707
747
|
export {
|
|
708
748
|
StacksError,
|
|
709
749
|
TEST_ACCOUNT_1_STX_ADDRESS,
|
|
@@ -730,6 +770,7 @@ export {
|
|
|
730
770
|
formatContractIdString,
|
|
731
771
|
generateRandomStacksAddress,
|
|
732
772
|
generateStacksUnsignedTransaction,
|
|
773
|
+
getClarityPrincipal,
|
|
733
774
|
getErrorMessage,
|
|
734
775
|
getEstimatedUnsignedStacksTxByteLength,
|
|
735
776
|
getPostCondition,
|
|
@@ -749,6 +790,14 @@ export {
|
|
|
749
790
|
getUnsignedStxTokenTransferParsedOptions,
|
|
750
791
|
initNonce,
|
|
751
792
|
initalizeStacksSigner,
|
|
793
|
+
isClarityList,
|
|
794
|
+
isClarityOptionalNone,
|
|
795
|
+
isClarityOptionalSome,
|
|
796
|
+
isClarityPrincipal,
|
|
797
|
+
isClarityResponseError,
|
|
798
|
+
isClarityResponseOk,
|
|
799
|
+
isClarityTuple,
|
|
800
|
+
isClarityUInt,
|
|
752
801
|
isSip10Transfer,
|
|
753
802
|
isSip10TransferContactCall,
|
|
754
803
|
isSip9Transfer,
|
|
@@ -761,6 +810,7 @@ export {
|
|
|
761
810
|
isValidStacksTransaction,
|
|
762
811
|
makeAccountIndexDerivationPathFactory,
|
|
763
812
|
makeStxDerivationPath,
|
|
813
|
+
parseClarityUintResponse,
|
|
764
814
|
principalSchema,
|
|
765
815
|
signMessage,
|
|
766
816
|
signStacksTransaction,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/message-signing.ts","../src/mocks/mocks.ts","../src/signer/signer.ts","../src/stacks.utils.ts","../src/transactions/create-tx-hex.ts","../src/transactions/generate-unsigned-transaction.ts","../src/transactions/post-condition.utils.ts","../src/transactions/transaction.types.ts","../src/transactions/get-contract-fn-args.ts","../src/transactions/get-error-message.ts","../src/transactions/sip-10-contract-call.utils.ts","../src/transactions/sip-9-contract-call.utils.ts","../src/validation/address-validation.ts","../src/validation/memo-validation.ts","../src/validation/stacks-error.ts","../src/validation/amount-validation.ts","../src/validation/transaction-validation.ts","../src/schemas/clarity-contract.schema.ts","../src/schemas/memo.schema.ts","../src/transactions/serialization.ts","../src/addresses.ts"],"sourcesContent":["import { bytesToHex } from '@noble/hashes/utils';\nimport { PrivateKey } from '@stacks/common';\nimport { hashMessage } from '@stacks/encryption';\nimport {\n ClarityValue,\n privateKeyToPublic,\n signMessageHashRsv,\n signStructuredData,\n} from '@stacks/transactions';\n\nexport interface SignatureData {\n signature: string;\n publicKey: string;\n}\nexport function signMessage(message: string, privateKey: PrivateKey): SignatureData {\n const hash = hashMessage(message);\n return {\n signature: signMessageHashRsv({ privateKey, messageHash: bytesToHex(hash) }),\n publicKey: privateKeyToPublic(privateKey) as string,\n };\n}\n\nexport function signStructuredDataMessage(\n message: ClarityValue,\n domain: ClarityValue,\n privateKey: PrivateKey\n): SignatureData {\n const signature = signStructuredData({\n message,\n domain,\n privateKey,\n });\n\n return {\n signature,\n publicKey: privateKeyToPublic(privateKey) as string,\n };\n}\n","// Stacks test addresses\nexport const TEST_ACCOUNT_1_STX_ADDRESS = 'SPS8CKF63P16J28AYF7PXW9E5AACH0NZNTEFWSFE';\nexport const TEST_ACCOUNT_2_STX_ADDRESS = 'SPXH3HNBPM5YP15VH16ZXZ9AX6CK289K3MCXRKCB';\nexport const TEST_TESTNET_ACCOUNT_2_STX_ADDRESS = 'STXH3HNBPM5YP15VH16ZXZ9AX6CK289K3NVR9T1P';\n// TODO ask about these prefixs\n// TEST_ACCOUNT_.. from extension mocks with prefix changed to SM / SN\nexport const TEST_ACCOUNT_1_STX_ADDRESS_SM = 'SM3FBR6RDNZYC5K4TZWV9VZJ6NGA4VX3YBQ8X2PQ';\nexport const TEST_TESTNET_ACCOUNT_2_STX_ADDRESS_SN = 'SNXH3HNBPM5YP15VH16ZXZ9AX6CK289K3NVR9T1P';\n","import {\n ClarityValue,\n StacksTransactionWire,\n TransactionSigner,\n createStacksPublicKey,\n publicKeyToAddressSingleSig,\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';\n\nimport { SignatureData, signMessage, signStructuredDataMessage } from '../message-signing';\nimport { deriveStxPrivateKey, extractStacksDerivationPathAccountIndex } from '../stacks.utils';\n\n// Warning: mutative. Ideally there would be a tx.clone() method\nexport function signStacksTransaction(tx: StacksTransactionWire, privateKey: string) {\n const signer = new TransactionSigner(tx);\n signer.signOrigin(privateKey);\n return tx;\n}\n\nexport type StacksSignerFn = (tx: StacksTransactionWire) => Promise<StacksTransactionWire>;\nexport type StacksSignMessageFn = (message: string) => Promise<SignatureData>;\nexport type StacksSignStructuredMessageFn = (\n message: ClarityValue,\n domain: ClarityValue\n) => Promise<SignatureData>;\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 signMessage: StacksSignMessageFn;\n signStructuredMessage: StacksSignStructuredMessageFn;\n}\n\nasync function getPrivateKey(\n keyOrigin: string,\n getMnemonicFn: () => Promise<{ mnemonic: string; passphrase?: string }>\n) {\n const { mnemonic, passphrase } = await getMnemonicFn();\n const keychain = await deriveRootKeychainFromMnemonic(mnemonic, passphrase);\n return deriveStxPrivateKey({\n keychain,\n index: extractStacksDerivationPathAccountIndex(keyOrigin),\n });\n}\n\nexport function createSignFnFromMnemonic(\n keyOrigin: string,\n getMnemonicFn: () => Promise<{ mnemonic: string; passphrase?: string }>\n) {\n return async (tx: StacksTransactionWire) => {\n const privateKey = await getPrivateKey(keyOrigin, getMnemonicFn);\n return signStacksTransaction(tx, privateKey);\n };\n}\n\nexport function createSignMessageFnFromMnemonic(\n keyOrigin: string,\n getMnemonicFn: () => Promise<{ mnemonic: string; passphrase?: string }>\n) {\n return async (message: string) => {\n const privateKey = await getPrivateKey(keyOrigin, getMnemonicFn);\n return signMessage(message, privateKey);\n };\n}\nexport function createSignStructuredDataMessageFnFromMnemonic(\n keyOrigin: string,\n getMnemonicFn: () => Promise<{ mnemonic: string; passphrase?: string }>\n) {\n return async (message: ClarityValue, domain: ClarityValue) => {\n const privateKey = await getPrivateKey(keyOrigin, getMnemonicFn);\n return signStructuredDataMessage(message, domain, privateKey);\n };\n}\n\ninterface InitalizeStacksSignerArgs {\n descriptor: string;\n network: NetworkModes;\n signFn: StacksSignerFn;\n signMessageFn: StacksSignMessageFn;\n signStructuredMessageFn: StacksSignStructuredMessageFn;\n}\nexport function initalizeStacksSigner(args: InitalizeStacksSignerArgs): StacksSigner {\n const { descriptor, network, signFn, signMessageFn, signStructuredMessageFn } = args;\n\n const publicKey = createStacksPublicKey(extractKeyFromDescriptor(descriptor)).data;\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,\n network,\n address: publicKeyToAddressSingleSig(publicKey, network),\n sign: signFn,\n signMessage: signMessageFn,\n signStructuredMessage: signStructuredMessageFn,\n };\n}\n","import { HDKey } from '@scure/bip32';\nimport { ChainId } from '@stacks/network';\nimport {\n AssetString,\n ContractIdString,\n compressPrivateKey,\n privateKeyToPublic,\n} 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)({\n [ChainId.Mainnet]: 'mainnet',\n [ChainId.Testnet]: 'testnet',\n });\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 compressPrivateKey(accountKeychain.privateKey);\n}\n\nexport function deriveStxPublicKey({\n keychain,\n index,\n}: {\n keychain: HDKey;\n index: number;\n}): string {\n return privateKeyToPublic(deriveStxPrivateKey({ keychain, index })) as string;\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 publicKey\n );\n}\n\nexport function getStacksBurnAddress(chainIdChainId: ChainId): string {\n switch (chainIdChainId) {\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\nexport function getPrincipalFromAssetString(assetString: string) {\n return assetString.split('::')[0];\n}\n\nexport function formatContractId(address: string, name: string) {\n return `${address}.${name}`;\n}\n\ninterface FormatAssetStringArgs {\n contractAddress: string;\n contractName: string;\n assetName: string;\n}\nexport function formatAssetString({\n contractAddress,\n contractName,\n assetName,\n}: FormatAssetStringArgs): AssetString {\n return `${contractAddress}.${contractName}::${assetName}`;\n}\n\ninterface FormatContractIdStringArgs {\n contractAddress: string;\n contractName: string;\n}\nexport function formatContractIdString({\n contractAddress,\n contractName,\n}: FormatContractIdStringArgs): ContractIdString {\n return `${contractAddress}.${contractName}`;\n}\n\n/**\n * Gets the contract name.\n *\n * @param identifier - [principal].[contract-name] or [principal].[contract-name]::[asset-name]\n */\nexport function getStacksContractName(identifier: string): string {\n if (identifier.includes('.')) {\n const parts = identifier?.split('.');\n if (identifier.includes('::')) {\n return parts[1].split('::')[0];\n }\n return parts[1];\n }\n return identifier;\n}\n\n/**\n * Gets the asset name.\n *\n * @param identifier - [principal].[contract-name]::[asset-name]\n */\nexport function getStacksContractAssetName(identifier: string): string {\n if (!identifier.includes('::')) return identifier;\n return identifier.split('::')[1];\n}\n\n/**\n * Gets the parts that make up a fully qualified name of an asset.\n *\n * @param identifier - [principal].[contract-name]::[asset-name]\n */\nexport function getStacksAssetStringParts(identifier: string): {\n contractAddress: string;\n contractAssetName: string;\n contractName: string;\n} {\n if (!identifier.includes('.') && !identifier.includes('::')) {\n return {\n contractAddress: identifier,\n contractAssetName: identifier,\n contractName: identifier,\n };\n }\n\n const contractAddress = identifier.split('.')[0];\n const contractAssetName = getStacksContractAssetName(identifier);\n const contractName = getStacksContractName(identifier);\n\n return {\n contractAddress,\n contractAssetName,\n contractName,\n };\n}\n","import { bytesToHex } from '@stacks/common';\nimport { Pc, serializeCV } from '@stacks/transactions';\n\nimport { Money } from '@leather.io/models';\n\nimport { StacksSigner } from '../signer/signer';\nimport { formatContractIdString, getStacksAssetStringParts } from '../stacks.utils';\nimport { generateStacksUnsignedTransaction } from './generate-unsigned-transaction';\nimport { createSip10FnArgs } from './get-contract-fn-args';\nimport { TransactionTypes } from './transaction.types';\n\ninterface CreateTransferSip10TxHex {\n signer: StacksSigner;\n assetId: string;\n recipient: string;\n amount: number;\n nonce: number;\n fee: Money;\n memo?: string;\n}\n\nexport async function createTransferSip10TxHex({\n signer,\n assetId,\n recipient,\n amount,\n nonce,\n fee,\n memo,\n}: CreateTransferSip10TxHex) {\n const { contractAddress, contractAssetName, contractName } = getStacksAssetStringParts(assetId);\n\n const currentStacksAddress = signer.address;\n\n const fnArgs = createSip10FnArgs({\n amount: amount,\n senderStacksAddress: currentStacksAddress,\n recipientStacksAddress: recipient,\n memo,\n });\n\n const tx = await generateStacksUnsignedTransaction({\n txType: TransactionTypes.ContractCall,\n publicKey: bytesToHex(signer.publicKey),\n contractAddress,\n contractName,\n functionArgs: fnArgs.map(arg => serializeCV(arg)),\n functionName: 'transfer',\n nonce,\n fee,\n postConditions: [\n Pc.principal(currentStacksAddress)\n .willSendEq(amount)\n .ft(formatContractIdString({ contractAddress, contractName }), contractAssetName),\n ],\n });\n\n const txHex = tx.serialize();\n return txHex;\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 { ensurePostConditionWireFormat, 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 getUnsignedContractCallParsedOptions(options: StacksUnsignedContractCallOptions) {\n return {\n ...options,\n fee: options.fee.amount.toString(),\n functionArgs: options.functionArgs.map(arg => deserializeCV(hexToBytes(cleanHex(arg)))),\n nonce: initNonce(options.nonce).toString(),\n postConditions: options.postConditions,\n };\n}\n\nexport function getUnsignedContractDeployParsedOptions(\n options: StacksUnsignedContractDeployOptions\n) {\n return {\n ...options,\n fee: options.fee.amount.toString(),\n nonce: initNonce(options.nonce).toString(),\n postConditions: getPostConditions(\n options.postConditions?.map(pc => ensurePostConditionWireFormat(pc))\n ),\n };\n}\n\nexport function getUnsignedStxTokenTransferParsedOptions(\n options: StacksUnsignedTokenTransferOptions\n) {\n return {\n ...options,\n amount: options.amount.amount.toString(),\n fee: options.fee.amount.toString(),\n nonce: initNonce(options.nonce).toString(),\n };\n}\n\nexport 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 makeUnsignedSTXTokenTransfer(getUnsignedStxTokenTransferParsedOptions(options));\n case TransactionTypes.ContractCall:\n return makeUnsignedContractCall(getUnsignedContractCallParsedOptions(options));\n case TransactionTypes.ContractDeploy:\n return makeUnsignedContractDeploy(getUnsignedContractDeployParsedOptions(options));\n default:\n assertUnreachable(txType);\n }\n}\n","import { hexToBytes } from '@noble/hashes/utils';\nimport {\n BytesReader,\n PostCondition,\n PostConditionWire,\n deserializePostConditionWire,\n postConditionToWire,\n} from '@stacks/transactions';\n\nimport { isString } from '@leather.io/utils';\n\nexport function getPostConditionFromString(postCondition: string): PostConditionWire {\n try {\n const reader = new BytesReader(hexToBytes(postCondition));\n return deserializePostConditionWire(reader);\n } catch {\n throw new Error('Not a serialized post condition');\n }\n}\n\nexport function ensurePostConditionWireFormat(\n postCondition: string | PostCondition | PostConditionWire\n) {\n if (isString(postCondition)) return getPostConditionFromString(postCondition);\n if ('conditionType' in postCondition) return postCondition;\n return postConditionToWire(postCondition);\n}\n\nexport function getPostCondition(\n postCondition: string | PostCondition | PostConditionWire\n): PostConditionWire {\n return isString(postCondition)\n ? getPostConditionFromString(postCondition)\n : ensurePostConditionWireFormat(postCondition);\n}\n\nexport function getPostConditions(\n postConditions?: (string | PostCondition | PostConditionWire)[]\n): PostConditionWire[] | 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 {\n ClarityValue,\n bufferCVFromString,\n createAddress,\n deserializeCV,\n noneCV,\n someCV,\n standardPrincipalCVFromAddress,\n uintCV,\n} from '@stacks/transactions';\n\ninterface GetSip10FnArgs {\n amount: number;\n senderStacksAddress: string;\n recipientStacksAddress: string;\n memo?: string;\n}\n\nexport function createSip10FnArgs({\n amount,\n senderStacksAddress,\n recipientStacksAddress,\n memo,\n}: GetSip10FnArgs) {\n const fnArgs: ClarityValue[] = [\n uintCV(amount),\n standardPrincipalCVFromAddress(createAddress(senderStacksAddress)),\n standardPrincipalCVFromAddress(createAddress(recipientStacksAddress)),\n memo && memo !== '' ? someCV(bufferCVFromString(memo)) : noneCV(),\n ];\n return fnArgs;\n}\n\ninterface GetSip9FnArgs {\n assetId: string;\n senderStacksAddress: string;\n recipientStacksAddress: string;\n}\nexport function createSip9FnArgs({\n assetId,\n senderStacksAddress,\n recipientStacksAddress,\n}: GetSip9FnArgs) {\n const fnArgs: ClarityValue[] = [\n deserializeCV(assetId),\n standardPrincipalCVFromAddress(createAddress(senderStacksAddress)),\n standardPrincipalCVFromAddress(createAddress(recipientStacksAddress)),\n ];\n return fnArgs;\n}\n","import { TxBroadcastResultRejected } from '@stacks/transactions';\n\nexport function getErrorMessage(\n reason:\n | TxBroadcastResultRejected['reason']\n | 'BadTransactionVersion'\n | 'ConflictingNonceInMempool'\n | 'EstimatorError'\n | 'TransferAmountMustBePositive'\n | 'TransferRecipientCannotEqualSender'\n) {\n switch (reason) {\n case 'BadAddressVersionByte':\n return 'Incorrect address';\n case 'BadFunctionArgument':\n return 'Incorrect function argument';\n case 'BadNonce':\n return 'Incorrect nonce';\n case 'BadTransactionVersion':\n return 'Incorrect transaction';\n case 'ConflictingNonceInMempool':\n return 'Nonce conflict';\n case 'ContractAlreadyExists':\n return 'Contract already exists';\n case 'Deserialization':\n return 'Deserialization failure';\n case 'EstimatorError':\n return 'Estimator error';\n case 'FeeTooLow':\n return 'Fee too low';\n case 'NoCoinbaseViaMempool':\n return 'No coinbase via mempool';\n case 'NoSuchContract':\n return 'Contract does not exist';\n case 'NoSuchPublicFunction':\n return 'Function does not exist';\n case 'NotEnoughFunds':\n return 'Not enough funds';\n case 'PoisonMicroblocksDoNotConflict':\n return 'Microblock conflict';\n case 'PoisonMicroblockHasUnknownPubKeyHash':\n return 'No anchor block with public key hash';\n case 'PoisonMicroblockIsInvalid':\n return 'Invalid microblock';\n case 'Serialization':\n return 'Serialization failure';\n case 'ServerFailureDatabase':\n return 'Database error';\n case 'ServerFailureNoSuchChainTip':\n return 'No such chain tip';\n case 'ServerFailureOther':\n return 'Server failure';\n case 'SignatureValidation':\n return 'Failed to validate signature';\n case 'TransferAmountMustBePositive':\n return 'Transfer amount must be positive';\n case 'TransferRecipientCannotEqualSender':\n return 'Cannot transfer STX to yourself';\n default:\n return 'Something went wrong';\n }\n}\n","import {\n ClarityAbi,\n ClarityType,\n ClarityValue,\n ContractCallPayload,\n StacksTransactionWire,\n} from '@stacks/transactions';\n\nexport function isSip10TransferContactCall(\n tx: StacksTransactionWire\n): tx is StacksTransactionWire & { payload: ContractCallPayload } {\n if (tx.payload && 'functionName' in tx.payload) {\n if (\n tx.payload.functionName.content === 'transfer' &&\n (tx.payload.functionArgs.length === 3 || tx.payload.functionArgs.length === 4)\n ) {\n if (\n tx.payload.functionArgs[0].type === ClarityType.UInt &&\n tx.payload.functionArgs[1].type === ClarityType.PrincipalStandard &&\n tx.payload.functionArgs[2].type === ClarityType.PrincipalStandard\n ) {\n return true;\n }\n }\n }\n return false;\n}\n\nexport function isSip10Transfer({\n functionName,\n contractInterfaceData,\n}: {\n functionName: string;\n contractInterfaceData: ClarityAbi;\n}) {\n if (functionName !== 'transfer') return false;\n const functionInterface = contractInterfaceData?.functions.find(f => f.name === functionName);\n if (\n functionInterface?.args[0]?.name === 'amount' &&\n functionInterface?.args[1]?.name === 'sender' &&\n functionInterface?.args[2]?.name === 'recipient' &&\n functionInterface?.args[3]?.name === 'memo'\n ) {\n return true;\n }\n return false;\n}\n\nexport function getSip10TransferAmount({\n functionName,\n functionArgs,\n contractInterfaceData,\n}: {\n functionName: string;\n functionArgs: ClarityValue[];\n contractInterfaceData: ClarityAbi;\n}) {\n if (\n isSip10Transfer({ functionName, contractInterfaceData }) &&\n functionArgs[0]?.type === ClarityType.UInt\n ) {\n return Number(functionArgs[0].value);\n }\n return null;\n}\n\nexport function getSip10TransferRecipient({\n functionName,\n functionArgs,\n contractInterfaceData,\n}: {\n functionName: string;\n functionArgs: ClarityValue[];\n contractInterfaceData: ClarityAbi;\n}) {\n if (\n isSip10Transfer({ functionName, contractInterfaceData }) &&\n functionArgs[2]?.type === ClarityType.PrincipalStandard\n ) {\n return functionArgs[2].value;\n }\n return null;\n}\n","import {\n ClarityAbi,\n ClarityType,\n ClarityValue,\n ContractCallPayload,\n StacksTransactionWire,\n} from '@stacks/transactions';\n\nexport function isSip9TransferContactCall(\n tx: StacksTransactionWire\n): tx is StacksTransactionWire & { payload: ContractCallPayload } {\n if (tx.payload && 'functionName' in tx.payload) {\n if (tx.payload.functionName.content === 'transfer' && tx.payload.functionArgs.length === 3) {\n if (\n tx.payload.functionArgs[0].type === ClarityType.UInt &&\n tx.payload.functionArgs[1].type === ClarityType.PrincipalStandard &&\n tx.payload.functionArgs[2].type === ClarityType.PrincipalStandard\n ) {\n return true;\n }\n }\n }\n return false;\n}\n\nexport function isSip9Transfer({\n functionName,\n contractInterfaceData,\n}: {\n functionName: string;\n contractInterfaceData: ClarityAbi;\n}) {\n if (functionName !== 'transfer') return false;\n const functionInterface = contractInterfaceData?.functions.find(f => f.name === functionName);\n if (\n functionInterface?.args[0]?.name === 'id' &&\n functionInterface?.args[1]?.name === 'from' &&\n functionInterface?.args[2]?.name === 'to'\n ) {\n return true;\n }\n return false;\n}\n\nexport function getSip9TransferRecipient({\n functionName,\n functionArgs,\n contractInterfaceData,\n}: {\n functionName: string;\n functionArgs: ClarityValue[];\n contractInterfaceData: ClarityAbi;\n}) {\n if (\n isSip9Transfer({ functionName, contractInterfaceData }) &&\n functionArgs[2]?.type === ClarityType.PrincipalStandard\n ) {\n return functionArgs[2].value;\n }\n return null;\n}\n","import { c32addressDecode } from 'c32check';\nimport { z } from 'zod';\n\nimport { ChainId } from '@leather.io/models';\nimport { isEmptyString, isString, isUndefined } from '@leather.io/utils';\n\n// taken from stacks-utils.ts\nexport function isValidStacksAddress(address: string) {\n if (isUndefined(address) || isEmptyString(address)) {\n return false;\n }\n try {\n c32addressDecode(address);\n return true;\n } catch {\n return false;\n }\n}\n\nexport function isValidAddressChain(address: string, chainId: ChainId) {\n if (!address) {\n return false;\n }\n\n const prefix = address.slice(0, 2);\n switch (chainId) {\n case ChainId.Mainnet:\n return prefix === 'SM' || prefix === 'SP';\n case ChainId.Testnet:\n return prefix === 'SN' || prefix === 'ST';\n default:\n return false;\n }\n}\n\nexport function validatePayerNotRecipient(senderAddress: string, recipientAddress: string) {\n if (!senderAddress || !recipientAddress) {\n return false;\n }\n\n return senderAddress !== recipientAddress;\n}\n\nexport const standardPrincipalSchema = z.string().refine(\n (address: unknown) => {\n if (!isString(address)) return false;\n if (!isValidStacksAddress(address)) return false;\n return !address.includes('.');\n },\n { message: 'Invalid standard Stacks principal address' }\n);\n\nexport const contractPrincipalSchema = z.string().refine(\n (principal: unknown) => {\n if (!isString(principal)) return false;\n\n const parts = principal.split('.');\n if (parts.length !== 2) return false;\n\n const [address, contractName] = parts;\n\n if (!isValidStacksAddress(address)) return false;\n\n const contractNameRegex = /^[a-zA-Z0-9_-]{1,128}$/;\n return contractNameRegex.test(contractName);\n },\n { message: 'Invalid contract principal (must be address.contract-name format)' }\n);\n\nexport const principalSchema = z.union([standardPrincipalSchema, contractPrincipalSchema]);\n","import { MEMO_MAX_LENGTH_BYTES } from '@stacks/transactions';\n\nfunction exceedsMaxLengthBytes(value: string, maxLengthBytes: number): boolean {\n return value ? Buffer.from(value).length > maxLengthBytes : false;\n}\n\nexport function isValidStacksMemo(memo: string) {\n return !exceedsMaxLengthBytes(memo, MEMO_MAX_LENGTH_BYTES);\n}\n","import { TransactionErrorKey } from '@leather.io/models';\n\nexport type StacksErrorKey =\n | TransactionErrorKey\n | 'InvalidSameAddress'\n | 'UnknownBalance'\n | 'UnknownFee'\n | 'UnknownAmount';\n\nexport class StacksError extends Error {\n public message: StacksErrorKey;\n constructor(message: StacksErrorKey) {\n super(message);\n this.name = 'StacksError';\n this.message = message;\n\n // Fix the prototype chain\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import BigNumber from 'bignumber.js';\n\nimport { Money } from '@leather.io/models';\nimport { isDefined, stxToMicroStx } from '@leather.io/utils';\n\nimport { StacksError } from './stacks-error';\n\nfunction isMoneyAmountValid(amount: Money) {\n return amount && isDefined(amount.amount) && amount.amount;\n}\n\ninterface IsStxAmountValidArgs {\n availableBalance: Money;\n amount: Money;\n fee: Money;\n}\n\nexport function isStxAmountValid({ availableBalance, amount, fee }: IsStxAmountValidArgs) {\n if (!isMoneyAmountValid(amount)) {\n throw new StacksError('InvalidAmount');\n }\n if (!isMoneyAmountValid(availableBalance)) {\n throw new StacksError('UnknownBalance');\n }\n if (!isMoneyAmountValid(fee)) {\n throw new StacksError('UnknownFee');\n }\n return true;\n}\n\nexport function isStxBalanceSufficient({\n availableBalance: { amount: availableBalanceAmount },\n amount: { amount: desiredSpend },\n fee: { amount: feeAmount },\n}: IsStxAmountValidArgs) {\n const fee = new BigNumber(stxToMicroStx(feeAmount));\n\n if (!availableBalanceAmount) {\n throw new StacksError('UnknownBalance');\n }\n if (!fee.isFinite()) {\n throw new StacksError('UnknownFee');\n }\n\n const availableBalance = new BigNumber(stxToMicroStx(availableBalanceAmount));\n const spendableAmount = availableBalance.minus(fee);\n const amount = new BigNumber(stxToMicroStx(desiredSpend));\n return spendableAmount.isGreaterThanOrEqualTo(amount);\n}\n","import { ChainId, Money } from '@leather.io/models';\n\nimport {\n isValidAddressChain,\n isValidStacksAddress,\n validatePayerNotRecipient,\n} from './address-validation';\nimport { isStxAmountValid, isStxBalanceSufficient } from './amount-validation';\nimport { StacksError } from './stacks-error';\n\ninterface StacksTransaction {\n amount: Money;\n payer: string;\n recipient: string;\n chainId: ChainId;\n availableBalance: Money;\n fee: Money;\n}\n\nexport function isValidStacksTransaction({\n amount,\n availableBalance,\n fee,\n payer,\n recipient,\n chainId,\n}: StacksTransaction) {\n if (!isValidStacksAddress(payer) || !isValidStacksAddress(recipient)) {\n throw new StacksError('InvalidAddress');\n }\n if (!isValidAddressChain(payer, chainId) || !isValidAddressChain(recipient, chainId)) {\n throw new StacksError('InvalidNetworkAddress');\n }\n if (!validatePayerNotRecipient(payer, recipient)) {\n throw new StacksError('InvalidSameAddress');\n }\n\n if (!isStxAmountValid({ availableBalance, amount, fee })) {\n throw new StacksError('InvalidAmount');\n }\n if (!isStxBalanceSufficient({ availableBalance, amount, fee })) {\n throw new StacksError('InsufficientFunds');\n }\n return true;\n}\n","import { codeBodyString } from '@stacks/transactions';\nimport { z } from 'zod';\n\nexport function isValidContractLength(contract: string) {\n try {\n // `codeBodyString` throws when creating a contract deploy transaction in\n // `@stacks/transaction`. Using this method here, we can validate the\n // contract length and gracefully handle the error\n codeBodyString(contract);\n return true;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (_e: unknown) {\n return false;\n }\n}\n\nexport const clarityContractSchema = z\n .string()\n .refine(contract => isValidContractLength(contract), {\n message: 'ContractExceedsMaxLength',\n });\n","import { createMemoString } from '@stacks/transactions';\nimport { z } from 'zod';\n\nexport const stacksMemoSchema = z.string().refine(\n value => {\n try {\n createMemoString(value);\n return true;\n } catch {\n return false;\n }\n },\n { message: 'Invalid memo string' }\n);\n","import { StacksTransactionWire, serializePayload } from '@stacks/transactions';\n\nexport function getEstimatedUnsignedStacksTxByteLength(transaction: StacksTransactionWire) {\n return transaction.serializeBytes().byteLength;\n}\n\nexport function getSerializedUnsignedStacksTxPayload(transaction: StacksTransactionWire) {\n return serializePayload(transaction.payload);\n}\n","import { getAddressFromPrivateKey, makeRandomPrivKey } from '@stacks/transactions';\n\nexport function generateRandomStacksAddress() {\n const randomPrivateKey = makeRandomPrivKey();\n const privateKeyString = randomPrivateKey;\n const randomAddress = getAddressFromPrivateKey(privateKeyString);\n return randomAddress;\n}\n"],"mappings":"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","names":["privateKeyToPublic","bytesToHex","hexToBytes","isString","TransactionTypes","hexToBytes","deserializeCV","bytesToHex","ClarityType","ChainId","isString","BigNumber","BigNumber","z","z"]}
|
|
1
|
+
{"version":3,"sources":["../src/message-signing.ts","../src/mocks/mocks.ts","../src/signer/signer.ts","../src/stacks.utils.ts","../src/transactions/create-tx-hex.ts","../src/transactions/generate-unsigned-transaction.ts","../src/transactions/post-condition.utils.ts","../src/transactions/transaction.types.ts","../src/transactions/get-contract-fn-args.ts","../src/transactions/get-error-message.ts","../src/transactions/sip-10-contract-call.utils.ts","../src/transactions/sip-9-contract-call.utils.ts","../src/validation/address-validation.ts","../src/validation/memo-validation.ts","../src/validation/stacks-error.ts","../src/validation/amount-validation.ts","../src/validation/transaction-validation.ts","../src/schemas/clarity-contract.schema.ts","../src/schemas/memo.schema.ts","../src/transactions/serialization.ts","../src/addresses.ts","../src/clarity.ts"],"sourcesContent":["import { bytesToHex } from '@noble/hashes/utils';\nimport { PrivateKey } from '@stacks/common';\nimport { hashMessage } from '@stacks/encryption';\nimport {\n ClarityValue,\n privateKeyToPublic,\n signMessageHashRsv,\n signStructuredData,\n} from '@stacks/transactions';\n\nexport interface SignatureData {\n signature: string;\n publicKey: string;\n}\nexport function signMessage(message: string, privateKey: PrivateKey): SignatureData {\n const hash = hashMessage(message);\n return {\n signature: signMessageHashRsv({ privateKey, messageHash: bytesToHex(hash) }),\n publicKey: privateKeyToPublic(privateKey) as string,\n };\n}\n\nexport function signStructuredDataMessage(\n message: ClarityValue,\n domain: ClarityValue,\n privateKey: PrivateKey\n): SignatureData {\n const signature = signStructuredData({\n message,\n domain,\n privateKey,\n });\n\n return {\n signature,\n publicKey: privateKeyToPublic(privateKey) as string,\n };\n}\n","// Stacks test addresses\nexport const TEST_ACCOUNT_1_STX_ADDRESS = 'SPS8CKF63P16J28AYF7PXW9E5AACH0NZNTEFWSFE';\nexport const TEST_ACCOUNT_2_STX_ADDRESS = 'SPXH3HNBPM5YP15VH16ZXZ9AX6CK289K3MCXRKCB';\nexport const TEST_TESTNET_ACCOUNT_2_STX_ADDRESS = 'STXH3HNBPM5YP15VH16ZXZ9AX6CK289K3NVR9T1P';\n// TODO ask about these prefixs\n// TEST_ACCOUNT_.. from extension mocks with prefix changed to SM / SN\nexport const TEST_ACCOUNT_1_STX_ADDRESS_SM = 'SM3FBR6RDNZYC5K4TZWV9VZJ6NGA4VX3YBQ8X2PQ';\nexport const TEST_TESTNET_ACCOUNT_2_STX_ADDRESS_SN = 'SNXH3HNBPM5YP15VH16ZXZ9AX6CK289K3NVR9T1P';\n","import {\n ClarityValue,\n StacksTransactionWire,\n TransactionSigner,\n createStacksPublicKey,\n publicKeyToAddressSingleSig,\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';\n\nimport { SignatureData, signMessage, signStructuredDataMessage } from '../message-signing';\nimport { deriveStxPrivateKey, extractStacksDerivationPathAccountIndex } from '../stacks.utils';\n\n// Warning: mutative. Ideally there would be a tx.clone() method\nexport function signStacksTransaction(tx: StacksTransactionWire, privateKey: string) {\n const signer = new TransactionSigner(tx);\n signer.signOrigin(privateKey);\n return tx;\n}\n\nexport type StacksSignerFn = (tx: StacksTransactionWire) => Promise<StacksTransactionWire>;\nexport type StacksSignMessageFn = (message: string) => Promise<SignatureData>;\nexport type StacksSignStructuredMessageFn = (\n message: ClarityValue,\n domain: ClarityValue\n) => Promise<SignatureData>;\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 signMessage: StacksSignMessageFn;\n signStructuredMessage: StacksSignStructuredMessageFn;\n}\n\nasync function getPrivateKey(\n keyOrigin: string,\n getMnemonicFn: () => Promise<{ mnemonic: string; passphrase?: string }>\n) {\n const { mnemonic, passphrase } = await getMnemonicFn();\n const keychain = await deriveRootKeychainFromMnemonic(mnemonic, passphrase);\n return deriveStxPrivateKey({\n keychain,\n index: extractStacksDerivationPathAccountIndex(keyOrigin),\n });\n}\n\nexport function createSignFnFromMnemonic(\n keyOrigin: string,\n getMnemonicFn: () => Promise<{ mnemonic: string; passphrase?: string }>\n) {\n return async (tx: StacksTransactionWire) => {\n const privateKey = await getPrivateKey(keyOrigin, getMnemonicFn);\n return signStacksTransaction(tx, privateKey);\n };\n}\n\nexport function createSignMessageFnFromMnemonic(\n keyOrigin: string,\n getMnemonicFn: () => Promise<{ mnemonic: string; passphrase?: string }>\n) {\n return async (message: string) => {\n const privateKey = await getPrivateKey(keyOrigin, getMnemonicFn);\n return signMessage(message, privateKey);\n };\n}\nexport function createSignStructuredDataMessageFnFromMnemonic(\n keyOrigin: string,\n getMnemonicFn: () => Promise<{ mnemonic: string; passphrase?: string }>\n) {\n return async (message: ClarityValue, domain: ClarityValue) => {\n const privateKey = await getPrivateKey(keyOrigin, getMnemonicFn);\n return signStructuredDataMessage(message, domain, privateKey);\n };\n}\n\ninterface InitalizeStacksSignerArgs {\n descriptor: string;\n network: NetworkModes;\n signFn: StacksSignerFn;\n signMessageFn: StacksSignMessageFn;\n signStructuredMessageFn: StacksSignStructuredMessageFn;\n}\nexport function initalizeStacksSigner(args: InitalizeStacksSignerArgs): StacksSigner {\n const { descriptor, network, signFn, signMessageFn, signStructuredMessageFn } = args;\n\n const publicKey = createStacksPublicKey(extractKeyFromDescriptor(descriptor)).data;\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,\n network,\n address: publicKeyToAddressSingleSig(publicKey, network),\n sign: signFn,\n signMessage: signMessageFn,\n signStructuredMessage: signStructuredMessageFn,\n };\n}\n","import { HDKey } from '@scure/bip32';\nimport { ChainId } from '@stacks/network';\nimport {\n AssetString,\n ContractIdString,\n compressPrivateKey,\n privateKeyToPublic,\n} 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)({\n [ChainId.Mainnet]: 'mainnet',\n [ChainId.Testnet]: 'testnet',\n });\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 compressPrivateKey(accountKeychain.privateKey);\n}\n\nexport function deriveStxPublicKey({\n keychain,\n index,\n}: {\n keychain: HDKey;\n index: number;\n}): string {\n return privateKeyToPublic(deriveStxPrivateKey({ keychain, index })) as string;\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 publicKey\n );\n}\n\nexport function getStacksBurnAddress(chainIdChainId: ChainId): string {\n switch (chainIdChainId) {\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\nexport function getPrincipalFromAssetString(assetString: string) {\n return assetString.split('::')[0];\n}\n\nexport function formatContractId(address: string, name: string) {\n return `${address}.${name}`;\n}\n\ninterface FormatAssetStringArgs {\n contractAddress: string;\n contractName: string;\n assetName: string;\n}\nexport function formatAssetString({\n contractAddress,\n contractName,\n assetName,\n}: FormatAssetStringArgs): AssetString {\n return `${contractAddress}.${contractName}::${assetName}`;\n}\n\ninterface FormatContractIdStringArgs {\n contractAddress: string;\n contractName: string;\n}\nexport function formatContractIdString({\n contractAddress,\n contractName,\n}: FormatContractIdStringArgs): ContractIdString {\n return `${contractAddress}.${contractName}`;\n}\n\n/**\n * Gets the contract name.\n *\n * @param identifier - [principal].[contract-name] or [principal].[contract-name]::[asset-name]\n */\nexport function getStacksContractName(identifier: string): string {\n if (identifier.includes('.')) {\n const parts = identifier?.split('.');\n if (identifier.includes('::')) {\n return parts[1].split('::')[0];\n }\n return parts[1];\n }\n return identifier;\n}\n\n/**\n * Gets the asset name.\n *\n * @param identifier - [principal].[contract-name]::[asset-name]\n */\nexport function getStacksContractAssetName(identifier: string): string {\n if (!identifier.includes('::')) return identifier;\n return identifier.split('::')[1];\n}\n\n/**\n * Gets the parts that make up a fully qualified name of an asset.\n *\n * @param identifier - [principal].[contract-name]::[asset-name]\n */\nexport function getStacksAssetStringParts(identifier: string): {\n contractAddress: string;\n contractAssetName: string;\n contractName: string;\n} {\n if (!identifier.includes('.') && !identifier.includes('::')) {\n return {\n contractAddress: identifier,\n contractAssetName: identifier,\n contractName: identifier,\n };\n }\n\n const contractAddress = identifier.split('.')[0];\n const contractAssetName = getStacksContractAssetName(identifier);\n const contractName = getStacksContractName(identifier);\n\n return {\n contractAddress,\n contractAssetName,\n contractName,\n };\n}\n","import { bytesToHex } from '@stacks/common';\nimport { Pc, serializeCV } from '@stacks/transactions';\n\nimport { Money } from '@leather.io/models';\n\nimport { StacksSigner } from '../signer/signer';\nimport { formatContractIdString, getStacksAssetStringParts } from '../stacks.utils';\nimport { generateStacksUnsignedTransaction } from './generate-unsigned-transaction';\nimport { createSip10FnArgs } from './get-contract-fn-args';\nimport { TransactionTypes } from './transaction.types';\n\ninterface CreateTransferSip10TxHex {\n signer: StacksSigner;\n assetId: string;\n recipient: string;\n amount: number;\n nonce: number;\n fee: Money;\n memo?: string;\n}\n\nexport async function createTransferSip10TxHex({\n signer,\n assetId,\n recipient,\n amount,\n nonce,\n fee,\n memo,\n}: CreateTransferSip10TxHex) {\n const { contractAddress, contractAssetName, contractName } = getStacksAssetStringParts(assetId);\n\n const currentStacksAddress = signer.address;\n\n const fnArgs = createSip10FnArgs({\n amount: amount,\n senderStacksAddress: currentStacksAddress,\n recipientStacksAddress: recipient,\n memo,\n });\n\n const tx = await generateStacksUnsignedTransaction({\n txType: TransactionTypes.ContractCall,\n publicKey: bytesToHex(signer.publicKey),\n contractAddress,\n contractName,\n functionArgs: fnArgs.map(arg => serializeCV(arg)),\n functionName: 'transfer',\n nonce,\n fee,\n postConditions: [\n Pc.principal(currentStacksAddress)\n .willSendEq(amount)\n .ft(formatContractIdString({ contractAddress, contractName }), contractAssetName),\n ],\n });\n\n const txHex = tx.serialize();\n return txHex;\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 { ensurePostConditionWireFormat, 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 getUnsignedContractCallParsedOptions(options: StacksUnsignedContractCallOptions) {\n return {\n ...options,\n fee: options.fee.amount.toString(),\n functionArgs: options.functionArgs.map(arg => deserializeCV(hexToBytes(cleanHex(arg)))),\n nonce: initNonce(options.nonce).toString(),\n postConditions: options.postConditions,\n };\n}\n\nexport function getUnsignedContractDeployParsedOptions(\n options: StacksUnsignedContractDeployOptions\n) {\n return {\n ...options,\n fee: options.fee.amount.toString(),\n nonce: initNonce(options.nonce).toString(),\n postConditions: getPostConditions(\n options.postConditions?.map(pc => ensurePostConditionWireFormat(pc))\n ),\n };\n}\n\nexport function getUnsignedStxTokenTransferParsedOptions(\n options: StacksUnsignedTokenTransferOptions\n) {\n return {\n ...options,\n amount: options.amount.amount.toString(),\n fee: options.fee.amount.toString(),\n nonce: initNonce(options.nonce).toString(),\n };\n}\n\nexport 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 makeUnsignedSTXTokenTransfer(getUnsignedStxTokenTransferParsedOptions(options));\n case TransactionTypes.ContractCall:\n return makeUnsignedContractCall(getUnsignedContractCallParsedOptions(options));\n case TransactionTypes.ContractDeploy:\n return makeUnsignedContractDeploy(getUnsignedContractDeployParsedOptions(options));\n default:\n assertUnreachable(txType);\n }\n}\n","import { hexToBytes } from '@noble/hashes/utils';\nimport {\n BytesReader,\n PostCondition,\n PostConditionWire,\n deserializePostConditionWire,\n postConditionToWire,\n} from '@stacks/transactions';\n\nimport { isString } from '@leather.io/utils';\n\nexport function getPostConditionFromString(postCondition: string): PostConditionWire {\n try {\n const reader = new BytesReader(hexToBytes(postCondition));\n return deserializePostConditionWire(reader);\n } catch {\n throw new Error('Not a serialized post condition');\n }\n}\n\nexport function ensurePostConditionWireFormat(\n postCondition: string | PostCondition | PostConditionWire\n) {\n if (isString(postCondition)) return getPostConditionFromString(postCondition);\n if ('conditionType' in postCondition) return postCondition;\n return postConditionToWire(postCondition);\n}\n\nexport function getPostCondition(\n postCondition: string | PostCondition | PostConditionWire\n): PostConditionWire {\n return isString(postCondition)\n ? getPostConditionFromString(postCondition)\n : ensurePostConditionWireFormat(postCondition);\n}\n\nexport function getPostConditions(\n postConditions?: (string | PostCondition | PostConditionWire)[]\n): PostConditionWire[] | 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 {\n ClarityValue,\n bufferCVFromString,\n createAddress,\n deserializeCV,\n noneCV,\n someCV,\n standardPrincipalCVFromAddress,\n uintCV,\n} from '@stacks/transactions';\n\ninterface GetSip10FnArgs {\n amount: number;\n senderStacksAddress: string;\n recipientStacksAddress: string;\n memo?: string;\n}\n\nexport function createSip10FnArgs({\n amount,\n senderStacksAddress,\n recipientStacksAddress,\n memo,\n}: GetSip10FnArgs) {\n const fnArgs: ClarityValue[] = [\n uintCV(amount),\n standardPrincipalCVFromAddress(createAddress(senderStacksAddress)),\n standardPrincipalCVFromAddress(createAddress(recipientStacksAddress)),\n memo && memo !== '' ? someCV(bufferCVFromString(memo)) : noneCV(),\n ];\n return fnArgs;\n}\n\ninterface GetSip9FnArgs {\n assetId: string;\n senderStacksAddress: string;\n recipientStacksAddress: string;\n}\nexport function createSip9FnArgs({\n assetId,\n senderStacksAddress,\n recipientStacksAddress,\n}: GetSip9FnArgs) {\n const fnArgs: ClarityValue[] = [\n deserializeCV(assetId),\n standardPrincipalCVFromAddress(createAddress(senderStacksAddress)),\n standardPrincipalCVFromAddress(createAddress(recipientStacksAddress)),\n ];\n return fnArgs;\n}\n","import { TxBroadcastResultRejected } from '@stacks/transactions';\n\nexport function getErrorMessage(\n reason:\n | TxBroadcastResultRejected['reason']\n | 'BadTransactionVersion'\n | 'ConflictingNonceInMempool'\n | 'EstimatorError'\n | 'TransferAmountMustBePositive'\n | 'TransferRecipientCannotEqualSender'\n) {\n switch (reason) {\n case 'BadAddressVersionByte':\n return 'Incorrect address';\n case 'BadFunctionArgument':\n return 'Incorrect function argument';\n case 'BadNonce':\n return 'Incorrect nonce';\n case 'BadTransactionVersion':\n return 'Incorrect transaction';\n case 'ConflictingNonceInMempool':\n return 'Nonce conflict';\n case 'ContractAlreadyExists':\n return 'Contract already exists';\n case 'Deserialization':\n return 'Deserialization failure';\n case 'EstimatorError':\n return 'Estimator error';\n case 'FeeTooLow':\n return 'Fee too low';\n case 'NoCoinbaseViaMempool':\n return 'No coinbase via mempool';\n case 'NoSuchContract':\n return 'Contract does not exist';\n case 'NoSuchPublicFunction':\n return 'Function does not exist';\n case 'NotEnoughFunds':\n return 'Not enough funds';\n case 'PoisonMicroblocksDoNotConflict':\n return 'Microblock conflict';\n case 'PoisonMicroblockHasUnknownPubKeyHash':\n return 'No anchor block with public key hash';\n case 'PoisonMicroblockIsInvalid':\n return 'Invalid microblock';\n case 'Serialization':\n return 'Serialization failure';\n case 'ServerFailureDatabase':\n return 'Database error';\n case 'ServerFailureNoSuchChainTip':\n return 'No such chain tip';\n case 'ServerFailureOther':\n return 'Server failure';\n case 'SignatureValidation':\n return 'Failed to validate signature';\n case 'TransferAmountMustBePositive':\n return 'Transfer amount must be positive';\n case 'TransferRecipientCannotEqualSender':\n return 'Cannot transfer STX to yourself';\n default:\n return 'Something went wrong';\n }\n}\n","import {\n ClarityAbi,\n ClarityType,\n ClarityValue,\n ContractCallPayload,\n StacksTransactionWire,\n} from '@stacks/transactions';\n\nexport function isSip10TransferContactCall(\n tx: StacksTransactionWire\n): tx is StacksTransactionWire & { payload: ContractCallPayload } {\n if (tx.payload && 'functionName' in tx.payload) {\n if (\n tx.payload.functionName.content === 'transfer' &&\n (tx.payload.functionArgs.length === 3 || tx.payload.functionArgs.length === 4)\n ) {\n if (\n tx.payload.functionArgs[0].type === ClarityType.UInt &&\n tx.payload.functionArgs[1].type === ClarityType.PrincipalStandard &&\n tx.payload.functionArgs[2].type === ClarityType.PrincipalStandard\n ) {\n return true;\n }\n }\n }\n return false;\n}\n\nexport function isSip10Transfer({\n functionName,\n contractInterfaceData,\n}: {\n functionName: string;\n contractInterfaceData: ClarityAbi;\n}) {\n if (functionName !== 'transfer') return false;\n const functionInterface = contractInterfaceData?.functions.find(f => f.name === functionName);\n if (\n functionInterface?.args[0]?.name === 'amount' &&\n functionInterface?.args[1]?.name === 'sender' &&\n functionInterface?.args[2]?.name === 'recipient' &&\n functionInterface?.args[3]?.name === 'memo'\n ) {\n return true;\n }\n return false;\n}\n\nexport function getSip10TransferAmount({\n functionName,\n functionArgs,\n contractInterfaceData,\n}: {\n functionName: string;\n functionArgs: ClarityValue[];\n contractInterfaceData: ClarityAbi;\n}) {\n if (\n isSip10Transfer({ functionName, contractInterfaceData }) &&\n functionArgs[0]?.type === ClarityType.UInt\n ) {\n return Number(functionArgs[0].value);\n }\n return null;\n}\n\nexport function getSip10TransferRecipient({\n functionName,\n functionArgs,\n contractInterfaceData,\n}: {\n functionName: string;\n functionArgs: ClarityValue[];\n contractInterfaceData: ClarityAbi;\n}) {\n if (\n isSip10Transfer({ functionName, contractInterfaceData }) &&\n functionArgs[2]?.type === ClarityType.PrincipalStandard\n ) {\n return functionArgs[2].value;\n }\n return null;\n}\n","import {\n ClarityAbi,\n ClarityType,\n ClarityValue,\n ContractCallPayload,\n StacksTransactionWire,\n} from '@stacks/transactions';\n\nexport function isSip9TransferContactCall(\n tx: StacksTransactionWire\n): tx is StacksTransactionWire & { payload: ContractCallPayload } {\n if (tx.payload && 'functionName' in tx.payload) {\n if (tx.payload.functionName.content === 'transfer' && tx.payload.functionArgs.length === 3) {\n if (\n tx.payload.functionArgs[0].type === ClarityType.UInt &&\n tx.payload.functionArgs[1].type === ClarityType.PrincipalStandard &&\n tx.payload.functionArgs[2].type === ClarityType.PrincipalStandard\n ) {\n return true;\n }\n }\n }\n return false;\n}\n\nexport function isSip9Transfer({\n functionName,\n contractInterfaceData,\n}: {\n functionName: string;\n contractInterfaceData: ClarityAbi;\n}) {\n if (functionName !== 'transfer') return false;\n const functionInterface = contractInterfaceData?.functions.find(f => f.name === functionName);\n if (\n functionInterface?.args[0]?.name === 'id' &&\n functionInterface?.args[1]?.name === 'from' &&\n functionInterface?.args[2]?.name === 'to'\n ) {\n return true;\n }\n return false;\n}\n\nexport function getSip9TransferRecipient({\n functionName,\n functionArgs,\n contractInterfaceData,\n}: {\n functionName: string;\n functionArgs: ClarityValue[];\n contractInterfaceData: ClarityAbi;\n}) {\n if (\n isSip9Transfer({ functionName, contractInterfaceData }) &&\n functionArgs[2]?.type === ClarityType.PrincipalStandard\n ) {\n return functionArgs[2].value;\n }\n return null;\n}\n","import { c32addressDecode } from 'c32check';\nimport { z } from 'zod';\n\nimport { ChainId } from '@leather.io/models';\nimport { isEmptyString, isString, isUndefined } from '@leather.io/utils';\n\n// taken from stacks-utils.ts\nexport function isValidStacksAddress(address: string) {\n if (isUndefined(address) || isEmptyString(address)) {\n return false;\n }\n try {\n c32addressDecode(address);\n return true;\n } catch {\n return false;\n }\n}\n\nexport function isValidAddressChain(address: string, chainId: ChainId) {\n if (!address) {\n return false;\n }\n\n const prefix = address.slice(0, 2);\n switch (chainId) {\n case ChainId.Mainnet:\n return prefix === 'SM' || prefix === 'SP';\n case ChainId.Testnet:\n return prefix === 'SN' || prefix === 'ST';\n default:\n return false;\n }\n}\n\nexport function validatePayerNotRecipient(senderAddress: string, recipientAddress: string) {\n if (!senderAddress || !recipientAddress) {\n return false;\n }\n\n return senderAddress !== recipientAddress;\n}\n\nexport const standardPrincipalSchema = z.string().refine(\n (address: unknown) => {\n if (!isString(address)) return false;\n if (!isValidStacksAddress(address)) return false;\n return !address.includes('.');\n },\n { message: 'Invalid standard Stacks principal address' }\n);\n\nexport const contractPrincipalSchema = z.string().refine(\n (principal: unknown) => {\n if (!isString(principal)) return false;\n\n const parts = principal.split('.');\n if (parts.length !== 2) return false;\n\n const [address, contractName] = parts;\n\n if (!isValidStacksAddress(address)) return false;\n\n const contractNameRegex = /^[a-zA-Z0-9_-]{1,128}$/;\n return contractNameRegex.test(contractName);\n },\n { message: 'Invalid contract principal (must be address.contract-name format)' }\n);\n\nexport const principalSchema = z.union([standardPrincipalSchema, contractPrincipalSchema]);\n","import { MEMO_MAX_LENGTH_BYTES } from '@stacks/transactions';\n\nfunction exceedsMaxLengthBytes(value: string, maxLengthBytes: number): boolean {\n return value ? Buffer.from(value).length > maxLengthBytes : false;\n}\n\nexport function isValidStacksMemo(memo: string) {\n return !exceedsMaxLengthBytes(memo, MEMO_MAX_LENGTH_BYTES);\n}\n","import { TransactionErrorKey } from '@leather.io/models';\n\nexport type StacksErrorKey =\n | TransactionErrorKey\n | 'InvalidSameAddress'\n | 'UnknownBalance'\n | 'UnknownFee'\n | 'UnknownAmount';\n\nexport class StacksError extends Error {\n public message: StacksErrorKey;\n constructor(message: StacksErrorKey) {\n super(message);\n this.name = 'StacksError';\n this.message = message;\n\n // Fix the prototype chain\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import BigNumber from 'bignumber.js';\n\nimport { Money } from '@leather.io/models';\nimport { isDefined, stxToMicroStx } from '@leather.io/utils';\n\nimport { StacksError } from './stacks-error';\n\nfunction isMoneyAmountValid(amount: Money) {\n return amount && isDefined(amount.amount) && amount.amount;\n}\n\ninterface IsStxAmountValidArgs {\n availableBalance: Money;\n amount: Money;\n fee: Money;\n}\n\nexport function isStxAmountValid({ availableBalance, amount, fee }: IsStxAmountValidArgs) {\n if (!isMoneyAmountValid(amount)) {\n throw new StacksError('InvalidAmount');\n }\n if (!isMoneyAmountValid(availableBalance)) {\n throw new StacksError('UnknownBalance');\n }\n if (!isMoneyAmountValid(fee)) {\n throw new StacksError('UnknownFee');\n }\n return true;\n}\n\nexport function isStxBalanceSufficient({\n availableBalance: { amount: availableBalanceAmount },\n amount: { amount: desiredSpend },\n fee: { amount: feeAmount },\n}: IsStxAmountValidArgs) {\n const fee = new BigNumber(stxToMicroStx(feeAmount));\n\n if (!availableBalanceAmount) {\n throw new StacksError('UnknownBalance');\n }\n if (!fee.isFinite()) {\n throw new StacksError('UnknownFee');\n }\n\n const availableBalance = new BigNumber(stxToMicroStx(availableBalanceAmount));\n const spendableAmount = availableBalance.minus(fee);\n const amount = new BigNumber(stxToMicroStx(desiredSpend));\n return spendableAmount.isGreaterThanOrEqualTo(amount);\n}\n","import { ChainId, Money } from '@leather.io/models';\n\nimport {\n isValidAddressChain,\n isValidStacksAddress,\n validatePayerNotRecipient,\n} from './address-validation';\nimport { isStxAmountValid, isStxBalanceSufficient } from './amount-validation';\nimport { StacksError } from './stacks-error';\n\ninterface StacksTransaction {\n amount: Money;\n payer: string;\n recipient: string;\n chainId: ChainId;\n availableBalance: Money;\n fee: Money;\n}\n\nexport function isValidStacksTransaction({\n amount,\n availableBalance,\n fee,\n payer,\n recipient,\n chainId,\n}: StacksTransaction) {\n if (!isValidStacksAddress(payer) || !isValidStacksAddress(recipient)) {\n throw new StacksError('InvalidAddress');\n }\n if (!isValidAddressChain(payer, chainId) || !isValidAddressChain(recipient, chainId)) {\n throw new StacksError('InvalidNetworkAddress');\n }\n if (!validatePayerNotRecipient(payer, recipient)) {\n throw new StacksError('InvalidSameAddress');\n }\n\n if (!isStxAmountValid({ availableBalance, amount, fee })) {\n throw new StacksError('InvalidAmount');\n }\n if (!isStxBalanceSufficient({ availableBalance, amount, fee })) {\n throw new StacksError('InsufficientFunds');\n }\n return true;\n}\n","import { codeBodyString } from '@stacks/transactions';\nimport { z } from 'zod';\n\nexport function isValidContractLength(contract: string) {\n try {\n // `codeBodyString` throws when creating a contract deploy transaction in\n // `@stacks/transaction`. Using this method here, we can validate the\n // contract length and gracefully handle the error\n codeBodyString(contract);\n return true;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (_e: unknown) {\n return false;\n }\n}\n\nexport const clarityContractSchema = z\n .string()\n .refine(contract => isValidContractLength(contract), {\n message: 'ContractExceedsMaxLength',\n });\n","import { createMemoString } from '@stacks/transactions';\nimport { z } from 'zod';\n\nexport const stacksMemoSchema = z.string().refine(\n value => {\n try {\n createMemoString(value);\n return true;\n } catch {\n return false;\n }\n },\n { message: 'Invalid memo string' }\n);\n","import { StacksTransactionWire, serializePayload } from '@stacks/transactions';\n\nexport function getEstimatedUnsignedStacksTxByteLength(transaction: StacksTransactionWire) {\n return transaction.serializeBytes().byteLength;\n}\n\nexport function getSerializedUnsignedStacksTxPayload(transaction: StacksTransactionWire) {\n return serializePayload(transaction.payload);\n}\n","import { getAddressFromPrivateKey, makeRandomPrivKey } from '@stacks/transactions';\n\nexport function generateRandomStacksAddress() {\n const randomPrivateKey = makeRandomPrivKey();\n const privateKeyString = randomPrivateKey;\n const randomAddress = getAddressFromPrivateKey(privateKeyString);\n return randomAddress;\n}\n","import {\n ClarityType,\n ClarityValue,\n ListCV,\n NoneCV,\n PrincipalCV,\n ResponseErrorCV,\n ResponseOkCV,\n SomeCV,\n TupleCV,\n UIntCV,\n} from '@stacks/transactions';\n\nexport function parseClarityUintResponse(response: ClarityValue): bigint {\n if (response.type === ClarityType.ResponseOk && response.value.type === ClarityType.UInt) {\n return BigInt(response.value.value);\n } else if (response.type === ClarityType.UInt) {\n return BigInt(response.value);\n }\n throw new Error('Invalid Clarity response format');\n}\n\nexport function isClarityTuple(cv: ClarityValue): cv is TupleCV {\n return cv.type === ClarityType.Tuple;\n}\n\nexport function isClarityResponseOk(cv: ClarityValue): cv is ResponseOkCV {\n return cv.type === ClarityType.ResponseOk;\n}\n\nexport function isClarityResponseError(cv: ClarityValue): cv is ResponseErrorCV {\n return cv.type === ClarityType.ResponseErr;\n}\n\nexport function isClarityUInt(cv: ClarityValue): cv is UIntCV {\n return cv.type === ClarityType.UInt;\n}\n\nexport function isClarityList(cv: ClarityValue): cv is ListCV {\n return cv.type === ClarityType.List;\n}\n\nexport function isClarityPrincipal(cv: ClarityValue): cv is PrincipalCV {\n return cv.type === ClarityType.PrincipalStandard || cv.type === ClarityType.PrincipalContract;\n}\n\nexport function isClarityOptionalNone(cv: ClarityValue): cv is NoneCV {\n return cv.type === ClarityType.OptionalNone;\n}\n\nexport function isClarityOptionalSome(cv: ClarityValue): cv is SomeCV {\n return cv.type === ClarityType.OptionalSome;\n}\n\nexport function getClarityPrincipal(cv: PrincipalCV): string {\n return cv.value;\n}\n"],"mappings":"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","names":["privateKeyToPublic","bytesToHex","hexToBytes","isString","TransactionTypes","hexToBytes","deserializeCV","bytesToHex","ClarityType","ChainId","isString","BigNumber","BigNumber","z","z","ClarityType"]}
|
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
|
+
"version": "1.19.0",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"type": "module",
|
|
8
8
|
"exports": {
|
|
@@ -19,10 +19,10 @@
|
|
|
19
19
|
"bignumber.js": "9.1.2",
|
|
20
20
|
"c32check": "2.0.0",
|
|
21
21
|
"zod": "4.0.17",
|
|
22
|
-
"@leather.io/constants": "0.27.
|
|
23
|
-
"@leather.io/models": "0.
|
|
24
|
-
"@leather.io/
|
|
25
|
-
"@leather.io/
|
|
22
|
+
"@leather.io/constants": "0.27.4",
|
|
23
|
+
"@leather.io/models": "0.47.0",
|
|
24
|
+
"@leather.io/crypto": "1.12.4",
|
|
25
|
+
"@leather.io/utils": "0.48.2"
|
|
26
26
|
},
|
|
27
27
|
"devDependencies": {
|
|
28
28
|
"tsup": "8.4.0",
|