Skip to content

Commit

Permalink
Merge pull request #690 from hyperware-ai/develop
Browse files Browse the repository at this point in the history
develop
  • Loading branch information
nick1udwig authored Feb 20, 2025
2 parents ef362cc + 917accc commit 6d9bb14
Show file tree
Hide file tree
Showing 125 changed files with 2,925 additions and 13,846 deletions.
292 changes: 60 additions & 232 deletions Cargo.lock

Large diffs are not rendered by default.

5 changes: 2 additions & 3 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,10 @@ members = [
"hyperdrive/packages/app-store/app-store", "hyperdrive/packages/app-store/ft-worker",
"hyperdrive/packages/app-store/downloads", "hyperdrive/packages/app-store/chain",
"hyperdrive/packages/app-store/download", "hyperdrive/packages/app-store/install", "hyperdrive/packages/app-store/uninstall", "hyperdrive/packages/app-store/reset-store",
"hyperdrive/packages/chess/chess",
"hyperdrive/packages/contacts/contacts",
"hyperdrive/packages/homepage/homepage",
"hyperdrive/packages/kns-indexer/kns-indexer", "hyperdrive/packages/kns-indexer/get-block", "hyperdrive/packages/settings/settings", "hyperdrive/packages/kns-indexer/reset",
"hyperdrive/packages/kns-indexer/node-info", "hyperdrive/packages/kns-indexer/state",
"hyperdrive/packages/hns-indexer/hns-indexer", "hyperdrive/packages/hns-indexer/get-block", "hyperdrive/packages/settings/settings", "hyperdrive/packages/hns-indexer/reset",
"hyperdrive/packages/hns-indexer/node-info", "hyperdrive/packages/hns-indexer/state",
"hyperdrive/packages/terminal/terminal",
"hyperdrive/packages/terminal/alias", "hyperdrive/packages/terminal/cat", "hyperdrive/packages/terminal/echo",
"hyperdrive/packages/terminal/help", "hyperdrive/packages/terminal/hi", "hyperdrive/packages/terminal/kfetch",
Expand Down
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ These are interacted with in the same way as userspace processes, but are deeply
All of these are identified in the `distro:sys` package.

Hyperdrive also comes with userspace packages pre-installed.
Some of these packages are intimately tied to the runtime: `terminal`, `homepage`, and `kns-indexer`.
Some of these packages are intimately tied to the runtime: `terminal`, `homepage`, and `hns-indexer`.
Modifying, removing or replacing the distro userspace packages should only be done in highly specialized use-cases.

The runtime distro processes are:
Expand All @@ -162,7 +162,7 @@ The distro userspace packages are:
- `chess:sys`
- `contacts:sys`
- `homepage:sys`
- `kns-indexer:sys`
- `hns-indexer:sys`
- `settings:sys`
- `terminal:sys`
- `tester:sys` (used with `kit` for running test suites, only installed in `simulation-mode`)
Expand Down Expand Up @@ -202,7 +202,7 @@ Subsequent use of the shorthand will then be interpolated as the process ID.
A list of the terminal scripts included in this distro:

- `alias <shorthand> <process_id>`: create an alias for a script.
- Example: `alias get_block get-block:kns-indexer:sys`
- Example: `alias get_block get-block:hns-indexer:sys`
- note: all of these listed commands are just default aliases for terminal scripts.
- `cat <vfs-file-path>`: print the contents of a file in the terminal.
- Example: `cat /terminal:sys/pkg/scripts.json`
Expand Down
52 changes: 48 additions & 4 deletions css/hyperware.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 2 additions & 2 deletions hyperdrive/packages/app-store/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion hyperdrive/packages/app-store/app-store/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ alloy-primitives = "0.8.15"
alloy-sol-types = "0.8.15"
anyhow = "1.0"
bincode = "1.3.3"
hyperware_process_lib = "1.0.2"
hyperware_process_lib = "1.0.3"
process_macros = "0.1"
rand = "0.8"
serde = { version = "1.0", features = ["derive"] }
Expand Down
4 changes: 2 additions & 2 deletions hyperdrive/packages/app-store/app-store/src/state.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use crate::{hyperware::process::downloads::DownloadError, utils, VFS_TIMEOUT};
use hyperware_process_lib::{get_state, kimap, set_state, vfs, PackageId};
use hyperware_process_lib::{get_state, hypermap, set_state, vfs, PackageId};
use serde::{Deserialize, Serialize};
use std::collections::{HashMap, HashSet};

Expand All @@ -11,7 +11,7 @@ use std::collections::{HashMap, HashSet};
pub enum AppStoreLogError {
NoBlockNumber,
GetNameError,
DecodeLogError(kimap::DecodeLogError),
DecodeLogError(hypermap::DecodeLogError),
PackageHashMismatch,
InvalidPublisherName,
MetadataNotFound,
Expand Down
2 changes: 1 addition & 1 deletion hyperdrive/packages/app-store/chain/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ alloy-primitives = "0.8.15"
alloy-sol-types = "0.8.15"
anyhow = "1.0"
bincode = "1.3.3"
hyperware_process_lib = "1.0.2"
hyperware_process_lib = "1.0.3"
process_macros = "0.1"
rand = "0.8"
serde = { version = "1.0", features = ["derive"] }
Expand Down
40 changes: 20 additions & 20 deletions hyperdrive/packages/app-store/chain/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ use alloy_primitives::keccak256;
use alloy_sol_types::SolEvent;
use hyperware::process::chain::ChainResponse;
use hyperware_process_lib::{
await_message, call_init, eth, get_blob, http, kernel_types as kt, kimap, print_to_terminal,
await_message, call_init, eth, get_blob, http, kernel_types as kt, hypermap, print_to_terminal,
println,
sqlite::{self, Sqlite},
timer, Address, Message, PackageId, Request, Response,
Expand All @@ -50,19 +50,19 @@ wit_bindgen::generate!({
});

#[cfg(not(feature = "simulation-mode"))]
const CHAIN_ID: u64 = kimap::KIMAP_CHAIN_ID;
const CHAIN_ID: u64 = hypermap::HYPERMAP_CHAIN_ID;
#[cfg(feature = "simulation-mode")]
const CHAIN_ID: u64 = 31337; // local

const CHAIN_TIMEOUT: u64 = 60; // 60s

const KIMAP_ADDRESS: &'static str = kimap::KIMAP_ADDRESS;
const HYPERMAP_ADDRESS: &'static str = hypermap::HYPERMAP_ADDRESS;

const DELAY_MS: u64 = 1_000; // 1s

pub struct State {
/// the kimap helper we are using
pub kimap: kimap::Kimap,
/// the hypermap helper we are using
pub hypermap: hypermap::Hypermap,
/// the last block at which we saved the state of the listings to disk.
/// when we boot, we can read logs starting from this block and
/// rebuild latest state.
Expand Down Expand Up @@ -387,12 +387,12 @@ fn init(our: Address) {
let eth_provider: eth::Provider = eth::Provider::new(CHAIN_ID, CHAIN_TIMEOUT);

let db = DB::connect(&our).expect("failed to open DB");
let kimap_helper =
kimap::Kimap::new(eth_provider, eth::Address::from_str(KIMAP_ADDRESS).unwrap());
let hypermap_helper =
hypermap::Hypermap::new(eth_provider, eth::Address::from_str(HYPERMAP_ADDRESS).unwrap());
let last_saved_block = db.get_last_saved_block().unwrap_or(0);

let mut state = State {
kimap: kimap_helper,
hypermap: hypermap_helper,
last_saved_block,
db,
};
Expand Down Expand Up @@ -444,13 +444,13 @@ fn handle_message(our: &Address, state: &mut State, message: &Message) -> anyhow
serde_json::from_value::<eth::SubscriptionResult>(result)
{
// delay handling of ETH RPC subscriptions by DELAY_MS
// to allow kns to have a chance to process block
// to allow hns to have a chance to process block
timer::set_timer(DELAY_MS, Some(serde_json::to_vec(log)?));
}
} else {
// re-subscribe if error
state
.kimap
.hypermap
.provider
.subscribe_loop(1, app_store_filter(state), 1, 0);
}
Expand Down Expand Up @@ -536,7 +536,7 @@ fn handle_eth_log(
let block_number: u64 = log
.block_number
.ok_or(anyhow::anyhow!("log missing block number"))?;
let Ok(note) = kimap::decode_note_log(&log) else {
let Ok(note) = hypermap::decode_note_log(&log) else {
// ignore invalid logs here -- they're not actionable
return Ok(());
};
Expand Down Expand Up @@ -565,7 +565,7 @@ fn handle_eth_log(
let hash_note = format!("~metadata-hash.{}", note.parent_path);

// owner can change which we don't track (yet?) so don't save, need to get when desired
let (tba, _owner, data) = match state.kimap.get(&hash_note) {
let (tba, _owner, data) = match state.hypermap.get(&hash_note) {
Ok(gr) => Ok(gr),
Err(e) => match e {
eth::EthError::RpcError(_) => {
Expand All @@ -574,7 +574,7 @@ fn handle_eth_log(
// `timer:distro:sys` so that events are processed in
// order of receipt!
std::thread::sleep(std::time::Duration::from_millis(DELAY_MS));
state.kimap.get(&hash_note)
state.hypermap.get(&hash_note)
}
_ => Err(e),
},
Expand Down Expand Up @@ -677,7 +677,7 @@ fn update_all_metadata(state: &mut State, last_saved_block: u64) {

for (pid, mut listing) in updated_listings {
let hash_note = format!("~metadata-hash.{}.{}", pid.package(), pid.publisher());
let (tba, metadata_hash) = match state.kimap.get(&hash_note) {
let (tba, metadata_hash) = match state.hypermap.get(&hash_note) {
Ok((t, _owner, data)) => {
match data {
None => {
Expand All @@ -699,7 +699,7 @@ fn update_all_metadata(state: &mut State, last_saved_block: u64) {
// If RpcError, retry once after delay
if let eth::EthError::RpcError(_) = e {
std::thread::sleep(std::time::Duration::from_millis(DELAY_MS));
match state.kimap.get(&hash_note) {
match state.hypermap.get(&hash_note) {
Ok((t, _owner, data)) => {
if let Some(hash_note) = data {
(t, String::from_utf8_lossy(&hash_note).to_string())
Expand Down Expand Up @@ -784,8 +784,8 @@ pub fn app_store_filter(state: &State) -> eth::Filter {
let notes = vec![keccak256("~metadata-uri")];

eth::Filter::new()
.address(*state.kimap.address())
.events([kimap::contract::Note::SIGNATURE])
.address(*state.hypermap.address())
.events([hypermap::contract::Note::SIGNATURE])
.topic3(notes)
}

Expand All @@ -794,17 +794,17 @@ pub fn fetch_and_subscribe_logs(our: &Address, state: &mut State, last_saved_blo
let filter = app_store_filter(state);
// get past logs, subscribe to new ones.
// subscribe first so we don't miss any logs
state.kimap.provider.subscribe_loop(1, filter.clone(), 1, 0);
state.hypermap.provider.subscribe_loop(1, filter.clone(), 1, 0);
// println!("fetching old logs from block {last_saved_block}");
for log in fetch_logs(&state.kimap.provider, &filter.from_block(last_saved_block)) {
for log in fetch_logs(&state.hypermap.provider, &filter.from_block(last_saved_block)) {
if let Err(e) = handle_eth_log(our, state, log, true) {
print_to_terminal(1, &format!("error ingesting log: {e}"));
};
}

update_all_metadata(state, last_saved_block);
// save updated last_saved_block
if let Ok(block_number) = state.kimap.provider.get_block_number() {
if let Ok(block_number) = state.hypermap.provider.get_block_number() {
state.last_saved_block = block_number;
if let Err(e) = state.db.set_last_saved_block(block_number) {
print_to_terminal(0, &format!("error saving last block after startup: {e}"));
Expand Down
2 changes: 1 addition & 1 deletion hyperdrive/packages/app-store/download/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ simulation-mode = []

[dependencies]
anyhow = "1.0"
hyperware_process_lib = "1.0.2"
hyperware_process_lib = "1.0.3"
process_macros = "0.1"
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
Expand Down
2 changes: 1 addition & 1 deletion hyperdrive/packages/app-store/downloads/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ simulation-mode = []

[dependencies]
anyhow = "1.0"
hyperware_process_lib = "1.0.2"
hyperware_process_lib = "1.0.3"
process_macros = "0.1"
rand = "0.8"
serde = { version = "1.0", features = ["derive"] }
Expand Down
2 changes: 1 addition & 1 deletion hyperdrive/packages/app-store/ft-worker/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ simulation-mode = []
[dependencies]
anyhow = "1.0"
bincode = "1.3.3"
hyperware_process_lib = "1.0.2"
hyperware_process_lib = "1.0.3"
process_macros = "0.1"
rand = "0.8"
serde = { version = "1.0", features = ["derive"] }
Expand Down
2 changes: 1 addition & 1 deletion hyperdrive/packages/app-store/install/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ simulation-mode = []

[dependencies]
anyhow = "1.0"
hyperware_process_lib = "1.0.2"
hyperware_process_lib = "1.0.3"
process_macros = "0.1"
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
Expand Down
8 changes: 4 additions & 4 deletions hyperdrive/packages/app-store/pkg/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
"downloads:app-store:sys",
"eth:distro:sys",
"http-client:distro:sys",
"kns-indexer:kns-indexer:sys",
"hns-indexer:hns-indexer:sys",
"main:app-store:sys",
"sqlite:distro:sys",
"terminal:terminal:sys",
Expand All @@ -47,7 +47,7 @@
"grant_capabilities": [
"eth:distro:sys",
"http-client:distro:sys",
"kns-indexer:kns-indexer:sys",
"hns-indexer:hns-indexer:sys",
"sqlite:distro:sys",
"terminal:terminal:sys",
"timer:distro:sys"
Expand Down Expand Up @@ -76,7 +76,7 @@
},
"http-server:distro:sys",
"kernel:distro:sys",
"kns-indexer:kns-indexer:sys",
"hns-indexer:hns-indexer:sys",
"kv:distro:sys",
"sqlite:distro:sys",
"terminal:terminal:sys",
Expand All @@ -90,7 +90,7 @@
],
"grant_capabilities": [
"http-server:distro:sys",
"kns-indexer:kns-indexer:sys",
"hns-indexer:hns-indexer:sys",
"terminal:terminal:sys",
"homepage:homepage:sys",
"vfs:distro:sys"
Expand Down
2 changes: 1 addition & 1 deletion hyperdrive/packages/app-store/reset-store/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ simulation-mode = []

[dependencies]
anyhow = "1.0"
hyperware_process_lib = "1.0.2"
hyperware_process_lib = "1.0.3"
process_macros = "0.1"
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
Expand Down
Loading

0 comments on commit 6d9bb14

Please sign in to comment.