@0xobelisk/sui-cli 0.5.14 → 0.5.16
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/README.md +5 -5
- package/dist/obelisk.js +9 -9
- package/dist/obelisk.js.map +1 -1
- package/package.json +2 -2
- package/src/commands/schemagen.ts +6 -2
- package/src/utils/publishHandler.ts +26 -29
- package/src/utils/upgradeHandler.ts +0 -2
- package/src/utils/utils.ts +13 -18
package/README.md
CHANGED
|
@@ -6,8 +6,8 @@ It comes with
|
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
1. `schemagen <configPath>`: Autogenerate Obelisk schemas based on the store schemas config file
|
|
9
|
-
2. `publish`: Deploy your own
|
|
10
|
-
3. `upgrade`: Upgrade your own
|
|
9
|
+
2. `publish`: Deploy your own project on the specified sui network.
|
|
10
|
+
3. `upgrade`: Upgrade your own project on the specified sui network.
|
|
11
11
|
4. `localnode`: Start a local Sui node for development
|
|
12
12
|
5. `faucet`: An interface to the Devnet/Localnet faucet. It makes it easy to fund addresses on the Devnet/localnet
|
|
13
13
|
|
|
@@ -15,7 +15,7 @@ It comes with
|
|
|
15
15
|
|
|
16
16
|
We don’t recommend installing the CLI globally.
|
|
17
17
|
|
|
18
|
-
Instead, you should add the CLI as a dev dependency to your project (done automatically if you start from a starter kit using `pnpm create obelisk
|
|
18
|
+
Instead, you should add the CLI as a dev dependency to your project (done automatically if you start from a starter kit using `pnpm create obelisk`), and use it with `pnpm build` inside your project directory.
|
|
19
19
|
|
|
20
20
|
## Using the CLI
|
|
21
21
|
|
|
@@ -36,9 +36,9 @@ obelisk schemagen obelisk.config.ts
|
|
|
36
36
|
|
|
37
37
|
### `publish`
|
|
38
38
|
|
|
39
|
-
Deploy a Obelisk contract project with the
|
|
39
|
+
Deploy a Obelisk contract project with the obelisk framework.
|
|
40
40
|
|
|
41
|
-
This tool will use the `obelisk.config.ts` to detect all systems, schemas and projectName in the
|
|
41
|
+
This tool will use the `obelisk.config.ts` to detect all systems, schemas and projectName in the project and will deploy them to the chain specified.
|
|
42
42
|
|
|
43
43
|
When using the deployer, you must set the private key of the deployer using the `PRIVATE_KEY` environment variable. You can make this easier by using [`dotenv`](https://www.npmjs.com/package/dotenv) before running `obelisk publish` in your deployment script.
|
|
44
44
|
|
package/dist/obelisk.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import
|
|
3
|
-
gracefully shutting down from SIGINT (Crtl-C)`),e.kill(),process.exit()}),await e}},H=
|
|
2
|
+
import qe from"yargs";import{hideBin as Ge}from"yargs/helpers";import{execa as de}from"execa";var pe={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=de("sui-test-validator");process.on("SIGINT",()=>{console.log(`
|
|
3
|
+
gracefully shutting down from SIGINT (Crtl-C)`),e.kill(),process.exit()}),await e}},H=pe;import{Obelisk as $e}from"@0xobelisk/sui-client";import{requestSuiFromFaucetV0 as Te,getFaucetHost as Se}from"@mysten/sui/faucet";import{SuiClient as Re,getFullnodeUrl as je}from"@mysten/sui/client";import{Obelisk as be}from"@0xobelisk/sui-client";import{Transaction as L}from"@mysten/sui/transactions";import{getFullnodeUrl as we,SuiClient as ke}from"@mysten/sui/client";import{execSync as xe}from"child_process";import c from"chalk";import T from"chalk";import{ZodError as me}from"zod";import{fromZodError as ge,ValidationError as ue}from"zod-validation-error";var U=class extends Error{name="NotInsideProjectError";message="You are not inside a Obelisk project"},i=class extends Error{name="ObeliskCliError"},M=class extends Error{name="UpgradeError"},S=class extends Error{name="FsIibError"};function E(e){if(e instanceof ue)console.log(T.redBright(e.message));else if(e instanceof me){let t=ge(e,{prefixSeparator:`
|
|
4
4
|
- `,issueSeparator:`
|
|
5
|
-
- `});console.log(
|
|
5
|
+
- `});console.log(T.redBright(t.message))}else e instanceof U?(console.log(T.red(e.message)),console.log(""),console.log(T.blue("To learn more about Obelisk's configuration, please go to https://github.com/0xobelisk"))):e instanceof i?console.log(T.red(e)):console.log(e)}import*as D from"fs/promises";import{mkdirSync as fe,writeFileSync as _e}from"fs";import{dirname as ye}from"path";import{SUI_PRIVATE_KEY_PREFIX as he}from"@mysten/sui/cryptography";function I(e){if(e.startsWith(he))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 Y(e,t){try{let o=`${e}/sources/script/migrate.move`,r=(await D.readFile(o,"utf8")).replace(/const VERSION: u64 = \d+;/,`const VERSION: u64 = ${t};`);G(r,o,"Update package version")}catch{throw new S("Fs update version failed.")}}async function N(e,t){try{let o=await D.readFile(`${e}/.history/sui_${t}/latest.json`,"utf8");return JSON.parse(o)}catch{throw new S("Fs read deployment file failed.")}}async function J(e,t){return(await N(e,t)).version}async function W(e,t){return(await N(e,t)).packageId}async function q(e,t){return(await N(e,t)).upgradeCap}function R(e,t,o,l,r,d){let u={projectName:e,network:t,packageId:o,schemas:l,upgradeCap:r,version:d},f=process.cwd(),m=JSON.stringify(u,null,2);G(m,`${f}/contracts/${e}/.history/sui_${t}/latest.json`,"Update deploy log")}async function G(e,t,o){fe(ye(t),{recursive:!0}),_e(t,e),o!==void 0&&console.log(`${o}: ${t}`)}async function Z(e,t){let l=`${process.cwd()}/contracts/${e}`,r=process.env.PRIVATE_KEY;if(!r)throw new i(`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=
|
|
7
|
+
in your contracts directory to use the default sui private key.`);let d=I(r);if(d===!1)throw new i("Please check your privateKey.");let f=new be({secretKey:d}).getKeypair(),m=new ke({url:we(t)}),x,h;try{let{modules:s,dependencies:O}=JSON.parse(xe(`sui move build --dump-bytecode-as-base64 --path ${l}`,{encoding:"utf-8"}));x=s,h=O}catch(s){console.error(c.red("Error executing sui move build:")),console.error(s.stdout),process.exit(1)}console.log(c.blue(`Account: ${f.toSuiAddress()}`));let b=new L,[_]=b.publish({modules:x,dependencies:h});b.transferObjects([_],f.toSuiAddress());let p;try{p=await m.signAndExecuteTransaction({signer:f,transaction:b,options:{showObjectChanges:!0}})}catch(s){console.error(c.red("Failed to execute publish, please republish")),console.error(s.message),process.exit(1)}p.effects?.status.status==="failure"&&(console.log(c.red("Failed to execute publish, please republish")),process.exit(1));let v=1,g="",w=[],P="";p.objectChanges.map(s=>{s.type==="published"&&(console.log(c.blue(`${e} PackageId: ${s.packageId}`)),g=s.packageId),s.type==="created"&&s.objectType==="0x2::package::UpgradeCap"&&(console.log(c.blue(`${e} UpgradeCap: ${s.objectId}`)),P=s.objectId)}),console.log(c.green(`Publish transaction digest: ${p.digest}`)),console.log("Executing the deployHook: "),await(s=>new Promise(O=>setTimeout(O,s)))(5e3);let a=new L;a.moveCall({target:`${g}::deploy_hook::run`,arguments:[a.object("0xa66942c08d9fc318a70ab9d0cfd7e75f1a2dd1ac31aff12fde008d25bfa9604b"),a.object("0x6")]});let C;try{C=await m.signAndExecuteTransaction({signer:f,transaction:a,options:{showEffects:!0,showObjectChanges:!0}})}catch(s){console.error(c.red("Failed to execute deployHook, please republish or manually call deploy_hook::run")),console.error(s.message),process.exit(1)}C.effects?.status.status==="success"?(console.log(c.green(`Successful auto-execution of deployHook, please check the transaction digest: ${C.digest}`)),C.objectChanges?.map(s=>{s.type==="created"&&s.objectType.includes("schema")&&(console.log(c.blue(`${e} Schema Object id: ${s.objectId}`)),console.log(c.blue(`${e} Schema Object type: ${s.objectType}`)),w.push({name:s.objectType,objectId:s.objectId}))}),R(e,t,g,w,P,v)):console.log(c.yellow("Failed to execute deployHook, please republish or manually call deploy_hook::run"))}import{Obelisk as ve}from"@0xobelisk/sui-client";import{Transaction as z,UpgradePolicy as Ce}from"@mysten/sui/transactions";import{getFullnodeUrl as Oe,SuiClient as Ee}from"@mysten/sui/client";import{execSync as Ie}from"child_process";import y from"chalk";async function X(e,t,o){let l=process.cwd(),r=`${l}/contracts/${e}`,d=process.env.PRIVATE_KEY;if(!d)throw new i(`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
|
|
10
|
-
Executing the migrate: `),await(
|
|
11
|
-
${e} world schemas is ${
|
|
9
|
+
in your contracts directory to use the default sui private key.`);let u=I(d);if(u===!1)throw new i("Please check your privateKey.");let m=new ve({secretKey:u}).getKeypair(),x=new Ee({url:Oe(t)}),h=Number(await J(r,t)),b=await W(r,t),_=await getWorldId(r,t),p=await q(r,t),v=await getAdminCap(r,t),g=h+1;await Y(r,g.toString());try{let w,P,A;try{let{modules:n,dependencies:F,digest:le}=JSON.parse(Ie(`sui move build --dump-bytecode-as-base64 --path ${l}/contracts/${e}`,{encoding:"utf-8"}));w=n,P=F,A=le}catch(n){throw new M(n.stdout)}let a=new z,C=a.moveCall({target:"0x2::package::authorize_upgrade",arguments:[a.object(p),a.pure.u8(Ce.COMPATIBLE),a.pure.vector("u8",A)]}),s=a.upgrade({modules:w,dependencies:P,package:b,ticket:C});a.moveCall({target:"0x2::package::commit_upgrade",arguments:[a.object(p),s]}),a.transferObjects([a.object(p)],m.toSuiAddress());let O=await x.signAndExecuteTransaction({signer:m,transaction:a,options:{showObjectChanges:!0}});console.log(""),console.log(`${e} WorldId: ${_}`);let $="",K="";O.objectChanges.map(n=>{n.type==="published"&&(console.log(y.blue(`${e} PackageId: ${n.packageId}`)),$=n.packageId),n.type==="mutated"&&n.objectType==="0x2::package::UpgradeCap"&&(console.log(y.blue(`${e} UpgradeCap: ${n.objectId}`)),K=n.objectId)}),console.log(y.green(`Upgrade Transaction Digest: ${O.digest}`)),R(e,t,$,_,K,v,g),b=$,p=K,h=g,console.log(`
|
|
10
|
+
Executing the migrate: `),await(n=>new Promise(F=>setTimeout(F,n)))(5e3);let k=new z;k.moveCall({target:`${$}::migrate::run`,arguments:[k.object(_),k.object(v)]});let j=(await x.getObject({id:_,options:{showContent:!0,showDisplay:!0,showType:!0,showOwner:!0}})).data.content,B=o.filter(n=>!j.fields.schema_names.includes(n));console.log("new schema:",B);let V=[];for(let n of B)k.moveCall({target:`${$}::${n}_schema::register`,arguments:[k.object(_),k.object(v)]}),V.push(`${n}_schema`);(await x.signAndExecuteTransaction({signer:m,transaction:k,options:{showEffects:!0}})).effects?.status.status==="success"?(console.log(y.green(`${e} migrate world success, new world version is: ${j.fields.version}, package version is ${g}`)),V.length!==0&&console.log(y.green(`new schema: ${V.toString()} register success.`)),console.log(y.blue(`
|
|
11
|
+
${e} world schemas is ${j.fields.schema_names}`))):console.log(y.red(`${e} migrate world failed, world version is: ${j.fields.version}, package version is ${g}`))}catch(w){console.log(y.red("Upgrade failed!")),console.error(w.message),R(e,t,b,_,p,v,h),await Y(r,h.toString())}}import Pe from"chalk";function Q(){console.log(Pe.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
|
|
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 i(`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
|
|
26
|
+
in your contracts directory to use the default sui private key.`);let u=I(d);if(u===!1)throw new i("Please check your privateKey.");o=new $e({secretKey:u}).getKeypair().toSuiAddress()}else o=t;await Te({host:Se(e),recipient:o});let l=new Re({url:je(e)}),r={owner:o};console.log(`Account: ${o}`),console.log(await l.getBalance(r)),process.exit(0)}},ee=Me;import{worldgen as Ae,loadConfig as Ke}from"@0xobelisk/sui-common";import Ve from"chalk";var Fe={command:"schemagen",describe:"Autogenerate Obelisk schemas based on the config file",builder(e){return e.options({configPath:{type:"string",default:"obelisk.config.ts",desc:"Path to the config file"}})},async handler({configPath:e}){try{let t=await Ke(e);await Ae(t),process.exit(0)}catch(t){console.log(Ve.red("Schemagen failed!")),console.error(t.message)}}},te=Fe;import{loadConfig as Ue}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 Ue(t);await Z(o.name,e)}catch(o){E(o),process.exit(1)}process.exit(0)}},oe=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),l=Object.keys(o.schemas).filter(r=>!(typeof o.schemas=="object"&&"ephemeral"in o.schemas&&o.schemas[r].ephemeral));await X(o.name,e,l)}catch(o){E(o),process.exit(1)}process.exit(0)}},se=Ne;import{execSync as Be}from"child_process";import He 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{Be(`sui move test --path ${e}`,{encoding:"utf-8"})}catch(t){console.error(He.red("Error executing sui move test:")),console.log(t.stdout),process.exit(0)}}},re=Je;var We={command:"hello",describe:"hello, obelisk",builder(e){return e},async handler(){Q()}},ne=We;var ae=[oe,H,ee,te,se,re,ne];import*as ce from"dotenv";import ie from"chalk";ce.config();qe(Ge(process.argv)).scriptName("obelisk").command(ae).strict().fail((e,t)=>{console.error(ie.red(e)),e.includes("Missing required argument")&&console.log(ie.yellow(`Run 'pnpm obelisk ${process.argv[2]} --help' for a list of available and required arguments.`)),console.log(""),E(t),console.log(""),process.exit(1)}).alias({h:"help"}).argv;
|
|
27
27
|
//# sourceMappingURL=obelisk.js.map
|
package/dist/obelisk.js.map
CHANGED
|
@@ -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 { Obelisk } from '@0xobelisk/sui-client';\nimport type { CommandModule } from 'yargs';\nimport { requestSuiFromFaucetV0, getFaucetHost } from '@mysten/sui/faucet';\nimport {\n\tSuiClient,\n\tgetFullnodeUrl,\n\tGetBalanceParams,\n} from '@mysten/sui/client';\nimport { validatePrivateKey, ObeliskCliError } from '../utils';\n\ntype Options = {\n\tnetwork: any;\n\trecipient?: string;\n};\n\nconst commandModule: CommandModule<Options, Options> = {\n\tcommand: 'faucet',\n\n\tdescribe: 'Interact with a Obelisk faucet',\n\n\tbuilder(yargs) {\n\t\treturn yargs.options({\n\t\t\tnetwork: {\n\t\t\t\ttype: 'string',\n\t\t\t\tdesc: 'URL of the Obelisk faucet',\n\t\t\t\tchoices: ['testnet', 'devnet', 'localnet'],\n\t\t\t\tdefault: 'localnet',\n\t\t\t},\n\t\t\trecipient: {\n\t\t\t\ttype: 'string',\n\t\t\t\tdesc: 'Sui address to fund',\n\t\t\t},\n\t\t});\n\t},\n\n\tasync handler({ network, recipient }) {\n\t\tlet faucet_address = '';\n\t\tif (recipient === undefined) {\n\t\t\tconst privateKey = process.env.PRIVATE_KEY;\n\t\t\tif (!privateKey)\n\t\t\t\tthrow new ObeliskCliError(\n\t\t\t\t\t`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\t\t\t\t);\n\n\t\t\tconst privateKeyFormat = validatePrivateKey(privateKey);\n\t\t\tif (privateKeyFormat === false) {\n\t\t\t\tthrow new ObeliskCliError(`Please check your privateKey.`);\n\t\t\t}\n\t\t\tconst obelisk = new Obelisk({\n\t\t\t\tsecretKey: privateKeyFormat,\n\t\t\t});\n\t\t\tconst keypair = obelisk.getKeypair();\n\t\t\tfaucet_address = keypair.toSuiAddress();\n\t\t} else {\n\t\t\tfaucet_address = recipient;\n\t\t}\n\t\tawait requestSuiFromFaucetV0({\n\t\t\thost: getFaucetHost(network),\n\t\t\trecipient: faucet_address,\n\t\t});\n\t\tconst client = new SuiClient({ url: getFullnodeUrl(network) });\n\t\tlet params = {\n\t\t\towner: faucet_address,\n\t\t} as GetBalanceParams;\n\t\tconsole.log(`Account: ${faucet_address}`);\n\t\tconsole.log(await client.getBalance(params));\n\t\tprocess.exit(0);\n\t},\n};\n\nexport default commandModule;\n","import { Obelisk } from '@0xobelisk/sui-client';\nimport { Transaction } from '@mysten/sui/transactions';\nimport {\n\tgetFullnodeUrl,\n\tSuiClient,\n\tSuiTransactionBlockResponse,\n} from '@mysten/sui/client';\nimport { execSync } from 'child_process';\nimport chalk from 'chalk';\nimport { ObeliskCliError } from './errors';\nimport {\n\tupdateVersionInFile,\n\tsaveContractData,\n\tvalidatePrivateKey,\n} from './utils';\n\nexport async function publishHandler(\n\tname: string,\n\tnetwork: 'mainnet' | 'testnet' | 'devnet' | 'localnet'\n) {\n\tconst path = process.cwd();\n\tconst projectPath = `${path}/contracts/${name}`;\n\n\tconst privateKey = process.env.PRIVATE_KEY;\n\tif (!privateKey)\n\t\tthrow new ObeliskCliError(\n\t\t\t`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\t\t);\n\n\tconst privateKeyFormat = validatePrivateKey(privateKey);\n\tif (privateKeyFormat === false) {\n\t\tthrow new ObeliskCliError(`Please check your privateKey.`);\n\t}\n\tconst obelisk = new Obelisk({\n\t\tsecretKey: privateKeyFormat,\n\t});\n\tconst keypair = obelisk.getKeypair();\n\n\tconst client = new SuiClient({\n\t\turl: getFullnodeUrl(network),\n\t});\n\n\tlet modules: any, dependencies: any;\n\ttry {\n\t\tconst {\n\t\t\tmodules: extractedModules,\n\t\t\tdependencies: extractedDependencies,\n\t\t} = JSON.parse(\n\t\t\texecSync(\n\t\t\t\t`sui move build --dump-bytecode-as-base64 --path ${projectPath}`,\n\t\t\t\t{\n\t\t\t\t\tencoding: 'utf-8',\n\t\t\t\t}\n\t\t\t)\n\t\t);\n\t\tmodules = extractedModules;\n\t\tdependencies = extractedDependencies;\n\t} catch (error: any) {\n\t\tconsole.error(chalk.red('Error executing sui move build:'));\n\t\tconsole.error(error.stdout);\n\t\tprocess.exit(1); // You might want to exit with a non-zero status code to indicate an error\n\t}\n\n\tconsole.log(chalk.blue(`Account: ${keypair.toSuiAddress()}`));\n\n\tconst tx = new Transaction();\n\tconst [upgradeCap] = tx.publish({\n\t\tmodules,\n\t\tdependencies,\n\t});\n\ttx.transferObjects(\n\t\t[upgradeCap],\n\t\tkeypair.toSuiAddress()\n\t);\n\n\tlet result: SuiTransactionBlockResponse;\n\ttry {\n\t\tresult = await client.signAndExecuteTransaction({\n\t\t\tsigner: keypair,\n\t\t\ttransaction: tx,\n\t\t\toptions: {\n\t\t\t\tshowObjectChanges: true,\n\t\t\t},\n\t\t});\n\t} catch (error: any) {\n\t\tconsole.error(chalk.red(`Failed to execute publish, please republish`));\n\t\tconsole.error(error.message);\n\t\tprocess.exit(1);\n\t}\n\n\tif (result.effects?.status.status === 'failure') {\n\t\tconsole.log(chalk.red(`Failed to execute publish, please republish`));\n\t\tprocess.exit(1);\n\t}\n\n\tlet version = 1;\n\tlet packageId = '';\n\tlet worldId = '';\n\tlet upgradeCapId = '';\n\tlet adminCapId = '';\n\tresult.objectChanges!.map(object => {\n\t\tif (object.type === 'published') {\n\t\t\tconsole.log(chalk.blue(`${name} PackageId: ${object.packageId}`));\n\t\t\tpackageId = object.packageId;\n\t\t}\n\t\tif (\n\t\t\tobject.type === 'created' &&\n\t\t\tobject.objectType.endsWith('::world::World')\n\t\t) {\n\t\t\tconsole.log(chalk.blue(`${name} WorldId: ${object.objectId}`));\n\t\t\tworldId = object.objectId;\n\t\t}\n\t\tif (\n\t\t\tobject.type === 'created' &&\n\t\t\tobject.objectType === '0x2::package::UpgradeCap'\n\t\t) {\n\t\t\tconsole.log(chalk.blue(`${name} UpgradeCap: ${object.objectId}`));\n\t\t\tupgradeCapId = object.objectId;\n\t\t}\n\t\tif (\n\t\t\tobject.type === 'created' &&\n\t\t\tobject.objectType.endsWith('::world::AdminCap')\n\t\t) {\n\t\t\tconsole.log(chalk.blue(`${name} AdminCapId: ${object.objectId}`));\n\t\t\tadminCapId = object.objectId;\n\t\t}\n\t});\n\n\tconsole.log(chalk.green(`Publish transaction digest: ${result.digest}`));\n\n\tsaveContractData(\n\t\tname,\n\t\tnetwork,\n\t\tpackageId,\n\t\tworldId,\n\t\tupgradeCapId,\n\t\tadminCapId,\n\t\tversion\n\t);\n\n\tconsole.log('Executing the deployHook: ');\n\tconst delay = (ms: number) =>\n\t\tnew Promise(resolve => setTimeout(resolve, ms));\n\tawait delay(5000);\n\n\tconst deployHookTx = new Transaction();\n\n\tdeployHookTx.moveCall({\n\t\ttarget: `${packageId}::deploy_hook::run`,\n\t\targuments: [\n\t\t\tdeployHookTx.object(worldId),\n\t\t\tdeployHookTx.object(adminCapId),\n\t\t],\n\t});\n\n\tlet deployHookResult: SuiTransactionBlockResponse;\n\ttry {\n\t\tdeployHookResult = await client.signAndExecuteTransaction({\n\t\t\tsigner: keypair,\n\t\t\ttransaction: deployHookTx,\n\t\t\toptions: {\n\t\t\t\tshowEffects: true,\n\t\t\t},\n\t\t});\n\t} catch (error: any) {\n\t\tconsole.error(\n\t\t\tchalk.red(\n\t\t\t\t`Failed to execute deployHook, please republish or manually call deploy_hook::run`\n\t\t\t)\n\t\t);\n\t\tconsole.error(error.message);\n\t\tprocess.exit(1);\n\t}\n\n\tif (deployHookResult.effects?.status.status === 'success') {\n\t\tconsole.log(\n\t\t\tchalk.green(\n\t\t\t\t`Successful auto-execution of deployHook, please check the transaction digest: ${deployHookResult.digest}`\n\t\t\t)\n\t\t);\n\t} else {\n\t\tconsole.log(\n\t\t\tchalk.yellow(\n\t\t\t\t`Failed to execute deployHook, please republish or manually call deploy_hook::run`\n\t\t\t)\n\t\t);\n\t}\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 { SUI_PRIVATE_KEY_PREFIX } from '@mysten/sui/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): false | 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/script/migrate.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 { Obelisk } from '@0xobelisk/sui-client';\nimport { Transaction, UpgradePolicy } from '@mysten/sui/transactions';\nimport { getFullnodeUrl, SuiClient } from '@mysten/sui/client';\nimport { execSync } from 'child_process';\nimport chalk from 'chalk';\nimport { ObeliskCliError, UpgradeError } from './errors';\nimport {\n\tupdateVersionInFile,\n\tgetOldPackageId,\n\tgetVersion,\n\tgetWorldId,\n\tgetUpgradeCap,\n\tsaveContractData,\n\tvalidatePrivateKey,\n\tgetAdminCap,\n} from './utils';\n\ntype ObjectContent = {\n\ttype: string;\n\tfields: Record<string, any>;\n\thasPublicTransfer: boolean;\n\tdataType: string;\n};\n\nexport async function upgradeHandler(\n\tname: string,\n\tnetwork: 'mainnet' | 'testnet' | 'devnet' | 'localnet',\n\tschemaNames: string[]\n) {\n\tconst path = process.cwd();\n\tconst projectPath = `${path}/contracts/${name}`;\n\tconst privateKey = process.env.PRIVATE_KEY;\n\tif (!privateKey)\n\t\tthrow new ObeliskCliError(\n\t\t\t`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\t\t);\n\n\tconst privateKeyFormat = validatePrivateKey(privateKey);\n\tif (privateKeyFormat === false) {\n\t\tthrow new ObeliskCliError(`Please check your privateKey.`);\n\t}\n\tconst obelisk = new Obelisk({\n\t\tsecretKey: privateKeyFormat,\n\t});\n\tconst keypair = obelisk.getKeypair();\n\n\tconst client = new SuiClient({\n\t\turl: getFullnodeUrl(network),\n\t});\n\n\tlet oldVersion = Number(await getVersion(projectPath, network));\n\tlet oldPackageId = await getOldPackageId(projectPath, network);\n\tlet worldId = await getWorldId(projectPath, network);\n\tlet upgradeCap = await getUpgradeCap(projectPath, network);\n\tlet adminCap = await getAdminCap(projectPath, network);\n\n\tconst newVersion = oldVersion + 1;\n\tawait updateVersionInFile(projectPath, newVersion.toString());\n\n\ttry {\n\t\tlet modules: any, dependencies: any, digest: any;\n\t\ttry {\n\t\t\tconst {\n\t\t\t\tmodules: extractedModules,\n\t\t\t\tdependencies: extractedDependencies,\n\t\t\t\tdigest: extractedDigest,\n\t\t\t} = JSON.parse(\n\t\t\t\texecSync(\n\t\t\t\t\t`sui move build --dump-bytecode-as-base64 --path ${path}/contracts/${name}`,\n\t\t\t\t\t{\n\t\t\t\t\t\tencoding: 'utf-8',\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t);\n\n\t\t\tmodules = extractedModules;\n\t\t\tdependencies = extractedDependencies;\n\t\t\tdigest = extractedDigest;\n\t\t} catch (error: any) {\n\t\t\tthrow new UpgradeError(error.stdout);\n\t\t}\n\n\t\tconst tx = new Transaction();\n\t\tconst ticket = tx.moveCall({\n\t\t\ttarget: '0x2::package::authorize_upgrade',\n\t\t\targuments: [\n\t\t\t\ttx.object(upgradeCap),\n\t\t\t\ttx.pure.u8(UpgradePolicy.COMPATIBLE),\n\t\t\t\ttx.pure.vector('u8', digest),\n\t\t\t],\n\t\t});\n\n\t\tconst receipt = tx.upgrade({\n\t\t\tmodules,\n\t\t\tdependencies,\n\t\t\tpackage: oldPackageId,\n\t\t\tticket,\n\t\t});\n\n\t\ttx.moveCall({\n\t\t\ttarget: '0x2::package::commit_upgrade',\n\t\t\targuments: [tx.object(upgradeCap), receipt],\n\t\t});\n\n\t\ttx.transferObjects(\n\t\t\t[tx.object(upgradeCap)],\n\t\t\tkeypair.toSuiAddress()\n\t\t);\n\n\t\tconst result = await client.signAndExecuteTransaction({\n\t\t\tsigner: keypair,\n\t\t\ttransaction: tx,\n\t\t\toptions: {\n\t\t\t\tshowObjectChanges: true,\n\t\t\t},\n\t\t});\n\n\t\tconsole.log('');\n\t\tconsole.log(`${name} WorldId: ${worldId}`);\n\n\t\tlet newPackageId = '';\n\t\tlet newUpgradeCap = '';\n\t\tresult.objectChanges!.map(object => {\n\t\t\tif (object.type === 'published') {\n\t\t\t\tconsole.log(\n\t\t\t\t\tchalk.blue(`${name} PackageId: ${object.packageId}`)\n\t\t\t\t);\n\t\t\t\tnewPackageId = object.packageId;\n\t\t\t}\n\t\t\tif (\n\t\t\t\tobject.type === 'mutated' &&\n\t\t\t\tobject.objectType === '0x2::package::UpgradeCap'\n\t\t\t) {\n\t\t\t\tconsole.log(\n\t\t\t\t\tchalk.blue(`${name} UpgradeCap: ${object.objectId}`)\n\t\t\t\t);\n\t\t\t\tnewUpgradeCap = object.objectId;\n\t\t\t}\n\t\t});\n\n\t\tconsole.log(\n\t\t\tchalk.green(`Upgrade Transaction Digest: ${result.digest}`)\n\t\t);\n\n\t\tsaveContractData(\n\t\t\tname,\n\t\t\tnetwork,\n\t\t\tnewPackageId,\n\t\t\tworldId,\n\t\t\tnewUpgradeCap,\n\t\t\tadminCap,\n\t\t\tnewVersion\n\t\t);\n\n\t\toldPackageId = newPackageId;\n\t\tupgradeCap = newUpgradeCap;\n\t\toldVersion = newVersion;\n\n\t\tconsole.log('\\nExecuting the migrate: ');\n\t\tconst delay = (ms: number) =>\n\t\t\tnew Promise(resolve => setTimeout(resolve, ms));\n\t\tawait delay(5000);\n\n\t\tconst migrateTx = new Transaction();\n\t\tmigrateTx.moveCall({\n\t\t\ttarget: `${newPackageId}::migrate::run`,\n\t\t\targuments: [migrateTx.object(worldId), migrateTx.object(adminCap)],\n\t\t});\n\n\t\tlet newWorldObject = await client.getObject({\n\t\t\tid: worldId,\n\t\t\toptions: {\n\t\t\t\tshowContent: true,\n\t\t\t\tshowDisplay: true,\n\t\t\t\tshowType: true,\n\t\t\t\tshowOwner: true,\n\t\t\t},\n\t\t});\n\t\tlet newObjectContent = newWorldObject.data!.content as ObjectContent;\n\n\t\tconst uniqueSchema: string[] = schemaNames.filter(\n\t\t\titem => !newObjectContent.fields['schema_names'].includes(item)\n\t\t);\n\n\t\tconsole.log('new schema:', uniqueSchema);\n\t\tlet needRegisterSchema = [];\n\t\tfor (const newSchema of uniqueSchema) {\n\t\t\tmigrateTx.moveCall({\n\t\t\t\ttarget: `${newPackageId}::${newSchema}_schema::register`,\n\t\t\t\targuments: [\n\t\t\t\t\tmigrateTx.object(worldId),\n\t\t\t\t\tmigrateTx.object(adminCap),\n\t\t\t\t],\n\t\t\t});\n\t\t\tneedRegisterSchema.push(`${newSchema}_schema`);\n\t\t}\n\t\tconst migrateResult = await client.signAndExecuteTransaction({\n\t\t\tsigner: keypair,\n\t\t\ttransaction: migrateTx,\n\t\t\toptions: {\n\t\t\t\tshowEffects: true,\n\t\t\t},\n\t\t});\n\n\t\tif (migrateResult.effects?.status.status === 'success') {\n\t\t\tconsole.log(\n\t\t\t\tchalk.green(\n\t\t\t\t\t`${name} migrate world success, new world version is: ${newObjectContent.fields['version']}, package version is ${newVersion}`\n\t\t\t\t)\n\t\t\t);\n\t\t\tif (needRegisterSchema.length !== 0) {\n\t\t\t\tconsole.log(\n\t\t\t\t\tchalk.green(\n\t\t\t\t\t\t`new schema: ${needRegisterSchema.toString()} register success.`\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconsole.log(\n\t\t\t\tchalk.blue(\n\t\t\t\t\t`\\n${name} world schemas is ${newObjectContent.fields['schema_names']}`\n\t\t\t\t)\n\t\t\t);\n\t\t} else {\n\t\t\tconsole.log(\n\t\t\t\tchalk.red(\n\t\t\t\t\t`${name} migrate world failed, world version is: ${newObjectContent.fields['version']}, package version is ${newVersion}`\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t} catch (error: any) {\n\t\tconsole.log(chalk.red('Upgrade failed!'));\n\t\tconsole.error(error.message);\n\n\t\tsaveContractData(\n\t\t\tname,\n\t\t\tnetwork,\n\t\t\toldPackageId,\n\t\t\tworldId,\n\t\t\tupgradeCap,\n\t\t\tadminCap,\n\t\t\toldVersion\n\t\t);\n\t\tawait updateVersionInFile(projectPath, oldVersion.toString());\n\t}\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 await 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","Obelisk","requestSuiFromFaucetV0","getFaucetHost","SuiClient","getFullnodeUrl","Obelisk","Transaction","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","keypair","Obelisk","client","SuiClient","getFullnodeUrl","modules","dependencies","extractedModules","extractedDependencies","execSync","error","chalk","tx","Transaction","upgradeCap","result","version","packageId","worldId","upgradeCapId","adminCapId","object","saveContractData","ms","resolve","deployHookTx","deployHookResult","Obelisk","Transaction","UpgradePolicy","getFullnodeUrl","SuiClient","execSync","chalk","upgradeHandler","name","network","schemaNames","path","projectPath","privateKey","ObeliskCliError","privateKeyFormat","validatePrivateKey","keypair","Obelisk","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","Transaction","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","Obelisk","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 { Obelisk } from '@0xobelisk/sui-client';\nimport type { CommandModule } from 'yargs';\nimport { requestSuiFromFaucetV0, getFaucetHost } from '@mysten/sui/faucet';\nimport {\n\tSuiClient,\n\tgetFullnodeUrl,\n\tGetBalanceParams,\n} from '@mysten/sui/client';\nimport { validatePrivateKey, ObeliskCliError } from '../utils';\n\ntype Options = {\n\tnetwork: any;\n\trecipient?: string;\n};\n\nconst commandModule: CommandModule<Options, Options> = {\n\tcommand: 'faucet',\n\n\tdescribe: 'Interact with a Obelisk faucet',\n\n\tbuilder(yargs) {\n\t\treturn yargs.options({\n\t\t\tnetwork: {\n\t\t\t\ttype: 'string',\n\t\t\t\tdesc: 'URL of the Obelisk faucet',\n\t\t\t\tchoices: ['testnet', 'devnet', 'localnet'],\n\t\t\t\tdefault: 'localnet',\n\t\t\t},\n\t\t\trecipient: {\n\t\t\t\ttype: 'string',\n\t\t\t\tdesc: 'Sui address to fund',\n\t\t\t},\n\t\t});\n\t},\n\n\tasync handler({ network, recipient }) {\n\t\tlet faucet_address = '';\n\t\tif (recipient === undefined) {\n\t\t\tconst privateKey = process.env.PRIVATE_KEY;\n\t\t\tif (!privateKey)\n\t\t\t\tthrow new ObeliskCliError(\n\t\t\t\t\t`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\t\t\t\t);\n\n\t\t\tconst privateKeyFormat = validatePrivateKey(privateKey);\n\t\t\tif (privateKeyFormat === false) {\n\t\t\t\tthrow new ObeliskCliError(`Please check your privateKey.`);\n\t\t\t}\n\t\t\tconst obelisk = new Obelisk({\n\t\t\t\tsecretKey: privateKeyFormat,\n\t\t\t});\n\t\t\tconst keypair = obelisk.getKeypair();\n\t\t\tfaucet_address = keypair.toSuiAddress();\n\t\t} else {\n\t\t\tfaucet_address = recipient;\n\t\t}\n\t\tawait requestSuiFromFaucetV0({\n\t\t\thost: getFaucetHost(network),\n\t\t\trecipient: faucet_address,\n\t\t});\n\t\tconst client = new SuiClient({ url: getFullnodeUrl(network) });\n\t\tlet params = {\n\t\t\towner: faucet_address,\n\t\t} as GetBalanceParams;\n\t\tconsole.log(`Account: ${faucet_address}`);\n\t\tconsole.log(await client.getBalance(params));\n\t\tprocess.exit(0);\n\t},\n};\n\nexport default commandModule;\n","import { Obelisk } from '@0xobelisk/sui-client';\nimport { Transaction } from '@mysten/sui/transactions';\nimport {\n\tgetFullnodeUrl,\n\tSuiClient,\n\tSuiTransactionBlockResponse,\n} from '@mysten/sui/client';\nimport { execSync } from 'child_process';\nimport chalk from 'chalk';\nimport { ObeliskCliError } from './errors';\nimport {\n\tupdateVersionInFile,\n\tsaveContractData,\n\tvalidatePrivateKey, schema,\n} from './utils';\nimport {log} from \"node:util\";\n\nexport async function publishHandler(\n\tname: string,\n\tnetwork: 'mainnet' | 'testnet' | 'devnet' | 'localnet'\n) {\n\tconst path = process.cwd();\n\tconst projectPath = `${path}/contracts/${name}`;\n\n\tconst privateKey = process.env.PRIVATE_KEY;\n\tif (!privateKey)\n\t\tthrow new ObeliskCliError(\n\t\t\t`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\t\t);\n\n\tconst privateKeyFormat = validatePrivateKey(privateKey);\n\tif (privateKeyFormat === false) {\n\t\tthrow new ObeliskCliError(`Please check your privateKey.`);\n\t}\n\tconst obelisk = new Obelisk({\n\t\tsecretKey: privateKeyFormat,\n\t});\n\tconst keypair = obelisk.getKeypair();\n\n\tconst client = new SuiClient({\n\t\turl: getFullnodeUrl(network),\n\t});\n\n\tlet modules: any, dependencies: any;\n\ttry {\n\t\tconst {\n\t\t\tmodules: extractedModules,\n\t\t\tdependencies: extractedDependencies,\n\t\t} = JSON.parse(\n\t\t\texecSync(\n\t\t\t\t`sui move build --dump-bytecode-as-base64 --path ${projectPath}`,\n\t\t\t\t{\n\t\t\t\t\tencoding: 'utf-8',\n\t\t\t\t}\n\t\t\t)\n\t\t);\n\t\tmodules = extractedModules;\n\t\tdependencies = extractedDependencies;\n\t} catch (error: any) {\n\t\tconsole.error(chalk.red('Error executing sui move build:'));\n\t\tconsole.error(error.stdout);\n\t\tprocess.exit(1); // You might want to exit with a non-zero status code to indicate an error\n\t}\n\n\tconsole.log(chalk.blue(`Account: ${keypair.toSuiAddress()}`));\n\n\tconst tx = new Transaction();\n\tconst [upgradeCap] = tx.publish({\n\t\tmodules,\n\t\tdependencies,\n\t});\n\ttx.transferObjects(\n\t\t[upgradeCap],\n\t\tkeypair.toSuiAddress()\n\t);\n\n\tlet result: SuiTransactionBlockResponse;\n\ttry {\n\t\tresult = await client.signAndExecuteTransaction({\n\t\t\tsigner: keypair,\n\t\t\ttransaction: tx,\n\t\t\toptions: {\n\t\t\t\tshowObjectChanges: true,\n\t\t\t},\n\t\t});\n\t} catch (error: any) {\n\t\tconsole.error(chalk.red(`Failed to execute publish, please republish`));\n\t\tconsole.error(error.message);\n\t\tprocess.exit(1);\n\t}\n\n\tif (result.effects?.status.status === 'failure') {\n\t\tconsole.log(chalk.red(`Failed to execute publish, please republish`));\n\t\tprocess.exit(1);\n\t}\n\n\tlet version = 1;\n\tlet packageId = '';\n\tlet schemas: schema[] = [];\n\tlet upgradeCapId = '';\n\tresult.objectChanges!.map(object => {\n\t\tif (object.type === 'published') {\n\t\t\tconsole.log(chalk.blue(`${name} PackageId: ${object.packageId}`));\n\t\t\tpackageId = object.packageId;\n\t\t}\n\t\tif (\n\t\t\tobject.type === 'created' &&\n\t\t\tobject.objectType === '0x2::package::UpgradeCap'\n\t\t) {\n\t\t\tconsole.log(chalk.blue(`${name} UpgradeCap: ${object.objectId}`));\n\t\t\tupgradeCapId = object.objectId;\n\t\t}\n\t});\n\n\tconsole.log(chalk.green(`Publish transaction digest: ${result.digest}`));\n\n\tconsole.log('Executing the deployHook: ');\n\tconst delay = (ms: number) =>\n\t\tnew Promise(resolve => setTimeout(resolve, ms));\n\tawait delay(5000);\n\n\tconst deployHookTx = new Transaction();\n\n\tdeployHookTx.moveCall({\n\t\ttarget: `${packageId}::deploy_hook::run`,\n\t\targuments: [\n\t\t\tdeployHookTx.object(\"0xa66942c08d9fc318a70ab9d0cfd7e75f1a2dd1ac31aff12fde008d25bfa9604b\"),\n\t\t\tdeployHookTx.object(\"0x6\"),\n\t\t],\n\t});\n\n\tlet deployHookResult: SuiTransactionBlockResponse;\n\ttry {\n\t\tdeployHookResult = await client.signAndExecuteTransaction({\n\t\t\tsigner: keypair,\n\t\t\ttransaction: deployHookTx,\n\t\t\toptions: {\n\t\t\t\tshowEffects: true,\n\t\t\t\tshowObjectChanges: true\n\t\t\t},\n\t\t});\n\t} catch (error: any) {\n\t\tconsole.error(\n\t\t\tchalk.red(\n\t\t\t\t`Failed to execute deployHook, please republish or manually call deploy_hook::run`\n\t\t\t)\n\t\t);\n\t\tconsole.error(error.message);\n\t\tprocess.exit(1);\n\t}\n\n\tif (deployHookResult.effects?.status.status === 'success') {\n\t\tconsole.log(\n\t\t\tchalk.green(\n\t\t\t\t`Successful auto-execution of deployHook, please check the transaction digest: ${deployHookResult.digest}`\n\t\t\t)\n\t\t);\n\t\tdeployHookResult.objectChanges?.map(object => {\n\t\t\tif (\n\t\t\t\tobject.type === 'created' && object.objectType.includes(\"schema\")\n\t\t\t) {\n\t\t\t\tconsole.log(chalk.blue(`${name} Schema Object id: ${object.objectId}`));\n\t\t\t\tconsole.log(chalk.blue(`${name} Schema Object type: ${object.objectType}`));\n\t\t\t\tschemas.push({\n\t\t\t\t\tname: object.objectType,\n\t\t\t\t\tobjectId: object.objectId,\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\tsaveContractData(\n\t\t\tname,\n\t\t\tnetwork,\n\t\t\tpackageId,\n\t\t\tschemas,\n\t\t\tupgradeCapId,\n\t\t\tversion\n\t\t);\n\t} else {\n\t\tconsole.log(\n\t\t\tchalk.yellow(\n\t\t\t\t`Failed to execute deployHook, please republish or manually call deploy_hook::run`\n\t\t\t)\n\t\t);\n\t}\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 { SUI_PRIVATE_KEY_PREFIX } from '@mysten/sui/cryptography';\nimport { FsIibError } from './errors';\n\nexport type schema = {\n\tname: string,\n\tobjectId: string\n}\n\nexport type DeploymentJsonType = {\n\tprojectName: string;\n\tnetwork: 'mainnet' | 'testnet' | 'devnet' | 'localnet';\n\tpackageId: string;\n\tschemas: schema[]\n\tupgradeCap: string;\n\tversion: number;\n};\n\nexport function validatePrivateKey(privateKey: string): false | 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/script/migrate.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 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 getObjectIdBySchemaName(\n\tprojectPath: string,\n\tnetwork: string,\n\tschemaName: string\n): Promise<string | undefined> {\n\tconst deployment = await getDeploymentJson(projectPath, network);\n\treturn deployment.schemas.find((schema) => schema.name.includes(schemaName))?.objectId;\n}\n\nexport function saveContractData(\n\tprojectName: string,\n\tnetwork: 'mainnet' | 'testnet' | 'devnet' | 'localnet',\n\tpackageId: string,\n\tschemas: schema[],\n\tupgradeCap: string,\n\tversion: number\n) {\n\tconst DeploymentData: DeploymentJsonType = {\n\t\tprojectName,\n\t\tnetwork,\n\t\tpackageId,\n\t\tschemas,\n\t\tupgradeCap,\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 { Obelisk } from '@0xobelisk/sui-client';\nimport { Transaction, UpgradePolicy } from '@mysten/sui/transactions';\nimport { getFullnodeUrl, SuiClient } from '@mysten/sui/client';\nimport { execSync } from 'child_process';\nimport chalk from 'chalk';\nimport { ObeliskCliError, UpgradeError } from './errors';\nimport {\n\tupdateVersionInFile,\n\tgetOldPackageId,\n\tgetVersion,\n\tgetUpgradeCap,\n\tsaveContractData,\n\tvalidatePrivateKey,\n} from './utils';\n\ntype ObjectContent = {\n\ttype: string;\n\tfields: Record<string, any>;\n\thasPublicTransfer: boolean;\n\tdataType: string;\n};\n\nexport async function upgradeHandler(\n\tname: string,\n\tnetwork: 'mainnet' | 'testnet' | 'devnet' | 'localnet',\n\tschemaNames: string[]\n) {\n\tconst path = process.cwd();\n\tconst projectPath = `${path}/contracts/${name}`;\n\tconst privateKey = process.env.PRIVATE_KEY;\n\tif (!privateKey)\n\t\tthrow new ObeliskCliError(\n\t\t\t`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\t\t);\n\n\tconst privateKeyFormat = validatePrivateKey(privateKey);\n\tif (privateKeyFormat === false) {\n\t\tthrow new ObeliskCliError(`Please check your privateKey.`);\n\t}\n\tconst obelisk = new Obelisk({\n\t\tsecretKey: privateKeyFormat,\n\t});\n\tconst keypair = obelisk.getKeypair();\n\n\tconst client = new SuiClient({\n\t\turl: getFullnodeUrl(network),\n\t});\n\n\tlet oldVersion = Number(await getVersion(projectPath, network));\n\tlet oldPackageId = await getOldPackageId(projectPath, network);\n\tlet worldId = await getWorldId(projectPath, network);\n\tlet upgradeCap = await getUpgradeCap(projectPath, network);\n\tlet adminCap = await getAdminCap(projectPath, network);\n\n\tconst newVersion = oldVersion + 1;\n\tawait updateVersionInFile(projectPath, newVersion.toString());\n\n\ttry {\n\t\tlet modules: any, dependencies: any, digest: any;\n\t\ttry {\n\t\t\tconst {\n\t\t\t\tmodules: extractedModules,\n\t\t\t\tdependencies: extractedDependencies,\n\t\t\t\tdigest: extractedDigest,\n\t\t\t} = JSON.parse(\n\t\t\t\texecSync(\n\t\t\t\t\t`sui move build --dump-bytecode-as-base64 --path ${path}/contracts/${name}`,\n\t\t\t\t\t{\n\t\t\t\t\t\tencoding: 'utf-8',\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t);\n\n\t\t\tmodules = extractedModules;\n\t\t\tdependencies = extractedDependencies;\n\t\t\tdigest = extractedDigest;\n\t\t} catch (error: any) {\n\t\t\tthrow new UpgradeError(error.stdout);\n\t\t}\n\n\t\tconst tx = new Transaction();\n\t\tconst ticket = tx.moveCall({\n\t\t\ttarget: '0x2::package::authorize_upgrade',\n\t\t\targuments: [\n\t\t\t\ttx.object(upgradeCap),\n\t\t\t\ttx.pure.u8(UpgradePolicy.COMPATIBLE),\n\t\t\t\ttx.pure.vector('u8', digest),\n\t\t\t],\n\t\t});\n\n\t\tconst receipt = tx.upgrade({\n\t\t\tmodules,\n\t\t\tdependencies,\n\t\t\tpackage: oldPackageId,\n\t\t\tticket,\n\t\t});\n\n\t\ttx.moveCall({\n\t\t\ttarget: '0x2::package::commit_upgrade',\n\t\t\targuments: [tx.object(upgradeCap), receipt],\n\t\t});\n\n\t\ttx.transferObjects(\n\t\t\t[tx.object(upgradeCap)],\n\t\t\tkeypair.toSuiAddress()\n\t\t);\n\n\t\tconst result = await client.signAndExecuteTransaction({\n\t\t\tsigner: keypair,\n\t\t\ttransaction: tx,\n\t\t\toptions: {\n\t\t\t\tshowObjectChanges: true,\n\t\t\t},\n\t\t});\n\n\t\tconsole.log('');\n\t\tconsole.log(`${name} WorldId: ${worldId}`);\n\n\t\tlet newPackageId = '';\n\t\tlet newUpgradeCap = '';\n\t\tresult.objectChanges!.map(object => {\n\t\t\tif (object.type === 'published') {\n\t\t\t\tconsole.log(\n\t\t\t\t\tchalk.blue(`${name} PackageId: ${object.packageId}`)\n\t\t\t\t);\n\t\t\t\tnewPackageId = object.packageId;\n\t\t\t}\n\t\t\tif (\n\t\t\t\tobject.type === 'mutated' &&\n\t\t\t\tobject.objectType === '0x2::package::UpgradeCap'\n\t\t\t) {\n\t\t\t\tconsole.log(\n\t\t\t\t\tchalk.blue(`${name} UpgradeCap: ${object.objectId}`)\n\t\t\t\t);\n\t\t\t\tnewUpgradeCap = object.objectId;\n\t\t\t}\n\t\t});\n\n\t\tconsole.log(\n\t\t\tchalk.green(`Upgrade Transaction Digest: ${result.digest}`)\n\t\t);\n\n\t\tsaveContractData(\n\t\t\tname,\n\t\t\tnetwork,\n\t\t\tnewPackageId,\n\t\t\tworldId,\n\t\t\tnewUpgradeCap,\n\t\t\tadminCap,\n\t\t\tnewVersion\n\t\t);\n\n\t\toldPackageId = newPackageId;\n\t\tupgradeCap = newUpgradeCap;\n\t\toldVersion = newVersion;\n\n\t\tconsole.log('\\nExecuting the migrate: ');\n\t\tconst delay = (ms: number) =>\n\t\t\tnew Promise(resolve => setTimeout(resolve, ms));\n\t\tawait delay(5000);\n\n\t\tconst migrateTx = new Transaction();\n\t\tmigrateTx.moveCall({\n\t\t\ttarget: `${newPackageId}::migrate::run`,\n\t\t\targuments: [migrateTx.object(worldId), migrateTx.object(adminCap)],\n\t\t});\n\n\t\tlet newWorldObject = await client.getObject({\n\t\t\tid: worldId,\n\t\t\toptions: {\n\t\t\t\tshowContent: true,\n\t\t\t\tshowDisplay: true,\n\t\t\t\tshowType: true,\n\t\t\t\tshowOwner: true,\n\t\t\t},\n\t\t});\n\t\tlet newObjectContent = newWorldObject.data!.content as ObjectContent;\n\n\t\tconst uniqueSchema: string[] = schemaNames.filter(\n\t\t\titem => !newObjectContent.fields['schema_names'].includes(item)\n\t\t);\n\n\t\tconsole.log('new schema:', uniqueSchema);\n\t\tlet needRegisterSchema = [];\n\t\tfor (const newSchema of uniqueSchema) {\n\t\t\tmigrateTx.moveCall({\n\t\t\t\ttarget: `${newPackageId}::${newSchema}_schema::register`,\n\t\t\t\targuments: [\n\t\t\t\t\tmigrateTx.object(worldId),\n\t\t\t\t\tmigrateTx.object(adminCap),\n\t\t\t\t],\n\t\t\t});\n\t\t\tneedRegisterSchema.push(`${newSchema}_schema`);\n\t\t}\n\t\tconst migrateResult = await client.signAndExecuteTransaction({\n\t\t\tsigner: keypair,\n\t\t\ttransaction: migrateTx,\n\t\t\toptions: {\n\t\t\t\tshowEffects: true,\n\t\t\t},\n\t\t});\n\n\t\tif (migrateResult.effects?.status.status === 'success') {\n\t\t\tconsole.log(\n\t\t\t\tchalk.green(\n\t\t\t\t\t`${name} migrate world success, new world version is: ${newObjectContent.fields['version']}, package version is ${newVersion}`\n\t\t\t\t)\n\t\t\t);\n\t\t\tif (needRegisterSchema.length !== 0) {\n\t\t\t\tconsole.log(\n\t\t\t\t\tchalk.green(\n\t\t\t\t\t\t`new schema: ${needRegisterSchema.toString()} register success.`\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconsole.log(\n\t\t\t\tchalk.blue(\n\t\t\t\t\t`\\n${name} world schemas is ${newObjectContent.fields['schema_names']}`\n\t\t\t\t)\n\t\t\t);\n\t\t} else {\n\t\t\tconsole.log(\n\t\t\t\tchalk.red(\n\t\t\t\t\t`${name} migrate world failed, world version is: ${newObjectContent.fields['version']}, package version is ${newVersion}`\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t} catch (error: any) {\n\t\tconsole.log(chalk.red('Upgrade failed!'));\n\t\tconsole.error(error.message);\n\n\t\tsaveContractData(\n\t\t\tname,\n\t\t\tnetwork,\n\t\t\toldPackageId,\n\t\t\tworldId,\n\t\t\tupgradeCap,\n\t\t\tadminCap,\n\t\t\toldVersion\n\t\t);\n\t\tawait updateVersionInFile(projectPath, oldVersion.toString());\n\t}\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\",\n\n describe: \"Autogenerate Obelisk schemas based on the config file\",\n\n builder(yargs) {\n return yargs.options({\n configPath: {\n type: \"string\",\n default: \"obelisk.config.ts\",\n desc: \"Path to the config file\"\n },\n });\n },\n\n async handler({ configPath }) {\n try {\n const obeliskConfig = (await loadConfig(configPath)) as ObeliskConfig;\n await 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","Obelisk","requestSuiFromFaucetV0","getFaucetHost","SuiClient","getFullnodeUrl","Obelisk","Transaction","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","getUpgradeCap","saveContractData","projectName","network","packageId","schemas","upgradeCap","version","DeploymentData","path","storeDeploymentData","writeOutput","output","fullOutputPath","logPrefix","mkdirSync","dirname","writeFileSync","publishHandler","name","network","projectPath","privateKey","ObeliskCliError","privateKeyFormat","validatePrivateKey","keypair","Obelisk","client","SuiClient","getFullnodeUrl","modules","dependencies","extractedModules","extractedDependencies","execSync","error","chalk","tx","Transaction","upgradeCap","result","version","packageId","schemas","upgradeCapId","object","ms","resolve","deployHookTx","deployHookResult","saveContractData","Obelisk","Transaction","UpgradePolicy","getFullnodeUrl","SuiClient","execSync","chalk","upgradeHandler","name","network","schemaNames","path","projectPath","privateKey","ObeliskCliError","privateKeyFormat","validatePrivateKey","keypair","Obelisk","client","SuiClient","getFullnodeUrl","oldVersion","getVersion","oldPackageId","getOldPackageId","worldId","upgradeCap","getUpgradeCap","adminCap","newVersion","updateVersionInFile","modules","dependencies","digest","extractedModules","extractedDependencies","extractedDigest","execSync","error","UpgradeError","tx","Transaction","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","Obelisk","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.
|
|
3
|
+
"version": "0.5.16",
|
|
4
4
|
"description": "Tookit for interacting with move eps framework",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"sui",
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
34
|
"@0xobelisk/sui-client": "^0.5.23",
|
|
35
|
-
"@0xobelisk/sui-common": "^0.5.
|
|
35
|
+
"@0xobelisk/sui-common": "^0.5.15",
|
|
36
36
|
"@mysten/sui": "^1.7.0",
|
|
37
37
|
"chalk": "^5.0.1",
|
|
38
38
|
"child_process": "^1.0.2",
|
|
@@ -7,13 +7,17 @@ type Options = {
|
|
|
7
7
|
};
|
|
8
8
|
|
|
9
9
|
const commandModule: CommandModule<Options, Options> = {
|
|
10
|
-
command: "schemagen
|
|
10
|
+
command: "schemagen",
|
|
11
11
|
|
|
12
12
|
describe: "Autogenerate Obelisk schemas based on the config file",
|
|
13
13
|
|
|
14
14
|
builder(yargs) {
|
|
15
15
|
return yargs.options({
|
|
16
|
-
configPath: {
|
|
16
|
+
configPath: {
|
|
17
|
+
type: "string",
|
|
18
|
+
default: "obelisk.config.ts",
|
|
19
|
+
desc: "Path to the config file"
|
|
20
|
+
},
|
|
17
21
|
});
|
|
18
22
|
},
|
|
19
23
|
|
|
@@ -11,8 +11,9 @@ import { ObeliskCliError } from './errors';
|
|
|
11
11
|
import {
|
|
12
12
|
updateVersionInFile,
|
|
13
13
|
saveContractData,
|
|
14
|
-
validatePrivateKey,
|
|
14
|
+
validatePrivateKey, schema,
|
|
15
15
|
} from './utils';
|
|
16
|
+
import {log} from "node:util";
|
|
16
17
|
|
|
17
18
|
export async function publishHandler(
|
|
18
19
|
name: string,
|
|
@@ -97,21 +98,13 @@ in your contracts directory to use the default sui private key.`
|
|
|
97
98
|
|
|
98
99
|
let version = 1;
|
|
99
100
|
let packageId = '';
|
|
100
|
-
let
|
|
101
|
+
let schemas: schema[] = [];
|
|
101
102
|
let upgradeCapId = '';
|
|
102
|
-
let adminCapId = '';
|
|
103
103
|
result.objectChanges!.map(object => {
|
|
104
104
|
if (object.type === 'published') {
|
|
105
105
|
console.log(chalk.blue(`${name} PackageId: ${object.packageId}`));
|
|
106
106
|
packageId = object.packageId;
|
|
107
107
|
}
|
|
108
|
-
if (
|
|
109
|
-
object.type === 'created' &&
|
|
110
|
-
object.objectType.endsWith('::world::World')
|
|
111
|
-
) {
|
|
112
|
-
console.log(chalk.blue(`${name} WorldId: ${object.objectId}`));
|
|
113
|
-
worldId = object.objectId;
|
|
114
|
-
}
|
|
115
108
|
if (
|
|
116
109
|
object.type === 'created' &&
|
|
117
110
|
object.objectType === '0x2::package::UpgradeCap'
|
|
@@ -119,27 +112,10 @@ in your contracts directory to use the default sui private key.`
|
|
|
119
112
|
console.log(chalk.blue(`${name} UpgradeCap: ${object.objectId}`));
|
|
120
113
|
upgradeCapId = object.objectId;
|
|
121
114
|
}
|
|
122
|
-
if (
|
|
123
|
-
object.type === 'created' &&
|
|
124
|
-
object.objectType.endsWith('::world::AdminCap')
|
|
125
|
-
) {
|
|
126
|
-
console.log(chalk.blue(`${name} AdminCapId: ${object.objectId}`));
|
|
127
|
-
adminCapId = object.objectId;
|
|
128
|
-
}
|
|
129
115
|
});
|
|
130
116
|
|
|
131
117
|
console.log(chalk.green(`Publish transaction digest: ${result.digest}`));
|
|
132
118
|
|
|
133
|
-
saveContractData(
|
|
134
|
-
name,
|
|
135
|
-
network,
|
|
136
|
-
packageId,
|
|
137
|
-
worldId,
|
|
138
|
-
upgradeCapId,
|
|
139
|
-
adminCapId,
|
|
140
|
-
version
|
|
141
|
-
);
|
|
142
|
-
|
|
143
119
|
console.log('Executing the deployHook: ');
|
|
144
120
|
const delay = (ms: number) =>
|
|
145
121
|
new Promise(resolve => setTimeout(resolve, ms));
|
|
@@ -150,8 +126,8 @@ in your contracts directory to use the default sui private key.`
|
|
|
150
126
|
deployHookTx.moveCall({
|
|
151
127
|
target: `${packageId}::deploy_hook::run`,
|
|
152
128
|
arguments: [
|
|
153
|
-
deployHookTx.object(
|
|
154
|
-
deployHookTx.object(
|
|
129
|
+
deployHookTx.object("0xa66942c08d9fc318a70ab9d0cfd7e75f1a2dd1ac31aff12fde008d25bfa9604b"),
|
|
130
|
+
deployHookTx.object("0x6"),
|
|
155
131
|
],
|
|
156
132
|
});
|
|
157
133
|
|
|
@@ -162,6 +138,7 @@ in your contracts directory to use the default sui private key.`
|
|
|
162
138
|
transaction: deployHookTx,
|
|
163
139
|
options: {
|
|
164
140
|
showEffects: true,
|
|
141
|
+
showObjectChanges: true
|
|
165
142
|
},
|
|
166
143
|
});
|
|
167
144
|
} catch (error: any) {
|
|
@@ -180,6 +157,26 @@ in your contracts directory to use the default sui private key.`
|
|
|
180
157
|
`Successful auto-execution of deployHook, please check the transaction digest: ${deployHookResult.digest}`
|
|
181
158
|
)
|
|
182
159
|
);
|
|
160
|
+
deployHookResult.objectChanges?.map(object => {
|
|
161
|
+
if (
|
|
162
|
+
object.type === 'created' && object.objectType.includes("schema")
|
|
163
|
+
) {
|
|
164
|
+
console.log(chalk.blue(`${name} Schema Object id: ${object.objectId}`));
|
|
165
|
+
console.log(chalk.blue(`${name} Schema Object type: ${object.objectType}`));
|
|
166
|
+
schemas.push({
|
|
167
|
+
name: object.objectType,
|
|
168
|
+
objectId: object.objectId,
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
});
|
|
172
|
+
saveContractData(
|
|
173
|
+
name,
|
|
174
|
+
network,
|
|
175
|
+
packageId,
|
|
176
|
+
schemas,
|
|
177
|
+
upgradeCapId,
|
|
178
|
+
version
|
|
179
|
+
);
|
|
183
180
|
} else {
|
|
184
181
|
console.log(
|
|
185
182
|
chalk.yellow(
|
package/src/utils/utils.ts
CHANGED
|
@@ -4,13 +4,17 @@ import { dirname } from 'path';
|
|
|
4
4
|
import { SUI_PRIVATE_KEY_PREFIX } from '@mysten/sui/cryptography';
|
|
5
5
|
import { FsIibError } from './errors';
|
|
6
6
|
|
|
7
|
+
export type schema = {
|
|
8
|
+
name: string,
|
|
9
|
+
objectId: string
|
|
10
|
+
}
|
|
11
|
+
|
|
7
12
|
export type DeploymentJsonType = {
|
|
8
13
|
projectName: string;
|
|
9
14
|
network: 'mainnet' | 'testnet' | 'devnet' | 'localnet';
|
|
10
15
|
packageId: string;
|
|
11
|
-
|
|
16
|
+
schemas: schema[]
|
|
12
17
|
upgradeCap: string;
|
|
13
|
-
adminCap: string;
|
|
14
18
|
version: number;
|
|
15
19
|
};
|
|
16
20
|
|
|
@@ -94,14 +98,6 @@ export async function getOldPackageId(
|
|
|
94
98
|
return deployment.packageId;
|
|
95
99
|
}
|
|
96
100
|
|
|
97
|
-
export async function getWorldId(
|
|
98
|
-
projectPath: string,
|
|
99
|
-
network: string
|
|
100
|
-
): Promise<string> {
|
|
101
|
-
const deployment = await getDeploymentJson(projectPath, network);
|
|
102
|
-
return deployment.worldId;
|
|
103
|
-
}
|
|
104
|
-
|
|
105
101
|
export async function getUpgradeCap(
|
|
106
102
|
projectPath: string,
|
|
107
103
|
network: string
|
|
@@ -110,30 +106,29 @@ export async function getUpgradeCap(
|
|
|
110
106
|
return deployment.upgradeCap;
|
|
111
107
|
}
|
|
112
108
|
|
|
113
|
-
export async function
|
|
109
|
+
export async function getObjectIdBySchemaName(
|
|
114
110
|
projectPath: string,
|
|
115
|
-
network: string
|
|
116
|
-
|
|
111
|
+
network: string,
|
|
112
|
+
schemaName: string
|
|
113
|
+
): Promise<string | undefined> {
|
|
117
114
|
const deployment = await getDeploymentJson(projectPath, network);
|
|
118
|
-
return deployment.
|
|
115
|
+
return deployment.schemas.find((schema) => schema.name.includes(schemaName))?.objectId;
|
|
119
116
|
}
|
|
120
117
|
|
|
121
118
|
export function saveContractData(
|
|
122
119
|
projectName: string,
|
|
123
120
|
network: 'mainnet' | 'testnet' | 'devnet' | 'localnet',
|
|
124
121
|
packageId: string,
|
|
125
|
-
|
|
122
|
+
schemas: schema[],
|
|
126
123
|
upgradeCap: string,
|
|
127
|
-
adminCap: string,
|
|
128
124
|
version: number
|
|
129
125
|
) {
|
|
130
126
|
const DeploymentData: DeploymentJsonType = {
|
|
131
127
|
projectName,
|
|
132
128
|
network,
|
|
133
129
|
packageId,
|
|
134
|
-
|
|
130
|
+
schemas,
|
|
135
131
|
upgradeCap,
|
|
136
|
-
adminCap,
|
|
137
132
|
version,
|
|
138
133
|
};
|
|
139
134
|
|