pow

package module
v1.1.2 Latest Latest
Warning

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

Go to latest
Published: Feb 21, 2024 License: MIT Imports: 7 Imported by: 5

README

PoW (Proof of Work) utility

Этот пакет Go предоставляет простую утилиту для генерации и проверки решений Доказательства Работы (Proof of Work, PoW). В него включены функции для генерации случайной строки соли, вычисления хешей SHA256 и проверки решений PoW на соответствие заданному уровню сложности.

Покрытие Кода

Покрытие тестами составляет 100%.

Особенности

  • Генерация Соли: Создает случайную строку (соль), которую можно использовать как часть вызова PoW.
  • Вычисление Хеша: Вычисляет хеш SHA256 для данной входной строки.
  • Проверка Решения PoW: Проверяет, соответствует ли данное решение PoW указанным требованиям сложности.

Использование

Генерация Соли

Для генерации случайной строки соли:

salt := pow.GenerateSalt(DefaultSaltLength) 

DefaultSaltLength - это константа, которая определяет длину соли по умолчанию в 16 символов.

В целом можно управлять длиной соли, передавая желаемую длину в качестве аргумента. Поскольку сложность вычисления хэша SHA256 зависит от входных данных линейно, можно более точно управлять сложностью задачи PoW, увеличивая или уменьшая длину соли.

Вычисление Хеша

Для вычисления хеша SHA256 входной строки

input := "ваша_входная_строка_здесь"
hash := pow.CalculateHash(input)

Выбор основан sha256, поскольку он является криптографически стойким и обеспечивает высокую степень безопасности. Данный алгоритм используется в финансовых средах, таких как биткоин, и является стандартом для многих других криптовалют.

Проверка Решения PoW

Для проверки решения PoW против заданной сложности:

salt := "ваша_строка_соли_здесь"
server_nonce := "ваша_строка_nonce_здесь"
client_nonce := "ваша_строка_решения_здесь"
expectedDifficulty := "ожидаемый_префикс_сложности_здесь"

isValid := pow.VerifyPoWSolution(salt, nonce, client_nonce, expectedDifficulty)
if isValid {
// Решение действительно
} else {
// Решение недействительно
}
Преимущества использования server_nonce
  • Позволяет серверу управлять линейной сложностью задачи PoW, изменяя server_nonce в зависимости от текущей нагрузки сервера.
  • Можно привязать server_nonce к текущему серверу или клиенту, чтобы кластеризовать генерируемые задачи PoW.
  • Дополнительный рандомизатор для задачи PoW, чтобы предотвратить атаки воспроизведения.

В реализации используется в виде рандомного числа от 0 до 9999.

Зависимости

Этот пакет зависит от стандартных пакетов Go crypto/sha256 и encoding/hex для функциональности хеширования, а также от пакетов math/rand и time для генерации случайных солей.

Documentation

Index

Constants

View Source
const (
	// DefaultSaltLength длина соли по умолчанию
	DefaultSaltLength = 16
	// BaseValue базовое значение для генерации случайного числа (nonce)
	BaseValue = 10000
	// Decimal основание системы счисления в десятичной системе
	Decimal = 10
)

Variables

This section is empty.

Functions

func CalculateHash

func CalculateHash(input string) string

CalculateHash Вычисление хэша SHA256

func GenerateSalt

func GenerateSalt(length int) (string, error)

GenerateSalt Генерация случайной строки (salt)

func VerifyPoWSolution

func VerifyPoWSolution(salt, serverNonce, clientNonce, expectedDifficulty string) bool

VerifyPoWSolution Проверка решения PoW

Types

type Task

type Task struct {
	Salt       string `json:"salt"`
	Nonce      string `json:"nonce"`
	Difficulty string `json:"difficulty"`
}

Task структура задачи PoW Salt - случайная строка Nonce - случайное число предоставляемое сервером Difficulty - сложность задачи, является префиксом для хэша, количество нулей в начале хэша

func GenerateTask

func GenerateTask(difficulty, saltLength int) Task

GenerateTask Генерация задачи PoW с заданной сложностью и длиной соли

type TaskSignature

type TaskSignature struct {
	Task      Task      `json:"task"`
	Timestamp time.Time `json:"timestamp"`
}

TaskSignature структура для хранения задачи PoW и временной метки, для подписи

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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