semvec/pypi-packages huggingface dataset:
blockchain-linker 0.1.0
사용자 정보를 블록체인으로 만들어주는 Python 패키지
Requires Python: >=3.7

# blockchain-linker 

[한국어](README.md) | [영어](README_EN.md)

사용자 정보를 블록체인으로 안전하게 저장하고 관리할 수 있는 Python 패키지입니다. 간단한 인터페이스로 블록체인 구조를 이해하고, 데이터의 무결성을 직접 확인할 수 있습니다.

## 주요 특징
- 사용자 정보 등 임의의 데이터를 블록체인에 저장
- 블록체인 유효성 검증 기능 제공
- 블록체인 저장 및 불러오기 지원 (JSON 파일)
- 블록 데이터 수정 및 체인 재계산 기능
- 직관적인 API와 예제 코드 제공

## 설치 방법
```bash
pip install blockchain_linker
```

## 빠른 시작 예제
```python
from blockchain_linker import make_blockchain

users = [
    {"name": "Alice", "age": 30},
    {"name": "Bob", "age": 25}
]

chain = make_blockchain(users)
print(chain.to_list())
print('유효한 체인:', chain.is_valid())

# 체인 저장 및 불러오기
chain.save('chain.json')
loaded = chain.load('chain.json')
print(loaded.to_list())
```

## 주요 API
### Block
- 블록의 인덱스, 타임스탬프, 데이터, 이전 해시, 해시 정보를 가짐
- `to_dict()`: 블록 정보를 딕셔너리로 반환

### Blockchain
- `add_block(data)`: 새 블록 추가
- `is_valid()`: 체인 유효성 검사
- `to_list()`: 전체 체인을 리스트로 반환
- `save(filename)`: 체인 저장 (JSON)
- `load(filename)`: 저장된 체인 불러오기 (클래스 메서드)
- `modify_block_data(index, new_data)`: 특정 블록 데이터 수정 및 해시 재계산

### make_blockchain(user_list)
- 사용자 리스트로 블록체인 객체 생성

## 고급 사용 예시
```python
from blockchain_linker import make_blockchain

users = [
    {"name": "Alice", "age": 30},
    {"name": "Bob", "age": 25}
]
chain = make_blockchain(users)

print("수정 전:", chain.to_list())

# 1번 블록(= Alice)의 데이터를 수정
new_data = {"name": "Alice", "age": 31, "city": "Seoul"}
success = chain.modify_block_data(1, new_data)
print("수정 성공 여부:", success)
print("수정 후:", chain.to_list())
print('유효한 체인:', chain.is_valid())
```

## 예제 실행
```bash
python examples/index.py
```

## 기여 방법
1. 이슈/PR을 통해 자유롭게 의견을 남겨주세요.
2. 코드 기여 전 반드시 테스트를 통과해주세요.

## 라이선스
MIT License
kstash 0.2.0
Stashed payloads with nice URIs
Requires Python: >=3.13

# kstash

`kstash` converts payloads into addressable stashes. 

It allows programs to communicate using stash addresses instead of entire payloads, reducing the strain on messaging systems.

[![CI](https://github.com/ccortezia/kstash/actions/workflows/release.yml/badge.svg)](https://github.com/ccortezia/kstash/actions/workflows/release.yml)

## Installation

```bash
pip install kstash
```

## Requirements

- Python >= 3.13
- AWS credentials configured (for S3 storage)

## Basics

Use `kstash` to put a payload into an addressable stash.

Then provide `kstash` with the address to recover the payload.

```python
import kstash
stash = kstash.create("my-payload", "some-data")
loaded = kstash.retrieve(stash.address)
stash == loaded
```

## Simple Storage (S3)

By default, `kstash.create()` saves large payloads to S3.

```python
# Optional: Test Backend Setup
import boto3
from moto import mock_aws
mock_aws().start()
conn = boto3.resource("s3", region_name="us-east-1")
conn.create_bucket(Bucket="stashes")
```

```python
import kstash

# Process A: Sends a message containing the address of a stashed payload.
context = {"as_of": "today", "bin": b"0" * 1024 * 512}
stash = kstash.create("context", context, namespace="stashes")
message = {"context": str(stash.address), "command": "gen_report"}  
assert str(stash.address) == "s3://stashes/context.c6ab205fe81dcad3eec3ab48b96b0618"

# Process B: Rebuilds the message from the stash's address.
loaded_stash = kstash.retrieve(message["context"])
assert loaded_stash == stash
```

## Shared Links

Use `stash.share()` to produce a short-lived HTTPS link to the stash. 

See `kstash.Config.share_ttl_sec` for configuration details.

```python
import time 

# Process A: Sends a message containing a shared link.
shared_link = stash.share(ttl_sec=5)

# Process B: Rebuilds the message from the shared link.
time.sleep(3)
loaded_stash = kstash.retrieve(shared_link)
assert loaded_stash == shared_stash

# Process B: Fails to retrieve the stash from an expired link.
time.sleep(3)
loaded_stash = kstash.retrieve(shared_link)
# Error: StashNotFound, share link expired
```

## Inline Data Optimization

`kstash.create()` embeds small payloads in the stash's address.

See `kstash.Config.max_inline_len` for configuration details.

```python
import kstash
stash = kstash.create("colorcode", 12, namespace="stashes")
assert str(stash.address) == "inline://stashes/colorcode?data=DA%3D%3D"
loaded_stash = kstash.retrieve(stash.address)
assert loaded_stash == stash
loaded_stash.data
```

## Backends

Storage backends can be disabled to address specific deployment or test scenarios.

See `kstash.Config.backends` for more details.

```python
import kstash
config = kstash.Config(backends=["mem"])
stash = kstash.create("object", {"data": 123}, config=config)
assert str(stash.address) == "mem://default/object.34472d91b2f84052bf26d4eaa862ef86"
loaded_stash = kstash.retrieve(stash.address, config=config)
assert loaded_stash == stash
```

### Development Setup

```bash
uv sync
source .venv/bin/activate
pytest
```