{"version":3,"file":"lym6u2Yn.js","sources":["../../../../utilities/dids.ts","../../../../utilities/nfts.ts"],"sourcesContent":["/* eslint-disable import/default */\nimport chiaBls from 'chia-bls';\nimport chiaRpc, { type Coin, type CoinSpend } from 'chia-rpc';\nimport clvmLib, { Program as ProgramType } from 'clvm-lib';\n/* eslint-enable import/default */\nimport type { SpendableCoin } from '~/composables/useGoby';\nimport {\n AssertCoinAnnouncement,\n CreateCoin,\n CreatePuzzleAnnouncement,\n ReserveFeeCondition,\n selectXchCoins,\n solutionForConditions,\n trim0x,\n} from '~/utilities/chia';\nimport { DID_INNERPUZ_MOD, SINGLETON_LAUNCHER_MOD, SINGLETON_TOP_LAYER_MOD } from '~/utilities/puzzles';\n\n/* eslint-disable import/no-named-as-default-member */\nconst { toHex } = chiaBls;\nconst { toCoinId } = chiaRpc;\nconst { Program } = clvmLib;\n\n/* eslint-enable import/no-named-as-default-member */\n\nexport function createDidCoinSpends(p2Puzzle: ProgramType, inputCoinRecords: SpendableCoin[], fee = 600_000_000) {\n const { selectedCoins, changeAmount } = selectXchCoins(inputCoinRecords, fee + 1);\n\n const originCoinRecord = selectedCoins[0];\n\n const amount = 1;\n const launcherCoin: Coin = {\n parent_coin_info: `0x${originCoinRecord.coinName}`,\n amount,\n puzzle_hash: `0x${SINGLETON_LAUNCHER_MOD.hashHex()}`,\n };\n const launcherId = toCoinId(launcherCoin);\n\n const backupIdsHash = Program.fromBytes(Program.fromList([]).hash());\n const numOfBackupIdsNeeded = Program.fromInt(0);\n const singletonStruct = Program.cons(\n Program.fromBytes(SINGLETON_TOP_LAYER_MOD.hash()),\n Program.cons(Program.fromBytes(launcherId), Program.fromBytes(SINGLETON_LAUNCHER_MOD.hash()))\n );\n const metadata = Program.fromList([]);\n\n const didInner = DID_INNERPUZ_MOD.curry([p2Puzzle, backupIdsHash, numOfBackupIdsNeeded, singletonStruct, metadata]);\n const didInnerHash = didInner.hash();\n const didFullPuzzle = SINGLETON_TOP_LAYER_MOD.curry([singletonStruct, didInner]);\n const didPuzzleHash = didFullPuzzle.hash();\n\n const announcementMessage = Program.fromList([\n Program.fromBytes(didPuzzleHash),\n Program.fromInt(amount),\n Program.fromHex('0x80'),\n ]).hash();\n\n const inputCoinSolution = solutionForConditions([\n CreateCoin(SINGLETON_LAUNCHER_MOD.hash(), 1),\n CreateCoin(p2Puzzle.hash(), changeAmount),\n AssertCoinAnnouncement(launcherId, announcementMessage),\n ReserveFeeCondition(fee),\n ]);\n const inputCoinSpend: CoinSpend = {\n coin: originCoinRecord.coin,\n puzzle_reveal: p2Puzzle.serializeHex(),\n solution: inputCoinSolution.serializeHex(),\n };\n\n const feeCoinSpends: CoinSpend[] = selectedCoins.slice(1).map(({ coin }) => {\n const feeCoinSolution = solutionForConditions([AssertCoinAnnouncement(launcherId, announcementMessage)]);\n return {\n coin,\n puzzle_reveal: p2Puzzle.serializeHex(),\n solution: feeCoinSolution.serializeHex(),\n };\n });\n\n const launcherSolution = Program.fromList([\n Program.fromBytes(didPuzzleHash),\n Program.fromInt(amount),\n Program.fromHex('0x80'),\n ]);\n const launcherCoinSpend: CoinSpend = {\n coin: launcherCoin,\n puzzle_reveal: SINGLETON_LAUNCHER_MOD.serializeHex(),\n solution: launcherSolution.serializeHex(),\n };\n\n const eveCoin: Coin = {\n parent_coin_info: `0x${toHex(launcherId)}`,\n puzzle_hash: `0x${toHex(didPuzzleHash)}`,\n amount,\n };\n const p2Solution = solutionForConditions([CreateCoin(didInnerHash, eveCoin.amount, [p2Puzzle.hash()])]);\n const eveCoinInnerSolution = Program.fromList([Program.fromInt(1), p2Solution]);\n const eveCoinSolution = Program.fromList([\n Program.fromList([Program.fromHex(originCoinRecord.coinName), Program.fromInt(launcherCoin.amount)]),\n Program.fromInt(eveCoin.amount),\n eveCoinInnerSolution,\n ]);\n\n const eveCoinSpend: CoinSpend = {\n coin: eveCoin,\n puzzle_reveal: didFullPuzzle.serializeHex(),\n solution: eveCoinSolution.serializeHex(),\n };\n return [inputCoinSpend, launcherCoinSpend, eveCoinSpend, ...feeCoinSpends];\n}\n\nexport function createMessageSpend(\n spendableDidCoin: SpendableCoin,\n puzzleAnnouncements: Uint8Array[]\n): { didId: Uint8Array; didCoinSpend: CoinSpend; didInnerHash: Uint8Array } {\n if (!spendableDidCoin.lineageProof) {\n throw new Error('Missing lineage proof');\n }\n\n console.log(spendableDidCoin);\n const didPuzzle = Program.deserializeHex(spendableDidCoin.puzzle);\n const [, curriedArgs] = didPuzzle.uncurry()!;\n const didId = curriedArgs[0].rest.first.toBytes();\n const didInnerPuzzle = curriedArgs[1];\n const [, innerCurriedArgs] = didInnerPuzzle.uncurry()!;\n const p2Puzzle = innerCurriedArgs[0];\n\n const didCoin: Coin = spendableDidCoin.coin;\n const conditions = [\n CreateCoin(didInnerPuzzle.hash(), didCoin.amount, [p2Puzzle.hash()]),\n ...puzzleAnnouncements.map((message) => CreatePuzzleAnnouncement(message)),\n ];\n const p2Solution = solutionForConditions(conditions);\n const innerSolution = Program.fromList([Program.fromInt(1), p2Solution]);\n const fullSolution = Program.fromList([\n Program.fromList([\n Program.fromHex(trim0x(spendableDidCoin.lineageProof.parentName!)),\n Program.fromHex(trim0x(spendableDidCoin.lineageProof.innerPuzzleHash!)),\n Program.fromInt(spendableDidCoin.lineageProof.amount!),\n ]),\n Program.fromInt(didCoin.amount),\n innerSolution,\n ]);\n return {\n didId,\n didInnerHash: didInnerPuzzle.hash(),\n didCoinSpend: {\n coin: didCoin,\n puzzle_reveal: `0x${spendableDidCoin.puzzle}`,\n solution: fullSolution.serializeHex(),\n },\n };\n}\n","/* eslint-disable import/default */\nimport chiaBls from 'chia-bls';\nimport type { Coin, CoinSpend } from 'chia-rpc';\nimport clvmLib, { type Program as ProgramType } from 'clvm-lib';\n/* eslint-enable import/default */\nimport { type SpendableCoin, toCoinId } from '~/composables/useGoby';\nimport {\n AssertCoinAnnouncement,\n CreateCoin,\n CreateCoinAnnouncement,\n ReserveFeeCondition,\n selectXchCoins,\n solutionForConditions,\n trim0x,\n} from '~/utilities/chia';\nimport { createMessageSpend } from '~/utilities/dids';\n\n/* eslint-disable import/no-named-as-default-member */\nconst { fromHex, toHex } = chiaBls;\nconst { Program } = clvmLib;\n/* eslint-enable import/no-named-as-default-member */\n\nexport function setNftDid(spendableNftCoins: SpendableCoin[], spendableDidCoin: SpendableCoin | null): CoinSpend[] {\n const parsedNfts: (SpendableCoin & { nftId: Uint8Array; currentDidId: ProgramType; p2Puzzle: ProgramType })[] = [];\n for (const spendableNftCoin of spendableNftCoins) {\n const nftPuzzle = Program.deserializeHex(spendableNftCoin.puzzle);\n\n const [, curriedArgs] = nftPuzzle.uncurry()!;\n const nftId = curriedArgs[0].rest.first.toBytes();\n\n const nftStateLayerPuzzle = curriedArgs[1];\n const [, stateLayerCurriedArgs] = nftStateLayerPuzzle.uncurry()!;\n\n const nftOwnershipLayerPuzzle = stateLayerCurriedArgs[3];\n const [, ownershipLayerCurriedArgs] = nftOwnershipLayerPuzzle.uncurry()!;\n\n const currentDidId = ownershipLayerCurriedArgs[1];\n const p2Puzzle = ownershipLayerCurriedArgs[3];\n\n parsedNfts.push({ ...spendableNftCoin, nftId, currentDidId, p2Puzzle });\n }\n\n let didId: Uint8Array;\n let didInnerHash: Uint8Array;\n let didCoinSpend: CoinSpend | undefined;\n if (spendableDidCoin !== null) {\n ({ didId, didInnerHash, didCoinSpend } = createMessageSpend(\n spendableDidCoin,\n parsedNfts.map((nft) => nft.nftId)\n ));\n } else {\n didId = Program.fromList([]).toBytes();\n didInnerHash = Program.fromList([]).toBytes();\n didCoinSpend = undefined;\n }\n\n console.log(`Moving NFTs [${parsedNfts.map((nft) => toHex(nft.nftId)).join(', ')}] to DID ${toHex(didId)}`);\n\n const coinSpends = [];\n for (const [index, nft] of parsedNfts.entries()) {\n if (didId === nft.currentDidId.toBytes()) {\n console.log('This NFT is already associated with this profile, ignoring.');\n continue;\n }\n\n if (!nft.lineageProof) {\n throw new Error('Missing lineage proof');\n }\n\n const conditions = [\n CreateCoin(nft.p2Puzzle.hash(), nft.coin.amount, [nft.p2Puzzle.hash()]),\n Program.fromList([\n Program.fromInt(-10),\n Program.fromBytes(didId),\n Program.fromList([]),\n Program.fromBytes(didInnerHash),\n ]),\n ];\n\n if (index === 0) {\n conditions.push(CreateCoinAnnouncement(fromHex('0x80')));\n }\n\n const p2Solution = solutionForConditions(conditions);\n const ownershipLayerSolution = Program.fromList([p2Solution]);\n const stateLayerSolution = Program.fromList([ownershipLayerSolution]);\n const fullSolution = Program.fromList([\n Program.fromList([\n Program.fromHex(trim0x(nft.lineageProof.parentName!)),\n Program.fromHex(trim0x(nft.lineageProof.innerPuzzleHash!)),\n Program.fromInt(nft.lineageProof.amount!),\n ]),\n Program.fromInt(nft.coin.amount),\n stateLayerSolution,\n ]);\n\n coinSpends.push({\n coin: nft.coin,\n puzzle_reveal: nft.puzzle,\n solution: fullSolution.serializeHex(),\n });\n }\n if (didCoinSpend) {\n coinSpends.push(didCoinSpend);\n }\n return coinSpends;\n}\n\nexport function createSecureTheBagRootSpend(\n didSpendableCoin: SpendableCoin,\n rootPuzzleHex: string,\n rootCoinAmount: number,\n xchCoins: SpendableCoin[],\n extraCoinsToCreate: { puzzleHash: Uint8Array; amount: number }[] = [],\n fee = 100_000_000\n) {\n const secureTheMintRootPuzzle = Program.deserializeHex(rootPuzzleHex);\n\n const didFullPuzzle = Program.deserializeHex(didSpendableCoin.puzzle);\n const [, curriedArgs] = didFullPuzzle.uncurry()!;\n const innerPuzzle = curriedArgs[1];\n const didInnerHash = innerPuzzle.hash();\n const [, innerCurriedArgs] = innerPuzzle.uncurry()!;\n const p2Puzzle = innerCurriedArgs[0];\n\n const didCoin = didSpendableCoin.coin;\n const didCoinName = toCoinId(didCoin);\n console.log('DID coin ID', toHex(didCoinName));\n\n const lineageProof = didSpendableCoin.lineageProof;\n if (!lineageProof || !lineageProof.parentName || !lineageProof.innerPuzzleHash || !lineageProof.amount) {\n throw new Error('Missing lineage proof');\n }\n const p2Solution = solutionForConditions([\n CreateCoin(didInnerHash, didCoin.amount, [p2Puzzle.hash()]),\n CreateCoin(secureTheMintRootPuzzle.hash(), 0),\n CreateCoinAnnouncement(fromHex('24')),\n ]);\n const didInnerSolution = Program.fromList([Program.fromInt(1), p2Solution]);\n const didSolution = Program.fromList([\n Program.fromList([\n Program.fromHex(lineageProof.parentName.replace('0x', '')),\n Program.fromHex(lineageProof.innerPuzzleHash.replace('0x', '')),\n Program.fromInt(lineageProof.amount),\n ]),\n Program.fromInt(didCoin.amount),\n didInnerSolution,\n ]);\n\n const didCoinSpend: CoinSpend = {\n coin: didCoin,\n puzzle_reveal: didFullPuzzle.serializeHex(),\n solution: didSolution.serializeHex(),\n };\n\n const stbRootCoin: Coin = {\n amount: 0,\n parent_coin_info: `0x${toHex(didCoinName)}`,\n puzzle_hash: `0x${secureTheMintRootPuzzle.hashHex()}`,\n };\n\n const stbRootSpend: CoinSpend = {\n coin: stbRootCoin,\n puzzle_reveal: secureTheMintRootPuzzle.serializeHex(),\n solution: Program.fromList([]).serializeHex(),\n };\n\n const extraCoinAmount = extraCoinsToCreate.reduce((acc, coin) => acc + coin.amount, 0);\n const { selectedCoins: feeCoins, changeAmount } = selectXchCoins(xchCoins, fee + rootCoinAmount + extraCoinAmount);\n const feeCoinSpends = feeCoins.map((feeCoin, index) => {\n const conditions = [AssertCoinAnnouncement(toCoinId(stbRootCoin), fromHex('24'))];\n if (index === 0) {\n conditions.push(\n ...[\n AssertCoinAnnouncement(didCoinName, fromHex('24')),\n ...(changeAmount ? [CreateCoin(fromHex(feeCoin.coin.puzzle_hash.replace('0x', '')), changeAmount)] : []),\n ...(fee ? [ReserveFeeCondition(fee)] : []),\n ...extraCoinsToCreate.map((coin) => CreateCoin(coin.puzzleHash, coin.amount)),\n ]\n );\n }\n const inputCoinSolution = solutionForConditions(conditions);\n return {\n coin: feeCoin.coin,\n puzzle_reveal: feeCoin.puzzle,\n solution: inputCoinSolution.serializeHex(),\n };\n });\n\n return [didCoinSpend, ...feeCoinSpends, stbRootSpend];\n}\n"],"names":["toHex","chiaBls","toCoinId","chiaRpc","Program","clvmLib","createDidCoinSpends","p2Puzzle","inputCoinRecords","fee","selectedCoins","changeAmount","selectXchCoins","originCoinRecord","amount","launcherCoin","SINGLETON_LAUNCHER_MOD","launcherId","backupIdsHash","numOfBackupIdsNeeded","singletonStruct","SINGLETON_TOP_LAYER_MOD","metadata","didInner","DID_INNERPUZ_MOD","didInnerHash","didFullPuzzle","didPuzzleHash","announcementMessage","inputCoinSolution","solutionForConditions","CreateCoin","AssertCoinAnnouncement","ReserveFeeCondition","inputCoinSpend","feeCoinSpends","coin","feeCoinSolution","launcherSolution","launcherCoinSpend","eveCoin","p2Solution","eveCoinInnerSolution","eveCoinSolution","eveCoinSpend","createMessageSpend","spendableDidCoin","puzzleAnnouncements","didPuzzle","curriedArgs","didId","didInnerPuzzle","innerCurriedArgs","didCoin","conditions","message","CreatePuzzleAnnouncement","innerSolution","fullSolution","trim0x","fromHex","setNftDid","spendableNftCoins","parsedNfts","spendableNftCoin","nftPuzzle","nftId","nftStateLayerPuzzle","stateLayerCurriedArgs","nftOwnershipLayerPuzzle","ownershipLayerCurriedArgs","currentDidId","didCoinSpend","nft","coinSpends","index","CreateCoinAnnouncement","ownershipLayerSolution","stateLayerSolution","createSecureTheBagRootSpend","didSpendableCoin","rootPuzzleHex","rootCoinAmount","xchCoins","extraCoinsToCreate","secureTheMintRootPuzzle","innerPuzzle","didCoinName","lineageProof","didInnerSolution","didSolution","stbRootCoin","stbRootSpend","extraCoinAmount","acc","feeCoins","feeCoin"],"mappings":"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"}