{"_id":"@bagel-rwa/sdk","_rev":"16-97baf8e7b1fa254ad2fe5050645a91aa","name":"@bagel-rwa/sdk","dist-tags":{"latest":"1.0.16"},"versions":{"1.0.0":{"name":"@bagel-rwa/sdk","version":"1.0.0","keywords":["defi","nft","fractionalization","chainlink","ethereum","web3","sdk"],"author":{"name":"Obigwe Joshua"},"license":"MIT","_id":"@bagel-rwa/sdk@1.0.0","maintainers":[{"name":"blok_hamster","email":"joshuaobigwe@icloud.com"}],"dist":{"shasum":"23a60a8d2b8b48522df1afe1f60d825e5087df50","tarball":"https://registry.npmjs.org/@bagel-rwa/sdk/-/sdk-1.0.0.tgz","fileCount":80,"integrity":"sha512-1tAaHKUf9apw0rWGSiNpGLGwu0DEXc83ts22YYSHzJGmsBekUlp87gw8bu19DC6j4Ye8o6opE30HjqbqHwQRDQ==","signatures":[{"sig":"MEUCIGnQaFMYGcK+exthF0UmJvzSeEaPhICWznAsdIKfzJYhAiEApaO5xes7tFu7MSCiesc0vmJGTeueUvkN8MT5XFXNeLk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3583127},"main":"dist/index.js","types":"dist/index.d.ts","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"jest","build":"tsc","clean":"rm -rf dist","example":"tsx examples/basic-usage.ts","lint:fix":"eslint src/**/*.ts --fix","example:build":"tsc && node dist/examples/basic-usage.js","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"blok_hamster","actor":{"name":"blok_hamster","type":"user","email":"joshuaobigwe@icloud.com"},"email":"joshuaobigwe@icloud.com"},"repository":{"type":"git"},"_npmVersion":"10.9.2","description":"SDK for integrating with the  Bagels Fractionalized NFT DeFi Platform smart contracts","directories":{},"_nodeVersion":"23.6.0","dependencies":{"viem":"^1.19.0","wagmi":"^1.4.0","ethers":"^6.0.0","@chainlink/contracts":"^0.8.0","@ethersproject/experimental":"^5.8.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.3","jest":"^29.0.0","eslint":"^8.0.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"ethers":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/sdk_1.0.0_1750799528710_0.4632239967347618","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@bagel-rwa/sdk","version":"1.0.1","keywords":["defi","nft","fractionalization","chainlink","ethereum","web3","sdk"],"author":{"name":"Obigwe Joshua"},"license":"MIT","_id":"@bagel-rwa/sdk@1.0.1","maintainers":[{"name":"blok_hamster","email":"joshuaobigwe@icloud.com"}],"dist":{"shasum":"bc265bc61bb895ea328812d2f273ea6dd1a40fe8","tarball":"https://registry.npmjs.org/@bagel-rwa/sdk/-/sdk-1.0.1.tgz","fileCount":80,"integrity":"sha512-DiMmfWUEWEiQjOSz8o2WfMEq8CArTGxWYEMx+dftNs641YDtj6EI16/Ek9pR7JAhejW0uMYvjjvjT/rp9ASg2Q==","signatures":[{"sig":"MEQCHySYBDQ3vu4FiEnGiK+hGGz5F5t7GeHUb2mNxjIKSLkCIQCES0bWnf7SlVxnVLXGp6gZcn6RUWwj9oW0RNptjltGaQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3582523},"main":"dist/index.js","types":"dist/index.d.ts","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"jest","build":"tsc","clean":"rm -rf dist","example":"tsx examples/basic-usage.ts","lint:fix":"eslint src/**/*.ts --fix","example:build":"tsc && node dist/examples/basic-usage.js","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"blok_hamster","actor":{"name":"blok_hamster","type":"user","email":"joshuaobigwe@icloud.com"},"email":"joshuaobigwe@icloud.com"},"repository":{"type":"git"},"_npmVersion":"10.9.2","description":"SDK for integrating with the  Bagels Fractionalized NFT DeFi Platform smart contracts","directories":{},"_nodeVersion":"23.6.0","dependencies":{"viem":"^1.19.0","wagmi":"^1.4.0","ethers":"^6.0.0","@chainlink/contracts":"^0.8.0","@ethersproject/experimental":"^5.8.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.3","jest":"^29.0.0","eslint":"^8.0.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"ethers":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/sdk_1.0.1_1750800209633_0.27414657025241485","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@bagel-rwa/sdk","version":"1.0.2","keywords":["defi","nft","fractionalization","chainlink","ethereum","web3","sdk"],"author":{"name":"Obigwe Joshua"},"license":"MIT","_id":"@bagel-rwa/sdk@1.0.2","maintainers":[{"name":"blok_hamster","email":"joshuaobigwe@icloud.com"}],"dist":{"shasum":"2bd07a9b79386a20588c9b5ef50de85ac295208f","tarball":"https://registry.npmjs.org/@bagel-rwa/sdk/-/sdk-1.0.2.tgz","fileCount":76,"integrity":"sha512-oqLMHjYOu0/wM5OQ7tmpti8fOlhPvDq68RBCGQxgvxfpVRNvCbVB+SWawp4tN5SrYAUpCiIRxpTtnOUXGcrp5A==","signatures":[{"sig":"MEQCIDF18OyIHXFSW9hy/jJHRPjIDKvf/nw3XPIgPwAIaZXsAiBol96Sz2ouaiF/SQlr6xfVrqrnkZ+AosvQHIvV2ijJlA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3505362},"main":"dist/src/index.js","types":"dist/src/index.d.ts","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"jest","build":"tsc","clean":"rm -rf dist","example":"tsx examples/basic-usage.ts","lint:fix":"eslint src/**/*.ts --fix","example:build":"tsc && node dist/examples/basic-usage.js","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"blok_hamster","actor":{"name":"blok_hamster","type":"user","email":"joshuaobigwe@icloud.com"},"email":"joshuaobigwe@icloud.com"},"repository":{"type":"git"},"_npmVersion":"10.9.2","description":"SDK for integrating with the  Bagels Fractionalized NFT DeFi Platform smart contracts","directories":{},"_nodeVersion":"23.6.0","dependencies":{"viem":"^1.19.0","wagmi":"^1.4.0","ethers":"^6.0.0","@chainlink/contracts":"^0.8.0","@ethersproject/experimental":"^5.8.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.3","jest":"^29.0.0","eslint":"^8.0.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"ethers":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/sdk_1.0.2_1750802471490_0.3577476353325719","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@bagel-rwa/sdk","version":"1.0.4","keywords":["defi","nft","fractionalization","chainlink","ethereum","web3","sdk"],"author":{"name":"Obigwe Joshua"},"license":"MIT","_id":"@bagel-rwa/sdk@1.0.4","maintainers":[{"name":"blok_hamster","email":"joshuaobigwe@icloud.com"}],"dist":{"shasum":"4cb57ab3d0f988aea4723d20efa06155dd13d311","tarball":"https://registry.npmjs.org/@bagel-rwa/sdk/-/sdk-1.0.4.tgz","fileCount":86,"integrity":"sha512-yX60LOVcGT//FWuoqoZmlIgs1Qt1qKWJq/HxW87FwxXpmxue7xa2EDJ63ABwkahqRp8w3yWTdMld0zPRK0fvTg==","signatures":[{"sig":"MEYCIQC/wigEicVCClxWbShndrSQpTIlz9gH2ICIyg+aPb3POAIhANtqMyzhTgfcMZKusI8de0+OMsdye+xV5NViVXtXvDU4","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4373198},"main":"dist/src/index.js","types":"dist/src/index.d.ts","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"jest","build":"tsc","clean":"rm -rf dist","example":"tsx examples/basic-usage.ts","lint:fix":"eslint src/**/*.ts --fix","example:build":"tsc && node dist/examples/basic-usage.js","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"blok_hamster","actor":{"name":"blok_hamster","type":"user","email":"joshuaobigwe@icloud.com"},"email":"joshuaobigwe@icloud.com"},"repository":{"type":"git"},"_npmVersion":"10.9.2","description":"SDK for integrating with the  Bagels Fractionalized NFT DeFi Platform smart contracts","directories":{},"_nodeVersion":"23.6.0","dependencies":{"viem":"^1.19.0","wagmi":"^1.4.0","ethers":"^6.0.0","@chainlink/contracts":"^0.8.0","@ethersproject/experimental":"^5.8.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.3","jest":"^29.0.0","eslint":"^8.0.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"ethers":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/sdk_1.0.4_1750916876383_0.8569499628037618","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@bagel-rwa/sdk","version":"1.0.5","keywords":["defi","nft","fractionalization","chainlink","ethereum","web3","sdk"],"author":{"name":"Obigwe Joshua"},"license":"MIT","_id":"@bagel-rwa/sdk@1.0.5","maintainers":[{"name":"blok_hamster","email":"joshuaobigwe@icloud.com"}],"dist":{"shasum":"f0611a3142dbf1f05f6042b37f3929c2d4dd699c","tarball":"https://registry.npmjs.org/@bagel-rwa/sdk/-/sdk-1.0.5.tgz","fileCount":86,"integrity":"sha512-KVay4qQ5dJGgfxYEEB7oUjRdtw7wYTjpvmh+Ytz0XW+tGthTSPLvSKY3Xd/0C1gdLnXxydMtlERGPpO9IvYo4Q==","signatures":[{"sig":"MEUCIQDBLl7BuD5tQ/ndNBw28AeF1Wap6/XPIGgUq4sSR/nQFAIgHTeXEO+0cI4sjCXmMvQTj5KBdk4UIQVaEMMSwNB/uE0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4373095},"main":"dist/src/index.js","types":"dist/src/index.d.ts","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"jest","build":"tsc","clean":"rm -rf dist","example":"tsx examples/basic-usage.ts","lint:fix":"eslint src/**/*.ts --fix","example:build":"tsc && node dist/examples/basic-usage.js","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"blok_hamster","actor":{"name":"blok_hamster","type":"user","email":"joshuaobigwe@icloud.com"},"email":"joshuaobigwe@icloud.com"},"repository":{"type":"git"},"_npmVersion":"10.9.2","description":"SDK for integrating with the  Bagels Fractionalized NFT DeFi Platform smart contracts","directories":{},"_nodeVersion":"23.6.0","dependencies":{"viem":"^1.19.0","wagmi":"^1.4.0","ethers":"^6.0.0","@chainlink/contracts":"^0.8.0","@ethersproject/experimental":"^5.8.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.3","jest":"^29.0.0","eslint":"^8.0.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"ethers":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/sdk_1.0.5_1750918019069_0.7514353422834397","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"@bagel-rwa/sdk","version":"1.0.6","keywords":["defi","nft","fractionalization","chainlink","ethereum","web3","sdk"],"author":{"name":"Obigwe Joshua"},"license":"MIT","_id":"@bagel-rwa/sdk@1.0.6","maintainers":[{"name":"blok_hamster","email":"joshuaobigwe@icloud.com"}],"dist":{"shasum":"016265d5f1f033073f72b0a7b33e9cf5d3a67a61","tarball":"https://registry.npmjs.org/@bagel-rwa/sdk/-/sdk-1.0.6.tgz","fileCount":86,"integrity":"sha512-wZcwBM/z2ZYE69qQQ7KjCQ8t2ZtXN6M8NVYIz8KHvQdzAJsyMnwpI6wtDuUFi5KZzNSDnzdxuNvVN2aM0XrrdA==","signatures":[{"sig":"MEYCIQCKHwWPxb19OpxUCPmtRszU+Xk+TlQLSfMbF4y1/fWJ+AIhANFwUPXpbRFR05ks+AOxsKoDUPI+iaMfM1t3Q97kP4Zz","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4373179},"main":"dist/src/index.js","types":"dist/src/index.d.ts","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"jest","build":"tsc","clean":"rm -rf dist","example":"tsx examples/basic-usage.ts","lint:fix":"eslint src/**/*.ts --fix","example:build":"tsc && node dist/examples/basic-usage.js","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"blok_hamster","actor":{"name":"blok_hamster","type":"user","email":"joshuaobigwe@icloud.com"},"email":"joshuaobigwe@icloud.com"},"repository":{"type":"git"},"_npmVersion":"10.9.2","description":"SDK for integrating with the  Bagels Fractionalized NFT DeFi Platform smart contracts","directories":{},"_nodeVersion":"23.6.0","dependencies":{"viem":"^1.19.0","wagmi":"^1.4.0","ethers":"^6.0.0","@chainlink/contracts":"^0.8.0","@ethersproject/experimental":"^5.8.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.3","jest":"^29.0.0","eslint":"^8.0.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"ethers":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/sdk_1.0.6_1750930103432_0.7043944430038496","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"@bagel-rwa/sdk","version":"1.0.7","keywords":["defi","nft","fractionalization","chainlink","ethereum","web3","sdk"],"author":{"name":"Obigwe Joshua"},"license":"MIT","_id":"@bagel-rwa/sdk@1.0.7","maintainers":[{"name":"blok_hamster","email":"joshuaobigwe@icloud.com"}],"dist":{"shasum":"6f042eb55711127bac5290d00d8c97ca0d38fbec","tarball":"https://registry.npmjs.org/@bagel-rwa/sdk/-/sdk-1.0.7.tgz","fileCount":86,"integrity":"sha512-F/ct2DknKkwZQgy08vwj96B8DPAE4Z3EnCEfGaKDpRtyquYAuT9sai4CLAeWwM+FztJszfzOnlyI1C3mJNRNSg==","signatures":[{"sig":"MEUCIHuVMty8Y6NLfADCnCeDdMd+ywG6Mm0W6jJQo1SuZcv5AiEAmxQ86MKRH6sTjiHQ0b842gdnkEtRfEtpLKUfHjzH2fc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4372416},"main":"dist/src/index.js","types":"dist/src/index.d.ts","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"jest","build":"tsc","clean":"rm -rf dist","example":"tsx examples/basic-usage.ts","lint:fix":"eslint src/**/*.ts --fix","example:build":"tsc && node dist/examples/basic-usage.js","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"blok_hamster","actor":{"name":"blok_hamster","type":"user","email":"joshuaobigwe@icloud.com"},"email":"joshuaobigwe@icloud.com"},"repository":{"type":"git"},"_npmVersion":"10.9.2","description":"SDK for integrating with the  Bagels Fractionalized NFT DeFi Platform smart contracts","directories":{},"_nodeVersion":"23.6.0","dependencies":{"viem":"^1.19.0","wagmi":"^1.4.0","ethers":"^6.0.0","@chainlink/contracts":"^0.8.0","@ethersproject/experimental":"^5.8.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.3","jest":"^29.0.0","eslint":"^8.0.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"ethers":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/sdk_1.0.7_1750937866949_0.8485031628850284","host":"s3://npm-registry-packages-npm-production"}},"1.0.8":{"name":"@bagel-rwa/sdk","version":"1.0.8","keywords":["defi","nft","fractionalization","chainlink","ethereum","web3","sdk"],"author":{"name":"Obigwe Joshua"},"license":"MIT","_id":"@bagel-rwa/sdk@1.0.8","maintainers":[{"name":"blok_hamster","email":"joshuaobigwe@icloud.com"}],"dist":{"shasum":"60088ee0db8b8ff4405328df4881fcd983201689","tarball":"https://registry.npmjs.org/@bagel-rwa/sdk/-/sdk-1.0.8.tgz","fileCount":86,"integrity":"sha512-aOtET07LRE+XBMLGtUYUIRGwQBy3INmFiLHhuSUzAHHNWDG2YuH003zbIG5Sq3g29UF/FyiF27csJNU2H93bVA==","signatures":[{"sig":"MEYCIQDDjTckUl+UxrVSyO+oBM1/qH8lRsXX0qNnA4S+czoPuAIhAKmRBt04P9bN7TcsbLwEzCI2FpG9FMSe7Dp7Ea9bnXFX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4372143},"main":"dist/src/index.js","types":"dist/src/index.d.ts","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"jest","build":"tsc","clean":"rm -rf dist","example":"tsx examples/basic-usage.ts","lint:fix":"eslint src/**/*.ts --fix","example:build":"tsc && node dist/examples/basic-usage.js","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"blok_hamster","actor":{"name":"blok_hamster","type":"user","email":"joshuaobigwe@icloud.com"},"email":"joshuaobigwe@icloud.com"},"repository":{"type":"git"},"_npmVersion":"10.9.2","description":"SDK for integrating with the  Bagels Fractionalized NFT DeFi Platform smart contracts","directories":{},"_nodeVersion":"23.6.0","dependencies":{"viem":"^1.19.0","wagmi":"^1.4.0","ethers":"^6.0.0","@chainlink/contracts":"^0.8.0","@ethersproject/experimental":"^5.8.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.3","jest":"^29.0.0","eslint":"^8.0.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"ethers":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/sdk_1.0.8_1751003227310_0.7047814065682878","host":"s3://npm-registry-packages-npm-production"}},"1.0.9":{"name":"@bagel-rwa/sdk","version":"1.0.9","keywords":["defi","nft","fractionalization","chainlink","ethereum","web3","sdk"],"author":{"name":"Obigwe Joshua"},"license":"MIT","_id":"@bagel-rwa/sdk@1.0.9","maintainers":[{"name":"blok_hamster","email":"joshuaobigwe@icloud.com"}],"dist":{"shasum":"932f72eb19d81c9ad363d597fabcd6d1b239dd1d","tarball":"https://registry.npmjs.org/@bagel-rwa/sdk/-/sdk-1.0.9.tgz","fileCount":86,"integrity":"sha512-zIb+/wO9AlRf/zHv5eZA8PSVbNmPEBUhKKPIrTVEZUbWz/SPHdeyPMAb5j72WN/6VeFJeQ0mLBVETTyoWmkuhA==","signatures":[{"sig":"MEYCIQCzhaSuXGYzE7Jx4wcZTTmhAumkddPsMIZdzNSUtH/RZQIhAKHbYnwV7In/DPYIz6azBveI+oc3IDVG0Mau35H6hZvU","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4372536},"main":"dist/src/index.js","types":"dist/src/index.d.ts","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"jest","build":"tsc","clean":"rm -rf dist","example":"tsx examples/basic-usage.ts","lint:fix":"eslint src/**/*.ts --fix","example:build":"tsc && node dist/examples/basic-usage.js","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"blok_hamster","actor":{"name":"blok_hamster","type":"user","email":"joshuaobigwe@icloud.com"},"email":"joshuaobigwe@icloud.com"},"repository":{"type":"git"},"_npmVersion":"10.9.2","description":"SDK for integrating with the  Bagels Fractionalized NFT DeFi Platform smart contracts","directories":{},"_nodeVersion":"23.6.0","dependencies":{"viem":"^1.19.0","wagmi":"^1.4.0","ethers":"^6.0.0","@chainlink/contracts":"^0.8.0","@ethersproject/experimental":"^5.8.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.3","jest":"^29.0.0","eslint":"^8.0.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"ethers":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/sdk_1.0.9_1751006803047_0.6597301501376782","host":"s3://npm-registry-packages-npm-production"}},"1.0.10":{"name":"@bagel-rwa/sdk","version":"1.0.10","keywords":["defi","nft","fractionalization","chainlink","ethereum","web3","sdk"],"author":{"name":"Obigwe Joshua"},"license":"MIT","_id":"@bagel-rwa/sdk@1.0.10","maintainers":[{"name":"blok_hamster","email":"joshuaobigwe@icloud.com"}],"dist":{"shasum":"88a34a0bf06a1cadb59b7636406c655f0c6519b1","tarball":"https://registry.npmjs.org/@bagel-rwa/sdk/-/sdk-1.0.10.tgz","fileCount":86,"integrity":"sha512-ZQnsbBiuOdEGccPueFkAbiEKdA6LXAfbrSeUI6CFofdjhFJN8x2rxxr7KrO45t76laBglT/mbKkJ/WuF8ISnnw==","signatures":[{"sig":"MEUCIHawCm3HgDWLdNvJ6U0z9XJiSkWiBpDB71TaYQT9GbjtAiEA7yjuASBMZTrS+mvAa6PA68Qky3cP6mNMEE0XkF6Iiag=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4455411},"main":"dist/src/index.js","types":"dist/src/index.d.ts","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"jest","build":"tsc","clean":"rm -rf dist","example":"tsx examples/basic-usage.ts","lint:fix":"eslint src/**/*.ts --fix","example:build":"tsc && node dist/examples/basic-usage.js","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"blok_hamster","actor":{"name":"blok_hamster","type":"user","email":"joshuaobigwe@icloud.com"},"email":"joshuaobigwe@icloud.com"},"repository":{"type":"git"},"_npmVersion":"10.9.2","description":"SDK for integrating with the  Bagels Fractionalized NFT DeFi Platform smart contracts","directories":{},"_nodeVersion":"23.6.0","dependencies":{"viem":"^1.19.0","wagmi":"^1.4.0","ethers":"^6.0.0","@chainlink/contracts":"^0.8.0","@ethersproject/experimental":"^5.8.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.3","jest":"^29.0.0","eslint":"^8.0.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"ethers":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/sdk_1.0.10_1751021372335_0.8045942525081495","host":"s3://npm-registry-packages-npm-production"}},"1.0.11":{"name":"@bagel-rwa/sdk","version":"1.0.11","keywords":["defi","nft","fractionalization","chainlink","ethereum","web3","sdk"],"author":{"name":"Obigwe Joshua"},"license":"MIT","_id":"@bagel-rwa/sdk@1.0.11","maintainers":[{"name":"blok_hamster","email":"joshuaobigwe@icloud.com"}],"dist":{"shasum":"542e64d8feffa91b3ec8f47a7434ee5838d818a3","tarball":"https://registry.npmjs.org/@bagel-rwa/sdk/-/sdk-1.0.11.tgz","fileCount":86,"integrity":"sha512-VK+B1hxk9mW6HEhzW9eSFBVltwPNpPbJry4lVw3Elpq0xeqOn0EUEdJ1IOY7E2d7d30AVvUWk2X2iCS1K9Hgdw==","signatures":[{"sig":"MEYCIQCpUMF8v8jRVO+3OcSdTEkvLPc9T/ddqscKgzaRFZw+CgIhAJkj502Um2+78VLi4f9mYo6q+rzxiB82NuvjxZcZrg9W","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4455823},"main":"dist/src/index.js","types":"dist/src/index.d.ts","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"jest","build":"tsc","clean":"rm -rf dist","example":"tsx examples/basic-usage.ts","lint:fix":"eslint src/**/*.ts --fix","example:build":"tsc && node dist/examples/basic-usage.js","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"blok_hamster","actor":{"name":"blok_hamster","type":"user","email":"joshuaobigwe@icloud.com"},"email":"joshuaobigwe@icloud.com"},"repository":{"type":"git"},"_npmVersion":"10.9.2","description":"SDK for integrating with the  Bagels Fractionalized NFT DeFi Platform smart contracts","directories":{},"_nodeVersion":"23.6.0","dependencies":{"viem":"^1.19.0","wagmi":"^1.4.0","ethers":"^6.0.0","@chainlink/contracts":"^0.8.0","@ethersproject/experimental":"^5.8.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.3","jest":"^29.0.0","eslint":"^8.0.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"ethers":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/sdk_1.0.11_1751028488823_0.13101784931556337","host":"s3://npm-registry-packages-npm-production"}},"1.0.12":{"name":"@bagel-rwa/sdk","version":"1.0.12","keywords":["defi","nft","fractionalization","chainlink","ethereum","web3","sdk"],"author":{"name":"Obigwe Joshua"},"license":"MIT","_id":"@bagel-rwa/sdk@1.0.12","maintainers":[{"name":"blok_hamster","email":"joshuaobigwe@icloud.com"}],"dist":{"shasum":"d2be5dba37c52a74542af91b6cdc4e719c59568f","tarball":"https://registry.npmjs.org/@bagel-rwa/sdk/-/sdk-1.0.12.tgz","fileCount":86,"integrity":"sha512-bEUjTxG9VU+m+ruMXjRcW03qFw9xhEnzq0YBu4qMC2Zcx4VZNLEmwrDLTFtNYoUXLrN/NfmMqfsR5D2eRScEIQ==","signatures":[{"sig":"MEUCIBwpTbzESATKzcsJmnml2AolgELCPmFcCJEUWoCW3xVfAiEAqO0ve2/s/8o+RVrzZC2ZV4EnLv9Ah8IYFYIzy7A087s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4455739},"main":"dist/src/index.js","types":"dist/src/index.d.ts","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"jest","build":"tsc","clean":"rm -rf dist","example":"tsx examples/basic-usage.ts","lint:fix":"eslint src/**/*.ts --fix","example:build":"tsc && node dist/examples/basic-usage.js","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"blok_hamster","actor":{"name":"blok_hamster","type":"user","email":"joshuaobigwe@icloud.com"},"email":"joshuaobigwe@icloud.com"},"repository":{"type":"git"},"_npmVersion":"10.9.2","description":"SDK for integrating with the  Bagels Fractionalized NFT DeFi Platform smart contracts","directories":{},"_nodeVersion":"23.6.0","dependencies":{"viem":"^1.19.0","wagmi":"^1.4.0","ethers":"^6.0.0","@chainlink/contracts":"^0.8.0","@ethersproject/experimental":"^5.8.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.3","jest":"^29.0.0","eslint":"^8.0.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"ethers":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/sdk_1.0.12_1751042247354_0.683971075853248","host":"s3://npm-registry-packages-npm-production"}},"1.0.13":{"name":"@bagel-rwa/sdk","version":"1.0.13","keywords":["defi","nft","fractionalization","chainlink","ethereum","web3","sdk"],"author":{"name":"Obigwe Joshua"},"license":"MIT","_id":"@bagel-rwa/sdk@1.0.13","maintainers":[{"name":"blok_hamster","email":"joshuaobigwe@icloud.com"}],"dist":{"shasum":"83cadb6f0819aaeaba31fa2653c2a280a90d5cc7","tarball":"https://registry.npmjs.org/@bagel-rwa/sdk/-/sdk-1.0.13.tgz","fileCount":86,"integrity":"sha512-nVKDt40Nos+2BEGgqyHkOMjTMY9FzaXPccinXk8+fH1DwoNZqQPn07HMaw/yp181dxcdp9o7XQsWzICOIudJZg==","signatures":[{"sig":"MEUCIQDVMb+fp8aUvfCOMNS2by/C828IYub52WaAK+ADJmZ+5wIgEiGA1wYPXbDfU5yPjOAXtwj30IrFXLa1+Fj5Fdmx0ws=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4455843},"main":"dist/src/index.js","types":"dist/src/index.d.ts","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"jest","build":"tsc","clean":"rm -rf dist","example":"tsx examples/basic-usage.ts","lint:fix":"eslint src/**/*.ts --fix","example:build":"tsc && node dist/examples/basic-usage.js","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"blok_hamster","actor":{"name":"blok_hamster","type":"user","email":"joshuaobigwe@icloud.com"},"email":"joshuaobigwe@icloud.com"},"repository":{"type":"git"},"_npmVersion":"10.9.2","description":"SDK for integrating with the  Bagels Fractionalized NFT DeFi Platform smart contracts","directories":{},"_nodeVersion":"23.6.0","dependencies":{"viem":"^1.19.0","wagmi":"^1.4.0","ethers":"^6.0.0","@chainlink/contracts":"^0.8.0","@ethersproject/experimental":"^5.8.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.3","jest":"^29.0.0","eslint":"^8.0.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"ethers":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/sdk_1.0.13_1751042435754_0.41391930206050365","host":"s3://npm-registry-packages-npm-production"}},"1.0.14":{"name":"@bagel-rwa/sdk","version":"1.0.14","keywords":["defi","nft","fractionalization","chainlink","ethereum","web3","sdk"],"author":{"name":"Obigwe Joshua"},"license":"MIT","_id":"@bagel-rwa/sdk@1.0.14","maintainers":[{"name":"blok_hamster","email":"joshuaobigwe@icloud.com"}],"dist":{"shasum":"e40dc80aef7b21ff1bbcf9a7ef19b8a152f88b04","tarball":"https://registry.npmjs.org/@bagel-rwa/sdk/-/sdk-1.0.14.tgz","fileCount":86,"integrity":"sha512-AeYkjhLRcip1hal/lFroJhzLbdkbVBtRqx+JGxAfBeDurqBVKC1gz1jV2s4DjnP/L0lvWeNb+640Epys4f22ig==","signatures":[{"sig":"MEYCIQClRzZxt5TG7jU5PoO0iA0xbyzQQLdEbO8wdO/Mw/MG9wIhAMZni2STf6kMMjN65rJBre4Q78ehlGzq1fz+Yk5uE3Iz","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4455947},"main":"dist/src/index.js","types":"dist/src/index.d.ts","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"jest","build":"tsc","clean":"rm -rf dist","example":"tsx examples/basic-usage.ts","lint:fix":"eslint src/**/*.ts --fix","example:build":"tsc && node dist/examples/basic-usage.js","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"blok_hamster","actor":{"name":"blok_hamster","type":"user","email":"joshuaobigwe@icloud.com"},"email":"joshuaobigwe@icloud.com"},"repository":{"type":"git"},"_npmVersion":"10.9.2","description":"SDK for integrating with the  Bagels Fractionalized NFT DeFi Platform smart contracts","directories":{},"_nodeVersion":"23.6.0","dependencies":{"viem":"^1.19.0","wagmi":"^1.4.0","ethers":"^6.0.0","@chainlink/contracts":"^0.8.0","@ethersproject/experimental":"^5.8.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.3","jest":"^29.0.0","eslint":"^8.0.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"ethers":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/sdk_1.0.14_1751042813582_0.8327540477408741","host":"s3://npm-registry-packages-npm-production"}},"1.0.15":{"name":"@bagel-rwa/sdk","version":"1.0.15","keywords":["defi","nft","fractionalization","chainlink","ethereum","web3","sdk"],"author":{"name":"Obigwe Joshua"},"license":"MIT","_id":"@bagel-rwa/sdk@1.0.15","maintainers":[{"name":"blok_hamster","email":"joshuaobigwe@icloud.com"}],"dist":{"shasum":"68722d260d5b0ab6ca4242e1a6bab8f2be521018","tarball":"https://registry.npmjs.org/@bagel-rwa/sdk/-/sdk-1.0.15.tgz","fileCount":86,"integrity":"sha512-nZvalCNGBt8E6U0h4wr7X7c1nKkP5AbzVWYg5UftJ+zTSp32ZNXDMWcfddL05kbK0KrzV7INVutcTWiRlSFyHQ==","signatures":[{"sig":"MEQCIDYTH4xk4jQYk5wN8xwvJuIZMsgFz95Kl4F0lWt/Kb+CAiBtpZFtc9wshraSRELLbSilr8dDxJ9l/zOgnpzxVC+eYw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4455803},"main":"dist/src/index.js","types":"dist/src/index.d.ts","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"jest","build":"tsc","clean":"rm -rf dist","example":"tsx examples/basic-usage.ts","lint:fix":"eslint src/**/*.ts --fix","example:build":"tsc && node dist/examples/basic-usage.js","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"blok_hamster","actor":{"name":"blok_hamster","type":"user","email":"joshuaobigwe@icloud.com"},"email":"joshuaobigwe@icloud.com"},"repository":{"type":"git"},"_npmVersion":"10.9.2","description":"SDK for integrating with the  Bagels Fractionalized NFT DeFi Platform smart contracts","directories":{},"_nodeVersion":"23.6.0","dependencies":{"viem":"^1.19.0","wagmi":"^1.4.0","ethers":"^6.0.0","@chainlink/contracts":"^0.8.0","@ethersproject/experimental":"^5.8.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.3","jest":"^29.0.0","eslint":"^8.0.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"ethers":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/sdk_1.0.15_1751087795668_0.9850398886842222","host":"s3://npm-registry-packages-npm-production"}},"1.0.16":{"name":"@bagel-rwa/sdk","version":"1.0.16","description":"SDK for integrating with the  Bagels Fractionalized NFT DeFi Platform smart contracts","main":"dist/src/index.js","types":"dist/src/index.d.ts","scripts":{"build":"tsc","dev":"tsc --watch","clean":"rm -rf dist","prepublishOnly":"npm run clean && npm run build","test":"jest","lint":"eslint src/**/*.ts","lint:fix":"eslint src/**/*.ts --fix","example":"tsx examples/basic-usage.ts","example:build":"tsc && node dist/examples/basic-usage.js"},"keywords":["defi","nft","fractionalization","chainlink","ethereum","web3","sdk"],"author":{"name":"Obigwe Joshua"},"license":"MIT","dependencies":{"@chainlink/contracts":"^0.8.0","@ethersproject/experimental":"^5.8.0","ethers":"^6.0.0","viem":"^1.19.0","wagmi":"^1.4.0"},"devDependencies":{"@types/jest":"^29.0.0","@types/node":"^20.0.0","@typescript-eslint/eslint-plugin":"^6.0.0","@typescript-eslint/parser":"^6.0.0","eslint":"^8.0.0","jest":"^29.0.0","tsx":"^4.20.3","typescript":"^5.0.0"},"peerDependencies":{"ethers":"^6.0.0"},"repository":{"type":"git"},"_id":"@bagel-rwa/sdk@1.0.16","_nodeVersion":"23.6.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-PZvu9yHvkbctJUNEntYZw2Gbm/1fshNzW+sqmvzTHsykrz99f2CdI1/5mv3e7zWKwWGJsAmdSs2/c6wst6JmZg==","shasum":"ccdd503c9a05743934a409f7162ca526870e144c","tarball":"https://registry.npmjs.org/@bagel-rwa/sdk/-/sdk-1.0.16.tgz","fileCount":86,"unpackedSize":4455757,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIBJeJZ+dY1BX1X4ysPT9zIOY+1FADJgPCFgipdru0y2SAiBeE5mEAVFtPGYvWCh5QWQ9ba0W33a+kYcb1fhI8woPmA=="}]},"_npmUser":{"name":"blok_hamster","email":"joshuaobigwe@icloud.com","actor":{"name":"blok_hamster","email":"joshuaobigwe@icloud.com","type":"user"}},"directories":{},"maintainers":[{"name":"blok_hamster","email":"joshuaobigwe@icloud.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/sdk_1.0.16_1751125912223_0.8388095780110909"},"_hasShrinkwrap":false}},"time":{"created":"2025-06-24T21:12:08.620Z","modified":"2025-06-28T15:51:52.640Z","1.0.0":"2025-06-24T21:12:08.950Z","1.0.1":"2025-06-24T21:23:30.044Z","1.0.2":"2025-06-24T22:01:11.798Z","1.0.4":"2025-06-26T05:47:56.632Z","1.0.5":"2025-06-26T06:06:59.368Z","1.0.6":"2025-06-26T09:28:23.737Z","1.0.7":"2025-06-26T11:37:47.169Z","1.0.8":"2025-06-27T05:47:07.672Z","1.0.9":"2025-06-27T06:46:43.271Z","1.0.10":"2025-06-27T10:49:32.544Z","1.0.11":"2025-06-27T12:48:09.064Z","1.0.12":"2025-06-27T16:37:27.562Z","1.0.13":"2025-06-27T16:40:35.973Z","1.0.14":"2025-06-27T16:46:53.785Z","1.0.15":"2025-06-28T05:16:35.941Z","1.0.16":"2025-06-28T15:51:52.446Z"},"author":{"name":"Obigwe Joshua"},"license":"MIT","keywords":["defi","nft","fractionalization","chainlink","ethereum","web3","sdk"],"repository":{"type":"git"},"description":"SDK for integrating with the  Bagels Fractionalized NFT DeFi Platform smart contracts","maintainers":[{"name":"blok_hamster","email":"joshuaobigwe@icloud.com"}],"readme":"# Fractionalized NFT Platform SDK - Complete Service Documentation\n\nA comprehensive TypeScript SDK for interacting with the Fractionalized NFT Platform smart contracts. This SDK provides a simple and type-safe interface for all platform operations including enhanced Chainlink integrations, cross-chain functionality, and advanced governance features.\n\n## 🔄 Automatic Nonce Management\n\nThis SDK features built-in **automatic nonce management** for all transactions using a custom NonceManager implementation compatible with ethers v6. This ensures reliable transaction execution when sending multiple transactions rapidly.\n\n### Features:\n- **Automatic Nonce Tracking**: Each transaction gets the correct nonce automatically\n- **Rapid Transaction Support**: Send multiple transactions simultaneously without nonce conflicts\n- **Error Recovery**: Manual nonce management tools for error recovery scenarios\n- **Ethers v6 Compatible**: Works seamlessly with the latest ethers.js version\n\n## 🆕 Enhanced Helper Methods\n\nThis SDK now includes comprehensive helper methods to simplify common operations and prevent errors:\n\n### AssetNFTService Enhancements\n- **`mintAssetWithUSDAppraisal()`** - Create NFTs with proper USD values for lending compatibility\n- **`updateAppraisalToUSD()`** - Fix existing NFT appraisals to USD format\n- **`validateAppraisalForLending()`** - Check NFT value compatibility and detect unit mismatches\n- **`convertETHToUSDAppraisal()`** - Convert ETH values to USD format\n- **`getAppraisalValueInFormat()`** - Convert between different decimal formats\n\n### LendingService Enhancements\n- **`approveNFTForLending()`** - Approve NFTs for lending contract\n- **`isNFTApprovedForLending()`** - Check NFT approval status\n- **`validateLoanParameters()`** - Comprehensive loan validation before creation\n- **`getRecommendedLoanAmount()`** - Get safe loan amounts based on collateral value\n- **Enhanced `createNFTLoan()`** - Now supports auto-approval for seamless loan creation\n- **Liquidity Pool Methods** - Complete pool management and yield earning functionality\n\n### Key Benefits\n- ✅ **Prevents Unit Mismatch Errors** - Automatic conversion between ETH and USD formats\n- ✅ **Pre-Transaction Validation** - Catch issues before submitting transactions\n- ✅ **Auto-Approval Workflows** - Simplify multi-step processes into single calls\n- ✅ **Comprehensive Error Reporting** - Detailed feedback for debugging\n- ✅ **Backward Compatibility** - Existing code continues to work unchanged\n\n## Table of Contents\n\n1. [Installation & Setup](#installation--setup)\n2. [Usage Modes](#usage-modes)\n3. [AssetNFTService](#assetnftservice)\n4. [FractionalizationService](#fractionalizationservice)\n5. [LendingService](#lendingservice)\n6. [AuctionService](#auctionservice)\n7. [IndexVaultService](#indexvaultservice)\n8. [LaunchpadService](#launchpadservice)\n9. [AssetFractionalTokenService](#assetfractionaltokenservice)\n10. [GovernanceService](#governanceservice)\n11. [ChainlinkService](#chainlinkservice)\n12. [Usage Patterns](#usage-patterns)\n\n## Installation & Setup\n\n```bash\nnpm install @bagel-rwa/sdk wagmi viem ethers\n```\n\n### Backend Setup\n\n```typescript\nimport { BagelsRWA, ethers } from '@bagel-rwa/sdk';\n\n// Initialize with signer\nconst provider = new ethers.JsonRpcProvider('YOUR_RPC_URL');\nconst wallet = new ethers.Wallet('PRIVATE_KEY', provider);\n\nconst sdk = new BagelsRWA({\n  usageType: 'Backend',\n  networkConfig: {\n    chainId: 1,\n    name: 'mainnet',\n    rpcUrl: 'YOUR_RPC_URL'\n  },\n  contractAddresses: {\n    assetNFT: '0x...',\n    fractionalizationVault: '0x...',\n    lendingContract: '0x...',\n    auctionContract: '0x...',\n    indexVault: '0x...',\n    governanceContract: '0x...', // optional\n    governanceToken: '0x...' // optional\n  },\n  signer: wallet\n});\n```\n\n### Frontend Setup\n\n```typescript\n// hooks/useSDK.ts\nimport { BagelsRWA } from '@bagel-rwa/sdk';\nimport { useMemo } from 'react';\n\nexport function useSDK() {\n  return useMemo(() => new BagelsRWA({\n    usageType: 'Frontend',\n    networkConfig: {\n      chainId: 1,\n      name: 'mainnet',\n      rpcUrl: 'YOUR_RPC_URL'\n    },\n    contractAddresses: {\n      assetNFT: '0x...',\n      fractionalizationVault: '0x...',\n      lendingContract: '0x...',\n      auctionContract: '0x...',\n      indexVault: '0x...'\n    }\n  }), []);\n}\n```\n\n## Usage Modes\n\nThe SDK supports two distinct usage modes optimized for different environments:\n\n### Backend Mode (Default)\nFor server-side applications or direct blockchain interaction:\n\n```typescript\nconst sdk = new BagelsRWA({\n  usageType: 'Backend', // or omit for default\n  signer: yourEthersSigner,\n  // ... config\n});\n\n// Executes transaction directly\nconst result = await sdk.assetNFT.mintAsset(/* args */);\nconsole.log('Transaction hash:', result.txHash);\nconsole.log('Token ID:', result.tokenId);\n```\n\n### Frontend Mode (wagmi Integration)\nFor React frontend applications using [wagmi](https://wagmi.sh):\n\n```typescript\nimport { useWriteContract, useWaitForTransactionReceipt } from 'wagmi';\n\nfunction MintComponent() {\n  const sdk = useSDK();\n  const { data: hash, writeContract, isPending } = useWriteContract();\n  \n  const { isLoading: isConfirming, isSuccess: isConfirmed } =\n    useWaitForTransactionReceipt({ hash });\n\n  const handleMint = async () => {\n    // Returns wagmi-compatible contract call object\n    const contractCall = await sdk.assetNFT.mintAsset(/* args */);\n    writeContract(contractCall);\n  };\n\n  return (\n    <div>\n      <button onClick={handleMint} disabled={isPending}>\n        {isPending ? 'Confirming...' : 'Mint Asset'}\n      </button>\n      {hash && <div>Transaction Hash: {hash}</div>}\n      {isConfirming && <div>Waiting for confirmation...</div>}\n      {isConfirmed && <div>Transaction confirmed!</div>}\n    </div>\n  );\n}\n```\n\n---\n\n## AssetNFTService\n\nThe AssetNFTService handles NFT minting, metadata management, and cross-chain transfers with Chainlink integration.\n\n### Core Methods\n\n#### `mintAsset()`\n\nMint a new asset NFT with enhanced metadata and custodial information.\n\n**Parameters:**\n- `to: string` - Recipient address\n- `assetType: string` - Type of asset (e.g., \"artwork\", \"collectible\", \"real_estate\")\n- `physicalLocation: string` - Physical location/custody information\n- `appraisalValue: bigint` - Appraised value in wei\n- `custodian: string` - Address of the asset custodian\n- `authenticityCertHash: string` - IPFS hash of authenticity certificate\n- `metadataURI: string` - URI pointing to asset metadata\n\n**Backend Usage:**\n```typescript\nconst result = await sdk.assetNFT.mintAsset(\n  \"0x742d35Cc6631C0532925a3b8D2D28A1D28f5b\",\n  \"artwork\",\n  \"Secure Storage Facility, NYC\",\n  ethers.parseEther(\"100\"), // $100 ETH equivalent\n  \"0x742d35Cc6631C0532925a3b8D2D28A1D28f5b\",\n  ethers.keccak256(ethers.toUtf8Bytes(\"cert-hash\")),\n  \"https://ipfs.io/ipfs/QmExample\"\n);\n\nconsole.log('Token ID:', result.tokenId);\nconsole.log('Transaction Hash:', result.txHash);\n```\n\n**Frontend Usage with wagmi:**\n```typescript\n// Component\nfunction MintAssetComponent() {\n  const sdk = useSDK();\n  const { writeContract, isPending } = useWriteContract();\n  \n  const handleMint = async () => {\n    const contractCall = await sdk.assetNFT.mintAsset(\n      to,\n      assetType,\n      physicalLocation,\n      BigInt(appraisalValue),\n      custodian,\n      authenticityCertHash,\n      metadataURI\n    );\n    \n    writeContract(contractCall);\n  };\n}\n```\n\n#### `getAssetInfo(tokenId: bigint)`\n\nRetrieve comprehensive information about an asset.\n\n**Returns:** `AssetInfo` object containing:\n- `tokenId` - Token ID\n- `owner` - Current owner address\n- `assetType` - Type of asset\n- `physicalLocation` - Physical location\n- `appraisalValue` - Current appraised value\n- `lastAppraisalDate` - Last appraisal timestamp\n- `isAuthenticated` - Authentication status\n- `custodian` - Custodian address\n- `authenticityCertHash` - Certificate hash\n- `isCrossChain` - Cross-chain status\n- `originChain` - Original blockchain\n- `metadata` - Asset metadata\n\n**Usage (Both Modes):**\n```typescript\nconst assetInfo = await sdk.assetNFT.getAssetInfo(BigInt(1));\nconsole.log('Asset Owner:', assetInfo.owner);\nconsole.log('Appraisal Value:', ethers.formatEther(assetInfo.appraisalValue));\nconsole.log('Is Authenticated:', assetInfo.isAuthenticated);\n```\n\n#### `updateAssetInfo(tokenId: bigint, appraisalValue: bigint, physicalLocation: string)`\n\nUpdate asset appraisal value and physical location.\n\n**Backend Usage:**\n```typescript\nconst txHash = await sdk.assetNFT.updateAssetInfo(\n  BigInt(1),\n  ethers.parseEther(\"150\"), // New value\n  \"Updated Storage Location\"\n);\n```\n\n**Frontend Usage:**\n```typescript\nconst contractCall = await sdk.assetNFT.updateAssetInfo(\n  tokenId,\n  newAppraisalValue,\n  newLocation\n);\nwriteContract(contractCall);\n```\n\n#### `requestMetadataUpdate(tokenId: bigint)`\n\nRequest metadata update via Chainlink Functions.\n\n**Returns:** Object with `requestId` and `txHash`\n\n#### `transferCrossChain(tokenId: bigint, destinationChainSelector: bigint, recipient: string)`\n\nTransfer NFT to another blockchain using Chainlink CCIP.\n\n#### `estimateCrossChainFee(tokenId: bigint, destinationChain: bigint, recipient: string)`\n\nEstimate fees for cross-chain transfer.\n\n**Returns:** `bigint` - Fee amount in wei\n\n### Utility Methods\n\n- `getTokensOwnedBy(owner: string)` - Get all token IDs owned by an address\n- `getAppraisalHistory(tokenId: bigint)` - Get historical appraisal values\n- `createMetadata()` - Helper to create properly formatted metadata objects\n- `formatAssetForDisplay()` - Format asset information for UI display\n- `approve()`, `getApproved()`, `setApprovalForAll()` - Standard NFT approval methods\n- `safeTransferFrom()`, `transferFrom()` - Standard NFT transfer methods\n\n### 🆕 Enhanced Helper Methods\n\n#### `mintAssetWithUSDAppraisal()`\n\nCreate NFT with USD appraisal value (recommended for lending compatibility).\n\n**Parameters:**\n- `to: string` - Recipient address\n- `assetType: string` - Type of asset\n- `physicalLocation: string` - Physical location\n- `appraisalValueUSD: number` - USD value as a number (e.g., 10000 for $10,000)\n- `custodian: string` - Custodian address\n- `authenticityCertHash: string` - Certificate hash\n- `metadataURI: string` - Metadata URI\n- `loanTokenDecimals?: number` - Decimal precision (default: 6 for USDC)\n\n**Backend Usage:**\n```typescript\nconst result = await sdk.assetNFT.mintAssetWithUSDAppraisal(\n  userAddress,\n  \"artwork\",\n  \"Secure Gallery Storage\",\n  10000, // $10,000 USD\n  custodianAddress,\n  ethers.keccak256(ethers.toUtf8Bytes(\"cert-123\")),\n  \"https://example.com/metadata.json\"\n  // loanTokenDecimals defaults to 6 for USDC compatibility\n);\n\nconsole.log('Token ID:', result.tokenId);\nconsole.log('Appraisal: $10,000 USD (6 decimals for USDC loans)');\n```\n\n#### `updateAppraisalToUSD()`\n\nUpdate existing NFT appraisal to USD value for lending compatibility.\n\n**Parameters:**\n- `tokenId: bigint` - Token ID to update\n- `appraisalValueUSD: number` - New USD value\n- `loanTokenDecimals?: number` - Target decimal precision (default: 6)\n\n**Usage:**\n```typescript\n// Fix existing NFT with ETH-denominated appraisal\nconst txHash = await sdk.assetNFT.updateAppraisalToUSD(\n  BigInt(1),\n  8500, // $8,500 USD\n  6 // USDC decimals\n);\n```\n\n#### `validateAppraisalForLending()`\n\nValidate NFT appraisal value for lending compatibility and detect unit mismatches.\n\n**Parameters:**\n- `tokenId: bigint` - Token ID to validate\n- `expectedLoanTokenDecimals?: number` - Expected decimals (default: 6)\n\n**Returns:** Validation object with compatibility status and recommendations\n\n**Usage:**\n```typescript\nconst validation = await sdk.assetNFT.validateAppraisalForLending(BigInt(1), 6);\n\nconsole.log('Compatible:', validation.isCompatible);\nconsole.log('Current Decimals:', validation.currentDecimals);\nconsole.log('Current Value:', ethers.formatUnits(validation.currentValue, validation.currentDecimals));\nconsole.log('Recommended Value:', ethers.formatUnits(validation.recommendedValue, 6), 'USD');\n\nif (validation.issues.length > 0) {\n  console.log('Issues:');\n  validation.issues.forEach(issue => console.log(' -', issue));\n}\n```\n\n#### `convertETHToUSDAppraisal()`\n\nConvert ETH-denominated value to USD format for lending.\n\n**Parameters:**\n- `ethValue: bigint` - ETH value in wei\n- `ethPriceUSD: number` - ETH price in USD\n- `loanTokenDecimals?: number` - Target decimals (default: 6)\n\n**Returns:** `bigint` - USD value in target decimal format\n\n**Usage:**\n```typescript\nconst ethValue = ethers.parseEther(\"1\"); // 1 ETH\nconst ethPrice = 2400; // $2400 per ETH\n\nconst usdValue = sdk.assetNFT.convertETHToUSDAppraisal(ethValue, ethPrice, 6);\nconsole.log('USD Value:', ethers.formatUnits(usdValue, 6), 'USDC');\n```\n\n#### `getAppraisalValueInFormat()`\n\nGet NFT appraisal value converted to different decimal formats.\n\n**Parameters:**\n- `tokenId: bigint` - Token ID\n- `targetDecimals: number` - Target decimal precision\n\n**Returns:** Object with original and converted values plus conversion details\n\n**Usage:**\n```typescript\nconst formatInfo = await sdk.assetNFT.getAppraisalValueInFormat(BigInt(1), 18);\n\nconsole.log('Original (6 decimals):', ethers.formatUnits(formatInfo.originalValue, 6));\nconsole.log('Converted (18 decimals):', ethers.formatUnits(formatInfo.convertedValue, 18));\nconsole.log('Conversion Ratio:', formatInfo.conversionRatio);\n```\n\n---\n\n## FractionalizationService\n\nHandles NFT fractionalization, yield distribution, and proof of reserve verification.\n\n### Core Methods\n\n#### `fractionalize()`\n\nConvert an NFT into fractional ERC-20 tokens with proof of reserve.\n\n**Parameters:**\n- `nftContract: string` - NFT contract address\n- `tokenId: bigint` - NFT token ID\n- `fractionalSupply: bigint` - Total supply of fractional tokens\n- `reservePrice: bigint` - Minimum price for redemption\n- `custodianEndpoint: string` - API endpoint for custodian verification\n- `options?: { autoApprove?: boolean }` - Optional auto-approval\n\n**Backend Usage:**\n```typescript\n// Option 1: Manual approval\nawait sdk.fractionalization.approveNFTForFractionalization(nftContract, tokenId);\nconst result = await sdk.fractionalization.fractionalize(\n  nftContract,\n  tokenId,\n  BigInt(1000000), // 1M fractional tokens\n  ethers.parseEther(\"10\"), // 10 ETH reserve price\n  \"https://api.custodian.com/verify\"\n);\n\n// Option 2: Auto-approval\nconst result = await sdk.fractionalization.fractionalize(\n  nftContract,\n  tokenId,\n  BigInt(1000000),\n  ethers.parseEther(\"10\"),\n  \"https://api.custodian.com/verify\",\n  { autoApprove: true }\n);\n\nconsole.log('Asset ID:', result.assetId);\nconsole.log('Transaction Hash:', result.txHash);\n```\n\n**Frontend Usage:**\n```typescript\n// First approve if needed\nconst approvalCall = await sdk.fractionalization.approveNFTForFractionalization(\n  nftContract,\n  tokenId\n);\nif (approvalCall !== 'already-approved') {\n  writeContract(approvalCall);\n  // Wait for approval, then fractionalize\n}\n\nconst fractionalizeCall = await sdk.fractionalization.fractionalize(\n  nftContract,\n  tokenId,\n  fractionalSupply,\n  reservePrice,\n  custodianEndpoint\n);\nwriteContract(fractionalizeCall);\n```\n\n#### `getFractionalizedAsset(assetId: string)`\n\nGet detailed information about a fractionalized asset.\n\n**Returns:** `FractionalizationInfo` object\n\n#### `getUserShares(assetId: string, user: string)`\n\nGet user's share balance for a fractionalized asset.\n\n#### `requestReserveVerification(assetId: string)`\n\nRequest proof of reserve verification via Chainlink Functions.\n\n**Returns:** Object with `requestId` and `txHash`\n\n#### `distributeYield(assetId: string, value?: bigint)`\n\nDistribute yield to fractional token holders.\n\n#### `claimYield(assetId: string)`\n\nClaim accumulated yield for a user.\n\n#### `redeemNFT(assetId: string)`\n\nRedeem the underlying NFT by burning all fractional tokens.\n\n### Voting Methods\n\n- `startVoting(assetId: string, proposedReservePrice: bigint)` - Start a governance vote\n- `castVote(assetId: string, inFavor: boolean, shares: bigint)` - Cast a vote\n- `executeVotingResult(assetId: string)` - Execute vote result\n\n### Administrative Methods\n\n- `updateAssetStatus(assetId: string, newStatus: AssetStatus)` - Update asset status\n- `emergencyFreeze(assetId: string, reason: string)` - Emergency freeze\n- `updateReservePrice(assetId: string, newPrice: bigint)` - Update reserve price\n\n---\n\n## LendingService\n\nHandles collateralized lending with NFT and fractional token collateral.\n\n### Core Methods\n\n#### `createNFTLoan()`\n\nCreate a loan using an NFT as collateral.\n\n**Parameters:**\n- `collateralContract: string` - NFT contract address\n- `tokenId: bigint` - NFT token ID\n- `loanToken: string` - Loan token address (e.g., USDC)\n- `loanAmount: bigint` - Requested loan amount\n- `interestRate: bigint` - Interest rate (basis points)\n- `duration: bigint` - Loan duration in seconds\n\n**Backend Usage:**\n```typescript\nconst result = await sdk.lending.createNFTLoan(\n  \"0x742d35Cc6631C0532925a3b8D2D28A1D28f5b\", // NFT contract\n  BigInt(1), // Token ID\n  \"0x742d35Cc6631C0532925a3b8D2D28A1D28f5b\", // USDC address\n  ethers.parseUnits(\"1000\", 6), // 1000 USDC\n  BigInt(500), // 5% interest rate\n  BigInt(30 * 24 * 60 * 60) // 30 days\n);\n\nconsole.log('Loan ID:', result.loanId);\nconsole.log('Transaction Hash:', result.txHash);\n```\n\n**Security Features:**\n- ✅ **Contract Verification**: Uses `vault.verifyTokenContract()` to prevent asset ID spoofing\n- ✅ **Direct Value Calculation**: Gets collateral value directly from vault (user cannot manipulate)\n- ✅ **Anti-Spoofing Protection**: Prevents fake fractional token contracts\n- ✅ **Pool-Funded**: Loans funded by community liquidity pools\n\n#### `createTokenLoan()`\n\nCreate a loan using ERC-20 tokens as collateral.\n\n**Parameters:**\n- `collateralContract: string` - Token contract address\n- `collateralAmount: bigint` - Collateral amount\n- `loanToken: string` - Loan token address\n- `loanAmount: bigint` - Requested loan amount\n- `interestRate: bigint` - Interest rate\n- `duration: bigint` - Loan duration\n\n#### `createFractionalTokenLoan()`\n\nCreate a loan using fractional tokens as collateral with enhanced security verification.\n\n**Parameters:**\n- `fractionalTokenContract: string` - Fractional token contract address\n- `collateralAmount: bigint` - Amount of fractional tokens as collateral\n- `loanToken: string` - Loan token address (e.g., USDC)\n- `loanAmount: bigint` - Requested loan amount\n- `interestRate: bigint` - Interest rate (basis points)\n- `duration: bigint` - Loan duration in seconds\n\n**Backend Usage:**\n```typescript\nconst result = await sdk.lending.createFractionalTokenLoan(\n  \"0x742d35Cc6631C0532925a3b8D2D28A1D28f5b\", // Fractional token contract\n  ethers.parseEther(\"500\"), // 500 fractional tokens\n  \"0x742d35Cc6631C0532925a3b8D2D28A1D28f5b\", // USDC address\n  ethers.parseUnits(\"2000\", 6), // 2,000 USDC\n  BigInt(0), // Pool-determined interest rate\n  BigInt(30 * 24 * 60 * 60) // 30 days\n);\n\nconsole.log('Loan ID:', result.loanId);\nconsole.log('Transaction Hash:', result.txHash);\n```\n\n#### `repayLoan(loanId: bigint, amount: bigint)`\n\nRepay a loan partially or fully.\n\n#### `liquidateLoan(loanId: bigint)`\n\nLiquidate an unhealthy loan.\n\n#### `getLoan(loanId: bigint)`\n\nGet detailed loan information.\n\n**Returns:** `LoanInfo` object\n\n**Usage:**\n```typescript\nconst loan = await sdk.lending.getLoan(BigInt(1));\nconsole.log('Borrower:', loan.borrower);\nconsole.log('Collateral Type:', loan.collateralType);\nconsole.log('Loan Amount:', ethers.formatUnits(loan.loanAmount, 6));\nconsole.log('Status:', loan.status);\n```\n\n### Utility Methods\n\n- `calculateTotalOwed(loanId: bigint)` - Calculate total amount owed including interest\n- `isLiquidatable(loanId: bigint)` - Check if a loan can be liquidated\n- `getUserLoans(user: string)` - Get all loan IDs for a user\n- `getLoansByBorrower(borrower: string)` - Get detailed loan information for a borrower\n- `getActiveLoans()` - Get all active loans in the system\n- `calculateHealthRatio(loanId: bigint)` - Calculate loan health ratio\n\n### 🆕 Enhanced Helper Methods\n\n#### `approveNFTForLending()`\n\nApprove NFT for lending contract (required before creating NFT-backed loans).\n\n**Parameters:**\n- `nftContract: string` - NFT contract address\n- `tokenId: bigint` - Token ID to approve\n\n**Backend Usage:**\n```typescript\nconst txHash = await sdk.lending.approveNFTForLending(nftContract, BigInt(1));\nif (txHash !== 'already-approved') {\n  console.log('NFT approved:', txHash);\n} else {\n  console.log('NFT already approved');\n}\n```\n\n**Frontend Usage:**\n```typescript\nconst approvalCall = await sdk.lending.approveNFTForLending(nftContract, tokenId);\nif (approvalCall !== 'already-approved') {\n  writeContract(approvalCall);\n}\n```\n\n#### `isNFTApprovedForLending()`\n\nCheck if NFT is approved for lending contract.\n\n**Parameters:**\n- `nftContract: string` - NFT contract address\n- `tokenId: bigint` - Token ID to check\n\n**Returns:** `boolean` - Approval status\n\n**Usage:**\n```typescript\nconst isApproved = await sdk.lending.isNFTApprovedForLending(nftContract, BigInt(1));\nconsole.log('Is approved:', isApproved);\n```\n\n#### `validateLoanParameters()`\n\nValidate loan parameters before creation to catch issues early.\n\n**Parameters:**\n- `collateralContract: string` - NFT contract address\n- `tokenId: bigint` - Token ID\n- `loanToken: string` - Loan token address\n- `loanAmount: bigint` - Requested loan amount\n\n**Returns:** Validation object with detailed analysis\n\n**Usage:**\n```typescript\nconst validation = await sdk.lending.validateLoanParameters(\n  nftContract,\n  BigInt(1),\n  usdcAddress,\n  ethers.parseUnits(\"5000\", 6) // $5,000 USDC\n);\n\nconsole.log('Is Valid:', validation.isValid);\nconsole.log('LTV Ratio:', validation.ltvRatio.toFixed(2) + '%');\nconsole.log('Max LTV Allowed:', validation.maxLtvAllowed.toFixed(2) + '%');\nconsole.log('Collateral Value:', ethers.formatUnits(validation.collateralValue, 6), 'USD');\n\nif (validation.issues.length > 0) {\n  console.log('Issues:');\n  validation.issues.forEach(issue => console.log(' -', issue));\n}\n```\n\n#### `getRecommendedLoanAmount()`\n\nGet recommended loan amounts based on NFT value and target LTV.\n\n**Parameters:**\n- `collateralContract: string` - NFT contract address\n- `tokenId: bigint` - Token ID\n- `loanToken: string` - Loan token address\n- `targetLtvPercentage?: number` - Target LTV (default: 60%)\n\n**Returns:** Object with recommended and maximum loan amounts\n\n**Usage:**\n```typescript\nconst recommendations = await sdk.lending.getRecommendedLoanAmount(\n  nftContract,\n  BigInt(1),\n  usdcAddress,\n  60 // Target 60% LTV for safety\n);\n\nconsole.log('Recommended Amount (60% LTV):', ethers.formatUnits(recommendations.recommendedAmount, 6), 'USDC');\nconsole.log('Maximum Amount (75% LTV):', ethers.formatUnits(recommendations.maxAmount, 6), 'USDC');\nconsole.log('Collateral Value:', ethers.formatUnits(recommendations.collateralValue, 6), 'USD');\n```\n\n#### Enhanced `createNFTLoan()` with Auto-Approval\n\nThe `createNFTLoan()` method now supports auto-approval for seamless loan creation.\n\n**New Parameters:**\n- `options?: { autoApprove?: boolean }` - Automatically approve NFT if needed\n\n**Backend Usage:**\n```typescript\n// Option 1: Manual approval (existing workflow)\nawait sdk.lending.approveNFTForLending(nftContract, tokenId);\nconst result = await sdk.lending.createNFTLoan(\n  nftContract,\n  tokenId,\n  loanToken,\n  loanAmount,\n  interestRate,\n  duration\n);\n\n// Option 2: Auto-approval (new enhanced workflow)\nconst result = await sdk.lending.createNFTLoan(\n  nftContract,\n  tokenId,\n  loanToken,\n  loanAmount,\n  interestRate,\n  duration,\n  { autoApprove: true } // Automatically approve if needed\n);\n\nconsole.log('Loan ID:', result.loanId);\nconsole.log('Transaction Hash:', result.txHash);\n```\n\n### 🌊 Liquidity Pool Methods\n\n#### `createLiquidityPool()`\n\nCreate a new liquidity pool for a token (admin only).\n\n**Parameters:**\n- `token: string` - Token address\n- `baseRate: bigint` - Base interest rate in basis points\n- `reserveFactor: bigint` - Reserve factor in basis points\n\n#### `depositLiquidity()`\n\nDeposit tokens into liquidity pool to earn yield.\n\n**Parameters:**\n- `token: string` - Token address\n- `amount: bigint` - Amount to deposit\n\n**Returns:** Object with LP tokens received and transaction hash\n\n#### `withdrawLiquidity()`\n\nWithdraw tokens from liquidity pool.\n\n**Parameters:**\n- `token: string` - Token address\n- `lpTokenAmount: bigint` - LP tokens to redeem\n\n**Returns:** Object with tokens withdrawn and transaction hash\n\n#### `getLiquidityPool()`\n\nGet liquidity pool information.\n\n**Parameters:**\n- `token: string` - Token address\n\n**Returns:** Pool information object\n\n#### `getPoolInterestRates()`\n\nGet current interest rates for a pool.\n\n**Parameters:**\n- `token: string` - Token address\n\n**Returns:** Object with borrow and supply rates\n\n#### `calculatePoolAPY()`\n\nCalculate APY for pool rates.\n\n**Parameters:**\n- `token: string` - Token address\n\n**Returns:** Object with borrow and supply APY\n\n#### `getAvailableLiquidity()`\n\nGet available liquidity in a pool.\n\n**Parameters:**\n- `token: string` - Token address\n\n**Returns:** `bigint` - Available liquidity amount\n\n#### `getUserPoolInfo()`\n\nGet user's position in a liquidity pool.\n\n**Parameters:**\n- `user: string` - User address\n- `token: string` - Token address\n\n**Returns:** Object with LP balance and underlying value\n\n---\n\n## AuctionService\n\nHandles English and Dutch auctions for NFTs and fractional tokens.\n\n### Core Methods\n\n#### `createEnglishAuction()`\n\nCreate an English (ascending price) auction.\n\n**Parameters:**\n- `collateralContract: string` - Asset contract address\n- `collateralTokenId: bigint` - Token ID\n- `collateralAmount: bigint` - Amount (for ERC-20s)\n- `isNFT: boolean` - Whether asset is an NFT\n- `startPrice: bigint` - Starting bid price\n- `reservePrice: bigint` - Reserve price\n- `duration: bigint` - Auction duration in seconds\n- `paymentToken: string` - Payment token address\n\n**Backend Usage:**\n```typescript\nconst result = await sdk.auction.createEnglishAuction(\n  \"0x742d35Cc6631C0532925a3b8D2D28A1D28f5b\", // NFT contract\n  BigInt(1), // Token ID\n  BigInt(1), // Amount (1 for NFTs)\n  true, // Is NFT\n  ethers.parseEther(\"1\"), // Start at 1 ETH\n  ethers.parseEther(\"5\"), // Reserve at 5 ETH\n  BigInt(7 * 24 * 60 * 60), // 7 days\n  \"0x0000000000000000000000000000000000000000\" // ETH\n);\n\nconsole.log('Auction ID:', result.auctionId);\n```\n\n#### `createDutchAuction()`\n\nCreate a Dutch (descending price) auction with same parameters as English auction.\n\n#### `placeBid(auctionId: bigint, bidAmount: bigint)`\n\nPlace a bid on an English auction.\n\n#### `buyNow(auctionId: bigint)`\n\nImmediately purchase in a Dutch auction.\n\n#### `endAuction(auctionId: bigint)`\n\nEnd an auction and settle.\n\n#### `cancelAuction(auctionId: bigint)`\n\nCancel an auction (before any bids).\n\n#### `getCurrentDutchPrice(auctionId: bigint)`\n\nGet current price for a Dutch auction.\n\n#### `getAuction(auctionId: bigint)`\n\nGet detailed auction information.\n\n**Returns:** `AuctionInfo` object\n\n### Query Methods\n\n- `getAuctionBids(auctionId: bigint)` - Get all bids for an auction\n- `getUserAuctions(user: string)` - Get auctions created by a user\n- `getActiveAuctions()` - Get all active auctions\n- `getAuctionsBySeller(seller: string)` - Get auctions by a specific seller\n- `getAuctionsEndingSoon(hoursThreshold: number)` - Get auctions ending soon\n\n---\n\n## IndexVaultService\n\nThe IndexVaultService manages ERC-4626 compliant index vaults for diversified NFT exposure, allowing users to invest in a basket of fractional tokens and NFTs with automatic rebalancing and professional management.\n\n### Core ERC-4626 Methods\n\n#### `deposit(assets: bigint, receiver: string)`\n\nDeposit assets into the vault and receive shares.\n\n**Parameters:**\n- `assets: bigint` - Amount of assets to deposit\n- `receiver: string` - Address to receive the shares\n\n**Backend Usage:**\n```typescript\nconst result = await sdk.indexVault.deposit(\n  ethers.parseEther(\"10\"), // 10 ETH\n  userAddress\n);\n\nconsole.log('Shares Received:', ethers.formatEther(result.shares));\nconsole.log('Transaction Hash:', result.txHash);\n```\n\n**Frontend Usage:**\n```typescript\nconst depositCall = await sdk.indexVault.deposit(assets, receiver);\nwriteContract(depositCall);\n```\n\n#### `withdraw(assets: bigint, receiver: string, owner: string)`\n\nWithdraw specific amount of assets from the vault.\n\n**Parameters:**\n- `assets: bigint` - Amount of assets to withdraw\n- `receiver: string` - Address to receive the assets\n- `owner: string` - Owner of the shares\n\n#### `redeem(shares: bigint, receiver: string, owner: string)`\n\nRedeem shares for underlying assets.\n\n**Parameters:**\n- `shares: bigint` - Amount of shares to redeem\n- `receiver: string` - Address to receive the assets\n- `owner: string` - Owner of the shares\n\n### Conversion & Preview Methods\n\n#### Preview Operations\n\nPreview operations before execution to understand the outcome:\n\n```typescript\n// Preview deposit - how many shares will I get?\nconst sharesToReceive = await sdk.indexVault.previewDeposit(ethers.parseEther(\"100\"));\nconsole.log('Shares to receive:', ethers.formatEther(sharesToReceive));\n\n// Preview withdrawal - how many shares will be burned?\nconst sharesToBurn = await sdk.indexVault.previewWithdraw(ethers.parseEther(\"50\"));\n\n// Preview redemption - how many assets will I get?\nconst assetsToReceive = await sdk.indexVault.previewRedeem(BigInt(1000));\n\n// Preview mint - how many assets needed?\nconst assetsNeeded = await sdk.indexVault.previewMint(BigInt(500));\n```\n\n#### Conversion Methods\n\nConvert between assets and shares:\n\n```typescript\n// Convert assets to shares\nconst shares = await sdk.indexVault.convertToShares(ethers.parseEther(\"100\"));\n\n// Convert shares to assets\nconst assets = await sdk.indexVault.convertToAssets(BigInt(1000));\n```\n\n#### `getTotalAssets()`\n\nGet total assets under management in the vault.\n\n**Returns:** `bigint` - Total assets in wei\n\n### Portfolio Management Methods (Admin Only)\n\n#### `addAsset(tokenAddress: string, tokenId: bigint, amount: bigint, weight: bigint)`\n\nAdd a new asset to the vault's portfolio.\n\n**Parameters:**\n- `tokenAddress: string` - Token contract address\n- `tokenId: bigint` - Token ID (for NFTs)\n- `amount: bigint` - Amount to add to vault\n- `weight: bigint` - Weight in portfolio (basis points)\n\n**Usage:**\n```typescript\n// Add fractional art token with 20% portfolio weight\nawait sdk.indexVault.addAsset(\n  fractionalTokenAddress,\n  BigInt(0), // Not applicable for ERC-20\n  ethers.parseEther(\"1000\"),\n  2000 // 20% weight (2000 basis points)\n);\n```\n\n#### `removeAsset(tokenAddress: string, tokenId: bigint)`\n\nRemove an asset from the vault's portfolio.\n\n#### `rebalance()`\n\nRebalance the vault portfolio according to target weights.\n\n**Usage:**\n```typescript\n// Trigger portfolio rebalancing\nconst txHash = await sdk.indexVault.rebalance();\nconsole.log('Rebalancing completed:', txHash);\n```\n\n### Query & Analytics Methods\n\n#### `getVaultInfo()`\n\nGet comprehensive vault information.\n\n**Returns:** `IndexVaultInfo` object containing:\n- `vaultAddress: string` - Vault contract address\n- `name: string` - Vault name\n- `symbol: string` - Vault token symbol\n- `totalAssets: bigint` - Total assets under management\n- `totalSupply: bigint` - Total share supply\n- `sharePrice: bigint` - Current share price\n- `managementFee: bigint` - Management fee (basis points)\n- `performanceFee: bigint` - Performance fee (basis points)\n- `manager: string` - Vault manager address\n- `isActive: boolean` - Whether vault is active\n\n#### `getVaultAssets()`\n\nGet all assets in the vault portfolio.\n\n**Returns:** Array of `VaultAsset` objects containing:\n- `tokenAddress: string` - Asset contract address\n- `tokenId: bigint` - Token ID\n- `amount: bigint` - Amount held\n- `weight: bigint` - Portfolio weight\n- `lastPrice: bigint` - Last recorded price\n- `lastUpdated: bigint` - Last price update\n\n#### `getUserShares(user: string)`\n\nGet user's share balance in the vault.\n\n**Returns:** `bigint` - User's share balance\n\n#### `getUserAssetValue(user: string)`\n\nGet USD value of user's vault position.\n\n**Returns:** `bigint` - Position value in USD (scaled)\n\n#### `getPerformanceMetrics()`\n\nGet detailed vault performance metrics.\n\n**Returns:** Object containing:\n- `totalReturn: bigint` - Total return percentage\n- `annualizedReturn: bigint` - Annualized return\n- `sharpeRatio: bigint` - Risk-adjusted return metric\n- `maxDrawdown: bigint` - Maximum portfolio decline\n- `volatility: bigint` - Portfolio volatility\n- `assetsUnderManagement: bigint` - Total AUM\n\n#### `getUserHistory(user: string)`\n\nGet user's transaction history with the vault.\n\n**Returns:** Array of transaction objects with deposits, withdrawals, and performance\n\n#### `calculateOptimalDeposit(userBalance: bigint, targetAllocation: number)`\n\nCalculate optimal deposit amount based on user balance and target allocation.\n\n**Parameters:**\n- `userBalance: bigint` - User's available balance\n- `targetAllocation: number` - Target allocation percentage (0-1)\n\n**Returns:** `bigint` - Recommended deposit amount\n\n#### `getAssetHistory()`\n\nGet historical changes to the vault's asset composition.\n\n**Returns:** Array of asset addition/removal events\n\n### Usage Examples\n\n#### Complete Investment Flow\n\n```typescript\n// 1. Check vault info\nconst vaultInfo = await sdk.indexVault.getVaultInfo();\nconsole.log('Vault Name:', vaultInfo.name);\nconsole.log('Total AUM:', ethers.formatEther(vaultInfo.totalAssets));\nconsole.log('Share Price:', ethers.formatEther(vaultInfo.sharePrice));\n\n// 2. Preview deposit\nconst depositAmount = ethers.parseEther(\"5\");\nconst expectedShares = await sdk.indexVault.previewDeposit(depositAmount);\nconsole.log('Expected shares:', ethers.formatEther(expectedShares));\n\n// 3. Make deposit\nconst result = await sdk.indexVault.deposit(depositAmount, userAddress);\nconsole.log('Actual shares received:', ethers.formatEther(result.shares));\n\n// 4. Check portfolio\nconst assets = await sdk.indexVault.getVaultAssets();\nassets.forEach(asset => {\n  console.log(`Asset: ${asset.tokenAddress}`);\n  console.log(`Weight: ${Number(asset.weight) / 100}%`);\n  console.log(`Amount: ${ethers.formatEther(asset.amount)}`);\n});\n\n// 5. Track performance\nconst performance = await sdk.indexVault.getPerformanceMetrics();\nconsole.log('Total Return:', `${Number(performance.totalReturn) / 100}%`);\nconsole.log('Annualized Return:', `${Number(performance.annualizedReturn) / 100}%`);\n```\n\n#### Frontend Dashboard Component\n\n```typescript\nfunction VaultDashboard() {\n  const sdk = useSDK();\n  const [vaultInfo, setVaultInfo] = useState(null);\n  const [userShares, setUserShares] = useState(BigInt(0));\n  const [performance, setPerformance] = useState(null);\n\n  useEffect(() => {\n    const loadVaultData = async () => {\n      const info = await sdk.indexVault.getVaultInfo();\n      const shares = await sdk.indexVault.getUserShares(userAddress);\n      const perf = await sdk.indexVault.getPerformanceMetrics();\n      \n      setVaultInfo(info);\n      setUserShares(shares);\n      setPerformance(perf);\n    };\n\n    loadVaultData();\n  }, []);\n\n  return (\n    <div>\n      <h2>{vaultInfo?.name} - Index Vault</h2>\n      <div>\n        <p>Your Shares: {ethers.formatEther(userShares)}</p>\n        <p>Share Price: {ethers.formatEther(vaultInfo?.sharePrice || 0)}</p>\n        <p>Total AUM: {ethers.formatEther(vaultInfo?.totalAssets || 0)}</p>\n        <p>Total Return: {Number(performance?.totalReturn || 0) / 100}%</p>\n      </div>\n    </div>\n  );\n}\n```\n\n### Security Features\n\n- **ERC-4626 Compliance**: Standard vault interface ensures composability\n- **Professional Management**: Only authorized managers can modify portfolio\n- **Transparent Fees**: Management and performance fees clearly defined\n- **Automated Rebalancing**: Maintains target portfolio allocation\n- **Real-time Valuation**: Assets priced using Chainlink oracles\n\n---\n\n## LaunchpadService\n\nThe LaunchpadService provides a secure marketplace for trading NFTs and fractional tokens with built-in anti-fraud protection and automated royalty distribution.\n\n### Core Interfaces\n\n```typescript\ninterface NFTListing {\n  listingId: bigint;\n  seller: string;\n  nftContract: string;\n  tokenId: bigint;\n  price: bigint;\n  paymentToken: string;\n  createdAt: bigint;\n  expiresAt: bigint;\n  status: number;\n  hasRoyalty: boolean;\n  royaltyRecipient: string;\n  royaltyBps: bigint;\n}\n\ninterface FractionalTokenListing {\n  listingId: bigint;\n  seller: string;\n  fractionalTokenContract: string;\n  assetId: string;\n  tokenAmount: bigint;\n  pricePerToken: bigint;\n  paymentToken: string;\n  createdAt: bigint;\n  expiresAt: bigint;\n  status: number;\n  reservePrice: bigint;\n  totalSupply: bigint;\n}\n\ninterface Offer {\n  offerId: bigint;\n  listingId: bigint;\n  buyer: string;\n  offerAmount: bigint;\n  paymentToken: string;\n  createdAt: bigint;\n  expiresAt: bigint;\n  status: number;\n  listingType: number;\n}\n```\n\n### NFT Listing Methods\n\n#### `listNFT()`\n\nList an NFT for sale with automatic royalty detection and verification.\n\n**Parameters:**\n- `nftContract: string` - NFT contract address (must be verified)\n- `tokenId: bigint` - NFT token ID\n- `price: bigint` - Sale price in wei\n- `paymentToken?: string` - Payment token address (default: ETH)\n- `duration?: number` - Listing duration in seconds (0 = no expiry)\n\n**Backend Usage:**\n```typescript\nconst result = await sdk.launchpad.listNFT({\n  nftContract: \"0x742d35Cc6631C0532925a3b8D2D28A1D28f5b\",\n  tokenId: BigInt(1),\n  price: ethers.parseEther(\"5\"), // 5 ETH\n  paymentToken: ethers.ZeroAddress, // ETH\n  duration: 86400 * 7 // 7 days\n});\n\nconsole.log('Listing ID:', result.listingId);\nconsole.log('Transaction Hash:', result.hash);\n```\n\n**Frontend Usage:**\n```typescript\nconst listingCall = await sdk.launchpad.listNFT({\n  nftContract,\n  tokenId,\n  price,\n  paymentToken,\n  duration\n});\nwriteContract(listingCall);\n```\n\n#### `purchaseNFT()`\n\nPurchase an NFT directly from a listing with automatic royalty distribution.\n\n**Parameters:**\n- `listingId: bigint` - ID of the listing to purchase\n- `value?: bigint` - ETH value to send (for ETH payments)\n\n#### `cancelNFTListing()`\n\nCancel an active NFT listing.\n\n### Fractional Token Methods\n\n#### `listFractionalTokens()`\n\nList fractional tokens for sale with integrated verification.\n\n**Parameters:**\n- `fractionalTokenContract: string` - Fractional token contract address\n- `tokenAmount: bigint` - Amount of tokens to sell\n- `pricePerToken: bigint` - Price per token in wei\n- `paymentToken?: string` - Payment token address\n- `duration?: number` - Listing duration\n\n**Backend Usage:**\n```typescript\nconst result = await sdk.launchpad.listFractionalTokens({\n  fractionalTokenContract: \"0x...\",\n  tokenAmount: BigInt(1000), // 1000 tokens\n  pricePerToken: ethers.parseEther(\"0.01\"), // 0.01 ETH per token\n  paymentToken: usdcAddress,\n  duration: 86400 * 30 // 30 days\n});\n```\n\n#### `purchaseFractionalTokens()`\n\nPurchase fractional tokens with partial purchase support.\n\n**Parameters:**\n- `listingId: bigint` - Listing ID\n- `tokenAmount: bigint` - Amount of tokens to purchase\n- `value?: bigint` - ETH value for payment\n\n#### `getFractionalTokenPriceInfo()`\n\nGet detailed pricing information for fractional token listings.\n\n**Returns:** `FractionalTokenPriceInfo` with market premium calculations\n\n### Offer System\n\n#### `makeNFTOffer()`\n\nMake an offer on an NFT listing with escrow protection.\n\n**Parameters:**\n- `listingId: bigint` - Target listing ID\n- `offerAmount: bigint` - Offer amount\n- `paymentToken?: string` - Payment token\n- `duration?: number` - Offer expiration time\n- `value?: bigint` - ETH value for escrow\n\n#### `acceptNFTOffer()`\n\nAccept an offer on your NFT listing.\n\n#### `cancelOffer()`\n\nCancel a pending offer and withdraw escrowed funds.\n\n### View Methods\n\n- `getNFTListing(listingId: bigint)` - Get NFT listing details\n- `getFractionalListing(listingId: bigint)` - Get fractional token listing details\n- `getOffer(offerId: bigint)` - Get offer details\n- `getUserNFTListings(user: string)` - Get user's NFT listings\n- `getUserFractionalListings(user: string)` - Get user's fractional token listings\n- `getUserOffers(user: string)` - Get user's offers\n- `getUserPurchases(user: string)` - Get user's purchase history\n- `getStats()` - Get platform statistics\n\n### Security & Configuration\n\n- `isVerifiedNFTContract(contractAddress: string)` - Check if NFT contract is verified\n- `isSupportedPaymentToken(tokenAddress: string)` - Check payment token support\n- `getPlatformFee()` - Get current platform fee\n- `getTreasury()` - Get treasury address\n\n### Utility Methods\n\n- `calculateFractionalTokenPrice(tokenAmount: bigint, pricePerToken: bigint)` - Calculate total price\n- `calculatePlatformFee(amount: bigint, platformFeeBps: bigint)` - Calculate platform fee\n- `calculateRoyaltyFee(amount: bigint, royaltyBps: bigint)` - Calculate royalty fee\n- `formatTimestamp(timestamp: bigint)` - Format timestamp to Date\n- `isListingExpired(expiresAt: bigint)` - Check if listing is expired\n- `isOfferExpired(expiresAt: bigint)` - Check if offer is expired\n\n---\n\n## AssetFractionalTokenService\n\nThe AssetFractionalTokenService provides interaction with individual asset-specific ERC-20 fractional token contracts, each with built-in governance capabilities for democratic reserve price updates.\n\n### Overview\n\nEach fractionalized asset gets its own dedicated ERC-20 token contract with:\n- **Asset-Specific Identity**: Immutable `assetId` and `reservePrice` properties\n- **Built-in Governance**: Token holders can vote on reserve price updates\n- **Standard ERC-20**: Full compatibility with existing DeFi protocols\n- **Security**: Prevents asset ID spoofing through contract address verification\n\n### Creating Service Instance\n\n```\n\n## Asset Enumeration\n\nThe AssetNFT contract now supports ERC721Enumerable, making it easy to get assets held by users:\n\n### Get All Assets Owned by a User\n\n```typescript\n// Get all token IDs owned by a user\nconst userAddress = \"0x123...\";\nconst tokenIds = await sdk.assetNFT.getTokensByOwner(userAddress);\nconsole.log(`User owns ${tokenIds.length} assets:`, tokenIds);\n\n// Get complete asset information for all tokens owned by a user\nconst userAssets = await sdk.assetNFT.getAssetsByOwner(userAddress);\nuserAssets.forEach(asset => {\n  console.log(`Token ${asset.tokenId}: ${asset.assetType} worth ${asset.appraisalValue}`);\n});\n\n// Get assets with pagination (recommended for large collections)\nconst paginatedAssets = await sdk.assetNFT.getAssetsByOwnerPaginated(\n  userAddress, \n  0,    // offset\n  10    // limit\n);\nconsole.log(`Showing ${paginatedAssets.assets.length} of ${paginatedAssets.totalCount} assets`);\nconsole.log(`Has more: ${paginatedAssets.hasMore}`);\n```\n\n### Access Individual Tokens by Index\n\n```typescript\n// Get total supply\nconst totalSupply = await sdk.assetNFT.getTotalSupply();\nconsole.log(`Total tokens minted: ${totalSupply}`);\n\n// Get token by global index\nconst firstToken = await sdk.assetNFT.getTokenByIndex(0n);\nconsole.log(`First token ID: ${firstToken}`);\n\n// Get user's token by index\nconst userTokenCount = await sdk.assetNFT.getBalance(userAddress);\nif (userTokenCount > 0n) {\n  const userFirstToken = await sdk.assetNFT.getTokenOfOwnerByIndex(userAddress, 0n);\n  console.log(`User's first token: ${userFirstToken}`);\n}\n```\n\n### Get Detailed Token Information\n\n```typescript\nconst tokenId = 1n;\nconst tokenDetails = await sdk.assetNFT.getTokenDetails(tokenId);\n\nconsole.log({\n  tokenId: tokenDetails.tokenId,\n  owner: tokenDetails.owner,\n  metadataURI: tokenDetails.metadataURI,\n  assetType: tokenDetails.assetInfo.assetType,\n  appraisalValue: tokenDetails.assetInfo.appraisalValue,\n  isAuthenticated: tokenDetails.assetInfo.isAuthenticated\n});\n```\n\n### Backward Compatibility\n\nThe existing `getTokensOwnedBy()` method still works and now uses the efficient enumerable implementation:\n\n```typescript\n// This method is still available and now more efficient\nconst tokens = await sdk.assetNFT.getTokensOwnedBy(userAddress);\n```","readmeFilename":"README.md"}