Hallo, lange nichts mehr gepostet.
Da ich wegen meiner Splinterlands-Verlosungen gemeldet wurde, habe ich mich hier ziemlich zurückgehalten.
Aber dieses Mal gibt es etwas, das ich euch mitteilen möchte.
Seit ich auf Hive bin, entwickle ich aktiv Hive-Projekte, z. B. einen alten, klobigen Splinterlands-Bot, Trading-Bots, Hilfsprogramme usw. Ich entwickle hauptsächlich in Node.js, Python und Rust.
Für all diese Sprachen gibt es bereits Bibliotheken für Hive-Transaktionen. Da mein erstes Projekt in Python war und schon eine ganze Weile zurückliegt, habe ich mich an die Beem-Bibliothek gewöhnt. Diese ist mittlerweile jedoch stark veraltet und hat mit Hive Nectar einen guten Nachfolger gefunden. Mir wurde dann klar, dass ich eine einheitliche Bibliothek für Node.js, Rust und Python haben möchte, die in all diesen Sprachen sehr ähnlich funktioniert und ziemlich schnell ist – was z. B. für den Handel wichtig ist.
Also begann ich, gemeinsam mit Claude bestehende Bibliotheken und den Blockchain-Code selbst zu analysieren und entwickelte „hivecomb“: https://github.com/flosolcher/hivecomb
Hello long time no post.
Since i got flagged because of my Splinterlands raffles i kept really quiet here.
But this time there is something i want to announce to you.
Since i am on hive i am actively developing hive projects, i.e. an old clunky splinterlands bot, trading bots, helpers etc. I develop mostly in nodejs, python and rust.
For all these languages there are existing libraries for hive transactions. Since my first project as in python and already a long while ago, i got used to the beem library. Which is now really outdated and has a nice successor with hive nectar. I then realized that i want to have a unified library for nodejs, rust and python which should work in all these languages very similar and be quite fast - which is important for i.e. trading.
So i started to analyze existing libraries and the blockchain code itself with Claude and created hivecomb: https://github.com/flosolcher/hivecomb
No need for any credits since this was mostly done with the help of AI, i just want to give something useful to the hive community. All other hive libraries still have their purpose and are worth to credit. Thanks!
hivecomb is a Rust reimplementation of beem, with
Python and Node.js bindings. Version 0.1.0 is on crates.io and PyPI as of
2026-09-05.
This is a port, not new work. The protocol knowledge in it — the wire format, the
key derivations, the operation definitions, the signing scheme — was worked out by
other people over roughly a decade:
python-bitshares and python-graphenelib, which beemlibraries/protocol is the authority every byte hereThe conversion to Rust was done by Claude (Anthropic). Full attribution, module by
module, is in CREDITS.md.
beem has not been maintained since 2021, and a current install quietly falls onto a
pure-Python ECDSA path — the secp256k1 binding it prefers raises
AttributeError: 'PrivateKey' object has no attribute 'ctx' against any modern version.
It still works. It is just slower than it was designed to be, and it predates every
operation Hive added after hardfork 25.
hivecomb is that library rewritten, with the post-HF25 operations added and a set of
defects fixed. It is offered alongside beem, not against it — beem is where all of this
came from.
# Python
pip install hivecomb # keys, signing, memos, every operation
# Rust
cargo add hivecomb
Already have a beem program? Don't change it:
pip uninstall -y beem
pip install hivecomb hivecomb-beem
hivecomb-beem provides the beem, beembase, beemapi and beemgraphenebase
package names and the beempy console script. Existing import beem code keeps
working. It deliberately shadows beem's package names, so do not install both.
The Node.js addon is not on npm yet — npm's automated spam filter is holding one
of the five per-platform binary packages, which blocks the package that depends on
them. Build it from the repository meanwhile. Nothing about the Rust or Python
packages is affected.
This is the part worth knowing even if you use something else.
A Hive transaction needs exactly two things from outside itself: the chain id, which
is a compile-time constant, and a recent block reference, which stays valid far
longer than any submit window. Nothing else. So the signing key never has to live on a
machine that talks to a node.
import hivecomb
# The only input from the chain. From any node, or carried across an air gap.
ref = hivecomb.BlockRef.from_block_id(head_block_id)
tx = hivecomb.sign_transaction(
[("custom_json", {
"required_auths": [],
"required_posting_auths": ["alice"],
"id": "my_app",
"json": {"hello": "hive"},
})],
ref,
[posting_wif],
)
# tx is the exact envelope condenser_api.broadcast_transaction wants
sign_transaction(operations, block_ref, wifs) returns a dict with ref_block_num,
ref_block_prefix, expiration, operations, extensions, signatures and trx_id.
Pass expiration_seconds= for a different window, chain= for a testnet.
The same thing in Rust:
use hivecomb::{BlockRef, Chain, PrivateKey, Transaction};
use hivecomb::operations::{CustomJson, Operation};
let key = PrivateKey::from_wif(&posting_wif)?;
let block_ref = BlockRef::from_block_id(&head_block_id)?; // cached, not fetched here
let tx = Transaction::new(
block_ref,
vec![Operation::CustomJson(CustomJson {
required_auths: vec![],
required_posting_auths: vec!["alice".into()],
id: "my_app".into(),
json: r#"{"hello":"hive"}"#.into(),
})],
60,
)?;
let signed = tx.sign(&[key], Chain::Hive)?; // pure CPU: no network, ever
requests, websocket-client,Click, click-shell, pycryptodomex and prettytablePython wheels are abi3, so one per platform covers CPython 3.8 and up. The Rust crate
is #![forbid(unsafe_code)] and builds with --no-default-features down to keys,
serialization and signing with no HTTP client and no executor.
A test suite written from a belief only tests the belief, so the serialization is
checked against hived itself rather than against this project's own assumptions:
cargo-fuzz targets, and a differential oracle against beemThat oracle earns its keep. On 2026-08-22 it found four defects that 292 unit tests and
a beem differential oracle had all missed — two of which round-tripped perfectly through
this library's own serializer and deserializer, because a round-trip test cannot catch
a format that is wrong in both directions. It also overturned a finding this project
had published against beem, where beem was right and this library was not. That
retraction is still in the repository, with the reasoning left visible.
A transaction signed by this library has been accepted by Hive: block
109242605.
MIT licensed, like everything it derives from. Issues and corrections welcome — this is
a translation of other people's work, and the people who did that work know it better
than the translation does.