@0xobelisk/sui-cli 1.0.8 → 1.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/dubhe.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import fo from"yargs";import{hideBin as ho}from"yargs/helpers";import{execSync as ht,spawn as me}from"child_process";import k from"chalk";import Ne from"chalk";function N(){console.log(Ne.yellow(`
2
+ import Po from"yargs";import{hideBin as To}from"yargs/helpers";import{execSync as Pt,spawn as ge}from"child_process";import E from"chalk";import Ye from"chalk";function V(){console.log(Ye.yellow(`
3
3
  Welcome to Dubhe
4
4
  --from team@obelisk
5
5
  ________ ___ ___ ________ ___ ___ _______
@@ -10,77 +10,108 @@ Welcome to Dubhe
10
10
  \\ \\_______\\ \\_______\\ \\_______\\ \\__\\ \\__\\ \\_______\\
11
11
  \\|_______|\\|_______|\\|_______|\\|__|\\|__|\\|_______|
12
12
 
13
- `))}import{Dubhe as We}from"@0xobelisk/sui-client";import{Transaction as J}from"@mysten/sui/transactions";import{getFullnodeUrl as Ze,SuiClient as Qe}from"@mysten/sui/client";import{execSync as Xe}from"child_process";import y from"chalk";import T from"chalk";import{ZodError as Ve}from"zod";import{fromZodError as Ue,ValidationError as Ye}from"zod-validation-error";var H=class extends Error{name="NotInsideProjectError";message="You are not inside a Dubhe project"},m=class extends Error{name="DubheCliError"},V=class extends Error{name="UpgradeError"},U=class extends Error{name="FsIibError"};function E(e){if(e instanceof Ye)console.log(T.redBright(e.message));else if(e instanceof Ve){let t=Ue(e,{prefixSeparator:`
13
+ `))}import{Dubhe as et,Transaction as G}from"@0xobelisk/sui-client";import{execSync as tt}from"child_process";import h from"chalk";import F from"chalk";import{ZodError as Le}from"zod";import{fromZodError as Be,ValidationError as He}from"zod-validation-error";var z=class extends Error{name="NotInsideProjectError";message="You are not inside a Dubhe project"},p=class extends Error{name="DubheCliError"},U=class extends Error{name="UpgradeError"},q=class extends Error{name="FsIibError"};function _(e){if(e instanceof He)console.log(F.redBright(e.message));else if(e instanceof Le){let t=Be(e,{prefixSeparator:`
14
14
  - `,issueSeparator:`
15
- - `});console.log(T.redBright(t.message))}else e instanceof H?(console.log(T.red(e.message)),console.log(""),console.log(T.blue("To learn more about Dubhe's configuration, please go to https://github.com/0xobelisk"))):e instanceof m?console.log(T.red(e)):console.log(e)}import*as X from"fs/promises";import{mkdirSync as qe,writeFileSync as Be}from"fs";import{dirname as Le}from"path";import{SUI_PRIVATE_KEY_PREFIX as ze}from"@mysten/sui/cryptography";import*as Y from"fs";import O from"chalk";import{spawn as He}from"child_process";function _(e){if(e.startsWith(ze))return e.length===70?e:!1;if(e.startsWith("0x")){let t=e.slice(2);return t.length===64?t:!1}else return e.length===64?e:!1}async function R(e,t){try{let o=await X.readFile(`${e}/.history/sui_${t}/latest.json`,"utf8");return JSON.parse(o)}catch{throw new U("Fs read deployment file failed.")}}async function ee(e,t){return(await R(e,t)).schemas}async function te(e,t){return(await R(e,t)).version}async function M(e,t){return(await R(e,t)).packageId}async function oe(e,t,o){let r=(await R(e,t)).schemas.find(s=>s.name.toLowerCase().endsWith(`::${o.toLowerCase()}_schema::${o}`));if(!r?.objectId)throw new Error(`Schema '${o}' not found in deployment history`);return r.objectId}async function ne(e,t){return(await R(e,t)).upgradeCap}function j(e,t,o,n,r,s){let a={projectName:e,network:t,packageId:o,schemas:s,upgradeCap:n,version:r},i=process.cwd(),c=JSON.stringify(a,null,2);Je(c,`${i}/contracts/${e}/.history/sui_${t}/latest.json`,"Update deploy log")}async function Je(e,t,o){qe(Le(t),{recursive:!0}),Be(t,e),o!==void 0&&console.log(`${o}: ${t}`)}function Ge(e){switch(e){case"localnet":return'Dubhe = { local = "../dubhe-framework" }';case"testnet":return'Dubhe = { git = "https://github.com/0xobelisk/dubhe-framework.git", rev = "dubhe-testnet-v1.1.0" }';case"mainnet":return'Dubhe = { git = "https://github.com/0xobelisk/dubhe-framework.git", rev = "dubhe-mainnet-v1.0.0" }';default:throw new Error(`Unsupported network: ${e}`)}}function q(e,t){let o=Y.readFileSync(e,"utf-8"),n=Ge(t),r=o.replace(/Dubhe = \{.*\}/,n);Y.writeFileSync(e,r,"utf-8"),console.log(`Updated Dubhe dependency in ${e} for ${t}.`)}async function A(e){try{return new Promise((t,o)=>{let n=He("sui",["client","switch","--env",e],{env:{...process.env},stdio:"pipe"});n.stdout.on("data",r=>{console.log(O.green(`${r.toString()}`))}),n.on("error",r=>{console.error(O.red(`
16
- \u274C Failed to Switch Env`)),console.error(O.red(` Error: ${r.message}`)),o(r)}),n.on("exit",r=>{r!==0?(console.error(O.red(`
17
- \u274C Process exited with code: ${r}`)),o(new Error(`Process exited with code: ${r}`))):t()})})}catch(t){console.error(O.red(`
18
- \u274C Failed to Switch Env`)),console.error(O.red(` \u2514\u2500 Error: ${t}`))}}var F=e=>new Promise(t=>setTimeout(t,e));import*as I from"fs";import*as re from"path";async function se(e,t){if(!I.existsSync(e))return;let o=I.readFileSync(e,"utf-8"),n=new RegExp(`\\[env\\.${t}\\][\\s\\S]*?(?=\\[|$)`,"g"),r=o.replace(n,"");I.writeFileSync(e,r,"utf-8")}function ae(e,t,o,n,r){let s=re.resolve(e),a=I.readFileSync(s,"utf-8"),i=a.split(`
19
- `),c=i.findIndex(g=>g.trim()===`[env.${t}]`),l={chainId:n,originalPublishedId:"",latestPublishedId:"",publishedVersion:0};if(c===-1)if(o==="publish")l.originalPublishedId=r,l.latestPublishedId=r,l.publishedVersion=1;else throw new Error(`Network type [env.${t}] not found in the file and cannot upgrade.`);else{for(let g=c+1;g<i.length;g++){let b=i[g].trim();if(b.startsWith("["))break;let[h,v]=b.split("=").map(d=>d.trim().replace(/"/g,""));switch(h){case"original-published-id":l.originalPublishedId=v;break;case"latest-published-id":l.latestPublishedId=v;break;case"published-version":l.publishedVersion=parseInt(v,10);break}}o==="publish"?(l.originalPublishedId=r,l.latestPublishedId=r,l.publishedVersion=1):o==="upgrade"&&(l.latestPublishedId=r,l.publishedVersion+=1)}let u=`
15
+ - `});console.log(F.redBright(t.message))}else e instanceof z?(console.log(F.red(e.message)),console.log(""),console.log(F.blue("To learn more about Dubhe's configuration, please go to https://github.com/0xobelisk"))):e instanceof p?console.log(F.red(e)):console.log(e)}import*as ee from"fs/promises";import{mkdirSync as Je,writeFileSync as ze}from"fs";import{dirname as Ge}from"path";import{SUI_PRIVATE_KEY_PREFIX as We}from"@mysten/sui/cryptography";import*as Y from"fs";import T from"chalk";import{spawn as Xe}from"child_process";function k(e){if(e.startsWith(We))return e.length===70?e:!1;if(e.startsWith("0x")){let t=e.slice(2);return t.length===64?t:!1}else return e.length===64?e:!1}async function N(e,t){try{let o=await ee.readFile(`${e}/.history/sui_${t}/latest.json`,"utf8");return JSON.parse(o)}catch{throw new q("Fs read deployment file failed.")}}async function te(e,t){return(await N(e,t)).schemas}async function oe(e,t){return(await N(e,t)).version}async function R(e,t){return(await N(e,t)).packageId}async function A(e,t){return(await N(e,t)).schemaId}async function ne(e,t){return(await N(e,t)).upgradeCap}function K(e,t,o,n,a,r,i){let s={projectName:e,network:t,packageId:o,schemaId:n,schemas:i,upgradeCap:a,version:r},l=process.cwd(),d=JSON.stringify(s,null,2);Ze(d,`${l}/contracts/${e}/.history/sui_${t}/latest.json`,"Update deploy log")}async function Ze(e,t,o){Je(Ge(t),{recursive:!0}),ze(t,e),o!==void 0&&console.log(`${o}: ${t}`)}function Qe(e){switch(e){case"localnet":return'Dubhe = { local = "../dubhe-framework" }';case"testnet":return'Dubhe = { git = "https://github.com/0xobelisk/dubhe-framework.git", rev = "dubhe-testnet-v1.1.0" }';case"mainnet":return'Dubhe = { git = "https://github.com/0xobelisk/dubhe-framework.git", rev = "dubhe-mainnet-v1.0.0" }';default:throw new Error(`Unsupported network: ${e}`)}}async function L(e,t){let o=Y.readFileSync(e,"utf-8"),n=Qe(t),a=o.replace(/Dubhe = \{.*\}/,n);Y.writeFileSync(e,a,"utf-8"),console.log(`Updated Dubhe dependency in ${e} for ${t}.`)}async function O(e){try{return new Promise((t,o)=>{let n=Xe("sui",["client","switch","--env",e],{env:{...process.env},stdio:"pipe"});n.stdout.on("data",a=>{console.log(T.green(`${a.toString()}`))}),n.on("error",a=>{console.error(T.red(`
16
+ \u274C Failed to Switch Env`)),console.error(T.red(` Error: ${a.message}`)),o(a)}),n.on("exit",a=>{a!==0?(console.error(T.red(`
17
+ \u274C Process exited with code: ${a}`)),o(new Error(`Process exited with code: ${a}`))):t()})})}catch(t){console.error(T.red(`
18
+ \u274C Failed to Switch Env`)),console.error(T.red(` \u2514\u2500 Error: ${t}`))}}var D=e=>new Promise(t=>setTimeout(t,e));import*as I from"fs";import*as re from"path";async function ae(e,t){if(!I.existsSync(e))return;let o=I.readFileSync(e,"utf-8"),n=new RegExp(`\\[env\\.${t}\\][\\s\\S]*?(?=\\[|$)`,"g"),a=o.replace(n,"");I.writeFileSync(e,a,"utf-8")}function se(e,t,o,n,a){let r=re.resolve(e),i=I.readFileSync(r,"utf-8"),s=i.split(`
19
+ `),l=s.findIndex(m=>m.trim()===`[env.${t}]`),d={chainId:n,originalPublishedId:"",latestPublishedId:"",publishedVersion:0};if(l===-1)if(o==="publish")d.originalPublishedId=a,d.latestPublishedId=a,d.publishedVersion=1;else throw new Error(`Network type [env.${t}] not found in the file and cannot upgrade.`);else{for(let m=l+1;m<s.length;m++){let y=s[m].trim();if(y.startsWith("["))break;let[f,v]=y.split("=").map(C=>C.trim().replace(/"/g,""));switch(f){case"original-published-id":d.originalPublishedId=v;break;case"latest-published-id":d.latestPublishedId=v;break;case"published-version":d.publishedVersion=parseInt(v,10);break}}o==="publish"?(d.originalPublishedId=a,d.latestPublishedId=a,d.publishedVersion=1):o==="upgrade"&&(d.latestPublishedId=a,d.publishedVersion+=1)}let c=`
20
20
  [env.${t}]
21
- chain-id = "${l.chainId}"
22
- original-published-id = "${l.originalPublishedId}"
23
- latest-published-id = "${l.latestPublishedId}"
24
- published-version = "${l.publishedVersion}"
25
- `,f=c===-1?a+u:i.slice(0,c).join(`
26
- `)+u;I.writeFileSync(s,f,"utf-8")}function et(e){return e.split("_").map((t,o)=>t.charAt(0).toUpperCase()+t.slice(1).toLowerCase()).join("")}function tt(e){let t=e.split("::");return t.length>0?t[t.length-1]:""}function ie(e){let t,o;try{let n=JSON.parse(Xe(`sui move build --dump-bytecode-as-base64 --path ${e}`,{encoding:"utf-8",stdio:"pipe"}));t=n.modules,o=n.dependencies,console.log(" \u2514\u2500 Build successful")}catch(n){console.error(y.red(" \u2514\u2500 Build failed")),console.error(n.stdout),process.exit(1)}return[t,o]}async function ot(e,t,o,n,r,s){let a=await e.getChainIdentifier();await se(`${r}/Move.lock`,n),console.log(`
27
- \u{1F680} Starting Contract Publication...`),console.log(` \u251C\u2500 Project: ${r}`),console.log(` \u251C\u2500 Network: ${n}`),console.log(` \u251C\u2500 ChainId: ${a}`),console.log(" \u251C\u2500 Validating Environment...");let i=t.getKeypair();console.log(` \u2514\u2500 Account: ${i.toSuiAddress()}`),console.log(`
28
- \u{1F4E6} Building Contract...`);let[c,l]=ie(r);console.log(`
29
- \u{1F504} Publishing Contract...`);let u=new J;s&&u.setGasBudget(s);let[f]=u.publish({modules:c,dependencies:l});u.transferObjects([f],i.toSuiAddress());let g;try{g=await e.signAndExecuteTransaction({signer:i,transaction:u,options:{showObjectChanges:!0}})}catch(p){console.error(y.red(" \u2514\u2500 Publication failed")),console.error(p.message),process.exit(1)}g.effects?.status.status==="failure"&&(console.log(y.red(" \u2514\u2500 Publication failed")),process.exit(1)),console.log(" \u251C\u2500 Processing publication results...");let b=1,h="",v=[],d="";g.objectChanges.map(p=>{p.type==="published"&&(console.log(` \u251C\u2500 Package ID: ${p.packageId}`),h=p.packageId),p.type==="created"&&p.objectType==="0x2::package::UpgradeCap"&&(console.log(` \u251C\u2500 Upgrade Cap: ${p.objectId}`),d=p.objectId)}),console.log(` \u2514\u2500 Transaction: ${g.digest}`),ae(`${r}/Move.lock`,n,"publish",a,h),console.log(`
30
- \u26A1 Executing Deploy Hook...`),await F(5e3);let x=new J;x.moveCall({target:`${h}::deploy_hook::run`,arguments:[x.object("0x6")]});let C;try{C=await e.signAndExecuteTransaction({signer:i,transaction:x,options:{showEffects:!0,showObjectChanges:!0}})}catch(p){console.error(y.red(" \u2514\u2500 Deploy hook execution failed")),console.error(p.message),process.exit(1)}C.effects?.status.status==="success"?(console.log(" \u251C\u2500 Hook execution successful"),console.log(` \u251C\u2500 Transaction: ${C.digest}`),console.log(`
31
- \u{1F4CB} Created Schemas:`),C.objectChanges?.map(p=>{if(p.type==="created"&&p.objectType.includes("_schema")&&!p.objectType.includes("dynamic_field")){console.log(` \u251C\u2500 ${p.objectType}`),console.log(` \u2514\u2500 ID: ${p.objectId}`);let P={};for(let $ in o.schemas)et($)===tt(p.objectType)&&(P=o.schemas[$]);v.push({name:p.objectType,objectId:p.objectId,structure:P})}}),j(o.name,n,h,d,b,v),console.log(`
21
+ chain-id = "${d.chainId}"
22
+ original-published-id = "${d.originalPublishedId}"
23
+ latest-published-id = "${d.latestPublishedId}"
24
+ published-version = "${d.publishedVersion}"
25
+ `,u=l===-1?i+c:s.slice(0,l).join(`
26
+ `)+c;I.writeFileSync(r,u,"utf-8")}function ie(e){let t,o;try{let n=JSON.parse(tt(`sui move build --dump-bytecode-as-base64 --path ${e}`,{encoding:"utf-8",stdio:"pipe"}));t=n.modules,o=n.dependencies,console.log(" \u2514\u2500 Build successful")}catch(n){console.error(h.red(" \u2514\u2500 Build failed")),console.error(n.stdout),process.exit(1)}return[t,o]}async function ot(e,t,o,n,a){let r=await e.suiInteractor.currentClient.getChainIdentifier();await ae(`${n}/Move.lock`,o),console.log(`
27
+ \u{1F680} Starting Contract Publication...`),console.log(` \u251C\u2500 Project: ${n}`),console.log(` \u251C\u2500 Network: ${o}`),console.log(` \u251C\u2500 ChainId: ${r}`),console.log(" \u251C\u2500 Validating Environment..."),console.log(` \u2514\u2500 Account: ${e.getAddress()}`),console.log(`
28
+ \u{1F4E6} Building Contract...`);let[i,s]=ie(n);console.log(`
29
+ \u{1F504} Publishing Contract...`);let l=new G;a&&l.setGasBudget(a);let[d]=l.publish({modules:i,dependencies:s});l.transferObjects([d],e.getAddress());let c;try{c=await e.signAndSendTxn(l)}catch(g){console.error(h.red(" \u2514\u2500 Publication failed")),console.error(g.message),process.exit(1)}c.effects?.status.status==="failure"&&(console.log(h.red(" \u2514\u2500 Publication failed")),process.exit(1)),console.log(" \u251C\u2500 Processing publication results...");let u=1,m="",y="",f=t.schemas,v="";c.objectChanges.map(g=>{g.type==="published"&&(console.log(` \u251C\u2500 Package ID: ${g.packageId}`),m=g.packageId),g.type==="created"&&g.objectType==="0x2::package::UpgradeCap"&&(console.log(` \u251C\u2500 Upgrade Cap: ${g.objectId}`),v=g.objectId)}),console.log(` \u2514\u2500 Transaction: ${c.digest}`),se(`${n}/Move.lock`,o,"publish",r,m),console.log(`
30
+ \u26A1 Executing Deploy Hook...`),await D(5e3);let C=new G;C.moveCall({target:`${m}::deploy_hook::run`,arguments:[C.object("0x6")]});let b;try{b=await e.signAndSendTxn(C)}catch(g){console.error(h.red(" \u2514\u2500 Deploy hook execution failed")),console.error(g.message),process.exit(1)}b.effects?.status.status==="success"?(console.log(" \u251C\u2500 Hook execution successful"),console.log(` \u251C\u2500 Transaction: ${b.digest}`),console.log(`
31
+ \u{1F4CB} Created Schemas:`),b.objectChanges?.map(g=>{g.type==="created"&&g.objectType.includes("schema::Schema")&&(y=g.objectId),g.type==="created"&&g.objectType.includes("schema")&&!g.objectType.includes("dynamic_field")&&(console.log(` \u251C\u2500 ${g.objectType}`),console.log(` \u2514\u2500 ID: ${g.objectId}`))}),K(t.name,o,m,y,v,u,f),console.log(`
32
32
  \u2705 Contract Publication Complete
33
- `)):(console.log(y.yellow(" \u2514\u2500 Deploy hook execution failed")),console.log(y.yellow(" Please republish or manually call deploy_hook::run")),console.log(y.yellow(" Please check the transaction digest:")),console.log(y.yellow(` ${C.digest}`)),process.exit(1))}async function nt(e){return I.existsSync(e)?!0:(console.log(y.yellow(`
34
- \u2139\uFE0F Dubhe Framework Files Not Found`)),console.log(y.yellow(" \u251C\u2500 Expected Path:"),e),console.log(y.yellow(" \u251C\u2500 To set up Dubhe Framework:")),console.log(y.yellow(" \u2502 1. Create directory: mkdir -p contracts/dubhe-framework")),console.log(y.yellow(" \u2502 2. Clone repository: git clone https://github.com/0xobelisk/dubhe-framework contracts/dubhe-framework")),console.log(y.yellow(" \u2502 3. Or download from: https://github.com/0xobelisk/dubhe-framework")),console.log(y.yellow(" \u2514\u2500 After setup, restart the local node")),!1)}async function rt(e,t,o){let r=`${process.cwd()}/contracts/dubhe-framework`;if(!await nt(r)){console.log(y.yellow(`
35
- \u2757 Framework Deployment Skipped`));return}let s=await e.getChainIdentifier();await se(`${r}/Move.lock`,o),console.log(`
36
- \u{1F680} Starting Contract Publication...`),console.log(` \u251C\u2500 Project: ${r}`),console.log(` \u251C\u2500 Network: ${o}`);let a=t.getKeypair();console.log(` \u2514\u2500 Account: ${a.toSuiAddress()}`),console.log(`
37
- \u{1F4E6} Building Contract...`);let[i,c]=ie(r);console.log(`
38
- \u{1F504} Publishing Contract...`);let l=new J,[u]=l.publish({modules:i,dependencies:c});l.transferObjects([u],a.toSuiAddress());let f;try{f=await e.signAndExecuteTransaction({signer:a,transaction:l,options:{showObjectChanges:!0}})}catch(d){console.error(y.red(" \u2514\u2500 Publication failed")),console.error(d.message),process.exit(1)}f.effects?.status.status==="failure"&&(console.log(y.red(" \u2514\u2500 Publication failed")),process.exit(1));let g=1,b="",h=[],v="";f.objectChanges.map(d=>{d.type==="published"&&(console.log(` \u251C\u2500 Package ID: ${d.packageId}`),b=d.packageId),d.type==="created"&&d.objectType==="0x2::package::UpgradeCap"&&(console.log(` \u251C\u2500 Upgrade Cap: ${d.objectId}`),v=d.objectId)}),console.log(` \u2514\u2500 Transaction: ${f.digest}`),ae(`${r}/Move.lock`,o,"publish",s,b),j("dubhe-framework",o,b,v,g,h),await F(1e3),console.log(y.green(`
39
- \u2705 Dubhe Framework deployed successfully`))}async function ce(e,t,o){await A(t);let n=process.env.PRIVATE_KEY;if(!n)throw new m(`Missing PRIVATE_KEY environment variable.
33
+ `)):(console.log(h.yellow(" \u2514\u2500 Deploy hook execution failed")),console.log(h.yellow(" Please republish or manually call deploy_hook::run")),console.log(h.yellow(" Please check the transaction digest:")),console.log(h.yellow(` ${b.digest}`)),process.exit(1))}async function nt(e){return I.existsSync(e)?!0:(console.log(h.yellow(`
34
+ \u2139\uFE0F Dubhe Framework Files Not Found`)),console.log(h.yellow(" \u251C\u2500 Expected Path:"),e),console.log(h.yellow(" \u251C\u2500 To set up Dubhe Framework:")),console.log(h.yellow(" \u2502 1. Create directory: mkdir -p contracts/dubhe-framework")),console.log(h.yellow(" \u2502 2. Clone repository: git clone https://github.com/0xobelisk/dubhe-framework contracts/dubhe-framework")),console.log(h.yellow(" \u2502 3. Or download from: https://github.com/0xobelisk/dubhe-framework")),console.log(h.yellow(" \u2514\u2500 After setup, restart the local node")),!1)}async function rt(e,t){let n=`${process.cwd()}/contracts/dubhe-framework`;if(!await nt(n)){console.log(h.yellow(`
35
+ \u2757 Framework Deployment Skipped`));return}let a=await e.suiInteractor.currentClient.getChainIdentifier();await ae(`${n}/Move.lock`,t),console.log(`
36
+ \u{1F680} Starting Contract Publication...`),console.log(` \u251C\u2500 Project: ${n}`),console.log(` \u251C\u2500 Network: ${t}`),console.log(` \u2514\u2500 Account: ${e.getAddress()}`),console.log(`
37
+ \u{1F4E6} Building Contract...`);let[r,i]=ie(n);console.log(`
38
+ \u{1F504} Publishing Contract...`);let s=new G,[l]=s.publish({modules:r,dependencies:i});s.transferObjects([l],e.getAddress());let d;try{d=await e.signAndSendTxn(s)}catch(f){console.error(h.red(" \u2514\u2500 Publication failed")),console.error(f.message),process.exit(1)}d.effects?.status.status==="failure"&&(console.log(h.red(" \u2514\u2500 Publication failed")),process.exit(1));let c=1,u="",m={},y="";d.objectChanges.map(f=>{f.type==="published"&&(console.log(` \u251C\u2500 Package ID: ${f.packageId}`),u=f.packageId),f.type==="created"&&f.objectType==="0x2::package::UpgradeCap"&&(console.log(` \u251C\u2500 Upgrade Cap: ${f.objectId}`),y=f.objectId)}),console.log(` \u2514\u2500 Transaction: ${d.digest}`),se(`${n}/Move.lock`,t,"publish",a,u),K("dubhe-framework",t,u,"",y,c,m),await D(1e3),console.log(h.green(`
39
+ \u2705 Dubhe Framework deployed successfully`))}async function ce(e,t,o){await O(t);let n=process.env.PRIVATE_KEY;if(!n)throw new p(`Missing PRIVATE_KEY environment variable.
40
40
  Run 'echo "PRIVATE_KEY=YOUR_PRIVATE_KEY" > .env'
41
- in your contracts directory to use the default sui private key.`);let r=_(n);if(r===!1)throw new m("Please check your privateKey.");let s=new We({secretKey:r}),a=new Qe({url:Ze(t)});t==="localnet"&&await rt(a,s,t);let c=`${process.cwd()}/contracts/${e.name}`;q(`${c}/Move.toml`,t),await ot(a,s,e,t,c,o)}import{Dubhe as st,loadMetadata as at}from"@0xobelisk/sui-client";import*as le from"fs";import*as de from"path";function it(e,t){switch(e.split("<")[0].trim()){case"StorageValue":return t.length===0;case"StorageMap":return t.length===1;case"StorageDoubleMap":return t.length===2;default:return!1}}function ct(e){switch(e.split("<")[0].trim()){case"StorageValue":return 0;case"StorageMap":return 1;case"StorageDoubleMap":return 2;default:return 0}}async function pe({dubheConfig:e,schema:t,field:o,params:n,network:r,objectId:s,packageId:a,metadataFilePath:i}){let c=process.env.PRIVATE_KEY;if(!c)throw new m(`Missing PRIVATE_KEY environment variable.
41
+ in your contracts directory to use the default sui private key.`);let a=k(n);if(a===!1)throw new p("Please check your privateKey.");let r=new et({secretKey:a,networkType:t});t==="localnet"&&await rt(r,t);let s=`${process.cwd()}/contracts/${e.name}`;await L(`${s}/Move.toml`,t),await ot(r,e,t,s,o)}import{Dubhe as at,loadMetadata as st}from"@0xobelisk/sui-client";import*as le from"fs";import*as de from"path";function it(e,t){switch(e.split("<")[0].trim()){case"StorageValue":return t.length===0;case"StorageMap":return t.length===1;case"StorageDoubleMap":return t.length===2;default:return!1}}function ct(e){switch(e.split("<")[0].trim()){case"StorageValue":return 0;case"StorageMap":return 1;case"StorageDoubleMap":return 2;default:return 0}}async function pe({dubheConfig:e,schema:t,params:o,network:n,objectId:a,packageId:r,metadataFilePath:i}){let s=process.env.PRIVATE_KEY;if(!s)throw new p(`Missing PRIVATE_KEY environment variable.
42
42
  Run 'echo "PRIVATE_KEY=YOUR_PRIVATE_KEY" > .env'
43
- in your contracts directory to use the default sui private key.`);let l=_(c);if(l===!1)throw new m("Please check your privateKey.");let f=`${process.cwd()}/contracts/${e.name}`;a=a||await M(f,r),s=s||await oe(f,r,t);let g;if(i?g=await G(i):g=await at(r,a),!g)throw new m("Metadata file not found. Please provide a metadata file path or set the packageId.");if(!e.schemas[t])throw new m(`Schema "${t}" not found in dubhe config. Available schemas: ${Object.keys(e.schemas).join(", ")}`);if(!e.schemas[t][o])throw new m(`Field "${o}" not found in schema "${t}". Available fields: ${Object.keys(e.schemas[t]).join(", ")}`);let b=e.schemas[t][o],h=n||[];if(!it(b,h))throw new Error(`Invalid params count for ${b}. Expected: ${ct(b)}, Got: ${h.length}`);let d=await new st({secretKey:l,networkType:r,packageId:a,metadata:g}).state({schema:t,field:o,objectId:s,storageType:b,params:h});console.log(d)}async function G(e){if(de.extname(e)!==".json")throw new Error("Metadata file must be in JSON format");try{let t=le.readFileSync(e,"utf8"),o=JSON.parse(t);if(!o||typeof o!="object")throw new Error("Invalid JSON format");return{...o}}catch(t){throw t instanceof Error?new Error(`Failed to read metadata file: ${t.message}`):t}}import{Dubhe as lt,loadMetadata as dt,Transaction as pt}from"@0xobelisk/sui-client";var ut=["u8","u16","u32","u64","u128","u256","bool","id","string","address","object"];function mt(e){try{e.forEach(t=>{let[o,n]=t.split(":");if(!ut.includes(o))throw new Error(`Invalid param type: ${o}`)})}catch(t){throw new Error(`Invalid params: ${t}`)}}function gt(e,t){let[o,n]=t.split(":");switch(o){case"u8":return e.pure.u8(parseInt(n));case"u16":return e.pure.u16(parseInt(n));case"u32":return e.pure.u32(parseInt(n));case"u64":return e.pure.u64(parseInt(n));case"u128":return e.pure.u128(parseInt(n));case"u256":return e.pure.u256(parseInt(n));case"object":return e.object(n);case"address":return e.pure.address(n);case"bool":return e.pure.bool(n==="true");case"string":return e.pure.string(n);default:throw new Error(`Invalid param type: ${o}`)}}function ft(e,t){return t.map(o=>gt(e,o))}async function ue({dubheConfig:e,moduleName:t,funcName:o,params:n,network:r,packageId:s,metadataFilePath:a}){let i=process.env.PRIVATE_KEY;if(!i)throw new m(`Missing PRIVATE_KEY environment variable.
43
+ in your contracts directory to use the default sui private key.`);let l=k(s);if(l===!1)throw new p("Please check your privateKey.");let c=`${process.cwd()}/contracts/${e.name}`;r=r||await R(c,n),a=a||await A(c,n);let u;if(i?u=await W(i):u=await st(n,r),!u)throw new p("Metadata file not found. Please provide a metadata file path or set the packageId.");if(!e.schemas[t])throw new p(`Schema "${t}" not found in dubhe config. Available schemas: ${Object.keys(e.schemas).join(", ")}`);let m=e.schemas[t],y=o||[];if(!it(m,y))throw new Error(`Invalid params count for ${m}. Expected: ${ct(m)}, Got: ${y.length}`);let v=await new at({secretKey:l,networkType:n,packageId:r,metadata:u}).parseState({schema:t,objectId:a,storageType:m,params:y});console.log(v)}async function W(e){if(de.extname(e)!==".json")throw new Error("Metadata file must be in JSON format");try{let t=le.readFileSync(e,"utf8"),o=JSON.parse(t);if(!o||typeof o!="object")throw new Error("Invalid JSON format");return{...o}}catch(t){throw t instanceof Error?new Error(`Failed to read metadata file: ${t.message}`):t}}import{Dubhe as lt,loadMetadata as dt,Transaction as pt}from"@0xobelisk/sui-client";var ut=["u8","u16","u32","u64","u128","u256","bool","id","string","address","object"];function mt(e){try{e.forEach(t=>{let[o,n]=t.split(":");if(!ut.includes(o))throw new Error(`Invalid param type: ${o}`)})}catch(t){throw new Error(`Invalid params: ${t}`)}}function gt(e,t){let[o,n]=t.split(":");switch(o){case"u8":return e.pure.u8(parseInt(n));case"u16":return e.pure.u16(parseInt(n));case"u32":return e.pure.u32(parseInt(n));case"u64":return e.pure.u64(parseInt(n));case"u128":return e.pure.u128(parseInt(n));case"u256":return e.pure.u256(parseInt(n));case"object":return e.object(n);case"address":return e.pure.address(n);case"bool":return e.pure.bool(n==="true");case"string":return e.pure.string(n);default:throw new Error(`Invalid param type: ${o}`)}}function ft(e,t){return t.map(o=>gt(e,o))}async function ue({dubheConfig:e,moduleName:t,funcName:o,params:n,network:a,packageId:r,metadataFilePath:i}){let s=process.env.PRIVATE_KEY;if(!s)throw new p(`Missing PRIVATE_KEY environment variable.
44
44
  Run 'echo "PRIVATE_KEY=YOUR_PRIVATE_KEY" > .env'
45
- in your contracts directory to use the default sui private key.`);let c=_(i);if(c===!1)throw new m("Please check your privateKey.");let u=`${process.cwd()}/contracts/${e.name}`;s=s||await M(u,r);let f;if(a?f=await G(a):f=await dt(r,s),!f)throw new m("Metadata file not found. Please provide a metadata file path or set the packageId.");let g=n||[];mt(g);let b=new lt({secretKey:c,networkType:r,packageId:s,metadata:f}),h=new pt,v=ft(h,g),d=await b.tx[t][o]({tx:h,params:v});console.log(JSON.stringify(d,null,2))}import{Dubhe as yt}from"@0xobelisk/sui-client";function bt(){try{let e=process.platform==="win32"?'tasklist /FI "IMAGENAME eq sui.exe" /FO CSV /NH':'pgrep -f "sui start"',t=ht(e).toString().trim();return process.platform==="win32"?t.toLowerCase().includes("sui.exe"):t.length>0}catch{return!1}}async function wt(){let e=["suiprivkey1qq3ez3dje66l8pypgxynr7yymwps6uhn7vyczespj84974j3zya0wdpu76v","suiprivkey1qp6vcyg8r2x88fllmjmxtpzjl95gd9dugqrgz7xxf50w6rqdqzetg7x4d7s","suiprivkey1qpy3a696eh3m55fwa8h38ss063459u4n2dm9t24w2hlxxzjp2x34q8sdsnc","suiprivkey1qzxwp29favhzrjd95f6uj9nskjwal6nh9g509jpun395y6g72d6jqlmps4c","suiprivkey1qzhq4lv38sesah4uzsqkkmeyjx860xqjdz8qgw36tmrdd5tnle3evxpng57","suiprivkey1qzez45sjjsepjgtksqvpq6jw7dzw3zq0dx7a4sulfypd73acaynw5jl9x2c"];console.log("\u{1F4DD}Accounts"),console.log("=========="),e.forEach((t,o)=>{let r=new yt({secretKey:t}).getKeypair();me("curl",["--location","--request","POST","http://127.0.0.1:9123/gas","--header","Content-Type: application/json","--data-raw",`{"FixedAmountRequest": {"recipient": "${r.toSuiAddress()}"}}`],{env:{...process.env},stdio:"ignore",detached:!0}),console.log(` \u250C\u2500 Account #${o}: ${r.toSuiAddress()}(1000 SUI)`),console.log(` \u2514\u2500 Private Key: ${t}`)}),console.log("=========="),console.log(k.yellow("\u2139\uFE0F WARNING: These accounts, and their private keys, are publicly known.")),console.log(k.yellow("Any funds sent to them on Mainnet or any other live network WILL BE LOST."))}async function ge(){if(bt()){console.log(k.yellow(`
46
- \u26A0\uFE0F Warning: Local Node Already Running`)),console.log(k.yellow(" \u251C\u2500 Cannot start a new instance")),console.log(k.yellow(" \u2514\u2500 Please stop the existing process first"));return}N(),console.log("\u{1F680} Starting Local Node...");try{let e=me("sui",["start","--with-faucet","--force-regenesis"],{env:{...process.env,RUST_LOG:"off,sui_node=info"},stdio:"ignore",detached:!0});if(e.on("error",o=>{console.error(k.red(`
47
- \u274C Failed to Start Local Node`)),console.error(k.red(` \u2514\u2500 Error: ${o.message}`))}),await F(5e3),console.log(" \u251C\u2500 Faucet: Enabled"),console.log(" \u2514\u2500 Force Regenesis: Yes"),console.log(" \u2514\u2500 HTTP server: http://127.0.0.1:9000/"),console.log(" \u2514\u2500 Faucet server: http://127.0.0.1:9123/"),await wt(),await F(2e3),_("suiprivkey1qzez45sjjsepjgtksqvpq6jw7dzw3zq0dx7a4sulfypd73acaynw5jl9x2c")===!1)throw new m("Please check your privateKey.");console.log(k.green("\u{1F389} Local environment is ready!")),process.on("SIGINT",()=>{console.log(k.yellow(`
48
- \u{1F514} Stopping Local Node...`)),e&&(e.kill(),console.log(k.green("\u2705 Local Node Stopped"))),process.exit()})}catch(e){console.error(k.red(`
49
- \u274C Failed to Start Local Node`)),console.error(k.red(` \u2514\u2500 Error: ${e.message}`)),process.exit(1)}}var vt={command:"node",describe:"Manage local Sui node",builder(e){return e},async handler(){try{await ge()}catch(e){console.error("Error executing command:",e),process.exit(1)}}},fe=vt;import{Dubhe as _t}from"@0xobelisk/sui-client";import{requestSuiFromFaucetV0 as Ct,getFaucetHost as kt}from"@mysten/sui/faucet";import{SuiClient as xt,getFullnodeUrl as $t}from"@mysten/sui/client";var Et={command:"faucet",describe:"Interact with a Dubhe faucet",builder(e){return e.options({network:{type:"string",desc:"URL of the Dubhe faucet",choices:["testnet","devnet","localnet"],default:"localnet"},recipient:{type:"string",desc:"Sui address to fund"}})},async handler({network:e,recipient:t}){let o="";if(t===void 0){let a=process.env.PRIVATE_KEY;if(!a)throw new m(`Missing PRIVATE_KEY environment variable.
45
+ in your contracts directory to use the default sui private key.`);let l=k(s);if(l===!1)throw new p("Please check your privateKey.");let c=`${process.cwd()}/contracts/${e.name}`;r=r||await R(c,a);let u;if(i?u=await W(i):u=await dt(a,r),!u)throw new p("Metadata file not found. Please provide a metadata file path or set the packageId.");let m=n||[];mt(m);let y=new lt({secretKey:l,networkType:a,packageId:r,metadata:u}),f=new pt,v=ft(f,m),C=await y.tx[t][o]({tx:f,params:v});console.log(JSON.stringify(C,null,2))}import{getFullnodeUrl as ht,SuiClient as yt}from"@mysten/sui/client";import bt from"sqlite3";import{open as wt}from"sqlite";import vt from"chalk";var x,kt=async e=>(x=await wt({filename:`./${e}.db`,driver:bt.Database}),await _t(x,e),await Et(x),x),_t=async(e,t)=>{let o=`
46
+ CREATE TABLE IF NOT EXISTS ${t} (
47
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
48
+ last_update_checkpoint TEXT,
49
+ last_update_digest TEXT,
50
+ name TEXT,
51
+ key1 TEXT,
52
+ key2 TEXT,
53
+ value TEXT,
54
+ is_removed BOOLEAN DEFAULT FALSE
55
+ )`;await e.exec(o)},Et=async e=>{let t=`
56
+ CREATE TABLE IF NOT EXISTS dapp_transaction (
57
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
58
+ checkpoint TEXT,
59
+ digest TEXT
60
+ )
61
+ `;await e.exec(t)},xt=async(e,t,o,n,a)=>{let r=a;typeof r.key1=="object"&&r.key1!==null||Array.isArray(r.key1)?r.key1=j(r.key1):typeof r.key2=="object"&&r.key2!==null||Array.isArray(r.key2)?r.key2=j(r.key2):(typeof r.value=="object"||Array.isArray(r.value))&&(r.value=j(r.value)),await Ct(e,t,{checkpoint:o,digest:n,event:r})},St=async(e,t,o,n,a)=>{let r=a;typeof r.key1=="object"&&r.key1!==null||Array.isArray(r.key1)?r.key1=j(r.key1):(typeof r.key2=="object"&&r.key2!==null||Array.isArray(r.key2))&&(r.key2=j(r.key2)),await It(e,t,{checkpoint:o,digest:n,event:r})},j=e=>e.hasOwnProperty("fields")?JSON.stringify(e.fields):JSON.stringify(e);async function Ct(e,t,o){let{checkpoint:n,digest:a,event:r}=o,i=`
62
+ INSERT OR REPLACE INTO ${t} (id, last_update_checkpoint, last_update_digest, name, key1, key2, value)
63
+ VALUES (
64
+ (SELECT id FROM ${t} WHERE name = ? AND (key1 = ? OR key1 IS NULL) AND (key2 = ? OR key2 IS NULL)),
65
+ ?, ?, ?, ?, ?, ?
66
+ )
67
+ `,s=[r.name,r.key1,r.key2,n,a,r.name,r.key1,r.key2,r.value];await e.run(i,s),console.log("Insert or update data: ",n,a,t,o)}async function It(e,t,o){let{checkpoint:n,digest:a,event:r}=o,i=`
68
+ UPDATE ${t}
69
+ SET is_removed = TRUE
70
+ WHERE name = ? AND (key1 = ? OR key1 IS NULL) AND (key2 = ? OR key2 IS NULL)
71
+ `;await e.run(i,[r.name,r.key1,r.key2]),console.log("Remove data: ",n,a,t,o)}async function $t(e,t,o){let n=`
72
+ INSERT INTO dapp_transaction (checkpoint, digest)
73
+ VALUES (?, ?)
74
+ `;await e.run(n,[t,o]),console.log("Insert transaction: ",t,o)}async function Dt(e){let t=await e.get(`
75
+ SELECT digest FROM dapp_transaction
76
+ ORDER BY id DESC
77
+ LIMIT 1
78
+ `);return t?t.digest:null}async function me(e,t,o,n){let r=`${process.cwd()}/contracts/${e.name}`;if(n=n||await A(r,t),console.log(`
79
+ \u{1F680} Sqlite Started`),console.log(` \u251C\u2500 Project: ${r}`),console.log(` \u251C\u2500 Network: ${t}`),console.log(` \u251C\u2500 Database: ${o}`),console.log(` \u251C\u2500 Schema ID: ${n}`),!n)throw new p("Schema ID not found. Please provide a schema ID with the --schemaId flag.");let i=new yt({url:ht(t)});if(o==="sqlite")for(x=await kt(e.name);;){await D(2e3);let s=await Dt(x),d=(await i.queryTransactionBlocks({filter:{ChangedObject:n},order:"ascending",cursor:s,options:{showEvents:!0}})).data;for(let c of d)if(await $t(x,c.checkpoint?.toString(),c.digest),c.events)for(let u of c.events)u.parsedJson.hasOwnProperty("value")?await xt(x,e.name,c.checkpoint?.toString(),c.digest,u.parsedJson):await St(x,e.name,c.checkpoint?.toString(),c.digest,u.parsedJson)}else throw new p(`Database "${o}" not supported. Supported databases: sqlite`)}process.on("SIGINT",async()=>{await x.close(),console.log(vt.green("\u2705 Sqlite Stopped")),process.exit()});import{Dubhe as Tt}from"@0xobelisk/sui-client";function Rt(){try{let e=process.platform==="win32"?'tasklist /FI "IMAGENAME eq sui.exe" /FO CSV /NH':'pgrep -f "sui start"',t=Pt(e).toString().trim();return process.platform==="win32"?t.toLowerCase().includes("sui.exe"):t.length>0}catch{return!1}}async function At(){let e=["suiprivkey1qq3ez3dje66l8pypgxynr7yymwps6uhn7vyczespj84974j3zya0wdpu76v","suiprivkey1qp6vcyg8r2x88fllmjmxtpzjl95gd9dugqrgz7xxf50w6rqdqzetg7x4d7s","suiprivkey1qpy3a696eh3m55fwa8h38ss063459u4n2dm9t24w2hlxxzjp2x34q8sdsnc","suiprivkey1qzxwp29favhzrjd95f6uj9nskjwal6nh9g509jpun395y6g72d6jqlmps4c","suiprivkey1qzhq4lv38sesah4uzsqkkmeyjx860xqjdz8qgw36tmrdd5tnle3evxpng57","suiprivkey1qzez45sjjsepjgtksqvpq6jw7dzw3zq0dx7a4sulfypd73acaynw5jl9x2c"];console.log("\u{1F4DD}Accounts"),console.log("=========="),e.forEach((t,o)=>{let a=new Tt({secretKey:t}).getSigner();ge("curl",["--location","--request","POST","http://127.0.0.1:9123/gas","--header","Content-Type: application/json","--data-raw",`{"FixedAmountRequest": {"recipient": "${a.toSuiAddress()}"}}`],{env:{...process.env},stdio:"ignore",detached:!0}),console.log(` \u250C\u2500 Account #${o}: ${a.toSuiAddress()}(1000 SUI)`),console.log(` \u2514\u2500 Private Key: ${t}`)}),console.log("=========="),console.log(E.yellow("\u2139\uFE0F WARNING: These accounts, and their private keys, are publicly known.")),console.log(E.yellow("Any funds sent to them on Mainnet or any other live network WILL BE LOST."))}async function fe(){if(Rt()){console.log(E.yellow(`
80
+ \u26A0\uFE0F Warning: Local Node Already Running`)),console.log(E.yellow(" \u251C\u2500 Cannot start a new instance")),console.log(E.yellow(" \u2514\u2500 Please stop the existing process first"));return}V(),console.log("\u{1F680} Starting Local Node...");try{let e=ge("sui",["start","--with-faucet","--force-regenesis"],{env:{...process.env,RUST_LOG:"off,sui_node=info"},stdio:"ignore",detached:!0});if(e.on("error",o=>{console.error(E.red(`
81
+ \u274C Failed to Start Local Node`)),console.error(E.red(` \u2514\u2500 Error: ${o.message}`))}),await D(5e3),console.log(" \u251C\u2500 Faucet: Enabled"),console.log(" \u2514\u2500 Force Regenesis: Yes"),console.log(" \u2514\u2500 HTTP server: http://127.0.0.1:9000/"),console.log(" \u2514\u2500 Faucet server: http://127.0.0.1:9123/"),await At(),await D(2e3),k("suiprivkey1qzez45sjjsepjgtksqvpq6jw7dzw3zq0dx7a4sulfypd73acaynw5jl9x2c")===!1)throw new p("Please check your privateKey.");console.log(E.green("\u{1F389} Local environment is ready!")),process.on("SIGINT",()=>{console.log(E.yellow(`
82
+ \u{1F514} Stopping Local Node...`)),e&&(e.kill(),console.log(E.green("\u2705 Local Node Stopped"))),process.exit()})}catch(e){console.error(E.red(`
83
+ \u274C Failed to Start Local Node`)),console.error(E.red(` \u2514\u2500 Error: ${e.message}`)),process.exit(1)}}var Ot={command:"node",describe:"Manage local Sui node",builder(e){return e},async handler(){try{await fe()}catch(e){console.error("Error executing command:",e),process.exit(1)}}},he=Ot;import{Dubhe as Mt}from"@0xobelisk/sui-client";import{requestSuiFromFaucetV0 as Ft,getFaucetHost as Nt}from"@mysten/sui/faucet";import{SuiClient as Kt,getFullnodeUrl as jt}from"@mysten/sui/client";var Vt={command:"faucet",describe:"Interact with a Dubhe faucet",builder(e){return e.options({network:{type:"string",desc:"URL of the Dubhe faucet",choices:["testnet","devnet","localnet"],default:"localnet"},recipient:{type:"string",desc:"Sui address to fund"}})},async handler({network:e,recipient:t}){let o="";if(t===void 0){let i=process.env.PRIVATE_KEY;if(!i)throw new p(`Missing PRIVATE_KEY environment variable.
50
84
  Run 'echo "PRIVATE_KEY=YOUR_PRIVATE_KEY" > .env'
51
- in your contracts directory to use the default sui private key.`);let i=_(a);if(i===!1)throw new m("Please check your PRIVATE_KEY.");o=new _t({secretKey:i}).getKeypair().toSuiAddress()}else o=t;console.log(`
52
- \u{1F30A} Starting Faucet Operation...`),console.log(` \u251C\u2500 Network: ${e}`),t===void 0?(console.log(" \u251C\u2500 Using Environment PrivateKey"),console.log(` \u251C\u2500 Generated Address: ${o}`)):console.log(` \u251C\u2500 Using Provided Address: ${o}`),console.log(" \u251C\u2500 Requesting funds from faucet..."),await Ct({host:kt(e),recipient:o}),console.log(" \u2514\u2500 Checking balance...");let n=new xt({url:$t(e)}),r={owner:o},s=await n.getBalance(r);console.log(`
53
- \u{1F4B0} Account Summary`),console.log(` \u251C\u2500 Address: ${o}`),console.log(` \u2514\u2500 Balance: ${(Number(s.totalBalance)/1e9).toFixed(4)} SUI`),console.log(`
85
+ in your contracts directory to use the default sui private key.`);let s=k(i);if(s===!1)throw new p("Please check your PRIVATE_KEY.");o=new Mt({secretKey:s}).getAddress()}else o=t;console.log(`
86
+ \u{1F30A} Starting Faucet Operation...`),console.log(` \u251C\u2500 Network: ${e}`),t===void 0?(console.log(" \u251C\u2500 Using Environment PrivateKey"),console.log(` \u251C\u2500 Generated Address: ${o}`)):console.log(` \u251C\u2500 Using Provided Address: ${o}`),console.log(" \u251C\u2500 Requesting funds from faucet..."),await Ft({host:Nt(e),recipient:o}),console.log(" \u2514\u2500 Checking balance...");let n=new Kt({url:jt(e)}),a={owner:o},r=await n.getBalance(a);console.log(`
87
+ \u{1F4B0} Account Summary`),console.log(` \u251C\u2500 Address: ${o}`),console.log(` \u2514\u2500 Balance: ${(Number(r.totalBalance)/1e9).toFixed(4)} SUI`),console.log(`
54
88
  \u2705 Faucet Operation Complete
55
- `),process.exit(0)}},he=Et;import{schemaGen as St,loadConfig as It}from"@0xobelisk/sui-common";import Pt from"chalk";var Dt={command:"schemagen",describe:"Autogenerate Dubhe schemas based on the config file",builder:{"config-path":{type:"string",default:"dubhe.config.ts",desc:"Path to the config file"},network:{type:"string",choices:["mainnet","testnet","devnet","localnet"],desc:"Node network (mainnet/testnet/devnet/localnet)"}},async handler({"config-path":e,network:t}){try{let o=await It(e);await St(o,void 0,t),process.exit(0)}catch(o){console.log(Pt.red("Schemagen failed!")),console.error(o.message)}}},ye=Dt;import{loadConfig as Ot}from"@0xobelisk/sui-common";var Mt={command:"publish",describe:"Publish dubhe move contract",builder(e){return e.options({network:{type:"string",choices:["mainnet","testnet","devnet","localnet"],desc:"Node network (mainnet/testnet/devnet/localnet)"},"config-path":{type:"string",default:"dubhe.config.ts",desc:"Configuration file path"},"gas-budget":{type:"number",desc:"Optional gas budget for the transaction",optional:!0}})},async handler({network:e,"config-path":t,"gas-budget":o}){try{let n=await Ot(t);await ce(n,e,o)}catch(n){E(n),process.exit(1)}process.exit(0)}},be=Mt;import{Dubhe as At}from"@0xobelisk/sui-client";import{Transaction as Ft,UpgradePolicy as Kt}from"@mysten/sui/transactions";import{getFullnodeUrl as Tt,SuiClient as Rt}from"@mysten/sui/client";import{execSync as jt}from"child_process";import B from"chalk";import*as K from"fs";import*as we from"path";function Nt(e,t){t.forEach(o=>{let n=`${e}/sources/codegen/schemas/${o.schemaName}.move`,r=K.readFileSync(n,"utf-8"),s=new RegExp(`public fun migrate\\(_${o.schemaName}: &mut ${W(o.schemaName)}, _cap: &UpgradeCap\\) {[^}]*}`),a=`
56
- public fun migrate(${o.schemaName}: &mut ${W(o.schemaName)}, _cap: &UpgradeCap) {
57
- ${o.fields.map(c=>{let l="";return c.type.includes("StorageValue")?l="storage_value::new()":c.type.includes("StorageMap")?l="storage_map::new()":c.type.includes("StorageDoubleMap")&&(l="storage_double_map::new()"),`storage_migration::add_field<${c.type}>(&mut ${o.schemaName}.id, b"${c.name}", ${l});`}).join("")}
89
+ `),process.exit(0)}},ye=Vt;import{schemaGen as Ut,loadConfig as qt}from"@0xobelisk/sui-common";import Yt from"chalk";var Lt={command:"schemagen",describe:"Autogenerate Dubhe schemas based on the config file",builder:{"config-path":{type:"string",default:"dubhe.config.ts",desc:"Path to the config file"},network:{type:"string",choices:["mainnet","testnet","devnet","localnet"],desc:"Node network (mainnet/testnet/devnet/localnet)"}},async handler({"config-path":e,network:t}){try{let o=await qt(e);await Ut(o,void 0,t),process.exit(0)}catch(o){console.log(Yt.red("Schemagen failed!")),console.error(o.message)}}},be=Lt;import{loadConfig as Bt}from"@0xobelisk/sui-common";var Ht={command:"publish",describe:"Publish dubhe move contract",builder(e){return e.options({network:{type:"string",choices:["mainnet","testnet","devnet","localnet"],default:"localnet",desc:"Node network (mainnet/testnet/devnet/localnet)"},"config-path":{type:"string",default:"dubhe.config.ts",desc:"Configuration file path"},"gas-budget":{type:"number",desc:"Optional gas budget for the transaction",optional:!0}})},async handler({network:e,"config-path":t,"gas-budget":o}){try{let n=await Bt(t);await ce(n,e,o)}catch(n){_(n),process.exit(1)}process.exit(0)}},we=Ht;import{Dubhe as Jt}from"@0xobelisk/sui-client";import{Transaction as zt,UpgradePolicy as Gt}from"@mysten/sui/transactions";import{getFullnodeUrl as Wt,SuiClient as Xt}from"@mysten/sui/client";import{execSync as Zt}from"child_process";import B from"chalk";import*as M from"fs";import*as ve from"path";function Qt(e,t){let o=`${e}/sources/codegen/schema.move`,n=M.readFileSync(o,"utf-8"),a=new RegExp("public fun migrate\\(_schema: &mut Schema, _cap: &UpgradeCap, _ctx: &mut TxContext\\) {[^}]*}"),r=`
90
+ public fun migrate(_schema: &mut Schema, _cap: &UpgradeCap, _ctx: &mut TxContext) {
91
+ ${t.map(s=>{let l="";return s.fields.includes("StorageValue")?l=`storage_value::new(b"${s.schemaName}", _ctx)`:s.fields.includes("StorageMap")?l=`storage_map::new(b"${s.schemaName}", _ctx)`:s.fields.includes("StorageDoubleMap")&&(l=`storage_double_map::new(b"${s.schemaName}", _ctx)`),`storage::add_field<${s.fields}>(&mut _schema.id, b"${s.schemaName}", ${l});`}).join("")}
58
92
  }
59
- `,i=r.replace(s,a);K.writeFileSync(n,i,"utf-8")})}function W(e){return e.split("_").map((t,o)=>t.charAt(0).toUpperCase()+t.slice(1).toLowerCase()).join("")}function Vt(e){let t=e.split("::");return t.length>0?t[t.length-1]:""}function L(e,t,o,n){let r=we.resolve(e),a=K.readFileSync(r,"utf-8").split(`
60
- `),i=a.findIndex(u=>u.trim()===`[env.${t}]`);if(i===-1)return console.log(`Network type [env.${t}] not found in the file.`),"";let c=-1,l="";for(let u=i+1;u<a.length;u++){let f=a[u].trim();if(f.startsWith("["))break;if(f.startsWith(o)){c=u,l=f.split("=")[1].trim().replace(/"/g,"");break}}if(c!==-1){a[c]=`${o} = "${n}"`;let u=a.join(`
61
- `);K.writeFileSync(r,u,"utf-8")}else console.log(`${o} not found for [env.${t}].`);return l}async function ve(e,t,o){await A(o);let n=process.cwd(),r=`${n}/contracts/${t}`,s=process.env.PRIVATE_KEY;if(!s)throw new m(`Missing PRIVATE_KEY environment variable.
93
+ `,i=n.replace(a,r);M.writeFileSync(o,i,"utf-8")}function H(e,t,o,n){let a=ve.resolve(e),i=M.readFileSync(a,"utf-8").split(`
94
+ `),s=i.findIndex(c=>c.trim()===`[env.${t}]`);if(s===-1)return console.log(`Network type [env.${t}] not found in the file.`),"";let l=-1,d="";for(let c=s+1;c<i.length;c++){let u=i[c].trim();if(u.startsWith("["))break;if(u.startsWith(o)){l=c,d=u.split("=")[1].trim().replace(/"/g,"");break}}if(l!==-1){i[l]=`${o} = "${n}"`;let c=i.join(`
95
+ `);M.writeFileSync(a,c,"utf-8")}else console.log(`${o} not found for [env.${t}].`);return d}async function ke(e,t,o){await O(o);let n=process.cwd(),a=`${n}/contracts/${t}`,r=process.env.PRIVATE_KEY;if(!r)throw new p(`Missing PRIVATE_KEY environment variable.
62
96
  Run 'echo "PRIVATE_KEY=YOUR_PRIVATE_KEY" > .env'
63
- in your contracts directory to use the default sui private key.`);let a=_(s);if(a===!1)throw new m("Please check your privateKey.");let c=new At({secretKey:a}).getKeypair(),l=new Rt({url:Tt(o)}),u=Number(await te(r,o)),f=await M(r,o),g=await ne(r,o),b=L(`${r}/Move.lock`,o,"original-published-id","0x0000000000000000000000000000000000000000000000000000000000000000"),h=[],v=await ee(r,o);for(let d in e.schemas)v.forEach(x=>{if(W(d)==Vt(x.name)){let C={schemaName:"",fields:[]},p=[],P=!1;for(let $ in e.schemas[d])$ in x.structure||(P=!0,p.push({name:$,type:e.schemas[d][$]}),x.structure[$]=e.schemas[d][$]);P&&(C.schemaName=d,C.fields=p,h.push(C))}});h.forEach(d=>{console.log(`
64
- \u{1F680} Starting Migration for ${d.schemaName}...`),console.log("\u{1F4CB} Migration Fields:",d.fields)}),Nt(r,h);try{let d,x,C;try{let{modules:D,dependencies:Re,digest:je}=JSON.parse(jt(`sui move build --dump-bytecode-as-base64 --path ${n}/contracts/${t}`,{encoding:"utf-8"}));d=D,x=Re,C=je}catch(D){throw new V(D.stdout)}console.log(`
65
- \u{1F680} Starting Upgrade Process...`),console.log("\u{1F4CB} OldPackageId:",f),console.log("\u{1F4CB} UpgradeCap Object Id:",g),console.log("\u{1F4CB} OldVersion:",u);let p=new Ft,P=p.moveCall({target:"0x2::package::authorize_upgrade",arguments:[p.object(g),p.pure.u8(Kt.COMPATIBLE),p.pure.vector("u8",C)]}),$=p.upgrade({modules:d,dependencies:x,package:f,ticket:P});p.moveCall({target:"0x2::package::commit_upgrade",arguments:[p.object(g),$]});let Q=await l.signAndExecuteTransaction({signer:c,transaction:p,options:{showObjectChanges:!0}}),z="";Q.objectChanges.map(D=>{D.type==="published"&&(console.log(B.blue(`${t} PackageId: ${D.packageId}`)),console.log(B.blue(`${t} Version: ${u+1}`)),z=D.packageId)}),L(`${r}/Move.lock`,o,"original-published-id",b),L(`${r}/Move.lock`,o,"latest-published-id",z),L(`${r}/Move.lock`,o,"published-version",u+1+""),console.log(B.green(`Upgrade Transaction Digest: ${Q.digest}`)),j(t,o,z,g,u+1,v)}catch(d){console.log(B.red("Upgrade failed!")),console.error(d.message)}}import{loadConfig as Ut}from"@0xobelisk/sui-common";var Yt={command:"upgrade",describe:"Upgrade your move contracts",builder(e){return e.options({network:{type:"string",choices:["mainnet","testnet","devnet","localnet"],desc:"Network of the node (mainnet/testnet/devnet/localnet)"},"config-path":{type:"string",default:"dubhe.config.ts",decs:"Path to the config file"}})},async handler({network:e,"config-path":t}){try{let o=await Ut(t);await ve(o,o.name,e)}catch(o){E(o),process.exit(1)}process.exit(0)}},_e=Yt;import{execSync as qt}from"child_process";import{loadConfig as Bt}from"@0xobelisk/sui-common";var Lt={command:"test",describe:"Run tests in Dubhe contracts",builder(e){return e.options({"config-path":{type:"string",default:"dubhe.config.ts",description:"Options to pass to forge test"},test:{type:"string",desc:"Run a specific test"},"gas-limit":{type:"string",desc:"Set the gas limit for the test"}})},async handler({"config-path":e,test:t,"gas-limit":o}){try{console.log("\u{1F680} Running move test");let n=await Bt(e),a=`sui move test --path ${`${process.cwd()}/contracts/${n.name}`} ${t?` --test ${t}`:""} ${o?` --gas-limit ${o}`:""}`;qt(a,{stdio:"inherit",encoding:"utf-8"})}catch{process.exit(0)}}},Ce=Lt;import{execSync as zt}from"child_process";import Ht from"chalk";import{loadConfig as Jt}from"@0xobelisk/sui-common";var Gt={command:"build",describe:"Run tests in Dubhe contracts",builder(e){return e.options({"config-path":{type:"string",default:"dubhe.config.ts",description:"Options to pass to forge test"},network:{type:"string",choices:["mainnet","testnet","devnet","localnet"],desc:"Node network (mainnet/testnet/devnet/localnet)"},"dump-bytecode-as-base64":{type:"boolean",default:!1,desc:"Dump bytecode as base64"}})},async handler({"config-path":e,network:t,"dump-bytecode-as-base64":o}){try{console.log("\u{1F680} Running move build");let n=await Jt(e),s=`${process.cwd()}/contracts/${n.name}`;await A(t),q(s+"/Move.toml",t);let a=`sui move build --path ${s} ${o?" --dump-bytecode-as-base64":""}`,i=zt(a,{encoding:"utf-8"});console.log(i)}catch(n){console.error(Ht.red("Error executing sui move build:")),console.log(n.stdout),process.exit(0)}}},ke=Gt;var Wt={command:"hello",describe:"hello, dubhe",builder(e){return e},async handler(){N()}},xe=Wt;import{Dubhe as Z}from"@0xobelisk/sui-client";import*as w from"fs";import S from"chalk";async function $e(e=!1,t){t&&(console.log(S.blue("Note: The generated account will be stored in the .env file and the TypeScript file specified by the --output-ts-path option.")),console.log(S.yellow(`Warning: Do not expose the key file. It is intended for local testing only.
66
- `)));let o=process.cwd(),n;if(e){let i=new Z().getKeypair();if(n=i.getSecretKey(),w.writeFileSync(`${o}/.env`,`PRIVATE_KEY=${n}`),console.log(S.green(`File created at: ${o}/.env`)),t){let c=t.substring(0,t.lastIndexOf("/"));w.existsSync(c)||w.mkdirSync(c,{recursive:!0}),w.writeFileSync(t,`export const PRIVATEKEY = '${n}';
67
- export const ACCOUNT = '${i.toSuiAddress()}';
97
+ in your contracts directory to use the default sui private key.`);let i=k(r);if(i===!1)throw new p("Please check your privateKey.");let l=new Jt({secretKey:i}).getSigner(),d=new Xt({url:Wt(o)}),c=Number(await oe(a,o)),u=await R(a,o),m=await ne(a,o),y=await A(a,o),f=H(`${a}/Move.lock`,o,"original-published-id","0x0000000000000000000000000000000000000000000000000000000000000000"),v=[],C=await te(a,o);Object.entries(e.schemas).forEach(([b,g])=>{C.hasOwnProperty(b)||v.push({schemaName:b,fields:g})}),v.forEach(b=>{console.log(`
98
+ \u{1F680} Starting Migration for ${b.schemaName}...`),console.log("\u{1F4CB} Migration Fields:",b.fields)}),Qt(a,v);try{let b,g,Z;try{let{modules:P,dependencies:Ue,digest:qe}=JSON.parse(Zt(`sui move build --dump-bytecode-as-base64 --path ${n}/contracts/${t}`,{encoding:"utf-8"}));b=P,g=Ue,Z=qe}catch(P){throw new U(P.stdout)}console.log(`
99
+ \u{1F680} Starting Upgrade Process...`),console.log("\u{1F4CB} OldPackageId:",u),console.log("\u{1F4CB} UpgradeCap Object Id:",m),console.log("\u{1F4CB} OldVersion:",c);let $=new zt,je=$.moveCall({target:"0x2::package::authorize_upgrade",arguments:[$.object(m),$.pure.u8(Gt.COMPATIBLE),$.pure.vector("u8",Z)]}),Ve=$.upgrade({modules:b,dependencies:g,package:u,ticket:je});$.moveCall({target:"0x2::package::commit_upgrade",arguments:[$.object(m),Ve]});let Q=await d.signAndExecuteTransaction({signer:l,transaction:$,options:{showObjectChanges:!0}}),J="";Q.objectChanges.map(P=>{P.type==="published"&&(console.log(B.blue(`${t} PackageId: ${P.packageId}`)),console.log(B.blue(`${t} Version: ${c+1}`)),J=P.packageId)}),H(`${a}/Move.lock`,o,"original-published-id",f),H(`${a}/Move.lock`,o,"latest-published-id",J),H(`${a}/Move.lock`,o,"published-version",c+1+""),console.log(B.green(`Upgrade Transaction Digest: ${Q.digest}`)),K(t,o,J,y,m,c+1,e.schemas)}catch(b){console.log(B.red("Upgrade failed!")),console.error(b.message)}}import{loadConfig as eo}from"@0xobelisk/sui-common";var to={command:"upgrade",describe:"Upgrade your move contracts",builder(e){return e.options({network:{type:"string",choices:["mainnet","testnet","devnet","localnet"],default:"localnet",desc:"Network of the node (mainnet/testnet/devnet/localnet)"},"config-path":{type:"string",default:"dubhe.config.ts",decs:"Path to the config file"}})},async handler({network:e,"config-path":t}){try{let o=await eo(t);await ke(o,o.name,e)}catch(o){_(o),process.exit(1)}process.exit(0)}},_e=to;import{execSync as oo}from"child_process";import{loadConfig as no}from"@0xobelisk/sui-common";var ro={command:"test",describe:"Run tests in Dubhe contracts",builder(e){return e.options({"config-path":{type:"string",default:"dubhe.config.ts",description:"Options to pass to forge test"},test:{type:"string",desc:"Run a specific test"},"gas-limit":{type:"string",desc:"Set the gas limit for the test"}})},async handler({"config-path":e,test:t,"gas-limit":o}){try{console.log("\u{1F680} Running move test");let n=await no(e),i=`sui move test --path ${`${process.cwd()}/contracts/${n.name}`} ${t?` --test ${t}`:""} ${o?` --gas-limit ${o}`:""}`;oo(i,{stdio:"inherit",encoding:"utf-8"})}catch{process.exit(0)}}},Ee=ro;import{execSync as ao}from"child_process";import so from"chalk";import{loadConfig as io}from"@0xobelisk/sui-common";var co={command:"build",describe:"Run tests in Dubhe contracts",builder(e){return e.options({"config-path":{type:"string",default:"dubhe.config.ts",description:"Options to pass to forge test"},network:{type:"string",choices:["mainnet","testnet","devnet","localnet"],desc:"Node network (mainnet/testnet/devnet/localnet)"},"dump-bytecode-as-base64":{type:"boolean",default:!1,desc:"Dump bytecode as base64"}})},async handler({"config-path":e,network:t,"dump-bytecode-as-base64":o}){try{console.log("\u{1F680} Running move build");let n=await io(e),r=`${process.cwd()}/contracts/${n.name}`;await O(t),await L(r+"/Move.toml",t);let i=`sui move build --path ${r} ${o?" --dump-bytecode-as-base64":""}`,s=ao(i,{encoding:"utf-8"});console.log(s)}catch(n){console.error(so.red("Error executing sui move build:")),console.log(n.stdout),process.exit(0)}}},xe=co;var lo={command:"hello",describe:"hello, dubhe",builder(e){return e},async handler(){V()}},Se=lo;import{Dubhe as X}from"@0xobelisk/sui-client";import*as w from"fs";import S from"chalk";async function Ce(e=!1,t){t&&(console.log(S.blue("Note: The generated account will be stored in the .env file and the TypeScript file specified by the --output-ts-path option.")),console.log(S.yellow(`Warning: Do not expose the key file. It is intended for local testing only.
100
+ `)));let o=process.cwd(),n;if(e){let s=new X().getSigner();if(n=s.getSecretKey(),w.writeFileSync(`${o}/.env`,`PRIVATE_KEY=${n}`),console.log(S.green(`File created at: ${o}/.env`)),t){let l=t.substring(0,t.lastIndexOf("/"));w.existsSync(l)||w.mkdirSync(l,{recursive:!0}),w.writeFileSync(t,`export const PRIVATEKEY = '${n}';
101
+ export const ACCOUNT = '${s.toSuiAddress()}';
68
102
  `),console.log(S.green(`File created at: ${t}
69
- `))}console.log(S.blue(`Force generate new Account: ${i.toSuiAddress()}`));return}try{let i=w.readFileSync(`${o}/.env`,"utf8").match(/PRIVATE_KEY=(.+)/);if(i&&i[1]){n=i[1];let l=new Z({secretKey:n}).getKeypair();if(t){let u=t.substring(0,t.lastIndexOf("/"));w.existsSync(u)||w.mkdirSync(u,{recursive:!0}),w.writeFileSync(t,`export const PRIVATEKEY = '${n}';
70
- export const ACCOUNT = '${l.toSuiAddress()}';
103
+ `))}console.log(S.blue(`Force generate new Account: ${s.toSuiAddress()}`));return}try{let s=w.readFileSync(`${o}/.env`,"utf8").match(/PRIVATE_KEY=(.+)/);if(s&&s[1]){n=s[1];let d=new X({secretKey:n}).getSigner();if(t){let c=t.substring(0,t.lastIndexOf("/"));w.existsSync(c)||w.mkdirSync(c,{recursive:!0}),w.writeFileSync(t,`export const PRIVATEKEY = '${n}';
104
+ export const ACCOUNT = '${d.toSuiAddress()}';
71
105
  `),console.log(S.green(`File created at: ${t}
72
- `))}console.log(S.blue(`Using existing Account: ${l.toSuiAddress()}`));return}}catch{}let s=new Z().getKeypair();if(n=s.getSecretKey(),w.writeFileSync(`${o}/.env`,`PRIVATE_KEY=${n}`),console.log(S.green(`File created at: ${o}/.env`)),t){let a=t.substring(0,t.lastIndexOf("/"));w.existsSync(a)||w.mkdirSync(a,{recursive:!0}),w.writeFileSync(t,`export const PRIVATEKEY = '${n}';
73
- export const ACCOUNT = '${s.toSuiAddress()}';
106
+ `))}console.log(S.blue(`Using existing Account: ${d.toSuiAddress()}`));return}}catch{}let r=new X().getSigner();if(n=r.getSecretKey(),w.writeFileSync(`${o}/.env`,`PRIVATE_KEY=${n}`),console.log(S.green(`File created at: ${o}/.env`)),t){let i=t.substring(0,t.lastIndexOf("/"));w.existsSync(i)||w.mkdirSync(i,{recursive:!0}),w.writeFileSync(t,`export const PRIVATEKEY = '${n}';
107
+ export const ACCOUNT = '${r.toSuiAddress()}';
74
108
  `),console.log(S.green(`File created at: ${t}
75
- `))}console.log(S.blue(`Generate new Account: ${s.toSuiAddress()}`))}var Zt={command:"generate-key",describe:"Generate a new account key pair and save it to a .env file, with an option to output to a TypeScript file.",builder:{force:{type:"boolean",default:!1,desc:"Force generate a new key pair"},"output-ts-path":{type:"string",desc:"Specify the path to output the TypeScript file containing the key pair (e.g., ./src/config/key.ts)"}},async handler({force:e,"output-ts-path":t}){try{await $e(e,t)}catch(o){console.error("Error generating account:",o),process.exit(1)}process.exit(0)}},Ee=Zt;import{Dubhe as Qt}from"@0xobelisk/sui-client";import Xt from"chalk";import eo from"dotenv";eo.config();async function Se(e){try{let t=process.env.PRIVATE_KEY;if(!t)throw new m(`Missing PRIVATE_KEY environment variable.
109
+ `))}console.log(S.blue(`Generate new Account: ${r.toSuiAddress()}`))}var po={command:"generate-key",describe:"Generate a new account key pair and save it to a .env file, with an option to output to a TypeScript file.",builder:{force:{type:"boolean",default:!1,desc:"Force generate a new key pair"},"output-ts-path":{type:"string",desc:"Specify the path to output the TypeScript file containing the key pair (e.g., ./src/config/key.ts)"}},async handler({force:e,"output-ts-path":t}){try{await Ce(e,t)}catch(o){console.error("Error generating account:",o),process.exit(1)}process.exit(0)}},Ie=po;import{Dubhe as uo}from"@0xobelisk/sui-client";import mo from"chalk";import go from"dotenv";go.config();async function $e(e){try{let t=process.env.PRIVATE_KEY;if(!t)throw new p(`Missing PRIVATE_KEY environment variable.
76
110
  Run 'echo "PRIVATE_KEY=YOUR_PRIVATE_KEY" > .env'
77
- in your contracts directory to use the default sui private key.`);if(_(t)===!1)throw new m("Please check your privateKey.");let r=await new Qt({secretKey:process.env.PRIVATE_KEY,networkType:e}).getBalance(),s=Number(r.totalBalance)/1e9;if(s===0)throw new m("Your account balance is 0 SUI. Please get some SUI to proceed.");console.log(Xt.green(`Current account balance: ${s.toFixed(4)} SUI`))}catch(t){throw new m("Failed to check balance: "+t)}}var to={command:"check-balance",describe:"Check the balance of the account",builder:{network:{type:"string",choices:["mainnet","testnet","devnet","localnet"],desc:"Network to check balance on"}},async handler({network:e}){try{await Se(e)}catch(t){console.error("Error checking balance:",t),process.exit(1)}process.exit(0)}},Ie=to;import*as Pe from"fs/promises";import{mkdirSync as oo,writeFileSync as no}from"fs";import{dirname as ro}from"path";async function so(e,t){try{let o=await Pe.readFile(`${e}/.history/sui_${t}/latest.json`,"utf8");return JSON.parse(o)}catch(o){throw new Error(`read .history/sui_${t}/latest.json failed. ${o}`)}}function ao(e,t,o,n){let r=`type NetworkType = 'testnet' | 'mainnet' | 'devnet' | 'localnet';
111
+ in your contracts directory to use the default sui private key.`);if(k(t)===!1)throw new p("Please check your privateKey.");let a=await new uo({secretKey:process.env.PRIVATE_KEY,networkType:e}).getBalance(),r=Number(a.totalBalance)/1e9;if(r===0)throw new p("Your account balance is 0 SUI. Please get some SUI to proceed.");console.log(mo.green(`Current account balance: ${r.toFixed(4)} SUI`))}catch(t){throw new p("Failed to check balance: "+t)}}var fo={command:"check-balance",describe:"Check the balance of the account",builder:{network:{type:"string",choices:["mainnet","testnet","devnet","localnet"],desc:"Network to check balance on",default:"localnet"}},async handler({network:e}){try{await $e(e)}catch(t){console.error("Error checking balance:",t),process.exit(1)}process.exit(0)}},De=fo;import*as Pe from"fs/promises";import{mkdirSync as ho,writeFileSync as yo}from"fs";import{dirname as bo}from"path";async function wo(e,t){try{let o=await Pe.readFile(`${e}/.history/sui_${t}/latest.json`,"utf8");return JSON.parse(o)}catch(o){throw new Error(`read .history/sui_${t}/latest.json failed. ${o}`)}}function vo(e,t,o,n){let a=`type NetworkType = 'testnet' | 'mainnet' | 'devnet' | 'localnet';
78
112
 
79
113
  export const NETWORK: NetworkType = '${e}';
80
-
81
114
  export const PACKAGE_ID = '${t}'
82
-
83
- ${o.map(s=>`export const ${s.name.split("::")[2]}_Object_Id = '${s.objectId}'`).join(`
84
- `)}
85
- `;io(r,n,"storeConfig")}async function io(e,t,o){oo(ro(t),{recursive:!0}),no(t,e),o!==void 0&&console.log(`${o}: ${t}`)}async function De(e,t,o){let r=`${process.cwd()}/contracts/${e.name}`,s=await so(r,t);ao(s.network,s.packageId,s.schemas,o)}import{loadConfig as co}from"@0xobelisk/sui-common";var lo={command:"config-store",describe:"Store configuration for the Dubhe project",builder:{"config-path":{type:"string",default:"dubhe.config.ts",desc:"Path to the config file"},network:{type:"string",choices:["mainnet","testnet","devnet","localnet"],desc:"Network to store config for"},"output-ts-path":{type:"string",desc:"Specify the output path for the generated TypeScript configuration file (e.g., ./src/config/generated.ts)"}},async handler({"config-path":e,network:t,"output-ts-path":o}){try{let n=await co(e);await De(n,t,o)}catch(n){console.error("Error storing config:",n),process.exit(1)}process.exit(0)}},Oe=lo;import{loadConfig as po}from"@0xobelisk/sui-common";var uo={command:"query",describe:"Query dubhe schema struct state",builder:{network:{type:"string",choices:["mainnet","testnet","devnet","localnet"],desc:"Node network (mainnet/testnet/devnet/localnet)",demandOption:!0},"config-path":{type:"string",default:"dubhe.config.ts",desc:"Configuration file path"},schema:{type:"string",desc:"Schema name",demandOption:!0},field:{type:"string",desc:"Field name",demandOption:!0},"object-id":{type:"string",desc:"Object ID (optional)"},"package-id":{type:"string",desc:"Package ID (optional)"},"metadata-path":{type:"string",desc:"Path to metadata JSON file (optional)"},params:{type:"array",desc:"Params for storage type: StorageValue(no params), StorageMap(1 param), StorageDoubleMap(2 params)",string:!0}},async handler({network:e,"config-path":t,schema:o,field:n,"object-id":r,"package-id":s,"metadata-path":a,params:i}){try{let c=await po(t);await pe({dubheConfig:c,schema:o,field:n,objectId:r,network:e,packageId:s,metadataFilePath:a,params:i})}catch(c){E(c),process.exit(1)}process.exit(0)}},Me=uo;import{loadConfig as mo}from"@0xobelisk/sui-common";var go={command:"call",describe:"Call a function in a module",builder:{network:{type:"string",choices:["mainnet","testnet","devnet","localnet"],desc:"Node network (mainnet/testnet/devnet/localnet)",demandOption:!0},module:{type:"string",desc:"Module name",demandOption:!0},function:{type:"string",desc:"Function name",demandOption:!0},"config-path":{type:"string",default:"dubhe.config.ts",desc:"Configuration file path"},"package-id":{type:"string",desc:"Package ID (optional)"},"metadata-path":{type:"string",desc:"Path to metadata JSON file (optional)"},params:{type:"array",desc:"Params for the function",string:!0}},async handler({network:e,"config-path":t,module:o,function:n,"package-id":r,"metadata-path":s,params:a}){try{let i=await mo(t);await ue({dubheConfig:i,moduleName:o,funcName:n,network:e,packageId:r,metadataFilePath:s,params:a})}catch(i){E(i),process.exit(1)}process.exit(0)}},Ae=go;var Fe=[fe,be,Ae,Me,he,ye,_e,Ce,ke,xe,Ee,Ie,Oe];import*as Te from"dotenv";import Ke from"chalk";Te.config();fo(ho(process.argv)).scriptName("dubhe").command(Fe).strict().fail((e,t)=>{console.error(Ke.red(e)),e.includes("Missing required argument")&&console.log(Ke.yellow(`Run 'pnpm dubhe ${process.argv[2]} --help' for a list of available and required arguments.`)),console.log(""),E(t),console.log(""),process.exit(1)}).alias({h:"help"}).argv;
115
+ export const SCHEMA_ID = '${o}'
116
+ `;ko(a,n,"storeConfig")}async function ko(e,t,o){ho(bo(t),{recursive:!0}),yo(t,e),o!==void 0&&console.log(`${o}: ${t}`)}async function Te(e,t,o){let a=`${process.cwd()}/contracts/${e.name}`,r=await wo(a,t);vo(r.network,r.packageId,r.schemaId,o)}import{loadConfig as _o}from"@0xobelisk/sui-common";var Eo={command:"config-store",describe:"Store configuration for the Dubhe project",builder:{"config-path":{type:"string",default:"dubhe.config.ts",desc:"Path to the config file"},network:{type:"string",choices:["mainnet","testnet","devnet","localnet"],desc:"Network to store config for"},"output-ts-path":{type:"string",desc:"Specify the output path for the generated TypeScript configuration file (e.g., ./src/config/generated.ts)"}},async handler({"config-path":e,network:t,"output-ts-path":o}){try{let n=await _o(e);await Te(n,t,o)}catch(n){console.error("Error storing config:",n),process.exit(1)}process.exit(0)}},Re=Eo;import{loadConfig as xo}from"@0xobelisk/sui-common";var So={command:"query",describe:"Query dubhe schema struct state",builder:{network:{type:"string",choices:["mainnet","testnet","devnet","localnet"],default:"localnet",desc:"Node network (mainnet/testnet/devnet/localnet)"},"config-path":{type:"string",default:"dubhe.config.ts",desc:"Configuration file path"},schema:{type:"string",desc:"Schema name",demandOption:!0},"object-id":{type:"string",desc:"Object ID (optional)"},"package-id":{type:"string",desc:"Package ID (optional)"},"metadata-path":{type:"string",desc:"Path to metadata JSON file (optional)"},params:{type:"array",desc:"Params for storage type: StorageValue(no params), StorageMap(1 param), StorageDoubleMap(2 params)",string:!0}},async handler({network:e,"config-path":t,schema:o,"object-id":n,"package-id":a,"metadata-path":r,params:i}){try{let s=await xo(t);await pe({dubheConfig:s,schema:o,objectId:n,network:e,packageId:a,metadataFilePath:r,params:i})}catch(s){_(s),process.exit(1)}process.exit(0)}},Ae=So;import{loadConfig as Co}from"@0xobelisk/sui-common";var Io={command:"call",describe:"Call a function in a module",builder:{network:{type:"string",choices:["mainnet","testnet","devnet","localnet"],desc:"Node network (mainnet/testnet/devnet/localnet)",default:"localnet"},module:{type:"string",desc:"Module name",demandOption:!0},function:{type:"string",desc:"Function name",demandOption:!0},"config-path":{type:"string",default:"dubhe.config.ts",desc:"Configuration file path"},"package-id":{type:"string",desc:"Package ID (optional)"},"metadata-path":{type:"string",desc:"Path to metadata JSON file (optional)"},params:{type:"array",desc:"Params for the function",string:!0}},async handler({network:e,"config-path":t,module:o,function:n,"package-id":a,"metadata-path":r,params:i}){try{let s=await Co(t);await ue({dubheConfig:s,moduleName:o,funcName:n,network:e,packageId:a,metadataFilePath:r,params:i})}catch(s){_(s),process.exit(1)}process.exit(0)}},Oe=Io;import{loadConfig as $o}from"@0xobelisk/sui-common";var Do={command:"indexer",describe:"Dubhe indexer",builder(e){return e.options({network:{type:"string",choices:["mainnet","testnet","devnet","localnet"],desc:"Node network (mainnet/testnet/devnet/localnet)",default:"localnet"},"config-path":{type:"string",default:"dubhe.config.ts",desc:"Configuration file path"},schemaId:{type:"string",desc:"Schema ID"},db:{type:"string",choices:["sqlite","postgres"],desc:"Optional gas budget for the transaction",default:"sqlite"}})},async handler({network:e,"config-path":t,db:o,schemaId:n}){try{let a=await $o(t);await me(a,e,o,n)}catch(a){_(a),process.exit(1)}process.exit(0)}},Me=Do;var Fe=[he,we,Oe,Ae,ye,be,_e,Ee,xe,Se,Ie,De,Re,Me];import*as Ke from"dotenv";import Ne from"chalk";Ke.config();Po(To(process.argv)).scriptName("dubhe").command(Fe).strict().fail((e,t)=>{console.error(Ne.red(e)),e.includes("Missing required argument")&&console.log(Ne.yellow(`Run 'pnpm dubhe ${process.argv[2]} --help' for a list of available and required arguments.`)),console.log(""),_(t),console.log(""),process.exit(1)}).alias({h:"help"}).argv;
86
117
  //# sourceMappingURL=dubhe.js.map