hoover

command module
v0.0.0-...-cd62ce9 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 27, 2024 License: MIT Imports: 0 Imported by: 0

README

Hoover - Decentralized Social Network Data Aggregator

Hoover is a data aggregator built for Arweave developers to collect and unify event data from decentralized social networks like Nostr, Bluesky, and Farcaster. By consolidating this data on Arweave, Hoover provides a unified feed that developers can leverage for various decentralized applications, helping to bridge the gap between fragmented communities spread across different social media protocols.

Key Features

  • Aggregates data from Nostr, Bluesky, and Farcaster into a common schema.
  • Stores data on Arweave for long-term, decentralized storage.
  • Supports five primary event types: Post, Repost, Like, Follow, Profile.
  • Includes a basic event browser for viewing and searching indexed data. Additionally, this browser performs in-place signature validations of posts ensuring their integrity.

Supported Social Networks

  • Nostr: A minimalist, decentralized protocol with a publish-subscribe architecture.
  • Bluesky: A federated protocol developed by Bluesky, Inc., with strict control over the specification.
  • Farcaster: Built on Ethereum, Farcaster uses a blockchain-based model for social interactions.

Getting Started

To get started with Hoover, follow these steps:

  1. Install Go (version 1.22.6 or higher) Go Download

  2. Generate Key: Generate new RSA key or load an old one for Arweave uploading

    Run the following command from the project root:

    go run ./cmd/keygen/. > keyfile.json
    
  3. Run the Hoover: You can now start Hoover:

    ARWEAVE_GATEWAYS=https://up.arweave.net WALLET_FILE=keyfile.json go run ./cmd/hoover/.
    
  4. Start the Browser Interface: Finally, start the browser to view and interact with the posts pulled from Arweave (previously uploaded by th Hoover):

    cd browser
    npm install
    npm run dev
    

    Upon running this command, you should be presented with a clickable http link which allows you to view the Hoover's output.

    To learn more about the browser, click here

To run the hoover on arlocal for testing purposes, see the Testing Environment Setup

Architecture and Data Formats

Hoover works by aggregating data from decentralized social networks and formatting it for storage on Arweave. It supports five primary event types:

  • Post - Basic text content, potentially containing links and references to other users or events.
  • Repost - An event re-published by a user for their followers.
  • Like - A user’s positive reaction to a post or event.
  • Follow - A public declaration of subscribing to another user.
  • Profile - User metadata, such as display name, avatar, and other contact information.

For full details on data formats and bundling principles, see the Data Specification.

Project Milestones

Our project milestones cover the development process, goals, and task completion. Check out the detailed milestones in the Project Milestones Document.

Credits

This project was developed by Hubmaker Labs, a company specializing in decentralized applications and infrastructure, under contract with Arweave, whose support and funding made this work possible.

Team:

We are grateful to Arweave for enabling the development of Hoover and its role in advancing decentralized, long-term data storage.

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis
cmd
pkg
bluesky
Package bluesky is a set of functions for pulling events from bluesky and sending them to Arweave AO.
Package bluesky is a set of functions for pulling events from bluesky and sending them to Arweave AO.
btcsuite/base58
Package base58 provides an API for working with modified base58 and Base58Check encodings.
Package base58 provides an API for working with modified base58 and Base58Check encodings.
eth
Package ethereum defines interfaces for interacting with Ethereum.
Package ethereum defines interfaces for interacting with Ethereum.
eth/accounts
Package accounts implements high level Ethereum account management.
Package accounts implements high level Ethereum account management.
eth/accounts/abi
Package abi implements the Ethereum ABI (Application Binary Interface).
Package abi implements the Ethereum ABI (Application Binary Interface).
eth/accounts/abi/bind
Package bind generates Ethereum contract Go bindings.
Package bind generates Ethereum contract Go bindings.
eth/accounts/keystore
Package keystore implements encrypted storage of secp256k1 private keys.
Package keystore implements encrypted storage of secp256k1 private keys.
eth/accounts/usbwallet
Package usbwallet implements support for USB hardware wallets.
Package usbwallet implements support for USB hardware wallets.
eth/accounts/usbwallet/trezor
Package trezor contains the wire protocol.
Package trezor contains the wire protocol.
eth/beacon/merkle
Package merkle implements proof verifications in binary merkle trees.
Package merkle implements proof verifications in binary merkle trees.
eth/beacon/types
Package types implements a few types of the beacon chain for light client usage.
Package types implements a few types of the beacon chain for light client usage.
eth/cmd/_geth
geth is the official command-line client for Ethereum.
geth is the official command-line client for Ethereum.
eth/cmd/bootnode
bootnode runs a bootstrap node for the Ethereum Discovery Protocol.
bootnode runs a bootstrap node for the Ethereum Discovery Protocol.
eth/cmd/evm
evm executes EVM code snippets.
evm executes EVM code snippets.
eth/cmd/faucet
faucet is an Ether faucet backed by a light client.
faucet is an Ether faucet backed by a light client.
eth/cmd/p2psim
p2psim provides a command-line client for a simulation HTTP API.
p2psim provides a command-line client for a simulation HTTP API.
eth/cmd/rlpdump
rlpdump is a pretty-printer for RLP data.
rlpdump is a pretty-printer for RLP data.
eth/cmd/utils
Package utils contains internal helper functions for go-ethereum commands.
Package utils contains internal helper functions for go-ethereum commands.
eth/common
Package common contains various helper functions.
Package common contains various helper functions.
eth/common/bitutil
Package bitutil implements fast bitwise operations.
Package bitutil implements fast bitwise operations.
eth/common/compiler
Package compiler wraps the Solidity and Vyper compiler executables (solc; vyper).
Package compiler wraps the Solidity and Vyper compiler executables (solc; vyper).
eth/common/hexutil
Package hexutil implements hex encoding with 0x prefix.
Package hexutil implements hex encoding with 0x prefix.
eth/common/lru
Package lru implements generically-typed LRU caches.
Package lru implements generically-typed LRU caches.
eth/common/math
Package math provides integer math utilities.
Package math provides integer math utilities.
eth/common/mclock
Package mclock is a wrapper for a monotonic clock source
Package mclock is a wrapper for a monotonic clock source
eth/common/prque
Package prque implements a priority queue data structure supporting arbitrary value types and int64 priorities.
Package prque implements a priority queue data structure supporting arbitrary value types and int64 priorities.
eth/consensus
Package consensus implements different Ethereum consensus engines.
Package consensus implements different Ethereum consensus engines.
eth/consensus/clique
Package clique implements the proof-of-authority consensus engine.
Package clique implements the proof-of-authority consensus engine.
eth/consensus/ethash
Package ethash implements the ethash proof-of-work consensus engine.
Package ethash implements the ethash proof-of-work consensus engine.
eth/core
Package core implements the Ethereum consensus protocol.
Package core implements the Ethereum consensus protocol.
eth/core/asm
Package asm provides support for dealing with EVM assembly instructions (e.g., disassembling them).
Package asm provides support for dealing with EVM assembly instructions (e.g., disassembling them).
eth/core/bloombits
Package bloombits implements bloom filtering on batches of data.
Package bloombits implements bloom filtering on batches of data.
eth/core/forkid
Package forkid implements EIP-2124 (https://eips.ethereum.org/EIPS/eip-2124).
Package forkid implements EIP-2124 (https://eips.ethereum.org/EIPS/eip-2124).
eth/core/rawdb
Package rawdb contains a collection of low level database accessors.
Package rawdb contains a collection of low level database accessors.
eth/core/state
Package state provides a caching layer atop the Ethereum state trie.
Package state provides a caching layer atop the Ethereum state trie.
eth/core/state/snapshot
Package snapshot implements a journalled, dynamic state dump.
Package snapshot implements a journalled, dynamic state dump.
eth/core/txpool/blobpool
Package blobpool implements the EIP-4844 blob transaction pool.
Package blobpool implements the EIP-4844 blob transaction pool.
eth/core/txpool/legacypool
Package legacypool implements the normal EVM execution transaction pool.
Package legacypool implements the normal EVM execution transaction pool.
eth/core/types
Package types contains data types related to Ethereum consensus.
Package types contains data types related to Ethereum consensus.
eth/core/vm
Package vm implements the Ethereum Virtual Machine.
Package vm implements the Ethereum Virtual Machine.
eth/core/vm/runtime
Package runtime provides a basic execution model for executing EVM code.
Package runtime provides a basic execution model for executing EVM code.
eth/crypto/blake2b
Package blake2b implements the BLAKE2b hash algorithm defined by RFC 7693 and the extendable output function (XOF) BLAKE2Xb.
Package blake2b implements the BLAKE2b hash algorithm defined by RFC 7693 and the extendable output function (XOF) BLAKE2Xb.
eth/crypto/bn256
Package bn256 implements the Optimal Ate pairing over a 256-bit Barreto-Naehrig curve.
Package bn256 implements the Optimal Ate pairing over a 256-bit Barreto-Naehrig curve.
eth/crypto/bn256/cloudflare
Package bn256 implements a particular bilinear group at the 128-bit security level.
Package bn256 implements a particular bilinear group at the 128-bit security level.
eth/crypto/bn256/google
Package bn256 implements a particular bilinear group.
Package bn256 implements a particular bilinear group.
eth/crypto/kzg4844
Package kzg4844 implements the KZG crypto for EIP-4844.
Package kzg4844 implements the KZG crypto for EIP-4844.
eth/crypto/secp256k1
Package secp256k1 wraps the bitcoin secp256k1 C library.
Package secp256k1 wraps the bitcoin secp256k1 C library.
eth/eth
Package eth implements the Ethereum protocol.
Package eth implements the Ethereum protocol.
eth/eth/catalyst
Package catalyst implements the temporary eth1/eth2 RPC integration.
Package catalyst implements the temporary eth1/eth2 RPC integration.
eth/eth/downloader
Package downloader contains the manual full chain synchronisation.
Package downloader contains the manual full chain synchronisation.
eth/eth/ethconfig
Package ethconfig contains the configuration of the ETH and LES protocols.
Package ethconfig contains the configuration of the ETH and LES protocols.
eth/eth/fetcher
Package fetcher contains the announcement based header, blocks or transaction synchronisation.
Package fetcher contains the announcement based header, blocks or transaction synchronisation.
eth/eth/filters
Package filters implements an ethereum filtering system for block, transactions and log events.
Package filters implements an ethereum filtering system for block, transactions and log events.
eth/eth/tracers
Package tracers is a manager for transaction tracing engines.
Package tracers is a manager for transaction tracing engines.
eth/eth/tracers/js/internal/tracers
Package tracers contains the actual JavaScript tracer assets.
Package tracers contains the actual JavaScript tracer assets.
eth/ethclient
Package ethclient provides a client for the Ethereum RPC API.
Package ethclient provides a client for the Ethereum RPC API.
eth/ethclient/gethclient
Package gethclient provides an RPC client for geth-specific APIs.
Package gethclient provides an RPC client for geth-specific APIs.
eth/ethdb
Package ethdb defines the interfaces for an Ethereum data store.
Package ethdb defines the interfaces for an Ethereum data store.
eth/ethdb/leveldb
Package leveldb implements the key-value database layer based on LevelDB.
Package leveldb implements the key-value database layer based on LevelDB.
eth/ethdb/memorydb
Package memorydb implements the key-value database layer based on memory maps.
Package memorydb implements the key-value database layer based on memory maps.
eth/ethdb/pebble
Package pebble implements the key-value database layer based on pebble.
Package pebble implements the key-value database layer based on pebble.
eth/ethdb/remotedb
Package remotedb implements the key-value database layer based on a remote geth node.
Package remotedb implements the key-value database layer based on a remote geth node.
eth/ethstats
Package ethstats implements the network stats reporting service.
Package ethstats implements the network stats reporting service.
eth/event
Package event deals with subscriptions to real-time events.
Package event deals with subscriptions to real-time events.
eth/graphql
Package graphql provides a GraphQL interface to Ethereum node data.
Package graphql provides a GraphQL interface to Ethereum node data.
eth/internal/debug
Package debug interfaces Go runtime debugging facilities.
Package debug interfaces Go runtime debugging facilities.
eth/internal/ethapi
Package ethapi implements the general Ethereum API functions.
Package ethapi implements the general Ethereum API functions.
eth/internal/guide
Package guide is a small test suite to ensure snippets in the dev guide work.
Package guide is a small test suite to ensure snippets in the dev guide work.
eth/internal/jsre
Package jsre provides execution environment for JavaScript.
Package jsre provides execution environment for JavaScript.
eth/internal/jsre/deps
Package deps contains the console JavaScript dependencies Go embedded.
Package deps contains the console JavaScript dependencies Go embedded.
eth/internal/reexec
This file originates from Docker/Moby, https://github.com/moby/moby/blob/master/pkg/reexec/reexec.go Licensed under Apache License 2.0: https://github.com/moby/moby/blob/master/LICENSE Copyright 2013-2018 Docker, Inc.
This file originates from Docker/Moby, https://github.com/moby/moby/blob/master/pkg/reexec/reexec.go Licensed under Apache License 2.0: https://github.com/moby/moby/blob/master/LICENSE Copyright 2013-2018 Docker, Inc.
eth/internal/syncx
Package syncx contains exotic synchronization primitives.
Package syncx contains exotic synchronization primitives.
eth/internal/testlog
Package testlog provides a log handler for unit tests.
Package testlog provides a log handler for unit tests.
eth/internal/utesting
Package utesting provides a standalone replacement for package testing.
Package utesting provides a standalone replacement for package testing.
eth/internal/version
Package version implements reading of build version information.
Package version implements reading of build version information.
eth/internal/web3ext
Package web3ext contains geth specific web3.js extensions.
Package web3ext contains geth specific web3.js extensions.
eth/les
Package les implements the Light Ethereum Subprotocol.
Package les implements the Light Ethereum Subprotocol.
eth/les/flowcontrol
Package flowcontrol implements a client side flow control mechanism
Package flowcontrol implements a client side flow control mechanism
eth/light
Package light implements on-demand retrieval capable state and chain objects for the Ethereum Light Client.
Package light implements on-demand retrieval capable state and chain objects for the Ethereum Light Client.
eth/log
Package log15 provides an opinionated, simple toolkit for best-practice logging that is both human and machine readable.
Package log15 provides an opinionated, simple toolkit for best-practice logging that is both human and machine readable.
eth/metrics
Go port of Coda Hale's Metrics library
Go port of Coda Hale's Metrics library
eth/metrics/exp
Hook go-metrics into expvar on any /debug/metrics request, load all vars from the registry into expvar, and execute regular expvar handler
Hook go-metrics into expvar on any /debug/metrics request, load all vars from the registry into expvar, and execute regular expvar handler
eth/metrics/prometheus
Package prometheus exposes go-metrics into a Prometheus format.
Package prometheus exposes go-metrics into a Prometheus format.
eth/miner
Package miner implements Ethereum block creation and mining.
Package miner implements Ethereum block creation and mining.
eth/miner/stress/clique
This file contains a miner stress test based on the Clique consensus engine.
This file contains a miner stress test based on the Clique consensus engine.
eth/node
Package node sets up multi-protocol Ethereum nodes.
Package node sets up multi-protocol Ethereum nodes.
eth/p2p
Package p2p implements the Ethereum p2p network protocols.
Package p2p implements the Ethereum p2p network protocols.
eth/p2p/discover
Package discover implements the Node Discovery Protocol.
Package discover implements the Node Discovery Protocol.
eth/p2p/discover/v4wire
Package v4wire implements the Discovery v4 Wire Protocol.
Package v4wire implements the Discovery v4 Wire Protocol.
eth/p2p/dnsdisc
Package dnsdisc implements node discovery via DNS (EIP-1459).
Package dnsdisc implements node discovery via DNS (EIP-1459).
eth/p2p/enr
Package enr implements Ethereum Node Records as defined in EIP-778.
Package enr implements Ethereum Node Records as defined in EIP-778.
eth/p2p/msgrate
Package msgrate allows estimating the throughput of peers for more balanced syncs.
Package msgrate allows estimating the throughput of peers for more balanced syncs.
eth/p2p/nat
Package nat provides access to common network port mapping protocols.
Package nat provides access to common network port mapping protocols.
eth/p2p/netutil
Package netutil contains extensions to the net package.
Package netutil contains extensions to the net package.
eth/p2p/rlpx
Package rlpx implements the RLPx transport protocol.
Package rlpx implements the RLPx transport protocol.
eth/p2p/simulations
Package simulations simulates p2p networks.
Package simulations simulates p2p networks.
eth/rlp
Package rlp implements the RLP serialization format.
Package rlp implements the RLP serialization format.
eth/rlp/internal/rlpstruct
Package rlpstruct implements struct processing for RLP encoding/decoding.
Package rlpstruct implements struct processing for RLP encoding/decoding.
eth/rpc
Package rpc implements bi-directional JSON-RPC 2.0 on multiple transports.
Package rpc implements bi-directional JSON-RPC 2.0 on multiple transports.
eth/signer/fourbyte
Package fourbyte contains the 4byte database.
Package fourbyte contains the 4byte database.
eth/tests
Package tests implements execution of Ethereum JSON tests.
Package tests implements execution of Ethereum JSON tests.
eth/trie
Package trie implements Merkle Patricia Tries.
Package trie implements Merkle Patricia Tries.
nostr
Package nostr is a set of functions for pulling events from nostr and sending them to Arweave AO.
Package nostr is a set of functions for pulling events from nostr and sending them to Arweave AO.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL