cyberia 3.2.5 → 3.2.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/engine-cyberia.cd.yml +2 -2
- package/.github/workflows/release.cd.yml +1 -2
- package/CHANGELOG.md +351 -1
- package/CLI-HELP.md +40 -13
- package/Dockerfile +0 -4
- package/README.md +242 -497
- package/bin/build.js +19 -5
- package/bin/cyberia.js +1149 -240
- package/bin/deploy.js +570 -1
- package/bin/file.js +6 -0
- package/bin/index.js +1149 -240
- package/bin/vs.js +1 -1
- package/conf.js +67 -89
- package/deployment.yaml +4 -222
- package/hardhat/package-lock.json +32 -32
- package/hardhat/package.json +3 -3
- package/jsconfig.json +1 -1
- package/manifests/cronjobs/dd-cron/dd-cron-backup.yaml +2 -2
- package/manifests/cronjobs/dd-cron/dd-cron-dns.yaml +2 -2
- package/manifests/deployment/dd-cyberia-development/deployment.yaml +4 -222
- package/manifests/deployment/dd-cyberia-development/proxy.yaml +10 -118
- package/manifests/deployment/dd-default-development/deployment.yaml +2 -6
- package/manifests/deployment/dd-test-development/deployment.yaml +136 -66
- package/manifests/deployment/dd-test-development/proxy.yaml +41 -5
- package/package.json +23 -14
- package/proxy.yaml +10 -118
- package/scripts/k3s-node-setup.sh +2 -2
- package/scripts/nat-iptables.sh +103 -18
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.controller.js +18 -18
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.model.js +7 -14
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.service.js +76 -21
- package/src/api/core/core.controller.js +10 -10
- package/src/api/core/core.service.js +10 -10
- package/src/api/crypto/crypto.controller.js +8 -8
- package/src/api/crypto/crypto.service.js +8 -8
- package/src/api/cyberia-action/cyberia-action.controller.js +74 -0
- package/src/api/cyberia-action/cyberia-action.model.js +87 -0
- package/src/api/cyberia-action/cyberia-action.router.js +27 -0
- package/src/api/cyberia-action/cyberia-action.service.js +42 -0
- package/src/api/cyberia-dialogue/cyberia-dialogue.controller.js +13 -13
- package/src/api/cyberia-dialogue/cyberia-dialogue.model.js +11 -11
- package/src/api/cyberia-dialogue/cyberia-dialogue.router.js +2 -2
- package/src/api/cyberia-dialogue/cyberia-dialogue.service.js +16 -16
- package/src/api/cyberia-entity/cyberia-entity.controller.js +10 -10
- package/src/api/cyberia-entity/cyberia-entity.service.js +10 -10
- package/src/api/cyberia-instance/cyberia-fallback-world.js +19 -209
- package/src/api/cyberia-instance/cyberia-instance.controller.js +14 -14
- package/src/api/cyberia-instance/cyberia-instance.model.js +3 -0
- package/src/api/cyberia-instance/cyberia-instance.service.js +22 -57
- package/src/api/cyberia-instance/cyberia-portal-connector.js +20 -246
- package/src/api/cyberia-instance/cyberia-world-generator.js +505 -0
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.controller.js +10 -10
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.defaults.js +216 -55
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.model.js +4 -1
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.service.js +18 -14
- package/src/api/cyberia-map/cyberia-map.controller.js +10 -10
- package/src/api/cyberia-map/cyberia-map.service.js +10 -10
- package/src/api/cyberia-quest/cyberia-quest.controller.js +74 -0
- package/src/api/cyberia-quest/cyberia-quest.model.js +67 -0
- package/src/api/cyberia-quest/cyberia-quest.router.js +27 -0
- package/src/api/cyberia-quest/cyberia-quest.service.js +42 -0
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.controller.js +74 -0
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.model.js +49 -0
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.router.js +27 -0
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.service.js +42 -0
- package/src/api/default/default.controller.js +10 -10
- package/src/api/default/default.service.js +10 -10
- package/src/api/document/document.controller.js +12 -12
- package/src/api/document/document.model.js +10 -16
- package/src/api/file/file.controller.js +8 -8
- package/src/api/file/file.model.js +10 -10
- package/src/api/file/file.service.js +36 -36
- package/src/api/instance/instance.controller.js +10 -10
- package/src/api/instance/instance.model.js +4 -10
- package/src/api/instance/instance.service.js +10 -10
- package/src/api/ipfs/ipfs.controller.js +12 -12
- package/src/api/ipfs/ipfs.model.js +4 -13
- package/src/api/ipfs/ipfs.service.js +14 -28
- package/src/api/object-layer/object-layer.controller.js +12 -12
- package/src/api/object-layer/object-layer.model.js +4 -17
- package/src/api/object-layer/object-layer.service.js +12 -12
- package/src/api/object-layer-render-frames/object-layer-render-frames.controller.js +10 -10
- package/src/api/object-layer-render-frames/object-layer-render-frames.model.js +6 -16
- package/src/api/object-layer-render-frames/object-layer-render-frames.service.js +18 -14
- package/src/api/test/test.controller.js +8 -8
- package/src/api/test/test.service.js +8 -8
- package/src/api/user/guest.service.js +99 -0
- package/src/api/user/user.controller.js +6 -6
- package/src/api/user/user.model.js +8 -13
- package/src/api/user/user.service.js +3 -20
- package/src/cli/cluster.js +61 -14
- package/src/cli/db.js +47 -2
- package/src/cli/deploy.js +67 -35
- package/src/cli/fs.js +79 -8
- package/src/cli/image.js +43 -1
- package/src/cli/index.js +26 -1
- package/src/cli/release.js +57 -1
- package/src/cli/repository.js +69 -31
- package/src/cli/run.js +415 -36
- package/src/cli/ssh.js +1 -1
- package/src/cli/static.js +43 -115
- package/src/client/Cryptokoyn.index.js +18 -21
- package/src/client/CyberiaPortal.index.js +19 -23
- package/src/client/Default.index.js +21 -33
- package/src/client/Itemledger.index.js +20 -26
- package/src/client/Underpost.index.js +19 -23
- package/src/client/components/core/404.js +4 -4
- package/src/client/components/core/500.js +4 -4
- package/src/client/components/core/Account.js +73 -60
- package/src/client/components/core/AgGrid.js +23 -33
- package/src/client/components/core/Alert.js +12 -13
- package/src/client/components/core/AppStore.js +1 -1
- package/src/client/components/core/Auth.js +35 -37
- package/src/client/components/core/Badge.js +7 -13
- package/src/client/components/core/BtnIcon.js +15 -17
- package/src/client/components/core/CalendarCore.js +42 -63
- package/src/client/components/core/Chat.js +13 -15
- package/src/client/components/core/ClientEvents.js +87 -0
- package/src/client/components/core/ColorPaletteElement.js +309 -0
- package/src/client/components/core/Content.js +17 -14
- package/src/client/components/core/Css.js +15 -71
- package/src/client/components/core/CssCore.js +12 -16
- package/src/client/components/core/D3Chart.js +4 -4
- package/src/client/components/core/Docs.js +64 -91
- package/src/client/components/core/DropDown.js +69 -91
- package/src/client/components/core/EventBus.js +92 -0
- package/src/client/components/core/EventsUI.js +14 -17
- package/src/client/components/core/FileExplorer.js +96 -228
- package/src/client/components/core/FullScreen.js +47 -75
- package/src/client/components/core/Input.js +24 -69
- package/src/client/components/core/Keyboard.js +25 -18
- package/src/client/components/core/KeyboardAvoidance.js +145 -0
- package/src/client/components/core/LoadingAnimation.js +25 -31
- package/src/client/components/core/LogIn.js +41 -41
- package/src/client/components/core/LogOut.js +23 -14
- package/src/client/components/core/Modal.js +462 -178
- package/src/client/components/core/NotificationManager.js +14 -18
- package/src/client/components/core/Panel.js +54 -50
- package/src/client/components/core/PanelForm.js +25 -125
- package/src/client/components/core/Polyhedron.js +110 -214
- package/src/client/components/core/PublicProfile.js +39 -32
- package/src/client/components/core/Recover.js +48 -44
- package/src/client/components/core/Responsive.js +88 -32
- package/src/client/components/core/RichText.js +9 -18
- package/src/client/components/core/Router.js +24 -3
- package/src/client/components/core/SearchBox.js +37 -37
- package/src/client/components/core/SignUp.js +39 -30
- package/src/client/components/core/SocketIo.js +31 -2
- package/src/client/components/core/SocketIoHandler.js +6 -6
- package/src/client/components/core/ToggleSwitch.js +8 -20
- package/src/client/components/core/ToolTip.js +5 -17
- package/src/client/components/core/Translate.js +56 -59
- package/src/client/components/core/Validator.js +26 -16
- package/src/client/components/core/Wallet.js +15 -26
- package/src/client/components/core/Worker.js +163 -27
- package/src/client/components/core/windowGetDimensions.js +7 -7
- package/src/client/components/cryptokoyn/{MenuCryptokoyn.js → AppShellCryptokoyn.js} +57 -57
- package/src/client/components/cryptokoyn/CssCryptokoyn.js +15 -15
- package/src/client/components/cryptokoyn/LogInCryptokoyn.js +6 -4
- package/src/client/components/cryptokoyn/LogOutCryptokoyn.js +6 -4
- package/src/client/components/cryptokoyn/RouterCryptokoyn.js +37 -0
- package/src/client/components/cryptokoyn/SettingsCryptokoyn.js +4 -4
- package/src/client/components/cryptokoyn/SignUpCryptokoyn.js +6 -4
- package/src/client/components/cyberia/InstanceEngineCyberia.js +141 -60
- package/src/client/components/cyberia/MapEngineCyberia.js +691 -214
- package/src/client/components/cyberia/ObjectLayerEngine.js +19 -0
- package/src/client/components/cyberia/ObjectLayerEngineModal.js +1204 -94
- package/src/client/components/cyberia/ObjectLayerEngineViewer.js +196 -298
- package/src/client/components/cyberia-portal/{MenuCyberiaPortal.js → AppShellCyberiaPortal.js} +102 -102
- package/src/client/components/cyberia-portal/CommonCyberiaPortal.js +305 -61
- package/src/client/components/cyberia-portal/CssCyberiaPortal.js +15 -15
- package/src/client/components/cyberia-portal/LogInCyberiaPortal.js +6 -4
- package/src/client/components/cyberia-portal/LogOutCyberiaPortal.js +6 -4
- package/src/client/components/cyberia-portal/MainBodyCyberiaPortal.js +4 -4
- package/src/client/components/cyberia-portal/RouterCyberiaPortal.js +60 -0
- package/src/client/components/cyberia-portal/SettingsCyberiaPortal.js +4 -4
- package/src/client/components/cyberia-portal/SignUpCyberiaPortal.js +6 -4
- package/src/client/components/cyberia-portal/TranslateCyberiaPortal.js +4 -4
- package/src/client/components/default/{MenuDefault.js → AppShellDefault.js} +87 -87
- package/src/client/components/default/CssDefault.js +12 -12
- package/src/client/components/default/LogInDefault.js +6 -4
- package/src/client/components/default/LogOutDefault.js +6 -4
- package/src/client/components/default/RouterDefault.js +47 -0
- package/src/client/components/default/SettingsDefault.js +4 -4
- package/src/client/components/default/SignUpDefault.js +6 -4
- package/src/client/components/default/TranslateDefault.js +3 -3
- package/src/client/components/itemledger/{MenuItemledger.js → AppShellItemledger.js} +57 -57
- package/src/client/components/itemledger/CssItemledger.js +15 -15
- package/src/client/components/itemledger/LogInItemledger.js +6 -4
- package/src/client/components/itemledger/LogOutItemledger.js +6 -4
- package/src/client/components/itemledger/RouterItemledger.js +38 -0
- package/src/client/components/itemledger/SettingsItemledger.js +4 -4
- package/src/client/components/itemledger/SignUpItemledger.js +6 -4
- package/src/client/components/itemledger/TranslateItemledger.js +3 -3
- package/src/client/components/underpost/{MenuUnderpost.js → AppShellUnderpost.js} +88 -88
- package/src/client/components/underpost/CssUnderpost.js +14 -14
- package/src/client/components/underpost/CyberpunkBloggerUnderpost.js +4 -4
- package/src/client/components/underpost/DocumentSearchProvider.js +1 -1
- package/src/client/components/underpost/LabGalleryUnderpost.js +12 -15
- package/src/client/components/underpost/LogInUnderpost.js +6 -4
- package/src/client/components/underpost/LogOutUnderpost.js +6 -4
- package/src/client/components/underpost/RouterUnderpost.js +45 -0
- package/src/client/components/underpost/SettingsUnderpost.js +4 -4
- package/src/client/components/underpost/SignUpUnderpost.js +6 -4
- package/src/client/components/underpost/TranslateUnderpost.js +4 -4
- package/src/client/public/cyberia-docs/ACTION-SYSTEM.md +235 -0
- package/src/client/public/cyberia-docs/ARCHITECTURE.md +443 -0
- package/src/client/public/cyberia-docs/CYBERIA-CLI.md +417 -0
- package/src/client/public/cyberia-docs/CYBERIA-CLIENT.md +313 -0
- package/src/client/public/cyberia-docs/CYBERIA-SERVER.md +260 -0
- package/src/client/public/cyberia-docs/ENTITY-PROFILE.md +241 -0
- package/src/client/public/cyberia-docs/HARDHAT-MODULE.md +300 -0
- package/src/client/public/cyberia-docs/OFF-CHAIN-ECONOMY.md +279 -0
- package/src/client/public/cyberia-docs/QUEST-SYSTEM.md +206 -0
- package/src/client/public/cyberia-docs/ROADMAP.md +240 -0
- package/src/client/public/cyberia-docs/WHITE-PAPER.md +732 -0
- package/src/client/services/atlas-sprite-sheet/atlas-sprite-sheet.service.js +14 -20
- package/src/client/services/core/core.service.js +17 -49
- package/src/client/services/crypto/crypto.service.js +8 -13
- package/src/client/services/cyberia-action/cyberia-action.service.js +99 -0
- package/src/client/services/cyberia-dialogue/cyberia-dialogue.service.js +10 -16
- package/src/client/services/cyberia-entity/cyberia-entity.management.js +5 -5
- package/src/client/services/cyberia-entity/cyberia-entity.service.js +10 -16
- package/src/client/services/cyberia-instance/cyberia-instance.management.js +6 -6
- package/src/client/services/cyberia-instance/cyberia-instance.service.js +12 -18
- package/src/client/services/cyberia-instance-conf/cyberia-instance-conf.service.js +10 -16
- package/src/client/services/cyberia-map/cyberia-map.management.js +6 -6
- package/src/client/services/cyberia-map/cyberia-map.service.js +12 -18
- package/src/client/services/cyberia-quest/cyberia-quest.service.js +99 -0
- package/src/client/services/cyberia-quest-progress/cyberia-quest-progress.service.js +99 -0
- package/src/client/services/default/default.management.js +159 -267
- package/src/client/services/default/default.service.js +10 -16
- package/src/client/services/document/document.service.js +14 -19
- package/src/client/services/file/file.service.js +8 -13
- package/src/client/services/instance/instance.management.js +5 -5
- package/src/client/services/instance/instance.service.js +10 -15
- package/src/client/services/ipfs/ipfs.service.js +12 -18
- package/src/client/services/object-layer/object-layer.management.js +12 -12
- package/src/client/services/object-layer/object-layer.service.js +20 -26
- package/src/client/services/object-layer-render-frames/object-layer-render-frames.service.js +10 -16
- package/src/client/services/test/test.service.js +8 -13
- package/src/client/services/user/guest.service.js +86 -0
- package/src/client/services/user/user.management.js +5 -5
- package/src/client/services/user/user.service.js +14 -20
- package/src/client/ssr/body/404.js +3 -3
- package/src/client/ssr/body/500.js +3 -3
- package/src/client/ssr/body/CacheControl.js +5 -2
- package/src/client/ssr/body/DefaultSplashScreen.js +19 -12
- package/src/client/ssr/body/UnderpostDefaultSplashScreen.js +13 -6
- package/src/client/ssr/head/PwaItemledger.js +197 -60
- package/src/client/ssr/mailer/DefaultRecoverEmail.js +19 -20
- package/src/client/ssr/mailer/DefaultVerifyEmail.js +15 -16
- package/src/client/ssr/offline/Maintenance.js +12 -11
- package/src/client/ssr/offline/NoNetworkConnection.js +3 -3
- package/src/client/ssr/pages/Test.js +2 -2
- package/src/client/sw/core.sw.js +212 -0
- package/src/grpc/cyberia/grpc-server.js +179 -67
- package/src/index.js +1 -1
- package/src/runtime/cyberia-client/Dockerfile +80 -0
- package/src/runtime/cyberia-server/Dockerfile +37 -0
- package/src/runtime/express/Dockerfile +4 -4
- package/src/runtime/lampp/Dockerfile +8 -7
- package/src/runtime/wp/Dockerfile +11 -17
- package/src/server/atlas-sprite-sheet-generator.js +4 -2
- package/src/server/client-build-docs.js +45 -46
- package/src/server/client-build.js +334 -60
- package/src/server/client-formatted.js +47 -16
- package/src/server/conf.js +5 -4
- package/src/server/data-query.js +32 -20
- package/src/server/dns.js +22 -0
- package/src/server/ipfs-client.js +232 -91
- package/src/server/object-layer.js +1 -6
- package/src/server/process.js +13 -27
- package/src/server/semantic-layer-generator-floor.js +11 -51
- package/src/server/semantic-layer-generator-resource.js +259 -0
- package/src/server/semantic-layer-generator-skin.js +41 -171
- package/src/server/semantic-layer-generator.js +122 -14
- package/src/server/shape-generator.js +108 -0
- package/src/server/start.js +17 -3
- package/src/server/valkey.js +141 -235
- package/tsconfig.docs.json +15 -0
- package/typedoc.dd-cyberia.json +29 -0
- package/typedoc.json +29 -0
- package/WHITE-PAPER.md +0 -1540
- package/hardhat/README.md +0 -531
- package/hardhat/WHITE-PAPER.md +0 -1540
- package/jsdoc.dd-cyberia.json +0 -68
- package/jsdoc.json +0 -68
- package/src/api/object-layer/README.md +0 -672
- package/src/client/components/core/ColorPalette.js +0 -5267
- package/src/client/components/core/JoyStick.js +0 -80
- package/src/client/components/cryptokoyn/RoutesCryptokoyn.js +0 -39
- package/src/client/components/cyberia-portal/RoutesCyberiaPortal.js +0 -62
- package/src/client/components/cyberia-portal/ServerCyberiaPortal.js +0 -136
- package/src/client/components/default/RoutesDefault.js +0 -49
- package/src/client/components/itemledger/RoutesItemledger.js +0 -40
- package/src/client/components/underpost/RoutesUnderpost.js +0 -47
- package/src/client/sw/default.sw.js +0 -127
- package/src/client/sw/template.sw.js +0 -84
- package/src/grpc/cyberia/OFF_CHAIN_ECONOMY.md +0 -305
- package/src/grpc/cyberia/README.md +0 -326
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
# Entity Profile
|
|
2
|
+
|
|
3
|
+
**Module:** `src/api/cyberia-entity` · `src/api/cyberia-instance-conf`
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Overview
|
|
8
|
+
|
|
9
|
+
An **Entity** is any object in the Cyberia Online game world — players, bots, NPCs, resource nodes, terrain tiles, portals, and skill-spawned projectiles. Every entity is represented as an ordered stack of **Object Layer** item IDs, a position on the grid, a type discriminator, and a runtime state.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## CyberiaEntity Schema (MongoDB)
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
CyberiaEntity {
|
|
17
|
+
entityType: String // see Entity Type Registry below
|
|
18
|
+
initCellX: Number // initial grid column
|
|
19
|
+
initCellY: Number // initial grid row
|
|
20
|
+
dimX: Number // width in cells (default: 1)
|
|
21
|
+
dimY: Number // height in cells (default: 1)
|
|
22
|
+
color: String // RGBA fallback color (no active OL texture)
|
|
23
|
+
objectLayerItemIds: [String] // ordered list of ObjectLayer item IDs
|
|
24
|
+
|
|
25
|
+
// Bot-specific (ignored for non-bot entities)
|
|
26
|
+
spawnRadius: Number // max wander / respawn radius in cells
|
|
27
|
+
aggroRange: Number // attack range in cells (0 = passive)
|
|
28
|
+
maxLife: Number // maximum HP (0 = immortal)
|
|
29
|
+
lifeRegen: Number // HP regeneration per tick
|
|
30
|
+
}
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## Entity Type Registry
|
|
36
|
+
|
|
37
|
+
| `entityType` | Behavior | Map-placed | Description |
|
|
38
|
+
| -------------- | --------------------- | ---------- | ----------------------------------------------------- |
|
|
39
|
+
| `player` | interactive | no | Local (self) player |
|
|
40
|
+
| `other_player` | interactive | no | Remote players in AOI |
|
|
41
|
+
| `bot` | `hostile` / `passive` | yes | AI-controlled bot |
|
|
42
|
+
| `skill` | `skill` | no | Runtime-spawned projectile (created by skill system) |
|
|
43
|
+
| `coin` | `coin` | no | Runtime-spawned collectible (dropped on entity death) |
|
|
44
|
+
| `floor` | static | yes | Terrain tile (walkable) |
|
|
45
|
+
| `obstacle` | static | yes | Collision tile (blocks movement) |
|
|
46
|
+
| `portal` | static | yes | Zone transition trigger |
|
|
47
|
+
| `foreground` | static | yes | Foreground decoration layer |
|
|
48
|
+
| `resource` | extractable | yes | Exploitable world object (drops items on extraction) |
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## Runtime PlayerState (Go)
|
|
53
|
+
|
|
54
|
+
```go
|
|
55
|
+
type PlayerState struct {
|
|
56
|
+
ID string // Go server player UUID
|
|
57
|
+
MapCode string // current map
|
|
58
|
+
Pos Point // world position (float64 X, Y)
|
|
59
|
+
Dims Dimensions // entity size
|
|
60
|
+
Color ColorRGBA // fallback solid color
|
|
61
|
+
Direction Direction // UP, UP_RIGHT, RIGHT, DOWN_RIGHT, DOWN, DOWN_LEFT, LEFT, UP_LEFT, NONE
|
|
62
|
+
Mode ObjectLayerMode // IDLE, WALKING, TELEPORTING
|
|
63
|
+
ObjectLayers []ObjectLayerState // active OL stack: { ItemID, Active, Quantity }
|
|
64
|
+
MaxLife float64
|
|
65
|
+
Life float64
|
|
66
|
+
LifeRegen float64
|
|
67
|
+
Coins uint32 // flat coin balance (single source of truth)
|
|
68
|
+
Frozen bool // FrozenInteractionState active
|
|
69
|
+
FreezeReason string // "dialogue" | "inventory" | ...
|
|
70
|
+
Path []PointI // A* path (for smooth movement)
|
|
71
|
+
AOI Rectangle // current area-of-interest bounds
|
|
72
|
+
SumStatsLimit int // max aggregate stat sum (equipment rules)
|
|
73
|
+
}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## ObjectLayer State
|
|
79
|
+
|
|
80
|
+
Each entity carries an ordered stack of `ObjectLayerState` entries:
|
|
81
|
+
|
|
82
|
+
```go
|
|
83
|
+
type ObjectLayerState struct {
|
|
84
|
+
ItemID string // references ObjectLayer.data.item.id
|
|
85
|
+
Active bool // equipped/activated (only activable types can be true)
|
|
86
|
+
Quantity int // inventory quantity (for stackable items)
|
|
87
|
+
}
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
The **active layers** determine the entity's rendered appearance and mechanical stats. The `Active` field is managed by the equipment rules.
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
## Equipment Rules
|
|
95
|
+
|
|
96
|
+
Equipment rules govern which item types may be simultaneously active on a character:
|
|
97
|
+
|
|
98
|
+
```javascript
|
|
99
|
+
EQUIPMENT_RULES_DEFAULTS = {
|
|
100
|
+
activeItemTypes: ['skin', 'breastplate', 'weapon'], // only these types may be activated
|
|
101
|
+
onePerType: true, // at most one active item per type
|
|
102
|
+
requireSkin: true, // player must always have an active skin if they own any
|
|
103
|
+
};
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
**Validation on `item_activation` request:**
|
|
107
|
+
|
|
108
|
+
1. Reject if `item.type` not in `activeItemTypes`.
|
|
109
|
+
2. If `onePerType`, deactivate any currently active item of the same type before activating the new one.
|
|
110
|
+
3. If `requireSkin`, ensure a skin remains active after the change.
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## Z-Order Rendering
|
|
115
|
+
|
|
116
|
+
The C client composites layers bottom-to-top by `item.type`:
|
|
117
|
+
|
|
118
|
+
```
|
|
119
|
+
z-order type
|
|
120
|
+
────── ───────────────────
|
|
121
|
+
0 floor / obstacle / portal / foreground
|
|
122
|
+
1 skin (base character body)
|
|
123
|
+
2 breastplate (armor overlay)
|
|
124
|
+
3 weapon (weapon overlay)
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
`get_priority_for_type()` in `entity_render.c` maps item type → z-order integer. Multiple layers of the same type are rendered in declared order within that z-level.
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## Stat Aggregation
|
|
132
|
+
|
|
133
|
+
Stats are aggregated across all **active** Object Layers on an entity. The server enforces a `sumStatsLimit` — the maximum sum of all stat values allowed for the player. Attempting to equip items that would exceed this limit is rejected.
|
|
134
|
+
|
|
135
|
+
**Active stats sum:**
|
|
136
|
+
|
|
137
|
+
$$\text{activeStatsSum} = \sum_{\text{active layers}} (\text{effect} + \text{resistance} + \text{agility} + \text{range} + \text{intelligence} + \text{utility})$$
|
|
138
|
+
|
|
139
|
+
The `sumStatsLimit` and `activeStatsSum` are sent to the client on each AOI update so the inventory UI can show remaining equip budget.
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
143
|
+
## Entity Status Indicator (ESI)
|
|
144
|
+
|
|
145
|
+
The Go server computes a status `u8` per entity each AOI tick. The C client renders the corresponding icon above the entity nameplate.
|
|
146
|
+
|
|
147
|
+
```go
|
|
148
|
+
// Status constants (entity_status.go) — MUST stay in sync with JS STATUS_ICONS array
|
|
149
|
+
StatusNone = 0 // skill/coin bots, world objects
|
|
150
|
+
StatusPassive = 1 // passive bot
|
|
151
|
+
StatusHostile = 2 // hostile bot
|
|
152
|
+
StatusFrozen = 3 // player in FrozenInteractionState
|
|
153
|
+
StatusPlayer = 4 // normal alive player
|
|
154
|
+
StatusDead = 5 // dead / respawning entity
|
|
155
|
+
StatusResource = 6 // static exploitable resource
|
|
156
|
+
StatusResourceExtracted = 7 // depleted resource (respawning)
|
|
157
|
+
StatusActionProvider = 8 // NPC with available actions (bouncing chat icon)
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
## Per-EntityType Defaults
|
|
163
|
+
|
|
164
|
+
Instance configuration (`CyberiaInstanceConf`) defines canonical defaults per entity type:
|
|
165
|
+
|
|
166
|
+
| Field | Description |
|
|
167
|
+
| ------------- | --------------------------------------------------------------------------------- |
|
|
168
|
+
| `liveItemIds` | ObjectLayer item IDs applied when entity is alive with no explicit items assigned |
|
|
169
|
+
| `deadItemIds` | ObjectLayer item IDs for dead/ghost/respawning state |
|
|
170
|
+
| `dropItemIds` | Items granted to the extractor when a resource entity is depleted |
|
|
171
|
+
| `colorKey` | Named palette color used as solid fallback when no active OL texture is available |
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
## Bot Entity Profile
|
|
176
|
+
|
|
177
|
+
Bot entities extend the base schema with runtime AI state:
|
|
178
|
+
|
|
179
|
+
```go
|
|
180
|
+
type BotState struct {
|
|
181
|
+
// Inherits all PlayerState fields
|
|
182
|
+
Behavior string // "hostile" | "passive" | "skill" | "coin"
|
|
183
|
+
SpawnRadius int // wander / respawn radius
|
|
184
|
+
AggroRange int // attack range (0 = passive)
|
|
185
|
+
SpawnPoint PointI // original spawn cell
|
|
186
|
+
RespawnTimer time.Time // next respawn timestamp
|
|
187
|
+
}
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
**Bot behaviors:**
|
|
191
|
+
|
|
192
|
+
| Behavior | AI Actions | Description |
|
|
193
|
+
| --------- | --------------------------------------- | ------------------------ |
|
|
194
|
+
| `hostile` | pathfind to player, attack | Aggressive enemy bot |
|
|
195
|
+
| `passive` | random wander | Non-aggressive world NPC |
|
|
196
|
+
| `skill` | move in direction, despawn on collision | Projectile entity |
|
|
197
|
+
| `coin` | static, collectible | Coin drop entity |
|
|
198
|
+
|
|
199
|
+
---
|
|
200
|
+
|
|
201
|
+
## Resource Entity Profile
|
|
202
|
+
|
|
203
|
+
Resource entities have a specific lifecycle:
|
|
204
|
+
|
|
205
|
+
```
|
|
206
|
+
Alive (StatusResource)
|
|
207
|
+
→ Player extracts (tap interaction)
|
|
208
|
+
→ dropItemIds granted to player inventory
|
|
209
|
+
→ Entity transitions to StatusResourceExtracted
|
|
210
|
+
→ Respawn timer starts
|
|
211
|
+
→ Entity returns to StatusResource
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
---
|
|
215
|
+
|
|
216
|
+
## Entity Lifecycle Diagram
|
|
217
|
+
|
|
218
|
+
```mermaid
|
|
219
|
+
stateDiagram-v2
|
|
220
|
+
[*] --> Alive : Spawned by instance_loader
|
|
221
|
+
Alive --> Dead : Life reaches 0 (combat/skill)
|
|
222
|
+
Alive --> ResourceExtracted : Player extracts (resource type)
|
|
223
|
+
Dead --> Alive : Respawn timer elapsed
|
|
224
|
+
ResourceExtracted --> Alive : Respawn timer elapsed
|
|
225
|
+
Alive --> Frozen : Player opens modal (FrozenInteractionState)
|
|
226
|
+
Frozen --> Alive : Player closes modal
|
|
227
|
+
Alive --> [*] : Entity removed from AOI
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
---
|
|
231
|
+
|
|
232
|
+
## Coin Balance Architecture
|
|
233
|
+
|
|
234
|
+
Coins use a **flat + display split** design to avoid O(N) inventory traversal:
|
|
235
|
+
|
|
236
|
+
| Field | Type | Purpose |
|
|
237
|
+
| ----------------------------- | ------------------ | -------------------------------------------------------------------------------------------------- |
|
|
238
|
+
| `entity.Coins` | `uint32` | **Single source of truth** — all economy operations read/write this field O(1) |
|
|
239
|
+
| `coinItemId ObjectLayer slot` | `ObjectLayerState` | **Display only** — `Active: false`, `Quantity = Coins`, synced by `syncCoinOL()` on every mutation |
|
|
240
|
+
|
|
241
|
+
The `coin` item type is never activable. The inventory UI automatically renders it with a lock indicator.
|
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
# Hardhat Module
|
|
2
|
+
|
|
3
|
+
**Path:** `hardhat/`
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Overview
|
|
8
|
+
|
|
9
|
+
The Hardhat module is the smart contract development, testing, and deployment environment for the **ObjectLayerToken** ERC-1155 contract — the on-chain economic reality layer of the Object Layer Protocol. It targets Hyperledger Besu private networks (IBFT2/QBFT) running on Kubernetes.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Directory Structure
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
hardhat/
|
|
17
|
+
hardhat.config.js Main Hardhat configuration
|
|
18
|
+
package.json
|
|
19
|
+
contracts/
|
|
20
|
+
ObjectLayerToken.sol ERC-1155 multi-token contract
|
|
21
|
+
scripts/
|
|
22
|
+
deployObjectLayerToken.js Deployment script
|
|
23
|
+
test/ Contract tests (Mocha + ethers v6)
|
|
24
|
+
deployments/ Deployment artifacts (auto-generated)
|
|
25
|
+
ignition/ Hardhat Ignition modules (optional)
|
|
26
|
+
networks/ Network-specific genesis configs
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## ObjectLayerToken Contract
|
|
32
|
+
|
|
33
|
+
### Inheritance Chain
|
|
34
|
+
|
|
35
|
+
```
|
|
36
|
+
ObjectLayerToken
|
|
37
|
+
└─ ERC1155 (OpenZeppelin 5.x — core multi-token standard)
|
|
38
|
+
└─ ERC1155Burnable (holders can burn their tokens)
|
|
39
|
+
└─ ERC1155Pausable (owner can freeze all transfers)
|
|
40
|
+
└─ ERC1155Supply (on-chain total supply per token ID)
|
|
41
|
+
└─ Ownable (mint, register, pause restricted to owner)
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Token ID Semantics
|
|
45
|
+
|
|
46
|
+
| Token ID | Semantic | Supply | Managed By |
|
|
47
|
+
| ---------------- | ------------------------------------------------ | ------------------------------------ | -------------- |
|
|
48
|
+
| `0` (CRYPTOKOYN) | Fungible in-game currency (CKY) | 10,000,000 × 10^18 | cryptokoyn.net |
|
|
49
|
+
| `≥ 1` | Object Layer item (weapon, skin, resource, etc.) | 1 = non-fungible; >1 = semi-fungible | itemledger.com |
|
|
50
|
+
|
|
51
|
+
### Token ID Derivation
|
|
52
|
+
|
|
53
|
+
Token IDs ≥ 1 use a deterministic namespace-scoped derivation:
|
|
54
|
+
|
|
55
|
+
```solidity
|
|
56
|
+
// computeTokenId(itemId) = uint256(keccak256(abi.encodePacked(namespace, itemId)))
|
|
57
|
+
// namespace = "cyberia.object-layer:"
|
|
58
|
+
uint256 tokenId = uint256(keccak256(abi.encodePacked("cyberia.object-layer:", itemId)));
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
This guarantees:
|
|
62
|
+
|
|
63
|
+
- The same `itemId` always produces the same `tokenId`.
|
|
64
|
+
- Token IDs are collision-resistant across different item namespaces.
|
|
65
|
+
- Any party can independently verify a `tokenId` from an `itemId`.
|
|
66
|
+
|
|
67
|
+
### Key State Variables
|
|
68
|
+
|
|
69
|
+
```solidity
|
|
70
|
+
uint256 public constant CRYPTOKOYN = 0;
|
|
71
|
+
uint256 public constant INITIAL_CRYPTOKOYN_SUPPLY = 10_000_000 * 1e18;
|
|
72
|
+
|
|
73
|
+
mapping(uint256 => string) private _tokenCIDs; // tokenId → canonical IPFS CID
|
|
74
|
+
mapping(uint256 => string) private _itemIds; // tokenId → itemId string
|
|
75
|
+
mapping(bytes32 => uint256) private _itemIdToTokenId; // keccak256(itemId) → tokenId
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### Events
|
|
79
|
+
|
|
80
|
+
| Event | Description |
|
|
81
|
+
| -------------------------------------------------------------------- | --------------------------------- |
|
|
82
|
+
| `ObjectLayerRegistered(tokenId, itemId, metadataCid, initialSupply)` | New item type registered on-chain |
|
|
83
|
+
| `MetadataUpdated(tokenId, metadataCid)` | Item metadata CID updated |
|
|
84
|
+
| `TransferSingle(operator, from, to, id, value)` | Single token transfer |
|
|
85
|
+
| `TransferBatch(operator, from, to, ids, values)` | Batch token transfer |
|
|
86
|
+
| `Paused(account)` | All transfers frozen |
|
|
87
|
+
| `Unpaused(account)` | Transfers resumed |
|
|
88
|
+
|
|
89
|
+
### Key Functions
|
|
90
|
+
|
|
91
|
+
| Function | Access | Description |
|
|
92
|
+
| ------------------------------------------------------------ | ----------- | ----------------------------------------- |
|
|
93
|
+
| `registerObjectLayer(to, itemId, metadataCid, supply, data)` | `onlyOwner` | Register a new item + mint initial supply |
|
|
94
|
+
| `batchRegisterObjectLayers(to, items[])` | `onlyOwner` | Batch registration + mint |
|
|
95
|
+
| `mint(to, tokenId, amount, data)` | `onlyOwner` | Mint additional supply for existing token |
|
|
96
|
+
| `mintBatch(to, ids[], amounts[], data)` | `onlyOwner` | Batch mint |
|
|
97
|
+
| `burn(from, tokenId, amount)` | holder | Burn tokens |
|
|
98
|
+
| `burnBatch(from, ids[], amounts[])` | holder | Batch burn |
|
|
99
|
+
| `setTokenMetadataCID(tokenId, metadataCid)` | `onlyOwner` | Update IPFS metadata CID |
|
|
100
|
+
| `pause()` / `unpause()` | `onlyOwner` | Emergency transfer freeze |
|
|
101
|
+
| `computeTokenId(itemId)` | pure | Deterministic token ID computation |
|
|
102
|
+
| `getItemId(tokenId)` | view | Reverse lookup tokenId → itemId |
|
|
103
|
+
| `getTokenCID(tokenId)` | view | Get canonical IPFS CID for token |
|
|
104
|
+
|
|
105
|
+
### URI Resolution
|
|
106
|
+
|
|
107
|
+
```solidity
|
|
108
|
+
// uri(tokenId) returns: {baseTokenURI}{_tokenCIDs[tokenId]}
|
|
109
|
+
// e.g.: "ipfs://bafkrei...json"
|
|
110
|
+
// The returned URI resolves to the full ObjectLayer data JSON (AtomicPrefab)
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## Networks
|
|
116
|
+
|
|
117
|
+
### Network Configuration (`hardhat.config.js`)
|
|
118
|
+
|
|
119
|
+
| Network | URL | Chain ID | Use Case |
|
|
120
|
+
| ------------ | ----------------------------------------------- | -------- | --------------------- |
|
|
121
|
+
| `hardhat` | in-process | - | Local testing |
|
|
122
|
+
| `besu-ibft2` | `BESU_IBFT2_RPC_URL` or `http://127.0.0.1:8545` | 777771 | Direct Besu IBFT2 RPC |
|
|
123
|
+
| `besu-qbft` | `BESU_QBFT_RPC_URL` or `http://127.0.0.1:8545` | 777771 | Direct Besu QBFT RPC |
|
|
124
|
+
| `besu-k8s` | `BESU_K8S_RPC_URL` or `http://127.0.0.1:30545` | 777771 | Kubernetes NodePort |
|
|
125
|
+
|
|
126
|
+
All Besu networks: `gasPrice: 0` (permissioned network, gasless model).
|
|
127
|
+
|
|
128
|
+
### Coinbase Key Management
|
|
129
|
+
|
|
130
|
+
The deployment uses a coinbase private key read from `engine-private/eth-networks/besu/coinbase`:
|
|
131
|
+
|
|
132
|
+
```javascript
|
|
133
|
+
const coinbaseKey = readPrivateKey('../engine-private/eth-networks/besu/coinbase');
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
If the key file does not exist, the config falls back to a dummy key (safe for compilation-only workflows).
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
## Deployment
|
|
141
|
+
|
|
142
|
+
### Prerequisites
|
|
143
|
+
|
|
144
|
+
```bash
|
|
145
|
+
cd hardhat
|
|
146
|
+
npm install
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### Compile Contracts
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
npx hardhat compile
|
|
153
|
+
# Artifacts written to hardhat/artifacts/
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
### Deploy to Besu
|
|
157
|
+
|
|
158
|
+
```bash
|
|
159
|
+
# Deploy to IBFT2 network
|
|
160
|
+
npx hardhat run scripts/deployObjectLayerToken.js --network besu-ibft2
|
|
161
|
+
|
|
162
|
+
# Deploy to QBFT network
|
|
163
|
+
npx hardhat run scripts/deployObjectLayerToken.js --network besu-qbft
|
|
164
|
+
|
|
165
|
+
# Deploy to Kubernetes cluster (via NodePort :30545)
|
|
166
|
+
npx hardhat run scripts/deployObjectLayerToken.js --network besu-k8s
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
**Deployment script actions:**
|
|
170
|
+
|
|
171
|
+
1. Connect to Besu RPC using the coinbase secp256k1 key.
|
|
172
|
+
2. Deploy `ObjectLayerToken` contract.
|
|
173
|
+
3. Mint `INITIAL_CRYPTOKOYN_SUPPLY` (10M CKY) to the deployer address.
|
|
174
|
+
4. Verify initial state: total supply, deployer balance.
|
|
175
|
+
5. Write deployment artifact to `hardhat/deployments/{network}/ObjectLayerToken.json`.
|
|
176
|
+
|
|
177
|
+
**Deployment artifact structure:**
|
|
178
|
+
|
|
179
|
+
```json
|
|
180
|
+
{
|
|
181
|
+
"address": "0x...",
|
|
182
|
+
"abi": [...],
|
|
183
|
+
"txHash": "0x...",
|
|
184
|
+
"blockNumber": 42,
|
|
185
|
+
"deployer": "0x...",
|
|
186
|
+
"network": "besu-ibft2",
|
|
187
|
+
"chainId": 777771,
|
|
188
|
+
"timestamp": "2026-01-01T00:00:00.000Z"
|
|
189
|
+
}
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
The artifact is consumed by:
|
|
193
|
+
|
|
194
|
+
- `bin/cyberia.js` CLI (`cyberia chain` subcommands).
|
|
195
|
+
- Engine gRPC server for contract address resolution.
|
|
196
|
+
- itemledger.com and cryptokoyn.net API servers.
|
|
197
|
+
|
|
198
|
+
---
|
|
199
|
+
|
|
200
|
+
## Running Tests
|
|
201
|
+
|
|
202
|
+
```bash
|
|
203
|
+
cd hardhat
|
|
204
|
+
npx hardhat test
|
|
205
|
+
|
|
206
|
+
# With gas report
|
|
207
|
+
REPORT_GAS=true npx hardhat test
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
Tests use **Mocha + ethers v6** via `@nomicfoundation/hardhat-toolbox-mocha-ethers`. The `hardhat` in-process network simulates Besu behavior.
|
|
211
|
+
|
|
212
|
+
---
|
|
213
|
+
|
|
214
|
+
## Cyberia CLI Integration
|
|
215
|
+
|
|
216
|
+
The Cyberia CLI (`bin/cyberia.js`) exposes the full Besu chain and contract lifecycle:
|
|
217
|
+
|
|
218
|
+
### Key Management
|
|
219
|
+
|
|
220
|
+
```bash
|
|
221
|
+
# Generate new Ethereum secp256k1 key pair
|
|
222
|
+
cyberia chain key-gen
|
|
223
|
+
# Save key pair to default paths
|
|
224
|
+
cyberia chain key-gen --save
|
|
225
|
+
|
|
226
|
+
# Set the coinbase deployer key from hex
|
|
227
|
+
cyberia chain set-coinbase --private-key 0xYOUR_PRIVATE_KEY_HEX
|
|
228
|
+
# Set from saved key file
|
|
229
|
+
cyberia chain set-coinbase --from-file ./engine-private/eth-networks/besu/<address>.key.json
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
### Network Lifecycle
|
|
233
|
+
|
|
234
|
+
```bash
|
|
235
|
+
# Deploy Besu network to Kubernetes
|
|
236
|
+
cyberia chain deploy
|
|
237
|
+
cyberia chain deploy --consensus qbft
|
|
238
|
+
|
|
239
|
+
# Remove Besu network
|
|
240
|
+
cyberia chain remove
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
### Contract Lifecycle
|
|
244
|
+
|
|
245
|
+
```bash
|
|
246
|
+
# Compile contracts
|
|
247
|
+
cyberia chain compile
|
|
248
|
+
|
|
249
|
+
# Deploy ObjectLayerToken (mints 10M CKY to deployer)
|
|
250
|
+
cyberia chain deploy-contract --network besu-ibft2
|
|
251
|
+
|
|
252
|
+
# Run contract tests
|
|
253
|
+
cyberia chain test
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
### Token Operations
|
|
257
|
+
|
|
258
|
+
```bash
|
|
259
|
+
# Register a non-fungible unique item (uses canonical CID from MongoDB)
|
|
260
|
+
cyberia chain register --item-id legendary-hatchet --from-db --supply 1
|
|
261
|
+
|
|
262
|
+
# Register semi-fungible stackable resource
|
|
263
|
+
cyberia chain register --item-id gold-ore --from-db --supply 1000000
|
|
264
|
+
|
|
265
|
+
# Manual CID override
|
|
266
|
+
cyberia chain register --item-id legendary-hatchet --metadata-cid bafkrei... --supply 1
|
|
267
|
+
|
|
268
|
+
# Batch-register multiple items
|
|
269
|
+
cyberia chain batch-register --from-db --items '[{"itemId":"wood","supply":500000},{"itemId":"stone","supply":500000}]'
|
|
270
|
+
|
|
271
|
+
# Mint additional CKY
|
|
272
|
+
cyberia chain mint --token-id 0 --to 0xABCD...1234 --amount 1000000000000000000000
|
|
273
|
+
|
|
274
|
+
# Query balance
|
|
275
|
+
cyberia chain balance --address 0xABCD...1234 --token-id 0
|
|
276
|
+
|
|
277
|
+
# Transfer
|
|
278
|
+
cyberia chain transfer --from 0x... --to 0x... --token-id 0 --amount 1000
|
|
279
|
+
|
|
280
|
+
# Burn
|
|
281
|
+
cyberia chain burn --token-id 0 --amount 500 --address 0x...
|
|
282
|
+
|
|
283
|
+
# Status and governance
|
|
284
|
+
cyberia chain status
|
|
285
|
+
cyberia chain pause
|
|
286
|
+
cyberia chain unpause
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
---
|
|
290
|
+
|
|
291
|
+
## Environment Variables
|
|
292
|
+
|
|
293
|
+
| Variable | Default | Description |
|
|
294
|
+
| --------------------- | ------------------------ | ----------------------------------- |
|
|
295
|
+
| `BESU_IBFT2_RPC_URL` | `http://127.0.0.1:8545` | Besu IBFT2 JSON-RPC URL |
|
|
296
|
+
| `BESU_QBFT_RPC_URL` | `http://127.0.0.1:8545` | Besu QBFT JSON-RPC URL |
|
|
297
|
+
| `BESU_K8S_RPC_URL` | `http://127.0.0.1:30545` | Kubernetes NodePort RPC URL |
|
|
298
|
+
| `BESU_IBFT2_CHAIN_ID` | `777771` | Chain ID override for IBFT2 |
|
|
299
|
+
| `REPORT_GAS` | `false` | Enable gas usage reporting in tests |
|
|
300
|
+
| `GAS_REPORT_FILE` | _(stdout)_ | Path for gas report output file |
|