From ed7e38d9ca2e2c556c681664084f0c049913385c Mon Sep 17 00:00:00 2001 From: vladilen11 Date: Thu, 16 Nov 2023 13:52:50 +0800 Subject: [PATCH] update obelisk version --- .env | 1 - .env.template | 1 + .gitignore | 1 + .../.history/sui_localnet/latest.json | 8 +- contracts/apocalypse/Move.lock | 8 +- contracts/apocalypse/Move.toml | 2 +- docker-compose.yaml | 29 ++++ obelisk.config.ts | 8 +- package.json | 10 +- pnpm-lock.yaml | 38 ++--- scripts/generateAccount.ts | 5 +- scripts/storeConfig.ts | 5 +- src/app/test.tsx | 17 +- src/chain/config.ts | 12 ++ src/utils/obelisk.ts | 2 +- src/utils/test.ts | 152 ++++++++++++------ 16 files changed, 195 insertions(+), 104 deletions(-) delete mode 100644 .env create mode 100644 .env.template create mode 100644 docker-compose.yaml create mode 100644 src/chain/config.ts diff --git a/.env b/.env deleted file mode 100644 index e308e60..0000000 --- a/.env +++ /dev/null @@ -1 +0,0 @@ -PRIVATE_KEY="" diff --git a/.env.template b/.env.template new file mode 100644 index 0000000..7b369e0 --- /dev/null +++ b/.env.template @@ -0,0 +1 @@ +PRIVATE_KEY= \ No newline at end of file diff --git a/.gitignore b/.gitignore index 053ebc3..b050ed1 100644 --- a/.gitignore +++ b/.gitignore @@ -39,3 +39,4 @@ next-env.d.ts # contract /contracts/*/build localnode* +.env diff --git a/contracts/apocalypse/.history/sui_localnet/latest.json b/contracts/apocalypse/.history/sui_localnet/latest.json index 4054644..003a2e5 100644 --- a/contracts/apocalypse/.history/sui_localnet/latest.json +++ b/contracts/apocalypse/.history/sui_localnet/latest.json @@ -1,9 +1,9 @@ { "projectName": "apocalypse", "network": "localnet", - "packageId": "0x6e38e5845a9a7bd49ddb89ecd020c38cf466f2257140df9da761d9ccf72102af", - "worldId": "0x1faf6070d6d7860cb035324dc7e76971bdeff30a52ed67839d2ab096ba902157", - "upgradeCap": "0x1756f49189013c9f5c085b757604bd12bdaf89f3b4b7dcbf8401176ddc7481bd", - "adminCap": "0x3449fefba4f6fb75689b0c19fdf9e9bf186f174f7c9ecc1706350488e1381596", + "packageId": "0x7e9e2cda7b0fabc11f5430917a24aee10ac39ce7ec1811779fe09247e9a61b79", + "worldId": "0x63bebe8ee185b0fb73f3791111c437fcf36f4ae0feb3ab0ae84a2774befbf099", + "upgradeCap": "0xdce758b8497163699b28b7f010b4a6f3ce9066fd17236e0a3884dab3cb2cd0b0", + "adminCap": "0xff9e76304202ad02f9f9ff6f6054bf412699d21c88ccb5d09a48b39c34c42ed7", "version": 1 } \ No newline at end of file diff --git a/contracts/apocalypse/Move.lock b/contracts/apocalypse/Move.lock index 61039ea..2a83e61 100644 --- a/contracts/apocalypse/Move.lock +++ b/contracts/apocalypse/Move.lock @@ -2,8 +2,8 @@ [move] version = 0 -manifest_digest = "33C4F45CEA7F19AC098F12E7C20C821BBDE1D20BF8BA3AA5A9E19E78ACD0FB5E" -deps_digest = "F8BBB0CCB2491CA29A3DF03D6F92277A4F3574266507ACD77214D37ECA3F3082" +manifest_digest = "626D8CFF4AE03E4D39347A9755DDEE0564B1CB0AFAB188B61D34F1695A37E487" +deps_digest = "112928C94A84031C09CD9B9D1D44B149B73FC0EEA5FA8D8B2D7CA4D91936335A" dependencies = [ { name = "Sui" }, @@ -11,11 +11,11 @@ dependencies = [ [[move.package]] name = "MoveStdlib" -source = { git = "https://github.com/MystenLabs/sui.git", rev = "framework/devnet", subdir = "crates/sui-framework/packages/move-stdlib" } +source = { git = "https://github.com/MystenLabs/sui.git", rev = "testnet-v1.8.0", subdir = "crates/sui-framework/packages/move-stdlib" } [[move.package]] name = "Sui" -source = { git = "https://github.com/MystenLabs/sui.git", rev = "framework/devnet", subdir = "crates/sui-framework/packages/sui-framework" } +source = { git = "https://github.com/MystenLabs/sui.git", rev = "testnet-v1.8.0", subdir = "crates/sui-framework/packages/sui-framework" } dependencies = [ { name = "MoveStdlib" }, diff --git a/contracts/apocalypse/Move.toml b/contracts/apocalypse/Move.toml index 516efb5..ed4bc87 100644 --- a/contracts/apocalypse/Move.toml +++ b/contracts/apocalypse/Move.toml @@ -3,7 +3,7 @@ name = "apocalypse" version = "0.0.1" [dependencies] -Sui = { git = "https://github.com/MystenLabs/sui.git", subdir = "crates/sui-framework/packages/sui-framework", rev = "framework/devnet" } +Sui = { git = "https://github.com/MystenLabs/sui.git", subdir = "crates/sui-framework/packages/sui-framework", rev = "testnet-v1.8.0" } [addresses] apocalypse = "0x0" diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 0000000..fd22e3c --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,29 @@ + +version: "3" + +services: + sui-test-validator-node: + image: vladilenaksana/sui-test-validator:v0.0.3 + restart: always + volumes: + - ./:/app + ports: + - 9000:9000 + - 9123:9123 + command: ["/opt/sui/bin/sui-test-validator", "--fullnode-rpc-addr", "0.0.0.0:9000", "--faucet-addr", "0.0.0.0:9123"] + healthcheck: + test: ["CMD", "curl", "-f", "http://sui-test-validator-node:9123"] + interval: 3s + timeout: 5s + retries: 10 + + # webapp: + # build: + # context: . + # dockerfile: ./Dockerfile + # ports: + # - 3000:3000 + # depends_on: + # "sui-test-validator-node": + # condition: service_healthy + # restart: always diff --git a/obelisk.config.ts b/obelisk.config.ts index 1c6dee0..6362bce 100644 --- a/obelisk.config.ts +++ b/obelisk.config.ts @@ -97,11 +97,11 @@ export const obeliskConfig = { value: "vector", }, defaultValue: { - sig: [""], - prev_sig: [""], + sig: [], + prev_sig: [], round: 0, - seed: [""], - value: [""], + seed: [], + value: [], }, }, }, diff --git a/package.json b/package.json index c404198..8514ba9 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,7 @@ "private": true, "scripts": { "dev": "next dev -p 9000", + "dev:docker": "pnpm obelisk hello && pnpm run localnode:docker && sleep 5 && ts-node scripts/generateAccount.ts && pnpm obelisk faucet --network localnet && pnpm obelisk publish --network localnet && ts-node scripts/storeConfig.ts localnet && next dev -p 3000", "build": "next build", "start": "next start", "lint": "next lint", @@ -18,15 +19,16 @@ "test-faucet": "obelisk faucet --network testnet", "main-faucet": "obelisk faucet --network mainnet", "generateAccount": "ts-node scripts/generateAccount.ts", + "localnode:docker": "docker-compose up -d", "test": "ts-node src/utils/test.ts" }, "dependencies": { - "@0xobelisk/cli": "^0.4.8", - "@0xobelisk/client": "^0.4.8", - "@0xobelisk/common": "^0.4.8", + "@0xobelisk/sui-cli": "^0.5.0", + "@0xobelisk/sui-client": "^0.5.3", + "@0xobelisk/sui-common": "^0.5.0", "@headlessui/react": "^1.7.17", + "@mysten/sui.js": "^0.41.0", "@mysten/dapp-kit": "^0.7.0", - "@mysten/sui.js": "^0.45.1", "@noble/hashes": "^1.3.2", "@tanstack/react-query": "^5.8.1", "dotenv": "^16.3.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 80fc0b4..2f4de9b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,15 +5,15 @@ settings: excludeLinksFromLockfile: false dependencies: - '@0xobelisk/cli': - specifier: ^0.4.8 - version: 0.4.8 - '@0xobelisk/client': - specifier: ^0.4.8 - version: 0.4.8(@mysten/sui.js@0.45.1) - '@0xobelisk/common': - specifier: ^0.4.8 - version: 0.4.8 + '@0xobelisk/sui-cli': + specifier: ^0.5.0 + version: 0.5.0 + '@0xobelisk/sui-client': + specifier: ^0.5.3 + version: 0.5.3(@mysten/sui.js@0.41.2) + '@0xobelisk/sui-common': + specifier: ^0.5.0 + version: 0.5.0 '@headlessui/react': specifier: ^1.7.17 version: 1.7.17(react-dom@18.2.0)(react@18.2.0) @@ -21,8 +21,8 @@ dependencies: specifier: ^0.7.0 version: 0.7.0(@tanstack/react-query@5.8.1)(@types/react-dom@18.2.15)(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0) '@mysten/sui.js': - specifier: ^0.45.1 - version: 0.45.1 + specifier: ^0.41.0 + version: 0.41.2 '@noble/hashes': specifier: ^1.3.2 version: 1.3.2 @@ -88,12 +88,12 @@ devDependencies: packages: - /@0xobelisk/cli@0.4.8: - resolution: {integrity: sha512-yz2VvOopiCl22JOMBxVvrN2d5386hFRnHlbIk2Maphua0Tgen9KhI3+KAegrWBilJxvEvGyF4N/f+j8Ce85MOA==} + /@0xobelisk/sui-cli@0.5.0: + resolution: {integrity: sha512-0hF7YOXyGL69KHOq0D4gxlcwC0REUBRE6eXjAEXcgpX9uthD6awHyBhsoq4ER5uIIWFEty6FuZ/D3Ai2NRFEGg==} engines: {node: '>=18'} hasBin: true dependencies: - '@0xobelisk/common': 0.4.8 + '@0xobelisk/sui-common': 0.5.0 '@mysten/sui.js': 0.41.2 chalk: 5.3.0 child_process: 1.0.2 @@ -114,14 +114,14 @@ packages: - utf-8-validate dev: false - /@0xobelisk/client@0.4.8(@mysten/sui.js@0.45.1): - resolution: {integrity: sha512-fZNEBlgz0eK52v3WHtL22UfLK+hA/2lYDz+EzdYSeN1dyAzSLDtkmU2LRIFWSW1Ez/X6AlZALaURcnRgPEAo7g==} + /@0xobelisk/sui-client@0.5.3(@mysten/sui.js@0.41.2): + resolution: {integrity: sha512-u8W12imwEI+3y6U8pVEYXqsUMzueG6TTnftl7JpaRUpMcDMfPDDIGAF3YeB/Gs61ciCbmBYaYJxK3kytEyLP2g==} engines: {node: '>=18'} peerDependencies: '@mysten/sui.js': ^0.41.0 dependencies: '@mysten/bcs': 0.7.4 - '@mysten/sui.js': 0.45.1 + '@mysten/sui.js': 0.41.2 '@scure/bip39': 1.2.1 assert: 2.1.0 colorts: 0.1.63 @@ -133,8 +133,8 @@ packages: ts-retry-promise: 0.7.1 dev: false - /@0xobelisk/common@0.4.8: - resolution: {integrity: sha512-nWjkHuoPZlE1qM43cDeXoLrQ8Nlsf8BkU8nVf2XlDT/wSNd6iDconjirp2qF7Rgihw3cvrIaq3W8FkSlHlSoEA==} + /@0xobelisk/sui-common@0.5.0: + resolution: {integrity: sha512-KHy24g0l6EaU4BYCpbZtbvq555nt/xN9ZQ/imcCukoZ0O11LosEus4pqVQoB/zK93EUoPmfZuVSGgHdvL1SV8g==} engines: {node: '>=18'} dependencies: '@mysten/sui.js': 0.41.2 diff --git a/scripts/generateAccount.ts b/scripts/generateAccount.ts index bd4682f..21f1c0e 100644 --- a/scripts/generateAccount.ts +++ b/scripts/generateAccount.ts @@ -1,6 +1,5 @@ -import { Ed25519Keypair } from "@mysten/sui.js/keypairs/ed25519"; -import { fromB64 } from "@mysten/sui.js/utils"; -import fs from "fs"; +import { Ed25519Keypair, fromB64 } from "@0xobelisk/sui-client"; +import * as fs from "fs"; function generateAccount() { const keypair = new Ed25519Keypair(); diff --git a/scripts/storeConfig.ts b/scripts/storeConfig.ts index 17266dd..d6c3645 100644 --- a/scripts/storeConfig.ts +++ b/scripts/storeConfig.ts @@ -41,7 +41,7 @@ export { } `; const path = process.cwd(); - writeOutput(code, `${path}/chain/${network}/config.ts`, "storeConfig"); + writeOutput(code, `${path}/src/chain/config.ts`, "storeConfig"); } async function writeOutput( @@ -62,8 +62,7 @@ async function main() { const network = process.argv[2]; const contractPath = `${path}/contracts/${obeliskConfig.name}`; const deployment = await getDeploymentJson(contractPath, network); - deployment && - storeConfig(deployment.network, deployment.packageId, deployment.worldId); + storeConfig(deployment!.network, deployment!.packageId, deployment!.worldId); } main(); diff --git a/src/app/test.tsx b/src/app/test.tsx index f427ffc..de59131 100644 --- a/src/app/test.tsx +++ b/src/app/test.tsx @@ -4,7 +4,7 @@ import { useSignAndExecuteTransactionBlock, } from "@mysten/dapp-kit"; import { SuiClient, getFullnodeUrl } from "@mysten/sui.js/client"; -import { TransactionBlock } from "@mysten/sui.js/transactions"; +import { TransactionBlock } from "@mysten/sui.js"; import { bcs } from "@mysten/sui.js/bcs"; import objectData from "@/utils/config"; @@ -47,25 +47,24 @@ export default function Test() { ); const txb = new TransactionBlock(); - const [coin] = txb.splitCoins(txb.gas, [100]); + const [coin] = txb.splitCoins(txb.gas, [txb.pure(100)]); const [prop, coin_] = txb.moveCall({ target: `${objectData.packageId}::pool_system::mint`, arguments: [ // txb.pure.u8('scissors'), txb.pure( - bcs - .vector(bcs.u8()) - .serialize( - Uint8Array.from( - Array.from("scissors").map((letter) => letter.charCodeAt(0)), - ), + bcs.ser( + "vector", + Uint8Array.from( + Array.from("scissors").map((letter) => letter.charCodeAt(0)), ), + ), ), coin, txb.object(objectData.world), ], }); - txb.transferObjects([prop, coin_], account.address); + txb.transferObjects([prop, coin_], txb.pure(account.address)); signAndExecuteTransactionBlock( { diff --git a/src/chain/config.ts b/src/chain/config.ts new file mode 100644 index 0000000..82b9d85 --- /dev/null +++ b/src/chain/config.ts @@ -0,0 +1,12 @@ +type NetworkType = 'testnet' | 'mainnet' | 'devnet' | 'localnet'; + +const NETWORK: NetworkType = 'localnet'; + +const PACKAGE_ID = '0x7e9e2cda7b0fabc11f5430917a24aee10ac39ce7ec1811779fe09247e9a61b79' +const WORLD_ID = '0x63bebe8ee185b0fb73f3791111c437fcf36f4ae0feb3ab0ae84a2774befbf099' + +export { + NETWORK, + PACKAGE_ID, + WORLD_ID, +} diff --git a/src/utils/obelisk.ts b/src/utils/obelisk.ts index b53748d..6f35e42 100644 --- a/src/utils/obelisk.ts +++ b/src/utils/obelisk.ts @@ -1,4 +1,4 @@ -import { loadMetadata, Obelisk } from "@0xobelisk/client"; +import { loadMetadata, Obelisk } from "@0xobelisk/sui-client"; import { NETWORK, PACKAGE_ID } from "../../chain/devnet/config"; const metadata = await loadMetadata(NETWORK, PACKAGE_ID); diff --git a/src/utils/test.ts b/src/utils/test.ts index a41817c..97bac87 100644 --- a/src/utils/test.ts +++ b/src/utils/test.ts @@ -1,56 +1,89 @@ -import { SuiClient, getFullnodeUrl } from "@mysten/sui.js/client"; -import { TransactionBlock } from "@mysten/sui.js/transactions"; -import { Ed25519Keypair } from "@mysten/sui.js/keypairs/ed25519"; -import { MIST_PER_SUI } from "@mysten/sui.js/utils"; +import { + TransactionBlock, + Ed25519Keypair, + MIST_PER_SUI, + Obelisk, + NetworkType, + loadMetadata, + fromB64, + TransactionResult, +} from "@0xobelisk/sui-client"; + import { hexToBytes } from "@noble/hashes/utils"; import "dotenv/config"; import objectData from "./config"; -import { bcs } from "@mysten/sui.js/bcs"; -const rpcUrl = getFullnodeUrl("devnet"); -const client = new SuiClient({ url: rpcUrl }); +const network = "devnet" as NetworkType; const privateKey = hexToBytes(process.env.PRIVATE_KEY as string); const keypair = Ed25519Keypair.fromSecretKey(privateKey); + +const privateKeyU8 = fromB64(keypair.export().privateKey); +const privateKeyHex = Buffer.from(privateKeyU8).toString("hex"); + const address = keypair.toSuiAddress(); +const metadata = await loadMetadata(network, objectData.packageId); +const obelisk = new Obelisk({ + networkType: network, + packageId: objectData.packageId, + metadata: metadata, + secretKey: privateKeyHex, +}); + console.log(`Address: ${address}`); const SCISSORS = new TextEncoder().encode("scissors"); // ASCII values for "scissors" const ROCK = new TextEncoder().encode("rock"); // ASCII values for "rock" const PAPER = new TextEncoder().encode("paper"); // ASCII values for "paper" -function mint(param: { scissors: number; rock: number; paper: number }) { +async function mint(param: { scissors: number; rock: number; paper: number }) { const list = Object.entries(param); const txb = new TransactionBlock(); - list.forEach(([key, value]) => { + list.forEach(async ([key, value]) => { for (let i = 0; i < value; i++) { - const [coin] = txb.splitCoins(txb.gas, [2n * MIST_PER_SUI]); - const [prop, coin_] = txb.moveCall({ - target: `${objectData.packageId}::pool_system::mint`, - arguments: [txb.pure.string(key), coin, txb.object(objectData.world)], - }); - txb.transferObjects([prop, coin_], address); + const [coin] = txb.splitCoins(txb.gas, [txb.pure(2n * MIST_PER_SUI)]); + // const [prop, coin_] = txb.moveCall({ + // target: `${objectData.packageId}::pool_system::mint`, + // arguments: [txb.pure(key), coin, txb.object(objectData.world)], + // }); + const params = [txb.pure(key), coin, txb.object(objectData.world)]; + const [prop, coin_] = (await obelisk.tx.pool_system.mint( + txb, + params, + undefined, + true, + )) as TransactionResult; + txb.transferObjects([prop, coin_], txb.pure(address)); } }); return txb; } -function burn() { +async function burn() { const txb = new TransactionBlock(); - const coin = txb.moveCall({ - target: `${objectData.packageId}::pool_system::burn`, - arguments: [ - txb.object( - "0x0d892ba7878c3b1efeb6a098cf16d1720b16f716d8b6b23ec7c14728a9e156b5", - ), - txb.object(objectData.pool), - txb.object(objectData.world), - ], - }); - txb.transferObjects([coin], address); + const params = [ + txb.object( + "0x0d892ba7878c3b1efeb6a098cf16d1720b16f716d8b6b23ec7c14728a9e156b5", + ), + txb.object(objectData.pool), + txb.object(objectData.world), + ]; + + const coin = (await obelisk.tx.pool_system.burn( + txb, + params, + undefined, + true, + )) as TransactionResult; + + // const coin = txb.moveCall({ + // target: `${objectData.packageId}::pool_system::burn`, + // arguments: + // }); + txb.transferObjects([coin], txb.pure(address)); return txb; } @@ -69,30 +102,50 @@ function stake() { ), ], }); - txb.moveCall({ - target: `${objectData.packageId}::pool_system::stake`, - arguments: [ - props, - txb.pure(address), - txb.object(objectData.pool), - txb.object(objectData.world), - ], - }); + // txb.moveCall({ + // target: `${objectData.packageId}::pool_system::stake`, + // arguments: [ + // props, + // txb.pure(address), + // txb.object(objectData.pool), + // txb.object(objectData.world), + // ], + // }); + + const params = [ + props, + txb.pure(address), + txb.object(objectData.pool), + txb.object(objectData.world), + ]; + obelisk.tx.pool_system.stake(txb, params, undefined, true); + return txb; } function unstake() { const txb = new TransactionBlock(); - txb.moveCall({ - target: `${objectData.packageId}::pool_system::unstake`, - arguments: [ - txb.pure([ - "0x0d892ba7878c3b1efeb6a098cf16d1720b16f716d8b6b23ec7c14728a9e156b5", - ]), - txb.object(objectData.pool), - txb.object(objectData.world), - ], - }); + // txb.moveCall({ + // target: `${objectData.packageId}::pool_system::unstake`, + // arguments: [ + // txb.pure([ + // "0x0d892ba7878c3b1efeb6a098cf16d1720b16f716d8b6b23ec7c14728a9e156b5", + // ]), + // txb.object(objectData.pool), + // txb.object(objectData.world), + // ], + // }); + + const params = [ + txb.pure([ + "0x0d892ba7878c3b1efeb6a098cf16d1720b16f716d8b6b23ec7c14728a9e156b5", + ]), + txb.object(objectData.pool), + txb.object(objectData.world), + ]; + + obelisk.tx.pool_system.unstake(txb, params, undefined, true); + return txb; } @@ -103,7 +156,7 @@ async function main() { // paper: 1, // }); - const txb = burn(); + const txb = await burn(); // const txb = stake(); @@ -114,10 +167,7 @@ async function main() { // sender: address, // }); - const res = await client.signAndExecuteTransactionBlock({ - transactionBlock: txb, - signer: keypair, - }); + const res = await obelisk.signAndSendTxn(txb); console.log(res); }