#ifndef UTILS_H #define UTILS_H #include #include #include "config.h" typedef struct { char *data; size_t len; size_t cap; } StrBuf; void sb_init(StrBuf *sb); void sb_free(StrBuf *sb); int sb_reserve(StrBuf *sb, size_t extra); int sb_append(StrBuf *sb, const char *s); int sb_append_n(StrBuf *sb, const char *s, size_t n); int sb_append_byte_hex(StrBuf *sb, uint8_t b); char *sb_take(StrBuf *sb); int hex_char_to_val(char c); int hex_to_bytes(const char *hex, uint8_t **out, size_t *out_len); char *bytes_to_hex(const uint8_t *data, size_t len); int hex_to_fixed_bytes(const char *hex, uint8_t *out, size_t out_len); void reverse_bytes(uint8_t *data, size_t n); void double_sha256(const uint8_t *data, size_t len, uint8_t out[32]); int encode_varint_hex(uint64_t value, StrBuf *sb); char *decode_nbits_hex(uint32_t nbits); char *calculate_target_hex(const char *bits_hex, double difficulty_factor, const char *network); char *hex_add_width(const char *base_hex, int add_value); #endif