@0xobelisk/sui-cli 0.5.6 → 0.5.8

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/obelisk.js CHANGED
@@ -1,14 +1,14 @@
1
1
  #!/usr/bin/env node
2
- import Ge from"yargs";import{hideBin as Le}from"yargs/helpers";import{execa as me}from"execa";var ge={command:"localnode",describe:"Start a local Sui node for development",builder(e){return e},async handler(){console.log("Clearing localnode history"),console.log("Running: sui-test-validator");let e=me("sui-test-validator");process.on("SIGINT",()=>{console.log(`
3
- gracefully shutting down from SIGINT (Crtl-C)`),e.kill(),process.exit()}),await e}},H=ge;import{requestSuiFromFaucetV0 as Te,getFaucetHost as Se}from"@mysten/sui.js/faucet";import{Ed25519Keypair as Re}from"@mysten/sui.js/keypairs/ed25519";import{SuiClient as Ke,getFullnodeUrl as Ae}from"@mysten/sui.js/client";import{TransactionBlock as z}from"@mysten/sui.js/transactions";import{Ed25519Keypair as we}from"@mysten/sui.js/keypairs/ed25519";import{getFullnodeUrl as ke,SuiClient as xe}from"@mysten/sui.js/client";import{execSync as ve}from"child_process";import l from"chalk";import S from"chalk";import{ZodError as ue}from"zod";import{fromZodError as fe,ValidationError as _e}from"zod-validation-error";var D=class extends Error{name="NotInsideProjectError";message="You are not inside a Obelisk project"},c=class extends Error{name="ObeliskCliError"},B=class extends Error{name="UpgradeError"},R=class extends Error{name="FsIibError"};function O(e){if(e instanceof _e)console.log(S.redBright(e.message));else if(e instanceof ue){let t=fe(e,{prefixSeparator:`
2
+ import Le from"yargs";import{hideBin as Ze}from"yargs/helpers";import{execa as me}from"execa";var ge={command:"localnode",describe:"Start a local Sui node for development",builder(e){return e},async handler(){console.log("Clearing localnode history"),console.log("Running: sui-test-validator");let e=me("sui-test-validator");process.on("SIGINT",()=>{console.log(`
3
+ gracefully shutting down from SIGINT (Crtl-C)`),e.kill(),process.exit()}),await e}},W=ge;import{requestSuiFromFaucetV0 as Se,getFaucetHost as Re}from"@mysten/sui.js/faucet";import{Ed25519Keypair as Ke}from"@mysten/sui.js/keypairs/ed25519";import{SuiClient as Ae,getFullnodeUrl as Me}from"@mysten/sui.js/client";import{TransactionBlock as z}from"@mysten/sui.js/transactions";import{Ed25519Keypair as ke}from"@mysten/sui.js/keypairs/ed25519";import{getFullnodeUrl as xe,SuiClient as ve}from"@mysten/sui.js/client";import{execSync as Ce}from"child_process";import c from"chalk";import S from"chalk";import{ZodError as ue}from"zod";import{fromZodError as fe,ValidationError as _e}from"zod-validation-error";var D=class extends Error{name="NotInsideProjectError";message="You are not inside a Obelisk project"},l=class extends Error{name="ObeliskCliError"},B=class extends Error{name="UpgradeError"},R=class extends Error{name="FsIibError"};function P(e){if(e instanceof _e)console.log(S.redBright(e.message));else if(e instanceof ue){let t=fe(e,{prefixSeparator:`
4
4
  - `,issueSeparator:`
5
- - `});console.log(S.redBright(t.message))}else e instanceof D?(console.log(S.red(e.message)),console.log(""),console.log(S.blue("To learn more about Obelisk's configuration, please go to https://github.com/0xobelisk"))):e instanceof c?console.log(S.red(e)):console.log(e)}import*as Y from"fs/promises";import{mkdirSync as ye,writeFileSync as he}from"fs";import{dirname as be}from"path";function P(e){if(e.startsWith("0x")){let t=e.slice(2);return t.length===64?t:!1}else return e.length===64?e:!1}async function K(e,t){try{let o=`${e}/sources/codegen/eps/world.move`,n=(await Y.readFile(o,"utf8")).replace(/const VERSION: u64 = \d+;/,`const VERSION: u64 = ${t};`);Z(n,o,"Update package version")}catch{throw new R("Fs update version failed.")}}async function A(e,t){try{let o=await Y.readFile(`${e}/.history/sui_${t}/latest.json`,"utf8");return JSON.parse(o)}catch{throw new R("Fs read deployment file failed.")}}async function W(e,t){return(await A(e,t)).version}async function J(e,t){return(await A(e,t)).packageId}async function q(e,t){return(await A(e,t)).worldId}async function G(e,t){return(await A(e,t)).upgradeCap}async function L(e,t){return(await A(e,t)).adminCap}function M(e,t,o,a,n,d,g){let p={projectName:e,network:t,packageId:o,worldId:a,upgradeCap:n,adminCap:d,version:g},u=process.cwd(),y=JSON.stringify(p,null,2);Z(y,`${u}/contracts/${e}/.history/sui_${t}/latest.json`,"Update deploy log")}async function Z(e,t,o){ye(be(t),{recursive:!0}),he(t,e),o!==void 0&&console.log(`${o}: ${t}`)}async function Q(e,t){let a=`${process.cwd()}/contracts/${e}`,n=process.env.PRIVATE_KEY;if(!n)throw new c(`Missing PRIVATE_KEY environment variable.
5
+ - `});console.log(S.redBright(t.message))}else e instanceof D?(console.log(S.red(e.message)),console.log(""),console.log(S.blue("To learn more about Obelisk's configuration, please go to https://github.com/0xobelisk"))):e instanceof l?console.log(S.red(e)):console.log(e)}import*as Y from"fs/promises";import{mkdirSync as ye,writeFileSync as he}from"fs";import{dirname as be}from"path";import{SUI_PRIVATE_KEY_PREFIX as we}from"@mysten/sui.js/cryptography";function O(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 K(e,t){try{let o=`${e}/sources/codegen/eps/world.move`,n=(await Y.readFile(o,"utf8")).replace(/const VERSION: u64 = \d+;/,`const VERSION: u64 = ${t};`);Z(n,o,"Update package version")}catch{throw new R("Fs update version failed.")}}async function A(e,t){try{let o=await Y.readFile(`${e}/.history/sui_${t}/latest.json`,"utf8");return JSON.parse(o)}catch{throw new R("Fs read deployment file failed.")}}async function H(e,t){return(await A(e,t)).version}async function J(e,t){return(await A(e,t)).packageId}async function q(e,t){return(await A(e,t)).worldId}async function G(e,t){return(await A(e,t)).upgradeCap}async function L(e,t){return(await A(e,t)).adminCap}function M(e,t,o,a,n,d,g){let p={projectName:e,network:t,packageId:o,worldId:a,upgradeCap:n,adminCap:d,version:g},u=process.cwd(),y=JSON.stringify(p,null,2);Z(y,`${u}/contracts/${e}/.history/sui_${t}/latest.json`,"Update deploy log")}async function Z(e,t,o){ye(be(t),{recursive:!0}),he(t,e),o!==void 0&&console.log(`${o}: ${t}`)}async function X(e,t){let a=`${process.cwd()}/contracts/${e}`,n=process.env.PRIVATE_KEY;if(!n)throw new l(`Missing PRIVATE_KEY environment variable.
6
6
  Run 'echo "PRIVATE_KEY=YOUR_PRIVATE_KEY" > .env'
7
- in your contracts directory to use the default sui private key.`);let d=P(n);if(d===!1)throw new c("Please check your privateKey.");let g=Buffer.from(d,"hex"),p=we.fromSecretKey(g),u=new xe({url:ke(t)});await K(a,"1");let y,x;try{let{modules:r,dependencies:_}=JSON.parse(ve(`sui move build --dump-bytecode-as-base64 --path ${a}`,{encoding:"utf-8"}));y=r,x=_}catch(r){console.error(l.red("Error executing sui move build:")),console.error(r.stdout),process.exit(1)}console.log(l.blue(`Account: ${p.toSuiAddress()}`));let h=new z,[b]=h.publish({modules:y,dependencies:x});h.transferObjects([b],h.pure(p.getPublicKey().toSuiAddress()));let m;try{m=await u.signAndExecuteTransactionBlock({signer:p,transactionBlock:h,options:{showObjectChanges:!0}})}catch(r){console.error(l.red("Failed to execute publish, please republish")),console.error(r.message),process.exit(1)}m.effects?.status.status==="failure"&&(console.log(l.red("Failed to execute publish, please republish")),process.exit(1));let C=1,f="",w="",$="",E="";m.objectChanges.map(r=>{r.type==="published"&&(console.log(l.blue(`${e} PackageId: ${r.packageId}`)),f=r.packageId),r.type==="created"&&r.objectType.endsWith("::world::World")&&(console.log(l.blue(`${e} WorldId: ${r.objectId}`)),w=r.objectId),r.type==="created"&&r.objectType==="0x2::package::UpgradeCap"&&(console.log(l.blue(`${e} UpgradeCap: ${r.objectId}`)),$=r.objectId),r.type==="created"&&r.objectType.endsWith("::world::AdminCap")&&(console.log(l.blue(`${e} AdminCapId: ${r.objectId}`)),E=r.objectId)}),console.log(l.green(`Publish transaction digest: ${m.digest}`)),M(e,t,f,w,$,E,C),console.log("Executing the deployHook: "),await(r=>new Promise(_=>setTimeout(_,r)))(5e3);let I=new z;I.moveCall({target:`${f}::deploy_hook::run`,arguments:[I.object(w),I.object(E)]});let T;try{T=await u.signAndExecuteTransactionBlock({signer:p,transactionBlock:I,options:{showEffects:!0}})}catch(r){console.error(l.red("Failed to execute deployHook, please republish or manually call deploy_hook::run")),console.error(r.message),process.exit(1)}T.effects?.status.status==="success"?console.log(l.green(`Successful auto-execution of deployHook, please check the transaction digest: ${T.digest}`)):console.log(l.yellow("Failed to execute deployHook, please republish or manually call deploy_hook::run"))}import{TransactionBlock as X,UpgradePolicy as Ce}from"@mysten/sui.js/transactions";import{Ed25519Keypair as Ee}from"@mysten/sui.js/keypairs/ed25519";import{getFullnodeUrl as Ie,SuiClient as Oe}from"@mysten/sui.js/client";import{execSync as Pe}from"child_process";import k from"chalk";async function ee(e,t,o){let a=process.cwd(),n=`${a}/contracts/${e}`,d=process.env.PRIVATE_KEY;if(!d)throw new c(`Missing PRIVATE_KEY environment variable.
7
+ in your contracts directory to use the default sui private key.`);let d=O(n);if(d===!1)throw new l("Please check your privateKey.");let g=Buffer.from(d,"hex"),p=ke.fromSecretKey(g),u=new ve({url:xe(t)});await K(a,"1");let y,x;try{let{modules:r,dependencies:_}=JSON.parse(Ce(`sui move build --dump-bytecode-as-base64 --path ${a}`,{encoding:"utf-8"}));y=r,x=_}catch(r){console.error(c.red("Error executing sui move build:")),console.error(r.stdout),process.exit(1)}console.log(c.blue(`Account: ${p.toSuiAddress()}`));let h=new z,[b]=h.publish({modules:y,dependencies:x});h.transferObjects([b],h.pure(p.getPublicKey().toSuiAddress()));let m;try{m=await u.signAndExecuteTransactionBlock({signer:p,transactionBlock:h,options:{showObjectChanges:!0}})}catch(r){console.error(c.red("Failed to execute publish, please republish")),console.error(r.message),process.exit(1)}m.effects?.status.status==="failure"&&(console.log(c.red("Failed to execute publish, please republish")),process.exit(1));let C=1,f="",w="",$="",E="";m.objectChanges.map(r=>{r.type==="published"&&(console.log(c.blue(`${e} PackageId: ${r.packageId}`)),f=r.packageId),r.type==="created"&&r.objectType.endsWith("::world::World")&&(console.log(c.blue(`${e} WorldId: ${r.objectId}`)),w=r.objectId),r.type==="created"&&r.objectType==="0x2::package::UpgradeCap"&&(console.log(c.blue(`${e} UpgradeCap: ${r.objectId}`)),$=r.objectId),r.type==="created"&&r.objectType.endsWith("::world::AdminCap")&&(console.log(c.blue(`${e} AdminCapId: ${r.objectId}`)),E=r.objectId)}),console.log(c.green(`Publish transaction digest: ${m.digest}`)),M(e,t,f,w,$,E,C),console.log("Executing the deployHook: "),await(r=>new Promise(_=>setTimeout(_,r)))(5e3);let I=new z;I.moveCall({target:`${f}::deploy_hook::run`,arguments:[I.object(w),I.object(E)]});let T;try{T=await u.signAndExecuteTransactionBlock({signer:p,transactionBlock:I,options:{showEffects:!0}})}catch(r){console.error(c.red("Failed to execute deployHook, please republish or manually call deploy_hook::run")),console.error(r.message),process.exit(1)}T.effects?.status.status==="success"?console.log(c.green(`Successful auto-execution of deployHook, please check the transaction digest: ${T.digest}`)):console.log(c.yellow("Failed to execute deployHook, please republish or manually call deploy_hook::run"))}import{TransactionBlock as Q,UpgradePolicy as Ee}from"@mysten/sui.js/transactions";import{Ed25519Keypair as Ie}from"@mysten/sui.js/keypairs/ed25519";import{getFullnodeUrl as Pe,SuiClient as Oe}from"@mysten/sui.js/client";import{execSync as $e}from"child_process";import k from"chalk";async function ee(e,t,o){let a=process.cwd(),n=`${a}/contracts/${e}`,d=process.env.PRIVATE_KEY;if(!d)throw new l(`Missing PRIVATE_KEY environment variable.
8
8
  Run 'echo "PRIVATE_KEY=YOUR_PRIVATE_KEY" > .env'
9
- in your contracts directory to use the default sui private key.`);let g=P(d);if(g===!1)throw new c("Please check your privateKey.");let p=Buffer.from(g,"hex"),u=Ee.fromSecretKey(p),y=new Oe({url:Ie(t)}),x=Number(await W(n,t)),h=await J(n,t),b=await q(n,t),m=await G(n,t),C=await L(n,t),f=x+1;await K(n,f.toString());try{let w,$,E;try{let{modules:s,dependencies:j,digest:pe}=JSON.parse(Pe(`sui move build --dump-bytecode-as-base64 --path ${a}/contracts/${e}`,{encoding:"utf-8"}));w=s,$=j,E=pe}catch(s){throw new B(s.stdout)}let i=new X,I=i.moveCall({target:"0x2::package::authorize_upgrade",arguments:[i.object(m),i.pure(Ce.COMPATIBLE),i.pure(E)]}),T=i.upgrade({modules:w,dependencies:$,packageId:h,ticket:I});i.moveCall({target:"0x2::package::commit_upgrade",arguments:[i.object(m),T]}),i.transferObjects([i.object(m)],i.pure(u.getPublicKey().toSuiAddress()));let r=await y.signAndExecuteTransactionBlock({signer:u,transactionBlock:i,options:{showObjectChanges:!0}});console.log(""),console.log(`${e} WorldId: ${b}`);let _="",F="";r.objectChanges.map(s=>{s.type==="published"&&(console.log(k.blue(`${e} PackageId: ${s.packageId}`)),_=s.packageId),s.type==="mutated"&&s.objectType==="0x2::package::UpgradeCap"&&(console.log(k.blue(`${e} UpgradeCap: ${s.objectId}`)),F=s.objectId)}),console.log(k.green(`Upgrade Transaction Digest: ${r.digest}`)),M(e,t,_,b,F,C,f),h=_,m=F,x=f,console.log(`
10
- Executing the migrate: `),await(s=>new Promise(j=>setTimeout(j,s)))(5e3);let v=new X;v.moveCall({target:`${_}::world::migrate`,arguments:[v.object(b),v.object(C)]});let V=(await y.getObject({id:b,options:{showContent:!0,showDisplay:!0,showType:!0,showOwner:!0}})).data.content,N=o.filter(s=>!V.fields.schema_names.includes(s));console.log("new schema:",N);let U=[];for(let s of N)v.moveCall({target:`${_}::${s}_schema::register`,arguments:[v.object(b),v.object(C)]}),U.push(`${s}_schema`);(await y.signAndExecuteTransactionBlock({signer:u,transactionBlock:v,options:{showEffects:!0}})).effects?.status.status==="success"?(console.log(k.green(`${e} migrate world success, new world version is: ${V.fields.version}, package version is ${f}`)),U.length!==0&&console.log(k.green(`new schema: ${U.toString()} register success.`)),console.log(k.blue(`
11
- ${e} world schemas is ${V.fields.schema_names}`))):console.log(k.red(`${e} migrate world failed, world version is: ${V.fields.version}, package version is ${f}`))}catch(w){console.log(k.red("Upgrade failed!")),console.error(w.message),M(e,t,h,b,m,C,x),await K(n,x.toString())}}import $e from"chalk";function te(){console.log($e.yellow(`
9
+ in your contracts directory to use the default sui private key.`);let g=O(d);if(g===!1)throw new l("Please check your privateKey.");let p=Buffer.from(g,"hex"),u=Ie.fromSecretKey(p),y=new Oe({url:Pe(t)}),x=Number(await H(n,t)),h=await J(n,t),b=await q(n,t),m=await G(n,t),C=await L(n,t),f=x+1;await K(n,f.toString());try{let w,$,E;try{let{modules:s,dependencies:j,digest:pe}=JSON.parse($e(`sui move build --dump-bytecode-as-base64 --path ${a}/contracts/${e}`,{encoding:"utf-8"}));w=s,$=j,E=pe}catch(s){throw new B(s.stdout)}let i=new Q,I=i.moveCall({target:"0x2::package::authorize_upgrade",arguments:[i.object(m),i.pure(Ee.COMPATIBLE),i.pure(E)]}),T=i.upgrade({modules:w,dependencies:$,packageId:h,ticket:I});i.moveCall({target:"0x2::package::commit_upgrade",arguments:[i.object(m),T]}),i.transferObjects([i.object(m)],i.pure(u.getPublicKey().toSuiAddress()));let r=await y.signAndExecuteTransactionBlock({signer:u,transactionBlock:i,options:{showObjectChanges:!0}});console.log(""),console.log(`${e} WorldId: ${b}`);let _="",F="";r.objectChanges.map(s=>{s.type==="published"&&(console.log(k.blue(`${e} PackageId: ${s.packageId}`)),_=s.packageId),s.type==="mutated"&&s.objectType==="0x2::package::UpgradeCap"&&(console.log(k.blue(`${e} UpgradeCap: ${s.objectId}`)),F=s.objectId)}),console.log(k.green(`Upgrade Transaction Digest: ${r.digest}`)),M(e,t,_,b,F,C,f),h=_,m=F,x=f,console.log(`
10
+ Executing the migrate: `),await(s=>new Promise(j=>setTimeout(j,s)))(5e3);let v=new Q;v.moveCall({target:`${_}::world::migrate`,arguments:[v.object(b),v.object(C)]});let V=(await y.getObject({id:b,options:{showContent:!0,showDisplay:!0,showType:!0,showOwner:!0}})).data.content,N=o.filter(s=>!V.fields.schema_names.includes(s));console.log("new schema:",N);let U=[];for(let s of N)v.moveCall({target:`${_}::${s}_schema::register`,arguments:[v.object(b),v.object(C)]}),U.push(`${s}_schema`);(await y.signAndExecuteTransactionBlock({signer:u,transactionBlock:v,options:{showEffects:!0}})).effects?.status.status==="success"?(console.log(k.green(`${e} migrate world success, new world version is: ${V.fields.version}, package version is ${f}`)),U.length!==0&&console.log(k.green(`new schema: ${U.toString()} register success.`)),console.log(k.blue(`
11
+ ${e} world schemas is ${V.fields.schema_names}`))):console.log(k.red(`${e} migrate world failed, world version is: ${V.fields.version}, package version is ${f}`))}catch(w){console.log(k.red("Upgrade failed!")),console.error(w.message),M(e,t,h,b,m,C,x),await K(n,x.toString())}}import Te from"chalk";function te(){console.log(Te.yellow(`
12
12
  Welcome to obelisk world
13
13
  --from team@obelisk
14
14
  ________ ________ _______ ___ ___ ________ ___ __
@@ -21,7 +21,7 @@ Welcome to obelisk world
21
21
  \\|_________|
22
22
 
23
23
 
24
- `))}var Me={command:"faucet",describe:"Interact with a Obelisk faucet",builder(e){return e.options({network:{type:"string",desc:"URL of the Obelisk 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 d=process.env.PRIVATE_KEY;if(!d)throw new c(`Missing PRIVATE_KEY environment variable.
24
+ `))}var Ve={command:"faucet",describe:"Interact with a Obelisk faucet",builder(e){return e.options({network:{type:"string",desc:"URL of the Obelisk 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 d=process.env.PRIVATE_KEY;if(!d)throw new l(`Missing PRIVATE_KEY environment variable.
25
25
  Run 'echo "PRIVATE_KEY=YOUR_PRIVATE_KEY" > .env'
26
- in your contracts directory to use the default sui private key.`);let g=P(d);if(g===!1)throw new c("Please check your privateKey.");let p=Buffer.from(g,"hex");o=Re.fromSecretKey(p).toSuiAddress()}else o=t;await Te({host:Se(e),recipient:o});let a=new Ke({url:Ae(e)}),n={owner:o};console.log(`Account: ${o}`),console.log(await a.getBalance(n)),process.exit(0)}},oe=Me;import{worldgen as Ve,loadConfig as Be}from"@0xobelisk/sui-common";import Fe from"chalk";var Ue={command:"schemagen <configPath>",describe:"Autogenerate Obelisk schemas based on the config file",builder(e){return e.options({configPath:{type:"string",desc:"Path to the config file"}})},async handler({configPath:e}){try{let t=await Be(e);Ve(t),process.exit(0)}catch(t){console.log(Fe.red("Schemagen failed!")),console.error(t.message)}}},re=Ue;import{loadConfig as je}from"@0xobelisk/sui-common";var De={command:"publish",describe:"Publish obelisk move contracts",builder(e){return e.options({network:{type:"string",choices:["mainnet","testnet","devnet","localnet"],desc:"Network of the node (mainnet/testnet/devnet/localnet)"},configPath:{type:"string",default:"obelisk.config.ts",decs:"Path to the config file"}})},async handler({network:e,configPath:t}){try{let o=await je(t);await Q(o.name,e)}catch(o){O(o),process.exit(1)}process.exit(0)}},ne=De;import{loadConfig as Ye}from"@0xobelisk/sui-common";var Ne={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)"},configPath:{type:"string",default:"obelisk.config.ts",decs:"Path to the config file"}})},async handler({network:e,configPath:t}){try{let o=await Ye(t),a=Object.keys(o.schemas).filter(n=>!(typeof o.schemas=="object"&&"ephemeral"in o.schemas&&o.schemas[n].ephemeral));await ee(o.name,e,a)}catch(o){O(o),process.exit(1)}process.exit(0)}},se=Ne;import{execSync as He}from"child_process";import We from"chalk";var Je={command:"test",describe:"Run tests in Obelisk contracts",builder(e){return e.options({packagePath:{type:"string",default:".",description:"Options to pass to forge test"}})},async handler({packagePath:e}){try{He(`sui move test --path ${e}`,{encoding:"utf-8"})}catch(t){console.error(We.red("Error executing sui move test:")),console.log(t.stdout),process.exit(0)}}},ae=Je;var qe={command:"hello",describe:"hello, obelisk",builder(e){return e},async handler(){te()}},ie=qe;var ce=[ne,H,oe,re,se,ae,ie];import*as de from"dotenv";import le from"chalk";de.config();Ge(Le(process.argv)).scriptName("obelisk").command(ce).strict().fail((e,t)=>{console.error(le.red(e)),e.includes("Missing required argument")&&console.log(le.yellow(`Run 'pnpm obelisk ${process.argv[2]} --help' for a list of available and required arguments.`)),console.log(""),O(t),console.log(""),process.exit(1)}).alias({h:"help"}).argv;
26
+ in your contracts directory to use the default sui private key.`);let g=O(d);if(g===!1)throw new l("Please check your privateKey.");let p=Buffer.from(g,"hex");o=Ke.fromSecretKey(p).toSuiAddress()}else o=t;await Se({host:Re(e),recipient:o});let a=new Ae({url:Me(e)}),n={owner:o};console.log(`Account: ${o}`),console.log(await a.getBalance(n)),process.exit(0)}},oe=Ve;import{worldgen as Be,loadConfig as Fe}from"@0xobelisk/sui-common";import Ue from"chalk";var je={command:"schemagen <configPath>",describe:"Autogenerate Obelisk schemas based on the config file",builder(e){return e.options({configPath:{type:"string",desc:"Path to the config file"}})},async handler({configPath:e}){try{let t=await Fe(e);Be(t),process.exit(0)}catch(t){console.log(Ue.red("Schemagen failed!")),console.error(t.message)}}},re=je;import{loadConfig as De}from"@0xobelisk/sui-common";var Ye={command:"publish",describe:"Publish obelisk move contracts",builder(e){return e.options({network:{type:"string",choices:["mainnet","testnet","devnet","localnet"],desc:"Network of the node (mainnet/testnet/devnet/localnet)"},configPath:{type:"string",default:"obelisk.config.ts",decs:"Path to the config file"}})},async handler({network:e,configPath:t}){try{let o=await De(t);await X(o.name,e)}catch(o){P(o),process.exit(1)}process.exit(0)}},ne=Ye;import{loadConfig as Ne}from"@0xobelisk/sui-common";var We={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)"},configPath:{type:"string",default:"obelisk.config.ts",decs:"Path to the config file"}})},async handler({network:e,configPath:t}){try{let o=await Ne(t),a=Object.keys(o.schemas).filter(n=>!(typeof o.schemas=="object"&&"ephemeral"in o.schemas&&o.schemas[n].ephemeral));await ee(o.name,e,a)}catch(o){P(o),process.exit(1)}process.exit(0)}},se=We;import{execSync as He}from"child_process";import Je from"chalk";var qe={command:"test",describe:"Run tests in Obelisk contracts",builder(e){return e.options({packagePath:{type:"string",default:".",description:"Options to pass to forge test"}})},async handler({packagePath:e}){try{He(`sui move test --path ${e}`,{encoding:"utf-8"})}catch(t){console.error(Je.red("Error executing sui move test:")),console.log(t.stdout),process.exit(0)}}},ae=qe;var Ge={command:"hello",describe:"hello, obelisk",builder(e){return e},async handler(){te()}},ie=Ge;var le=[ne,W,oe,re,se,ae,ie];import*as de from"dotenv";import ce from"chalk";de.config();Le(Ze(process.argv)).scriptName("obelisk").command(le).strict().fail((e,t)=>{console.error(ce.red(e)),e.includes("Missing required argument")&&console.log(ce.yellow(`Run 'pnpm obelisk ${process.argv[2]} --help' for a list of available and required arguments.`)),console.log(""),P(t),console.log(""),process.exit(1)}).alias({h:"help"}).argv;
27
27
  //# sourceMappingURL=obelisk.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/obelisk.ts","../src/commands/localnode.ts","../src/commands/faucet.ts","../src/utils/publishHandler.ts","../src/utils/errors.ts","../src/utils/utils.ts","../src/utils/upgradeHandler.ts","../src/utils/printObelisk.ts","../src/commands/schemagen.ts","../src/commands/publish.ts","../src/commands/upgrade.ts","../src/commands/test.ts","../src/commands/hello.ts","../src/commands/index.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport yargs from \"yargs\";\nimport { hideBin } from \"yargs/helpers\";\nimport { commands } from \"./commands\";\nimport { logError } from \"./utils/errors\";\n\n// Load .env file into process.env\nimport * as dotenv from \"dotenv\";\nimport chalk from \"chalk\";\ndotenv.config();\n\nyargs(hideBin(process.argv))\n // Explicit name to display in help (by default it's the entry file, which may not be \"obelisk\" for e.g. ts-node)\n .scriptName(\"obelisk\")\n // Use the commands directory to scaffold\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- command array overload isn't typed, see https://github.com/yargs/yargs/blob/main/docs/advanced.md#esm-hierarchy\n .command(commands as any)\n // Enable strict mode.\n .strict()\n // Custom error handler\n .fail((msg, err) => {\n console.error(chalk.red(msg));\n if (msg.includes(\"Missing required argument\")) {\n console.log(\n chalk.yellow(`Run 'pnpm obelisk ${process.argv[2]} --help' for a list of available and required arguments.`)\n );\n }\n console.log(\"\");\n logError(err);\n console.log(\"\");\n\n process.exit(1);\n })\n // Useful aliases.\n .alias({ h: \"help\" }).argv;\n","import type { CommandModule } from \"yargs\";\nimport { execa } from \"execa\";\n\nconst commandModule: CommandModule = {\n command: \"localnode\",\n\n describe: \"Start a local Sui node for development\",\n\n builder(yargs) {\n return yargs;\n },\n\n async handler() {\n console.log(\"Clearing localnode history\");\n\n console.log(`Running: sui-test-validator`);\n const child = execa(\"sui-test-validator\");\n\n process.on(\"SIGINT\", () => {\n console.log(\"\\ngracefully shutting down from SIGINT (Crtl-C)\");\n child.kill();\n process.exit();\n });\n await child;\n },\n};\n\nexport default commandModule;\n","import type { CommandModule } from \"yargs\";\nimport { requestSuiFromFaucetV0, getFaucetHost } from \"@mysten/sui.js/faucet\";\n\nimport { Ed25519Keypair } from \"@mysten/sui.js/keypairs/ed25519\";\n\nimport {\n SuiClient,\n getFullnodeUrl,\n GetBalanceParams,\n} from \"@mysten/sui.js/client\";\nimport { validatePrivateKey, ObeliskCliError } from \"../utils\";\n\ntype Options = {\n network: any;\n recipient?: string;\n};\n\nconst commandModule: CommandModule<Options, Options> = {\n command: \"faucet\",\n\n describe: \"Interact with a Obelisk faucet\",\n\n builder(yargs) {\n return yargs.options({\n network: {\n type: \"string\",\n desc: \"URL of the Obelisk faucet\",\n choices: [\"testnet\", \"devnet\", \"localnet\"],\n default: \"localnet\",\n },\n recipient: {\n type: \"string\",\n desc: \"Sui address to fund\",\n },\n });\n },\n\n async handler({ network, recipient }) {\n let faucet_address = \"\";\n if (recipient === undefined) {\n const privateKey = process.env.PRIVATE_KEY;\n if (!privateKey)\n throw new ObeliskCliError(\n `Missing PRIVATE_KEY environment variable.\n Run 'echo \"PRIVATE_KEY=YOUR_PRIVATE_KEY\" > .env'\n in your contracts directory to use the default sui private key.`\n );\n\n const privateKeyFormat = validatePrivateKey(privateKey);\n if (privateKeyFormat === false) {\n throw new ObeliskCliError(`Please check your privateKey.`);\n }\n const privateKeyRaw = Buffer.from(privateKeyFormat as string, \"hex\");\n const keypair = Ed25519Keypair.fromSecretKey(privateKeyRaw);\n faucet_address = keypair.toSuiAddress();\n } else {\n faucet_address = recipient;\n }\n await requestSuiFromFaucetV0({\n host: getFaucetHost(network),\n recipient: faucet_address,\n });\n const client = new SuiClient({ url: getFullnodeUrl(network) });\n let params = {\n owner: faucet_address,\n } as GetBalanceParams;\n console.log(`Account: ${faucet_address}`);\n console.log(await client.getBalance(params));\n process.exit(0);\n },\n};\n\nexport default commandModule;\n","import { TransactionBlock } from \"@mysten/sui.js/transactions\";\nimport { Ed25519Keypair } from \"@mysten/sui.js/keypairs/ed25519\";\nimport {\n getFullnodeUrl,\n SuiClient,\n SuiTransactionBlockResponse,\n} from \"@mysten/sui.js/client\";\nimport { execSync } from \"child_process\";\nimport chalk from \"chalk\";\nimport { ObeliskCliError } from \"./errors\";\nimport {\n updateVersionInFile,\n saveContractData,\n validatePrivateKey,\n} from \"./utils\";\n\nexport async function publishHandler(\n name: string,\n network: \"mainnet\" | \"testnet\" | \"devnet\" | \"localnet\"\n) {\n const path = process.cwd();\n const projectPath = `${path}/contracts/${name}`;\n\n const privateKey = process.env.PRIVATE_KEY;\n if (!privateKey)\n throw new ObeliskCliError(\n `Missing PRIVATE_KEY environment variable.\nRun 'echo \"PRIVATE_KEY=YOUR_PRIVATE_KEY\" > .env'\nin your contracts directory to use the default sui private key.`\n );\n\n const privateKeyFormat = validatePrivateKey(privateKey);\n if (privateKeyFormat === false) {\n throw new ObeliskCliError(`Please check your privateKey.`);\n }\n const privateKeyRaw = Buffer.from(privateKeyFormat as string, \"hex\");\n const keypair = Ed25519Keypair.fromSecretKey(privateKeyRaw);\n const client = new SuiClient({\n url: getFullnodeUrl(network),\n });\n\n // Set version 1\n await updateVersionInFile(projectPath, \"1\");\n let modules: any, dependencies: any;\n try {\n const { modules: extractedModules, dependencies: extractedDependencies } =\n JSON.parse(\n execSync(\n `sui move build --dump-bytecode-as-base64 --path ${projectPath}`,\n {\n encoding: \"utf-8\",\n }\n )\n );\n modules = extractedModules;\n dependencies = extractedDependencies;\n } catch (error: any) {\n console.error(chalk.red(\"Error executing sui move build:\"));\n console.error(error.stdout);\n process.exit(1); // You might want to exit with a non-zero status code to indicate an error\n }\n\n console.log(chalk.blue(`Account: ${keypair.toSuiAddress()}`));\n\n const tx = new TransactionBlock();\n const [upgradeCap] = tx.publish({\n modules,\n dependencies,\n });\n tx.transferObjects(\n [upgradeCap],\n tx.pure(keypair.getPublicKey().toSuiAddress())\n );\n\n let result: SuiTransactionBlockResponse;\n try {\n result = await client.signAndExecuteTransactionBlock({\n signer: keypair,\n transactionBlock: tx,\n options: {\n showObjectChanges: true,\n },\n });\n } catch (error: any) {\n console.error(chalk.red(`Failed to execute publish, please republish`));\n console.error(error.message);\n process.exit(1);\n }\n\n if (result.effects?.status.status === \"failure\") {\n console.log(chalk.red(`Failed to execute publish, please republish`));\n process.exit(1);\n }\n\n let version = 1;\n let packageId = \"\";\n let worldId = \"\";\n let upgradeCapId = \"\";\n let adminCapId = \"\";\n result.objectChanges!.map((object) => {\n if (object.type === \"published\") {\n console.log(chalk.blue(`${name} PackageId: ${object.packageId}`));\n packageId = object.packageId;\n }\n if (\n object.type === \"created\" &&\n object.objectType.endsWith(\"::world::World\")\n ) {\n console.log(chalk.blue(`${name} WorldId: ${object.objectId}`));\n worldId = object.objectId;\n }\n if (\n object.type === \"created\" &&\n object.objectType === \"0x2::package::UpgradeCap\"\n ) {\n console.log(chalk.blue(`${name} UpgradeCap: ${object.objectId}`));\n upgradeCapId = object.objectId;\n }\n if (\n object.type === \"created\" &&\n object.objectType.endsWith(\"::world::AdminCap\")\n ) {\n console.log(chalk.blue(`${name} AdminCapId: ${object.objectId}`));\n adminCapId = object.objectId;\n }\n });\n\n console.log(chalk.green(`Publish transaction digest: ${result.digest}`));\n\n saveContractData(\n name,\n network,\n packageId,\n worldId,\n upgradeCapId,\n adminCapId,\n version\n );\n\n console.log(\"Executing the deployHook: \");\n const delay = (ms: number) =>\n new Promise((resolve) => setTimeout(resolve, ms));\n await delay(5000);\n\n const deployHookTx = new TransactionBlock();\n\n deployHookTx.moveCall({\n target: `${packageId}::deploy_hook::run`,\n arguments: [deployHookTx.object(worldId), deployHookTx.object(adminCapId)],\n });\n\n let deployHookResult: SuiTransactionBlockResponse;\n try {\n deployHookResult = await client.signAndExecuteTransactionBlock({\n signer: keypair,\n transactionBlock: deployHookTx,\n options: {\n showEffects: true,\n },\n });\n } catch (error: any) {\n console.error(\n chalk.red(\n `Failed to execute deployHook, please republish or manually call deploy_hook::run`\n )\n );\n console.error(error.message);\n process.exit(1);\n }\n\n if (deployHookResult.effects?.status.status === \"success\") {\n console.log(\n chalk.green(\n `Successful auto-execution of deployHook, please check the transaction digest: ${deployHookResult.digest}`\n )\n );\n } else {\n console.log(\n chalk.yellow(\n `Failed to execute deployHook, please republish or manually call deploy_hook::run`\n )\n );\n }\n}\n","import chalk from \"chalk\";\nimport { ZodError } from \"zod\";\nimport { fromZodError, ValidationError } from \"zod-validation-error\";\n\nexport class NotInsideProjectError extends Error {\n name = \"NotInsideProjectError\";\n message = \"You are not inside a Obelisk project\";\n}\n\nexport class ObeliskCliError extends Error {\n name = \"ObeliskCliError\";\n}\n\nexport class UpgradeError extends Error {\n name = \"UpgradeError\";\n}\n\nexport class FsIibError extends Error {\n name = \"FsIibError\";\n}\n\nexport function logError(error: unknown) {\n if (error instanceof ValidationError) {\n console.log(chalk.redBright(error.message));\n } else if (error instanceof ZodError) {\n // TODO currently this error shouldn't happen, use `fromZodErrorCustom`\n const validationError = fromZodError(error, {\n prefixSeparator: \"\\n- \",\n issueSeparator: \"\\n- \",\n });\n console.log(chalk.redBright(validationError.message));\n } else if (error instanceof NotInsideProjectError) {\n console.log(chalk.red(error.message));\n console.log(\"\");\n // TODO add docs to the website and update the link to the specific page\n console.log(\n chalk.blue(\n `To learn more about Obelisk's configuration, please go to https://github.com/0xobelisk`\n )\n );\n } else if (error instanceof ObeliskCliError) {\n console.log(chalk.red(error));\n } else {\n console.log(error);\n }\n}\n","import * as fsAsync from \"fs/promises\";\nimport { mkdirSync, writeFileSync } from \"fs\";\nimport { dirname } from \"path\";\nimport { FsIibError } from \"./errors\";\n\nexport type DeploymentJsonType = {\n projectName: string;\n network: \"mainnet\" | \"testnet\" | \"devnet\" | \"localnet\";\n packageId: string;\n worldId: string;\n upgradeCap: string;\n adminCap: string;\n version: number;\n};\n\nexport function validatePrivateKey(privateKey: string): boolean | string {\n if (privateKey.startsWith(\"0x\")) {\n const strippedPrivateKey = privateKey.slice(2);\n if (strippedPrivateKey.length === 64) {\n return strippedPrivateKey;\n } else {\n return false;\n }\n } else {\n if (privateKey.length === 64) {\n return privateKey;\n } else {\n return false;\n }\n }\n}\n\nexport async function updateVersionInFile(\n projectPath: string,\n newVersion: string\n) {\n try {\n const filePath = `${projectPath}/sources/codegen/eps/world.move`;\n const data = await fsAsync.readFile(filePath, \"utf8\");\n\n // update version data\n const updatedData = data.replace(\n /const VERSION: u64 = \\d+;/,\n `const VERSION: u64 = ${newVersion};`\n );\n\n // write new version\n writeOutput(updatedData, filePath, \"Update package version\");\n } catch {\n throw new FsIibError(\"Fs update version failed.\");\n }\n}\n\nasync function getDeploymentJson(projectPath: string, network: string) {\n try {\n const data = await fsAsync.readFile(\n `${projectPath}/.history/sui_${network}/latest.json`,\n \"utf8\"\n );\n return JSON.parse(data) as DeploymentJsonType;\n } catch {\n throw new FsIibError(\"Fs read deployment file failed.\");\n }\n}\n\nexport async function getVersion(\n projectPath: string,\n network: string\n): Promise<number> {\n const deployment = await getDeploymentJson(projectPath, network);\n return deployment.version;\n}\n\nexport async function getNetwork(\n projectPath: string,\n network: string\n): Promise<\"mainnet\" | \"testnet\" | \"devnet\" | \"localnet\"> {\n const deployment = await getDeploymentJson(projectPath, network);\n return deployment.network;\n}\n\nexport async function getOldPackageId(\n projectPath: string,\n network: string\n): Promise<string> {\n const deployment = await getDeploymentJson(projectPath, network);\n return deployment.packageId;\n}\n\nexport async function getWorldId(\n projectPath: string,\n network: string\n): Promise<string> {\n const deployment = await getDeploymentJson(projectPath, network);\n return deployment.worldId;\n}\n\nexport async function getUpgradeCap(\n projectPath: string,\n network: string\n): Promise<string> {\n const deployment = await getDeploymentJson(projectPath, network);\n return deployment.upgradeCap;\n}\n\nexport async function getAdminCap(\n projectPath: string,\n network: string\n): Promise<string> {\n const deployment = await getDeploymentJson(projectPath, network);\n return deployment.adminCap;\n}\n\nexport function saveContractData(\n projectName: string,\n network: \"mainnet\" | \"testnet\" | \"devnet\" | \"localnet\",\n packageId: string,\n worldId: string,\n upgradeCap: string,\n adminCap: string,\n version: number\n) {\n const DeploymentData: DeploymentJsonType = {\n projectName,\n network,\n packageId,\n worldId,\n upgradeCap,\n adminCap,\n version,\n };\n\n const path = process.cwd();\n const storeDeploymentData = JSON.stringify(DeploymentData, null, 2);\n writeOutput(\n storeDeploymentData,\n `${path}/contracts/${projectName}/.history/sui_${network}/latest.json`,\n \"Update deploy log\"\n );\n}\n\nexport async function writeOutput(\n output: string,\n fullOutputPath: string,\n logPrefix?: string\n): Promise<void> {\n mkdirSync(dirname(fullOutputPath), { recursive: true });\n\n writeFileSync(fullOutputPath, output);\n if (logPrefix !== undefined) {\n console.log(`${logPrefix}: ${fullOutputPath}`);\n }\n}\n","import { TransactionBlock, UpgradePolicy } from \"@mysten/sui.js/transactions\";\nimport { Ed25519Keypair } from \"@mysten/sui.js/keypairs/ed25519\";\nimport { getFullnodeUrl, SuiClient } from \"@mysten/sui.js/client\";\nimport { execSync } from \"child_process\";\nimport chalk from \"chalk\";\nimport { ObeliskCliError, UpgradeError } from \"./errors\";\nimport {\n updateVersionInFile,\n getOldPackageId,\n getVersion,\n getWorldId,\n getUpgradeCap,\n saveContractData,\n validatePrivateKey,\n getAdminCap,\n} from \"./utils\";\n\ntype ObjectContent = {\n type: string;\n fields: Record<string, any>;\n hasPublicTransfer: boolean;\n dataType: string;\n};\n\nexport async function upgradeHandler(\n name: string,\n network: \"mainnet\" | \"testnet\" | \"devnet\" | \"localnet\",\n schemaNames: string[]\n) {\n const path = process.cwd();\n const projectPath = `${path}/contracts/${name}`;\n const privateKey = process.env.PRIVATE_KEY;\n if (!privateKey)\n throw new ObeliskCliError(\n `Missing PRIVATE_KEY environment variable.\nRun 'echo \"PRIVATE_KEY=YOUR_PRIVATE_KEY\" > .env'\nin your contracts directory to use the default sui private key.`\n );\n\n const privateKeyFormat = validatePrivateKey(privateKey);\n if (privateKeyFormat === false) {\n throw new ObeliskCliError(`Please check your privateKey.`);\n }\n const privateKeyRaw = Buffer.from(privateKeyFormat as string, \"hex\");\n const keypair = Ed25519Keypair.fromSecretKey(privateKeyRaw);\n\n const client = new SuiClient({\n url: getFullnodeUrl(network),\n });\n\n let oldVersion = Number(await getVersion(projectPath, network));\n let oldPackageId = await getOldPackageId(projectPath, network);\n let worldId = await getWorldId(projectPath, network);\n let upgradeCap = await getUpgradeCap(projectPath, network);\n let adminCap = await getAdminCap(projectPath, network);\n\n const newVersion = oldVersion + 1;\n await updateVersionInFile(projectPath, newVersion.toString());\n\n try {\n let modules: any, dependencies: any, digest: any;\n try {\n const {\n modules: extractedModules,\n dependencies: extractedDependencies,\n digest: extractedDigest,\n } = JSON.parse(\n execSync(\n `sui move build --dump-bytecode-as-base64 --path ${path}/contracts/${name}`,\n {\n encoding: \"utf-8\",\n }\n )\n );\n\n modules = extractedModules;\n dependencies = extractedDependencies;\n digest = extractedDigest;\n } catch (error: any) {\n throw new UpgradeError(error.stdout);\n }\n\n const tx = new TransactionBlock();\n const ticket = tx.moveCall({\n target: \"0x2::package::authorize_upgrade\",\n arguments: [\n tx.object(upgradeCap),\n tx.pure(UpgradePolicy.COMPATIBLE),\n tx.pure(digest),\n ],\n });\n\n const receipt = tx.upgrade({\n modules,\n dependencies,\n packageId: oldPackageId,\n ticket,\n });\n\n tx.moveCall({\n target: \"0x2::package::commit_upgrade\",\n arguments: [tx.object(upgradeCap), receipt],\n });\n\n tx.transferObjects(\n [tx.object(upgradeCap)],\n tx.pure(keypair.getPublicKey().toSuiAddress())\n );\n\n const result = await client.signAndExecuteTransactionBlock({\n signer: keypair,\n transactionBlock: tx,\n options: {\n showObjectChanges: true,\n },\n });\n\n console.log(\"\");\n console.log(`${name} WorldId: ${worldId}`);\n\n let newPackageId = \"\";\n let newUpgradeCap = \"\";\n result.objectChanges!.map((object) => {\n if (object.type === \"published\") {\n console.log(chalk.blue(`${name} PackageId: ${object.packageId}`));\n newPackageId = object.packageId;\n }\n if (\n object.type === \"mutated\" &&\n object.objectType === \"0x2::package::UpgradeCap\"\n ) {\n console.log(chalk.blue(`${name} UpgradeCap: ${object.objectId}`));\n newUpgradeCap = object.objectId;\n }\n });\n\n console.log(chalk.green(`Upgrade Transaction Digest: ${result.digest}`));\n\n saveContractData(\n name,\n network,\n newPackageId,\n worldId,\n newUpgradeCap,\n adminCap,\n newVersion\n );\n\n oldPackageId = newPackageId;\n upgradeCap = newUpgradeCap;\n oldVersion = newVersion;\n\n console.log(\"\\nExecuting the migrate: \");\n const delay = (ms: number) =>\n new Promise((resolve) => setTimeout(resolve, ms));\n await delay(5000);\n\n const migrateTx = new TransactionBlock();\n migrateTx.moveCall({\n target: `${newPackageId}::world::migrate`,\n arguments: [migrateTx.object(worldId), migrateTx.object(adminCap)],\n });\n\n let newWorldObject = await client.getObject({\n id: worldId,\n options: {\n showContent: true,\n showDisplay: true,\n showType: true,\n showOwner: true,\n },\n });\n let newObjectContent = newWorldObject.data!.content as ObjectContent;\n\n const uniqueSchema: string[] = schemaNames.filter(\n (item) => !newObjectContent.fields[\"schema_names\"].includes(item)\n );\n\n console.log(\"new schema:\", uniqueSchema);\n let needRegisterSchema = [];\n for (const newSchema of uniqueSchema) {\n migrateTx.moveCall({\n target: `${newPackageId}::${newSchema}_schema::register`,\n arguments: [migrateTx.object(worldId), migrateTx.object(adminCap)],\n });\n needRegisterSchema.push(`${newSchema}_schema`);\n }\n const migrateResult = await client.signAndExecuteTransactionBlock({\n signer: keypair,\n transactionBlock: migrateTx,\n options: {\n showEffects: true,\n },\n });\n\n if (migrateResult.effects?.status.status === \"success\") {\n console.log(\n chalk.green(\n `${name} migrate world success, new world version is: ${newObjectContent.fields[\"version\"]}, package version is ${newVersion}`\n )\n );\n if (needRegisterSchema.length !== 0) {\n console.log(\n chalk.green(\n `new schema: ${needRegisterSchema.toString()} register success.`\n )\n );\n }\n\n console.log(\n chalk.blue(\n `\\n${name} world schemas is ${newObjectContent.fields[\"schema_names\"]}`\n )\n );\n } else {\n console.log(\n chalk.red(\n `${name} migrate world failed, world version is: ${newObjectContent.fields[\"version\"]}, package version is ${newVersion}`\n )\n );\n }\n } catch (error: any) {\n console.log(chalk.red(\"Upgrade failed!\"));\n console.error(error.message);\n\n saveContractData(\n name,\n network,\n oldPackageId,\n worldId,\n upgradeCap,\n adminCap,\n oldVersion\n );\n await updateVersionInFile(projectPath, oldVersion.toString());\n }\n}\n","import chalk from \"chalk\";\n\nexport function printObelisk() {\n console.log(\n chalk.yellow(`\nWelcome to obelisk world\n\\t\\t\\t --from team@obelisk\n ________ ________ _______ ___ ___ ________ ___ __ \n|\\\\ __ \\\\|\\\\ __ \\\\|\\\\ ___ \\\\ |\\\\ \\\\ |\\\\ \\\\|\\\\ ____\\\\|\\\\ \\\\|\\\\ \\\\ \n\\\\ \\\\ \\\\|\\\\ \\\\ \\\\ \\\\|\\\\ /\\\\ \\\\ __/|\\\\ \\\\ \\\\ \\\\ \\\\ \\\\ \\\\ \\\\___|\\\\ \\\\ \\\\/ /|_ \n \\\\ \\\\ \\\\\\\\\\\\ \\\\ \\\\ __ \\\\ \\\\ \\\\_|/_\\\\ \\\\ \\\\ \\\\ \\\\ \\\\ \\\\_____ \\\\ \\\\ ___ \\\\ \n \\\\ \\\\ \\\\\\\\\\\\ \\\\ \\\\ \\\\|\\\\ \\\\ \\\\ \\\\_|\\\\ \\\\ \\\\ \\\\____\\\\ \\\\ \\\\|____|\\\\ \\\\ \\\\ \\\\\\\\ \\\\ \\\\ \n \\\\ \\\\_______\\\\ \\\\_______\\\\ \\\\_______\\\\ \\\\_______\\\\ \\\\__\\\\____\\\\_\\\\ \\\\ \\\\__\\\\\\\\ \\\\__\\\\\n \\\\|_______|\\\\|_______|\\\\|_______|\\\\|_______|\\\\|__|\\\\_________\\\\|__| \\\\|__|\n \\\\|_________| \n \n \n`)\n );\n}\n","import type { CommandModule } from \"yargs\";\nimport { worldgen, loadConfig, ObeliskConfig } from \"@0xobelisk/sui-common\";\nimport chalk from \"chalk\";\n\ntype Options = {\n configPath?: string;\n};\n\nconst commandModule: CommandModule<Options, Options> = {\n command: \"schemagen <configPath>\",\n\n describe: \"Autogenerate Obelisk schemas based on the config file\",\n\n builder(yargs) {\n return yargs.options({\n configPath: { type: \"string\", desc: \"Path to the config file\" },\n });\n },\n\n async handler({ configPath }) {\n try {\n const obeliskConfig = (await loadConfig(configPath)) as ObeliskConfig;\n worldgen(obeliskConfig);\n process.exit(0);\n } catch (error: any) {\n console.log(chalk.red(\"Schemagen failed!\"));\n console.error(error.message);\n }\n },\n};\n\nexport default commandModule;\n","import type { CommandModule } from \"yargs\";\nimport { logError } from \"../utils/errors\";\nimport { publishHandler } from \"../utils\";\nimport { loadConfig, ObeliskConfig } from \"@0xobelisk/sui-common\";\n\ntype Options = {\n network: any;\n configPath: string;\n};\n\nconst commandModule: CommandModule<Options, Options> = {\n command: \"publish\",\n\n describe: \"Publish obelisk move contracts\",\n\n builder(yargs) {\n return yargs.options({\n network: {\n type: \"string\",\n choices: [\"mainnet\", \"testnet\", \"devnet\", \"localnet\"],\n desc: \"Network of the node (mainnet/testnet/devnet/localnet)\",\n },\n configPath: {\n type: \"string\",\n default: \"obelisk.config.ts\",\n decs: \"Path to the config file\",\n },\n });\n },\n\n async handler({ network, configPath }) {\n try {\n const obeliskConfig = (await loadConfig(configPath)) as ObeliskConfig;\n await publishHandler(obeliskConfig.name, network);\n } catch (error: any) {\n logError(error);\n process.exit(1);\n }\n process.exit(0);\n },\n};\n\nexport default commandModule;\n","import type { CommandModule } from \"yargs\";\nimport { logError } from \"../utils/errors\";\nimport { upgradeHandler } from \"../utils\";\nimport { ObeliskConfig, loadConfig, ValueType } from \"@0xobelisk/sui-common\";\n\ntype Options = {\n network: any;\n configPath: string;\n};\n\nconst commandModule: CommandModule<Options, Options> = {\n command: \"upgrade\",\n\n describe: \"Upgrade your move contracts\",\n\n builder(yargs) {\n return yargs.options({\n network: {\n type: \"string\",\n choices: [\"mainnet\", \"testnet\", \"devnet\", \"localnet\"],\n desc: \"Network of the node (mainnet/testnet/devnet/localnet)\",\n },\n configPath: {\n type: \"string\",\n default: \"obelisk.config.ts\",\n decs: \"Path to the config file\",\n },\n });\n },\n\n async handler({ network, configPath }) {\n try {\n const obeliskConfig = (await loadConfig(configPath)) as ObeliskConfig;\n\n let schemaNames = Object.keys(obeliskConfig.schemas).filter(\n (key) =>\n !(\n typeof obeliskConfig.schemas === \"object\" &&\n \"ephemeral\" in obeliskConfig.schemas &&\n (obeliskConfig.schemas[key] as ValueType).ephemeral\n )\n );\n\n await upgradeHandler(obeliskConfig.name, network, schemaNames);\n } catch (error: any) {\n logError(error);\n process.exit(1);\n }\n process.exit(0);\n },\n};\n\nexport default commandModule;\n","import type { CommandModule } from \"yargs\";\nimport { execSync } from \"child_process\";\nimport chalk from \"chalk\";\n\ntype Options = {\n packagePath: string;\n};\n\nconst commandModule: CommandModule<Options, Options> = {\n command: \"test\",\n\n describe: \"Run tests in Obelisk contracts\",\n\n builder(yargs) {\n return yargs.options({\n packagePath: {\n type: \"string\",\n default: \".\",\n description: \"Options to pass to forge test\",\n },\n });\n },\n\n async handler({ packagePath }) {\n // Start an internal anvil process if no world address is provided\n try {\n execSync(`sui move test --path ${packagePath}`, {\n encoding: \"utf-8\",\n });\n } catch (error: any) {\n console.error(chalk.red(\"Error executing sui move test:\"));\n console.log(error.stdout);\n process.exit(0);\n }\n },\n};\n\nexport default commandModule;\n","import type { CommandModule } from \"yargs\";\nimport { printObelisk } from \"../utils\";\n\nconst commandModule: CommandModule = {\n command: \"hello\",\n\n describe: \"hello, obelisk\",\n\n builder(yargs) {\n return yargs;\n },\n\n async handler() {\n printObelisk();\n },\n};\n\nexport default commandModule;\n","import { CommandModule } from \"yargs\";\n\nimport localnode from \"./localnode\";\nimport faucet from \"./faucet\";\nimport schemagen from \"./schemagen\";\nimport publish from \"./publish\";\nimport upgrade from \"./upgrade\";\nimport test from \"./test\";\nimport hello from \"./hello\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Each command has different options\nexport const commands: CommandModule<any, any>[] = [\n publish,\n localnode,\n faucet,\n schemagen,\n upgrade,\n test,\n hello,\n];\n"],"mappings":"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","names":["yargs","hideBin","execa","commandModule","yargs","child","localnode_default","requestSuiFromFaucetV0","getFaucetHost","Ed25519Keypair","SuiClient","getFullnodeUrl","TransactionBlock","Ed25519Keypair","getFullnodeUrl","SuiClient","execSync","chalk","chalk","ZodError","fromZodError","ValidationError","NotInsideProjectError","ObeliskCliError","UpgradeError","FsIibError","logError","error","validationError","fsAsync","mkdirSync","writeFileSync","dirname","validatePrivateKey","privateKey","strippedPrivateKey","updateVersionInFile","projectPath","newVersion","filePath","updatedData","writeOutput","FsIibError","getDeploymentJson","network","data","getVersion","getOldPackageId","projectPath","network","getDeploymentJson","getWorldId","getUpgradeCap","getAdminCap","saveContractData","projectName","packageId","worldId","upgradeCap","adminCap","version","DeploymentData","path","storeDeploymentData","writeOutput","output","fullOutputPath","logPrefix","mkdirSync","dirname","writeFileSync","publishHandler","name","network","projectPath","privateKey","ObeliskCliError","privateKeyFormat","validatePrivateKey","privateKeyRaw","keypair","Ed25519Keypair","client","SuiClient","getFullnodeUrl","updateVersionInFile","modules","dependencies","extractedModules","extractedDependencies","execSync","error","chalk","tx","TransactionBlock","upgradeCap","result","version","packageId","worldId","upgradeCapId","adminCapId","object","saveContractData","ms","resolve","deployHookTx","deployHookResult","TransactionBlock","UpgradePolicy","Ed25519Keypair","getFullnodeUrl","SuiClient","execSync","chalk","upgradeHandler","name","network","schemaNames","path","projectPath","privateKey","ObeliskCliError","privateKeyFormat","validatePrivateKey","privateKeyRaw","keypair","Ed25519Keypair","client","SuiClient","getFullnodeUrl","oldVersion","getVersion","oldPackageId","getOldPackageId","worldId","getWorldId","upgradeCap","getUpgradeCap","adminCap","getAdminCap","newVersion","updateVersionInFile","modules","dependencies","digest","extractedModules","extractedDependencies","extractedDigest","execSync","error","UpgradeError","tx","TransactionBlock","ticket","UpgradePolicy","receipt","result","newPackageId","newUpgradeCap","object","chalk","saveContractData","ms","resolve","migrateTx","newObjectContent","uniqueSchema","item","needRegisterSchema","newSchema","chalk","printObelisk","commandModule","yargs","network","recipient","faucet_address","privateKey","ObeliskCliError","privateKeyFormat","validatePrivateKey","privateKeyRaw","Ed25519Keypair","requestSuiFromFaucetV0","getFaucetHost","client","SuiClient","getFullnodeUrl","params","faucet_default","worldgen","loadConfig","chalk","commandModule","yargs","configPath","obeliskConfig","error","schemagen_default","loadConfig","commandModule","yargs","network","configPath","obeliskConfig","publishHandler","error","logError","publish_default","loadConfig","commandModule","yargs","network","configPath","obeliskConfig","schemaNames","key","upgradeHandler","error","logError","upgrade_default","execSync","chalk","commandModule","yargs","packagePath","error","test_default","commandModule","yargs","printObelisk","hello_default","commands","publish_default","localnode_default","faucet_default","schemagen_default","upgrade_default","test_default","hello_default","dotenv","chalk","yargs","hideBin","commands","msg","err","logError"]}
1
+ {"version":3,"sources":["../src/obelisk.ts","../src/commands/localnode.ts","../src/commands/faucet.ts","../src/utils/publishHandler.ts","../src/utils/errors.ts","../src/utils/utils.ts","../src/utils/upgradeHandler.ts","../src/utils/printObelisk.ts","../src/commands/schemagen.ts","../src/commands/publish.ts","../src/commands/upgrade.ts","../src/commands/test.ts","../src/commands/hello.ts","../src/commands/index.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport yargs from \"yargs\";\nimport { hideBin } from \"yargs/helpers\";\nimport { commands } from \"./commands\";\nimport { logError } from \"./utils/errors\";\n\n// Load .env file into process.env\nimport * as dotenv from \"dotenv\";\nimport chalk from \"chalk\";\ndotenv.config();\n\nyargs(hideBin(process.argv))\n // Explicit name to display in help (by default it's the entry file, which may not be \"obelisk\" for e.g. ts-node)\n .scriptName(\"obelisk\")\n // Use the commands directory to scaffold\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- command array overload isn't typed, see https://github.com/yargs/yargs/blob/main/docs/advanced.md#esm-hierarchy\n .command(commands as any)\n // Enable strict mode.\n .strict()\n // Custom error handler\n .fail((msg, err) => {\n console.error(chalk.red(msg));\n if (msg.includes(\"Missing required argument\")) {\n console.log(\n chalk.yellow(`Run 'pnpm obelisk ${process.argv[2]} --help' for a list of available and required arguments.`)\n );\n }\n console.log(\"\");\n logError(err);\n console.log(\"\");\n\n process.exit(1);\n })\n // Useful aliases.\n .alias({ h: \"help\" }).argv;\n","import type { CommandModule } from \"yargs\";\nimport { execa } from \"execa\";\n\nconst commandModule: CommandModule = {\n command: \"localnode\",\n\n describe: \"Start a local Sui node for development\",\n\n builder(yargs) {\n return yargs;\n },\n\n async handler() {\n console.log(\"Clearing localnode history\");\n\n console.log(`Running: sui-test-validator`);\n const child = execa(\"sui-test-validator\");\n\n process.on(\"SIGINT\", () => {\n console.log(\"\\ngracefully shutting down from SIGINT (Crtl-C)\");\n child.kill();\n process.exit();\n });\n await child;\n },\n};\n\nexport default commandModule;\n","import type { CommandModule } from \"yargs\";\nimport { requestSuiFromFaucetV0, getFaucetHost } from \"@mysten/sui.js/faucet\";\n\nimport { Ed25519Keypair } from \"@mysten/sui.js/keypairs/ed25519\";\n\nimport {\n SuiClient,\n getFullnodeUrl,\n GetBalanceParams,\n} from \"@mysten/sui.js/client\";\nimport { validatePrivateKey, ObeliskCliError } from \"../utils\";\n\ntype Options = {\n network: any;\n recipient?: string;\n};\n\nconst commandModule: CommandModule<Options, Options> = {\n command: \"faucet\",\n\n describe: \"Interact with a Obelisk faucet\",\n\n builder(yargs) {\n return yargs.options({\n network: {\n type: \"string\",\n desc: \"URL of the Obelisk faucet\",\n choices: [\"testnet\", \"devnet\", \"localnet\"],\n default: \"localnet\",\n },\n recipient: {\n type: \"string\",\n desc: \"Sui address to fund\",\n },\n });\n },\n\n async handler({ network, recipient }) {\n let faucet_address = \"\";\n if (recipient === undefined) {\n const privateKey = process.env.PRIVATE_KEY;\n if (!privateKey)\n throw new ObeliskCliError(\n `Missing PRIVATE_KEY environment variable.\n Run 'echo \"PRIVATE_KEY=YOUR_PRIVATE_KEY\" > .env'\n in your contracts directory to use the default sui private key.`\n );\n\n const privateKeyFormat = validatePrivateKey(privateKey);\n if (privateKeyFormat === false) {\n throw new ObeliskCliError(`Please check your privateKey.`);\n }\n const privateKeyRaw = Buffer.from(privateKeyFormat as string, \"hex\");\n const keypair = Ed25519Keypair.fromSecretKey(privateKeyRaw);\n faucet_address = keypair.toSuiAddress();\n } else {\n faucet_address = recipient;\n }\n await requestSuiFromFaucetV0({\n host: getFaucetHost(network),\n recipient: faucet_address,\n });\n const client = new SuiClient({ url: getFullnodeUrl(network) });\n let params = {\n owner: faucet_address,\n } as GetBalanceParams;\n console.log(`Account: ${faucet_address}`);\n console.log(await client.getBalance(params));\n process.exit(0);\n },\n};\n\nexport default commandModule;\n","import { TransactionBlock } from \"@mysten/sui.js/transactions\";\nimport { Ed25519Keypair } from \"@mysten/sui.js/keypairs/ed25519\";\nimport {\n getFullnodeUrl,\n SuiClient,\n SuiTransactionBlockResponse,\n} from \"@mysten/sui.js/client\";\nimport { execSync } from \"child_process\";\nimport chalk from \"chalk\";\nimport { ObeliskCliError } from \"./errors\";\nimport {\n updateVersionInFile,\n saveContractData,\n validatePrivateKey,\n} from \"./utils\";\n\nexport async function publishHandler(\n name: string,\n network: \"mainnet\" | \"testnet\" | \"devnet\" | \"localnet\"\n) {\n const path = process.cwd();\n const projectPath = `${path}/contracts/${name}`;\n\n const privateKey = process.env.PRIVATE_KEY;\n if (!privateKey)\n throw new ObeliskCliError(\n `Missing PRIVATE_KEY environment variable.\nRun 'echo \"PRIVATE_KEY=YOUR_PRIVATE_KEY\" > .env'\nin your contracts directory to use the default sui private key.`\n );\n\n const privateKeyFormat = validatePrivateKey(privateKey);\n if (privateKeyFormat === false) {\n throw new ObeliskCliError(`Please check your privateKey.`);\n }\n const privateKeyRaw = Buffer.from(privateKeyFormat as string, \"hex\");\n const keypair = Ed25519Keypair.fromSecretKey(privateKeyRaw);\n const client = new SuiClient({\n url: getFullnodeUrl(network),\n });\n\n // Set version 1\n await updateVersionInFile(projectPath, \"1\");\n let modules: any, dependencies: any;\n try {\n const { modules: extractedModules, dependencies: extractedDependencies } =\n JSON.parse(\n execSync(\n `sui move build --dump-bytecode-as-base64 --path ${projectPath}`,\n {\n encoding: \"utf-8\",\n }\n )\n );\n modules = extractedModules;\n dependencies = extractedDependencies;\n } catch (error: any) {\n console.error(chalk.red(\"Error executing sui move build:\"));\n console.error(error.stdout);\n process.exit(1); // You might want to exit with a non-zero status code to indicate an error\n }\n\n console.log(chalk.blue(`Account: ${keypair.toSuiAddress()}`));\n\n const tx = new TransactionBlock();\n const [upgradeCap] = tx.publish({\n modules,\n dependencies,\n });\n tx.transferObjects(\n [upgradeCap],\n tx.pure(keypair.getPublicKey().toSuiAddress())\n );\n\n let result: SuiTransactionBlockResponse;\n try {\n result = await client.signAndExecuteTransactionBlock({\n signer: keypair,\n transactionBlock: tx,\n options: {\n showObjectChanges: true,\n },\n });\n } catch (error: any) {\n console.error(chalk.red(`Failed to execute publish, please republish`));\n console.error(error.message);\n process.exit(1);\n }\n\n if (result.effects?.status.status === \"failure\") {\n console.log(chalk.red(`Failed to execute publish, please republish`));\n process.exit(1);\n }\n\n let version = 1;\n let packageId = \"\";\n let worldId = \"\";\n let upgradeCapId = \"\";\n let adminCapId = \"\";\n result.objectChanges!.map((object) => {\n if (object.type === \"published\") {\n console.log(chalk.blue(`${name} PackageId: ${object.packageId}`));\n packageId = object.packageId;\n }\n if (\n object.type === \"created\" &&\n object.objectType.endsWith(\"::world::World\")\n ) {\n console.log(chalk.blue(`${name} WorldId: ${object.objectId}`));\n worldId = object.objectId;\n }\n if (\n object.type === \"created\" &&\n object.objectType === \"0x2::package::UpgradeCap\"\n ) {\n console.log(chalk.blue(`${name} UpgradeCap: ${object.objectId}`));\n upgradeCapId = object.objectId;\n }\n if (\n object.type === \"created\" &&\n object.objectType.endsWith(\"::world::AdminCap\")\n ) {\n console.log(chalk.blue(`${name} AdminCapId: ${object.objectId}`));\n adminCapId = object.objectId;\n }\n });\n\n console.log(chalk.green(`Publish transaction digest: ${result.digest}`));\n\n saveContractData(\n name,\n network,\n packageId,\n worldId,\n upgradeCapId,\n adminCapId,\n version\n );\n\n console.log(\"Executing the deployHook: \");\n const delay = (ms: number) =>\n new Promise((resolve) => setTimeout(resolve, ms));\n await delay(5000);\n\n const deployHookTx = new TransactionBlock();\n\n deployHookTx.moveCall({\n target: `${packageId}::deploy_hook::run`,\n arguments: [deployHookTx.object(worldId), deployHookTx.object(adminCapId)],\n });\n\n let deployHookResult: SuiTransactionBlockResponse;\n try {\n deployHookResult = await client.signAndExecuteTransactionBlock({\n signer: keypair,\n transactionBlock: deployHookTx,\n options: {\n showEffects: true,\n },\n });\n } catch (error: any) {\n console.error(\n chalk.red(\n `Failed to execute deployHook, please republish or manually call deploy_hook::run`\n )\n );\n console.error(error.message);\n process.exit(1);\n }\n\n if (deployHookResult.effects?.status.status === \"success\") {\n console.log(\n chalk.green(\n `Successful auto-execution of deployHook, please check the transaction digest: ${deployHookResult.digest}`\n )\n );\n } else {\n console.log(\n chalk.yellow(\n `Failed to execute deployHook, please republish or manually call deploy_hook::run`\n )\n );\n }\n}\n","import chalk from \"chalk\";\nimport { ZodError } from \"zod\";\nimport { fromZodError, ValidationError } from \"zod-validation-error\";\n\nexport class NotInsideProjectError extends Error {\n name = \"NotInsideProjectError\";\n message = \"You are not inside a Obelisk project\";\n}\n\nexport class ObeliskCliError extends Error {\n name = \"ObeliskCliError\";\n}\n\nexport class UpgradeError extends Error {\n name = \"UpgradeError\";\n}\n\nexport class FsIibError extends Error {\n name = \"FsIibError\";\n}\n\nexport function logError(error: unknown) {\n if (error instanceof ValidationError) {\n console.log(chalk.redBright(error.message));\n } else if (error instanceof ZodError) {\n // TODO currently this error shouldn't happen, use `fromZodErrorCustom`\n const validationError = fromZodError(error, {\n prefixSeparator: \"\\n- \",\n issueSeparator: \"\\n- \",\n });\n console.log(chalk.redBright(validationError.message));\n } else if (error instanceof NotInsideProjectError) {\n console.log(chalk.red(error.message));\n console.log(\"\");\n // TODO add docs to the website and update the link to the specific page\n console.log(\n chalk.blue(\n `To learn more about Obelisk's configuration, please go to https://github.com/0xobelisk`\n )\n );\n } else if (error instanceof ObeliskCliError) {\n console.log(chalk.red(error));\n } else {\n console.log(error);\n }\n}\n","import * as fsAsync from 'fs/promises';\nimport { mkdirSync, writeFileSync } from 'fs';\nimport { dirname } from 'path';\nimport {\n\tSUI_PRIVATE_KEY_PREFIX,\n\tdecodeSuiPrivateKey,\n} from '@mysten/sui.js/cryptography';\nimport { FsIibError } from './errors';\n\nexport type DeploymentJsonType = {\n\tprojectName: string;\n\tnetwork: 'mainnet' | 'testnet' | 'devnet' | 'localnet';\n\tpackageId: string;\n\tworldId: string;\n\tupgradeCap: string;\n\tadminCap: string;\n\tversion: number;\n};\n\nexport function validatePrivateKey(privateKey: string): boolean | string {\n\tif (privateKey.startsWith(SUI_PRIVATE_KEY_PREFIX)) {\n\t\tif (privateKey.length === 70) {\n\t\t\treturn privateKey;\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t} else if (privateKey.startsWith('0x')) {\n\t\tconst strippedPrivateKey = privateKey.slice(2);\n\t\tif (strippedPrivateKey.length === 64) {\n\t\t\treturn strippedPrivateKey;\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t} else {\n\t\tif (privateKey.length === 64) {\n\t\t\treturn privateKey;\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t}\n}\n\nexport async function updateVersionInFile(\n\tprojectPath: string,\n\tnewVersion: string\n) {\n\ttry {\n\t\tconst filePath = `${projectPath}/sources/codegen/eps/world.move`;\n\t\tconst data = await fsAsync.readFile(filePath, 'utf8');\n\n\t\t// update version data\n\t\tconst updatedData = data.replace(\n\t\t\t/const VERSION: u64 = \\d+;/,\n\t\t\t`const VERSION: u64 = ${newVersion};`\n\t\t);\n\n\t\t// write new version\n\t\twriteOutput(updatedData, filePath, 'Update package version');\n\t} catch {\n\t\tthrow new FsIibError('Fs update version failed.');\n\t}\n}\n\nasync function getDeploymentJson(projectPath: string, network: string) {\n\ttry {\n\t\tconst data = await fsAsync.readFile(\n\t\t\t`${projectPath}/.history/sui_${network}/latest.json`,\n\t\t\t'utf8'\n\t\t);\n\t\treturn JSON.parse(data) as DeploymentJsonType;\n\t} catch {\n\t\tthrow new FsIibError('Fs read deployment file failed.');\n\t}\n}\n\nexport async function getVersion(\n\tprojectPath: string,\n\tnetwork: string\n): Promise<number> {\n\tconst deployment = await getDeploymentJson(projectPath, network);\n\treturn deployment.version;\n}\n\nexport async function getNetwork(\n\tprojectPath: string,\n\tnetwork: string\n): Promise<'mainnet' | 'testnet' | 'devnet' | 'localnet'> {\n\tconst deployment = await getDeploymentJson(projectPath, network);\n\treturn deployment.network;\n}\n\nexport async function getOldPackageId(\n\tprojectPath: string,\n\tnetwork: string\n): Promise<string> {\n\tconst deployment = await getDeploymentJson(projectPath, network);\n\treturn deployment.packageId;\n}\n\nexport async function getWorldId(\n\tprojectPath: string,\n\tnetwork: string\n): Promise<string> {\n\tconst deployment = await getDeploymentJson(projectPath, network);\n\treturn deployment.worldId;\n}\n\nexport async function getUpgradeCap(\n\tprojectPath: string,\n\tnetwork: string\n): Promise<string> {\n\tconst deployment = await getDeploymentJson(projectPath, network);\n\treturn deployment.upgradeCap;\n}\n\nexport async function getAdminCap(\n\tprojectPath: string,\n\tnetwork: string\n): Promise<string> {\n\tconst deployment = await getDeploymentJson(projectPath, network);\n\treturn deployment.adminCap;\n}\n\nexport function saveContractData(\n\tprojectName: string,\n\tnetwork: 'mainnet' | 'testnet' | 'devnet' | 'localnet',\n\tpackageId: string,\n\tworldId: string,\n\tupgradeCap: string,\n\tadminCap: string,\n\tversion: number\n) {\n\tconst DeploymentData: DeploymentJsonType = {\n\t\tprojectName,\n\t\tnetwork,\n\t\tpackageId,\n\t\tworldId,\n\t\tupgradeCap,\n\t\tadminCap,\n\t\tversion,\n\t};\n\n\tconst path = process.cwd();\n\tconst storeDeploymentData = JSON.stringify(DeploymentData, null, 2);\n\twriteOutput(\n\t\tstoreDeploymentData,\n\t\t`${path}/contracts/${projectName}/.history/sui_${network}/latest.json`,\n\t\t'Update deploy log'\n\t);\n}\n\nexport async function writeOutput(\n\toutput: string,\n\tfullOutputPath: string,\n\tlogPrefix?: string\n): Promise<void> {\n\tmkdirSync(dirname(fullOutputPath), { recursive: true });\n\n\twriteFileSync(fullOutputPath, output);\n\tif (logPrefix !== undefined) {\n\t\tconsole.log(`${logPrefix}: ${fullOutputPath}`);\n\t}\n}\n","import { TransactionBlock, UpgradePolicy } from \"@mysten/sui.js/transactions\";\nimport { Ed25519Keypair } from \"@mysten/sui.js/keypairs/ed25519\";\nimport { getFullnodeUrl, SuiClient } from \"@mysten/sui.js/client\";\nimport { execSync } from \"child_process\";\nimport chalk from \"chalk\";\nimport { ObeliskCliError, UpgradeError } from \"./errors\";\nimport {\n updateVersionInFile,\n getOldPackageId,\n getVersion,\n getWorldId,\n getUpgradeCap,\n saveContractData,\n validatePrivateKey,\n getAdminCap,\n} from \"./utils\";\n\ntype ObjectContent = {\n type: string;\n fields: Record<string, any>;\n hasPublicTransfer: boolean;\n dataType: string;\n};\n\nexport async function upgradeHandler(\n name: string,\n network: \"mainnet\" | \"testnet\" | \"devnet\" | \"localnet\",\n schemaNames: string[]\n) {\n const path = process.cwd();\n const projectPath = `${path}/contracts/${name}`;\n const privateKey = process.env.PRIVATE_KEY;\n if (!privateKey)\n throw new ObeliskCliError(\n `Missing PRIVATE_KEY environment variable.\nRun 'echo \"PRIVATE_KEY=YOUR_PRIVATE_KEY\" > .env'\nin your contracts directory to use the default sui private key.`\n );\n\n const privateKeyFormat = validatePrivateKey(privateKey);\n if (privateKeyFormat === false) {\n throw new ObeliskCliError(`Please check your privateKey.`);\n }\n const privateKeyRaw = Buffer.from(privateKeyFormat as string, \"hex\");\n const keypair = Ed25519Keypair.fromSecretKey(privateKeyRaw);\n\n const client = new SuiClient({\n url: getFullnodeUrl(network),\n });\n\n let oldVersion = Number(await getVersion(projectPath, network));\n let oldPackageId = await getOldPackageId(projectPath, network);\n let worldId = await getWorldId(projectPath, network);\n let upgradeCap = await getUpgradeCap(projectPath, network);\n let adminCap = await getAdminCap(projectPath, network);\n\n const newVersion = oldVersion + 1;\n await updateVersionInFile(projectPath, newVersion.toString());\n\n try {\n let modules: any, dependencies: any, digest: any;\n try {\n const {\n modules: extractedModules,\n dependencies: extractedDependencies,\n digest: extractedDigest,\n } = JSON.parse(\n execSync(\n `sui move build --dump-bytecode-as-base64 --path ${path}/contracts/${name}`,\n {\n encoding: \"utf-8\",\n }\n )\n );\n\n modules = extractedModules;\n dependencies = extractedDependencies;\n digest = extractedDigest;\n } catch (error: any) {\n throw new UpgradeError(error.stdout);\n }\n\n const tx = new TransactionBlock();\n const ticket = tx.moveCall({\n target: \"0x2::package::authorize_upgrade\",\n arguments: [\n tx.object(upgradeCap),\n tx.pure(UpgradePolicy.COMPATIBLE),\n tx.pure(digest),\n ],\n });\n\n const receipt = tx.upgrade({\n modules,\n dependencies,\n packageId: oldPackageId,\n ticket,\n });\n\n tx.moveCall({\n target: \"0x2::package::commit_upgrade\",\n arguments: [tx.object(upgradeCap), receipt],\n });\n\n tx.transferObjects(\n [tx.object(upgradeCap)],\n tx.pure(keypair.getPublicKey().toSuiAddress())\n );\n\n const result = await client.signAndExecuteTransactionBlock({\n signer: keypair,\n transactionBlock: tx,\n options: {\n showObjectChanges: true,\n },\n });\n\n console.log(\"\");\n console.log(`${name} WorldId: ${worldId}`);\n\n let newPackageId = \"\";\n let newUpgradeCap = \"\";\n result.objectChanges!.map((object) => {\n if (object.type === \"published\") {\n console.log(chalk.blue(`${name} PackageId: ${object.packageId}`));\n newPackageId = object.packageId;\n }\n if (\n object.type === \"mutated\" &&\n object.objectType === \"0x2::package::UpgradeCap\"\n ) {\n console.log(chalk.blue(`${name} UpgradeCap: ${object.objectId}`));\n newUpgradeCap = object.objectId;\n }\n });\n\n console.log(chalk.green(`Upgrade Transaction Digest: ${result.digest}`));\n\n saveContractData(\n name,\n network,\n newPackageId,\n worldId,\n newUpgradeCap,\n adminCap,\n newVersion\n );\n\n oldPackageId = newPackageId;\n upgradeCap = newUpgradeCap;\n oldVersion = newVersion;\n\n console.log(\"\\nExecuting the migrate: \");\n const delay = (ms: number) =>\n new Promise((resolve) => setTimeout(resolve, ms));\n await delay(5000);\n\n const migrateTx = new TransactionBlock();\n migrateTx.moveCall({\n target: `${newPackageId}::world::migrate`,\n arguments: [migrateTx.object(worldId), migrateTx.object(adminCap)],\n });\n\n let newWorldObject = await client.getObject({\n id: worldId,\n options: {\n showContent: true,\n showDisplay: true,\n showType: true,\n showOwner: true,\n },\n });\n let newObjectContent = newWorldObject.data!.content as ObjectContent;\n\n const uniqueSchema: string[] = schemaNames.filter(\n (item) => !newObjectContent.fields[\"schema_names\"].includes(item)\n );\n\n console.log(\"new schema:\", uniqueSchema);\n let needRegisterSchema = [];\n for (const newSchema of uniqueSchema) {\n migrateTx.moveCall({\n target: `${newPackageId}::${newSchema}_schema::register`,\n arguments: [migrateTx.object(worldId), migrateTx.object(adminCap)],\n });\n needRegisterSchema.push(`${newSchema}_schema`);\n }\n const migrateResult = await client.signAndExecuteTransactionBlock({\n signer: keypair,\n transactionBlock: migrateTx,\n options: {\n showEffects: true,\n },\n });\n\n if (migrateResult.effects?.status.status === \"success\") {\n console.log(\n chalk.green(\n `${name} migrate world success, new world version is: ${newObjectContent.fields[\"version\"]}, package version is ${newVersion}`\n )\n );\n if (needRegisterSchema.length !== 0) {\n console.log(\n chalk.green(\n `new schema: ${needRegisterSchema.toString()} register success.`\n )\n );\n }\n\n console.log(\n chalk.blue(\n `\\n${name} world schemas is ${newObjectContent.fields[\"schema_names\"]}`\n )\n );\n } else {\n console.log(\n chalk.red(\n `${name} migrate world failed, world version is: ${newObjectContent.fields[\"version\"]}, package version is ${newVersion}`\n )\n );\n }\n } catch (error: any) {\n console.log(chalk.red(\"Upgrade failed!\"));\n console.error(error.message);\n\n saveContractData(\n name,\n network,\n oldPackageId,\n worldId,\n upgradeCap,\n adminCap,\n oldVersion\n );\n await updateVersionInFile(projectPath, oldVersion.toString());\n }\n}\n","import chalk from \"chalk\";\n\nexport function printObelisk() {\n console.log(\n chalk.yellow(`\nWelcome to obelisk world\n\\t\\t\\t --from team@obelisk\n ________ ________ _______ ___ ___ ________ ___ __ \n|\\\\ __ \\\\|\\\\ __ \\\\|\\\\ ___ \\\\ |\\\\ \\\\ |\\\\ \\\\|\\\\ ____\\\\|\\\\ \\\\|\\\\ \\\\ \n\\\\ \\\\ \\\\|\\\\ \\\\ \\\\ \\\\|\\\\ /\\\\ \\\\ __/|\\\\ \\\\ \\\\ \\\\ \\\\ \\\\ \\\\ \\\\___|\\\\ \\\\ \\\\/ /|_ \n \\\\ \\\\ \\\\\\\\\\\\ \\\\ \\\\ __ \\\\ \\\\ \\\\_|/_\\\\ \\\\ \\\\ \\\\ \\\\ \\\\ \\\\_____ \\\\ \\\\ ___ \\\\ \n \\\\ \\\\ \\\\\\\\\\\\ \\\\ \\\\ \\\\|\\\\ \\\\ \\\\ \\\\_|\\\\ \\\\ \\\\ \\\\____\\\\ \\\\ \\\\|____|\\\\ \\\\ \\\\ \\\\\\\\ \\\\ \\\\ \n \\\\ \\\\_______\\\\ \\\\_______\\\\ \\\\_______\\\\ \\\\_______\\\\ \\\\__\\\\____\\\\_\\\\ \\\\ \\\\__\\\\\\\\ \\\\__\\\\\n \\\\|_______|\\\\|_______|\\\\|_______|\\\\|_______|\\\\|__|\\\\_________\\\\|__| \\\\|__|\n \\\\|_________| \n \n \n`)\n );\n}\n","import type { CommandModule } from \"yargs\";\nimport { worldgen, loadConfig, ObeliskConfig } from \"@0xobelisk/sui-common\";\nimport chalk from \"chalk\";\n\ntype Options = {\n configPath?: string;\n};\n\nconst commandModule: CommandModule<Options, Options> = {\n command: \"schemagen <configPath>\",\n\n describe: \"Autogenerate Obelisk schemas based on the config file\",\n\n builder(yargs) {\n return yargs.options({\n configPath: { type: \"string\", desc: \"Path to the config file\" },\n });\n },\n\n async handler({ configPath }) {\n try {\n const obeliskConfig = (await loadConfig(configPath)) as ObeliskConfig;\n worldgen(obeliskConfig);\n process.exit(0);\n } catch (error: any) {\n console.log(chalk.red(\"Schemagen failed!\"));\n console.error(error.message);\n }\n },\n};\n\nexport default commandModule;\n","import type { CommandModule } from \"yargs\";\nimport { logError } from \"../utils/errors\";\nimport { publishHandler } from \"../utils\";\nimport { loadConfig, ObeliskConfig } from \"@0xobelisk/sui-common\";\n\ntype Options = {\n network: any;\n configPath: string;\n};\n\nconst commandModule: CommandModule<Options, Options> = {\n command: \"publish\",\n\n describe: \"Publish obelisk move contracts\",\n\n builder(yargs) {\n return yargs.options({\n network: {\n type: \"string\",\n choices: [\"mainnet\", \"testnet\", \"devnet\", \"localnet\"],\n desc: \"Network of the node (mainnet/testnet/devnet/localnet)\",\n },\n configPath: {\n type: \"string\",\n default: \"obelisk.config.ts\",\n decs: \"Path to the config file\",\n },\n });\n },\n\n async handler({ network, configPath }) {\n try {\n const obeliskConfig = (await loadConfig(configPath)) as ObeliskConfig;\n await publishHandler(obeliskConfig.name, network);\n } catch (error: any) {\n logError(error);\n process.exit(1);\n }\n process.exit(0);\n },\n};\n\nexport default commandModule;\n","import type { CommandModule } from \"yargs\";\nimport { logError } from \"../utils/errors\";\nimport { upgradeHandler } from \"../utils\";\nimport { ObeliskConfig, loadConfig, ValueType } from \"@0xobelisk/sui-common\";\n\ntype Options = {\n network: any;\n configPath: string;\n};\n\nconst commandModule: CommandModule<Options, Options> = {\n command: \"upgrade\",\n\n describe: \"Upgrade your move contracts\",\n\n builder(yargs) {\n return yargs.options({\n network: {\n type: \"string\",\n choices: [\"mainnet\", \"testnet\", \"devnet\", \"localnet\"],\n desc: \"Network of the node (mainnet/testnet/devnet/localnet)\",\n },\n configPath: {\n type: \"string\",\n default: \"obelisk.config.ts\",\n decs: \"Path to the config file\",\n },\n });\n },\n\n async handler({ network, configPath }) {\n try {\n const obeliskConfig = (await loadConfig(configPath)) as ObeliskConfig;\n\n let schemaNames = Object.keys(obeliskConfig.schemas).filter(\n (key) =>\n !(\n typeof obeliskConfig.schemas === \"object\" &&\n \"ephemeral\" in obeliskConfig.schemas &&\n (obeliskConfig.schemas[key] as ValueType).ephemeral\n )\n );\n\n await upgradeHandler(obeliskConfig.name, network, schemaNames);\n } catch (error: any) {\n logError(error);\n process.exit(1);\n }\n process.exit(0);\n },\n};\n\nexport default commandModule;\n","import type { CommandModule } from \"yargs\";\nimport { execSync } from \"child_process\";\nimport chalk from \"chalk\";\n\ntype Options = {\n packagePath: string;\n};\n\nconst commandModule: CommandModule<Options, Options> = {\n command: \"test\",\n\n describe: \"Run tests in Obelisk contracts\",\n\n builder(yargs) {\n return yargs.options({\n packagePath: {\n type: \"string\",\n default: \".\",\n description: \"Options to pass to forge test\",\n },\n });\n },\n\n async handler({ packagePath }) {\n // Start an internal anvil process if no world address is provided\n try {\n execSync(`sui move test --path ${packagePath}`, {\n encoding: \"utf-8\",\n });\n } catch (error: any) {\n console.error(chalk.red(\"Error executing sui move test:\"));\n console.log(error.stdout);\n process.exit(0);\n }\n },\n};\n\nexport default commandModule;\n","import type { CommandModule } from \"yargs\";\nimport { printObelisk } from \"../utils\";\n\nconst commandModule: CommandModule = {\n command: \"hello\",\n\n describe: \"hello, obelisk\",\n\n builder(yargs) {\n return yargs;\n },\n\n async handler() {\n printObelisk();\n },\n};\n\nexport default commandModule;\n","import { CommandModule } from \"yargs\";\n\nimport localnode from \"./localnode\";\nimport faucet from \"./faucet\";\nimport schemagen from \"./schemagen\";\nimport publish from \"./publish\";\nimport upgrade from \"./upgrade\";\nimport test from \"./test\";\nimport hello from \"./hello\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Each command has different options\nexport const commands: CommandModule<any, any>[] = [\n publish,\n localnode,\n faucet,\n schemagen,\n upgrade,\n test,\n hello,\n];\n"],"mappings":"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","names":["yargs","hideBin","execa","commandModule","yargs","child","localnode_default","requestSuiFromFaucetV0","getFaucetHost","Ed25519Keypair","SuiClient","getFullnodeUrl","TransactionBlock","Ed25519Keypair","getFullnodeUrl","SuiClient","execSync","chalk","chalk","ZodError","fromZodError","ValidationError","NotInsideProjectError","ObeliskCliError","UpgradeError","FsIibError","logError","error","validationError","fsAsync","mkdirSync","writeFileSync","dirname","SUI_PRIVATE_KEY_PREFIX","validatePrivateKey","privateKey","SUI_PRIVATE_KEY_PREFIX","strippedPrivateKey","updateVersionInFile","projectPath","newVersion","filePath","updatedData","writeOutput","FsIibError","getDeploymentJson","network","data","getVersion","getOldPackageId","projectPath","network","getDeploymentJson","getWorldId","getUpgradeCap","getAdminCap","saveContractData","projectName","packageId","worldId","upgradeCap","adminCap","version","DeploymentData","path","storeDeploymentData","writeOutput","output","fullOutputPath","logPrefix","mkdirSync","dirname","writeFileSync","publishHandler","name","network","projectPath","privateKey","ObeliskCliError","privateKeyFormat","validatePrivateKey","privateKeyRaw","keypair","Ed25519Keypair","client","SuiClient","getFullnodeUrl","updateVersionInFile","modules","dependencies","extractedModules","extractedDependencies","execSync","error","chalk","tx","TransactionBlock","upgradeCap","result","version","packageId","worldId","upgradeCapId","adminCapId","object","saveContractData","ms","resolve","deployHookTx","deployHookResult","TransactionBlock","UpgradePolicy","Ed25519Keypair","getFullnodeUrl","SuiClient","execSync","chalk","upgradeHandler","name","network","schemaNames","path","projectPath","privateKey","ObeliskCliError","privateKeyFormat","validatePrivateKey","privateKeyRaw","keypair","Ed25519Keypair","client","SuiClient","getFullnodeUrl","oldVersion","getVersion","oldPackageId","getOldPackageId","worldId","getWorldId","upgradeCap","getUpgradeCap","adminCap","getAdminCap","newVersion","updateVersionInFile","modules","dependencies","digest","extractedModules","extractedDependencies","extractedDigest","execSync","error","UpgradeError","tx","TransactionBlock","ticket","UpgradePolicy","receipt","result","newPackageId","newUpgradeCap","object","chalk","saveContractData","ms","resolve","migrateTx","newObjectContent","uniqueSchema","item","needRegisterSchema","newSchema","chalk","printObelisk","commandModule","yargs","network","recipient","faucet_address","privateKey","ObeliskCliError","privateKeyFormat","validatePrivateKey","privateKeyRaw","Ed25519Keypair","requestSuiFromFaucetV0","getFaucetHost","client","SuiClient","getFullnodeUrl","params","faucet_default","worldgen","loadConfig","chalk","commandModule","yargs","configPath","obeliskConfig","error","schemagen_default","loadConfig","commandModule","yargs","network","configPath","obeliskConfig","publishHandler","error","logError","publish_default","loadConfig","commandModule","yargs","network","configPath","obeliskConfig","schemaNames","key","upgradeHandler","error","logError","upgrade_default","execSync","chalk","commandModule","yargs","packagePath","error","test_default","commandModule","yargs","printObelisk","hello_default","commands","publish_default","localnode_default","faucet_default","schemagen_default","upgrade_default","test_default","hello_default","dotenv","chalk","yargs","hideBin","commands","msg","err","logError"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@0xobelisk/sui-cli",
3
- "version": "0.5.6",
3
+ "version": "0.5.8",
4
4
  "description": "Tookit for interacting with move eps framework",
5
5
  "keywords": [
6
6
  "sui",
@@ -31,7 +31,8 @@
31
31
  "obelisk": "./dist/obelisk.js"
32
32
  },
33
33
  "dependencies": {
34
- "@mysten/sui.js": "^0.49.1",
34
+ "@0xobelisk/sui-common": "^0.5.7",
35
+ "@mysten/sui.js": "^0.51.2",
35
36
  "chalk": "^5.0.1",
36
37
  "child_process": "^1.0.2",
37
38
  "dotenv": "^16.0.3",
@@ -44,8 +45,7 @@
44
45
  "typescript": "5.1.6",
45
46
  "yargs": "^17.7.1",
46
47
  "zod": "^3.22.3",
47
- "zod-validation-error": "^1.3.0",
48
- "@0xobelisk/sui-common": "0.5.6"
48
+ "zod-validation-error": "^1.3.0"
49
49
  },
50
50
  "devDependencies": {
51
51
  "@types/ejs": "^3.1.1",
@@ -1,153 +1,163 @@
1
- import * as fsAsync from "fs/promises";
2
- import { mkdirSync, writeFileSync } from "fs";
3
- import { dirname } from "path";
4
- import { FsIibError } from "./errors";
1
+ import * as fsAsync from 'fs/promises';
2
+ import { mkdirSync, writeFileSync } from 'fs';
3
+ import { dirname } from 'path';
4
+ import {
5
+ SUI_PRIVATE_KEY_PREFIX,
6
+ decodeSuiPrivateKey,
7
+ } from '@mysten/sui.js/cryptography';
8
+ import { FsIibError } from './errors';
5
9
 
6
10
  export type DeploymentJsonType = {
7
- projectName: string;
8
- network: "mainnet" | "testnet" | "devnet" | "localnet";
9
- packageId: string;
10
- worldId: string;
11
- upgradeCap: string;
12
- adminCap: string;
13
- version: number;
11
+ projectName: string;
12
+ network: 'mainnet' | 'testnet' | 'devnet' | 'localnet';
13
+ packageId: string;
14
+ worldId: string;
15
+ upgradeCap: string;
16
+ adminCap: string;
17
+ version: number;
14
18
  };
15
19
 
16
20
  export function validatePrivateKey(privateKey: string): boolean | string {
17
- if (privateKey.startsWith("0x")) {
18
- const strippedPrivateKey = privateKey.slice(2);
19
- if (strippedPrivateKey.length === 64) {
20
- return strippedPrivateKey;
21
- } else {
22
- return false;
23
- }
24
- } else {
25
- if (privateKey.length === 64) {
26
- return privateKey;
27
- } else {
28
- return false;
29
- }
30
- }
21
+ if (privateKey.startsWith(SUI_PRIVATE_KEY_PREFIX)) {
22
+ if (privateKey.length === 70) {
23
+ return privateKey;
24
+ } else {
25
+ return false;
26
+ }
27
+ } else if (privateKey.startsWith('0x')) {
28
+ const strippedPrivateKey = privateKey.slice(2);
29
+ if (strippedPrivateKey.length === 64) {
30
+ return strippedPrivateKey;
31
+ } else {
32
+ return false;
33
+ }
34
+ } else {
35
+ if (privateKey.length === 64) {
36
+ return privateKey;
37
+ } else {
38
+ return false;
39
+ }
40
+ }
31
41
  }
32
42
 
33
43
  export async function updateVersionInFile(
34
- projectPath: string,
35
- newVersion: string
44
+ projectPath: string,
45
+ newVersion: string
36
46
  ) {
37
- try {
38
- const filePath = `${projectPath}/sources/codegen/eps/world.move`;
39
- const data = await fsAsync.readFile(filePath, "utf8");
40
-
41
- // update version data
42
- const updatedData = data.replace(
43
- /const VERSION: u64 = \d+;/,
44
- `const VERSION: u64 = ${newVersion};`
45
- );
46
-
47
- // write new version
48
- writeOutput(updatedData, filePath, "Update package version");
49
- } catch {
50
- throw new FsIibError("Fs update version failed.");
51
- }
47
+ try {
48
+ const filePath = `${projectPath}/sources/codegen/eps/world.move`;
49
+ const data = await fsAsync.readFile(filePath, 'utf8');
50
+
51
+ // update version data
52
+ const updatedData = data.replace(
53
+ /const VERSION: u64 = \d+;/,
54
+ `const VERSION: u64 = ${newVersion};`
55
+ );
56
+
57
+ // write new version
58
+ writeOutput(updatedData, filePath, 'Update package version');
59
+ } catch {
60
+ throw new FsIibError('Fs update version failed.');
61
+ }
52
62
  }
53
63
 
54
64
  async function getDeploymentJson(projectPath: string, network: string) {
55
- try {
56
- const data = await fsAsync.readFile(
57
- `${projectPath}/.history/sui_${network}/latest.json`,
58
- "utf8"
59
- );
60
- return JSON.parse(data) as DeploymentJsonType;
61
- } catch {
62
- throw new FsIibError("Fs read deployment file failed.");
63
- }
65
+ try {
66
+ const data = await fsAsync.readFile(
67
+ `${projectPath}/.history/sui_${network}/latest.json`,
68
+ 'utf8'
69
+ );
70
+ return JSON.parse(data) as DeploymentJsonType;
71
+ } catch {
72
+ throw new FsIibError('Fs read deployment file failed.');
73
+ }
64
74
  }
65
75
 
66
76
  export async function getVersion(
67
- projectPath: string,
68
- network: string
77
+ projectPath: string,
78
+ network: string
69
79
  ): Promise<number> {
70
- const deployment = await getDeploymentJson(projectPath, network);
71
- return deployment.version;
80
+ const deployment = await getDeploymentJson(projectPath, network);
81
+ return deployment.version;
72
82
  }
73
83
 
74
84
  export async function getNetwork(
75
- projectPath: string,
76
- network: string
77
- ): Promise<"mainnet" | "testnet" | "devnet" | "localnet"> {
78
- const deployment = await getDeploymentJson(projectPath, network);
79
- return deployment.network;
85
+ projectPath: string,
86
+ network: string
87
+ ): Promise<'mainnet' | 'testnet' | 'devnet' | 'localnet'> {
88
+ const deployment = await getDeploymentJson(projectPath, network);
89
+ return deployment.network;
80
90
  }
81
91
 
82
92
  export async function getOldPackageId(
83
- projectPath: string,
84
- network: string
93
+ projectPath: string,
94
+ network: string
85
95
  ): Promise<string> {
86
- const deployment = await getDeploymentJson(projectPath, network);
87
- return deployment.packageId;
96
+ const deployment = await getDeploymentJson(projectPath, network);
97
+ return deployment.packageId;
88
98
  }
89
99
 
90
100
  export async function getWorldId(
91
- projectPath: string,
92
- network: string
101
+ projectPath: string,
102
+ network: string
93
103
  ): Promise<string> {
94
- const deployment = await getDeploymentJson(projectPath, network);
95
- return deployment.worldId;
104
+ const deployment = await getDeploymentJson(projectPath, network);
105
+ return deployment.worldId;
96
106
  }
97
107
 
98
108
  export async function getUpgradeCap(
99
- projectPath: string,
100
- network: string
109
+ projectPath: string,
110
+ network: string
101
111
  ): Promise<string> {
102
- const deployment = await getDeploymentJson(projectPath, network);
103
- return deployment.upgradeCap;
112
+ const deployment = await getDeploymentJson(projectPath, network);
113
+ return deployment.upgradeCap;
104
114
  }
105
115
 
106
116
  export async function getAdminCap(
107
- projectPath: string,
108
- network: string
117
+ projectPath: string,
118
+ network: string
109
119
  ): Promise<string> {
110
- const deployment = await getDeploymentJson(projectPath, network);
111
- return deployment.adminCap;
120
+ const deployment = await getDeploymentJson(projectPath, network);
121
+ return deployment.adminCap;
112
122
  }
113
123
 
114
124
  export function saveContractData(
115
- projectName: string,
116
- network: "mainnet" | "testnet" | "devnet" | "localnet",
117
- packageId: string,
118
- worldId: string,
119
- upgradeCap: string,
120
- adminCap: string,
121
- version: number
125
+ projectName: string,
126
+ network: 'mainnet' | 'testnet' | 'devnet' | 'localnet',
127
+ packageId: string,
128
+ worldId: string,
129
+ upgradeCap: string,
130
+ adminCap: string,
131
+ version: number
122
132
  ) {
123
- const DeploymentData: DeploymentJsonType = {
124
- projectName,
125
- network,
126
- packageId,
127
- worldId,
128
- upgradeCap,
129
- adminCap,
130
- version,
131
- };
132
-
133
- const path = process.cwd();
134
- const storeDeploymentData = JSON.stringify(DeploymentData, null, 2);
135
- writeOutput(
136
- storeDeploymentData,
137
- `${path}/contracts/${projectName}/.history/sui_${network}/latest.json`,
138
- "Update deploy log"
139
- );
133
+ const DeploymentData: DeploymentJsonType = {
134
+ projectName,
135
+ network,
136
+ packageId,
137
+ worldId,
138
+ upgradeCap,
139
+ adminCap,
140
+ version,
141
+ };
142
+
143
+ const path = process.cwd();
144
+ const storeDeploymentData = JSON.stringify(DeploymentData, null, 2);
145
+ writeOutput(
146
+ storeDeploymentData,
147
+ `${path}/contracts/${projectName}/.history/sui_${network}/latest.json`,
148
+ 'Update deploy log'
149
+ );
140
150
  }
141
151
 
142
152
  export async function writeOutput(
143
- output: string,
144
- fullOutputPath: string,
145
- logPrefix?: string
153
+ output: string,
154
+ fullOutputPath: string,
155
+ logPrefix?: string
146
156
  ): Promise<void> {
147
- mkdirSync(dirname(fullOutputPath), { recursive: true });
157
+ mkdirSync(dirname(fullOutputPath), { recursive: true });
148
158
 
149
- writeFileSync(fullOutputPath, output);
150
- if (logPrefix !== undefined) {
151
- console.log(`${logPrefix}: ${fullOutputPath}`);
152
- }
159
+ writeFileSync(fullOutputPath, output);
160
+ if (logPrefix !== undefined) {
161
+ console.log(`${logPrefix}: ${fullOutputPath}`);
162
+ }
153
163
  }