26-10-6 steempro팀의 개발을 위한 괄목할 만한 작업과 정상적으로 작동되고 있는 avle 보팅풀 작업

in AVLE 일상 • 5 days ago

오랫만에 증인 디스코드에서 매우 의미있는 작업이 올라왔습니다.
steempro의 @faisalamin 증인이 sds api를 이용해 개발을 하는데 용이한 라이브러리를 만들었습니다.
https://www.steempro.com/@faisalamin/ship-steem-apps-faster-meet
이글의 한글번역은 다음과 같습니다.


위의 안내글을 한글로 번역한 후, 해당 라이브러리가 갖는 주요 의미와 장점을 정리해 드립니다.


1. 한글 번역

더 빠르게 스팀 앱 구축하기: 타입 지원 SDS 클라이언트 @steempro/sds-api를 소개합니다

@steempro/sds-api 소개 — 스팀 SDS API를 위한 완전한 타입 지원 TypeScript 클라이언트
오늘 스팀 블록체인 데이터 서비스(SDS) REST API용 JavaScript/TypeScript 클라이언트인 @steempro/sds-api를 공개합니다.

SDS는 계정, 게시글, 이력, 보상, RocksDB 쿼리 등 스팀 API의 전체 영역을 단순 REST 경로로 제공하지만, 파라미터나 열(column) 기반 응답은 잘못 사용하기 쉽습니다. 이 패키지는 실시간 API 레퍼런스로부터 직접 생성된 타입을 통해 22개 모듈과 285개 메서드를 래핑(wrapping)합니다.

주요 특징

  • 파라미터 자동 완성: fields: ['를 입력하면 에디터가 허용된 모든 값(name, json_metadata, reputation 등)을 추천해 줍니다. 오타는 런타임의 허용 목록(allow-list) 검증을 반영하여 컴파일 시점 에러로 잡힙니다.
  • 스마트 타임스탬프: Date 객체, 날짜 문자열, 유닉스 타임스탬프(초)를 전달할 수 있으며, 요청 전에 자동으로 변환됩니다.
  • 응답 매핑: SDS는 { cols, rows } 형태의 테이블 구조로 응답하는데, mapSds() 함수 한 번으로 이를 일반 객체 배열로 변환해 줍니다.
  • 구조화된 에러 처리: SDSValidationError, SDSNetworkError, SDSApiError 등이 제공되며, 실패한 모듈, 메서드, URL과 함께 고정된 에러 코드를 포함합니다.
  • 유연한 런타임: 프로미스(Promise) 또는 콜백 방식 지원, 사용자 지정 SDS 인스턴스, 재시도(retries), ESM + CommonJS 빌드 지원, 외부 의존성 없음(zero dependencies).

빠른 시작

npm i @steempro/sds-api

import { SDS, mapSds } from "@steempro/sds-api";

const sds = new SDS();

const rows = mapSds(
  await sds.accounts.getAccount("faisalamin", ["name", "reputation"]),
);

링크


2. 의미 및 주요 포인트 정리

이 라이브러리는 스팀(Steem) 블록체인 생태계에서 SDS(Steem Blockchain Data Services) API를 활용해 웹 서비스나 앱을 개발할 때 개발 생산성과 안정성을 크게 높여주는 도구입니다.

  • 타입 안정성(Type Safety) 확보: TypeScript 환경에서 SDS의 285개에 달하는 다양한 API 메서드와 파라미터를 자동 완성을 통해 손쉽게 호출할 수 있습니다. 오타나 유효하지 않은 필드 요청을 실행 전에(컴파일 단계에서) 미리 잡아낼 수 있어 개발 실수를 방지합니다.
  • 데이터 변환 작업 최적화: SDS API 특유의 { cols, rows } 파이프라인 형태 데이터를 mapSds() 하나로 일반 JSON 객체 형태([{ key: value }])로 변환해 주므로, 프론트엔드나 백엔드 로직에서 데이터를 가공하는 번거로움이 크게 줄어듭니다.
  • 날짜 처리 및 에러 핸들링 간소화: 다양한 날짜 형식을 자동 변환해 주며, 네트워크/유효성/API 에러가 세분화되어 있어 오류 발생 시 원인 추적 및 예외 처리가 수월합니다.
  • 경량화 및 호환성: 외부 의존성(zero runtime dependencies)이 없어 프로젝트가 가볍게 유지되며, ESM과 CommonJS 방식을 모두 지원해 Node.js 환경이나 브라우저 환경 어디서든 손쉽게 도입할 수 있습니다.

그럼 이것으로 무엇을 할 수 있을까요?
아래와 같은 작업을 하는데 도움이 된다고 합니다.

@steempro/sds-api 라이브러리는 스팀(Steem) 블록체인 데이터를 다루는 웹 앱, 자동화 스크립트, 백엔드 서버를 개발하거나 유지보수할 때 강력한 도움이 됩니다.

질문해주신 라이브러리가 실무 작업에서 구체적으로 어떤 도움을 줄 수 있는지 정리해 드립니다.


1. 스팀 기반 봇(Bot) 및 파이썬/노드 자동화 스크립트 작성 시

  • 파라미터 오타 방지 및 검증: 계정 정보, 보상 내역, 증인(Witness) 데이터 등을 조회할 때 어떤 필드가 존재하는지 일일이 문서(API Spec)를 찾아볼 필요 없이, 코드 에디터(VS Code 등)에서 자동 완성(Autocomplete)으로 즉시 확인하고 호출할 수 있습니다.
  • 에러 핸들링: 네트워크 문제, 잘못된 파라미터 전달, API 내부 오류 등이 SDSValidationError, SDSNetworkError 등으로 명확히 구분되어 출력되므로, 백그라운드에서 실행되는 자동화 봇이나 daemon의 예외 처리 로직을 훨씬 안정적으로 작성할 수 있습니다.

2. Steem/Steemit 관련 웹 서비스 및 dApp 개발 시

  • 데이터 구조화 시간 단축 (mapSds): SDS API는 기본적으로 메모리/트래픽 효율성을 위해 데이터를 { cols: ['name', 'rep'], rows: [['faisalamin', 100]] } 형태로 반환합니다. 이전에는 이를 UI에 그리거나 다루기 위해 일일이 객체 배열로 변환하는 커스텀 로직을 짜야 했지만, 이 라이브러리는 mapSds() 함수 한 번으로 [{ name: 'faisalamin', rep: 100 }] 형태의 직관적인 객체로 바꿔줍니다.
  • 타임스탬프 변환 번거로움 해소: 블록체인 데이터를 조회할 때 날짜/시간 조건(Unix Timestamp vs ISO Date String)을 맞추는 작업이 까다로운데, Date 객체나 문자열을 그냥 넘겨도 내부에서 알아서 변환해 주므로 코드가 깔끔해집니다.

3. 노드/서버 인프라 상태 모니터링 및 RocksDB 쿼리 조회 시

  • 285개 API 메서드 전수 타입 지원: SDS가 제공하는 22개 모듈(계정, 게시글, 블록 이력, RocksDB 데이터 등) 전체가 TypeScript 타입으로 정의되어 있어, 블록체인 상태 모니터링 툴이나 대시보드를 구축할 때 API 호출 성공률과 개발 속도를 대폭 높여줍니다.
  • 의존성 없는 경량 패키지 (Zero Dependencies): 외부 라이브러리 꼬임(Dependency Drift)이나 보안 리스크 없이 Node.js 또는 브라우저 환경에서 바로 가볍게 불러와 사용할 수 있습니다.

그동안 sds api를 이용하여 개발을 할때마다 여러번 애로를 겪었는데 이제는 매우 용이하게 사용할 수 있을 것 같습니다.
sds api는 개발의 난이도를 매우 낮춰주는 특징이 있는 반면, 이런 저런 불편한 점이 있었습니다. 아마도 앞으로는 그런 불편함이 많이 해소되지 않을까 합니다.


avle 보팅풀의 일일 분배현황을 보여주는 코드가 안정적으로 작동하고 있습니다.
이정도라면 25 fund로의 전환을 예상보다 빨리 할 수 있을 것 같습니다.

TITLE

2026-10-06 @avle 임대풀 지분율 및 보상

BODY

2026년 10월 6일 기준 @avle 지분율 및 보상입니다.

배분 구간: 2026-09-17 ~ 2026-10-16 (KST) (30일)

[AVLE25 FUND] 직전 한 달(window) 방식
대상 계정 수: 102

aics978: 0.713x19 = 21840156.28 (713 SP, 0.008%, 보상 1.90 SP)
andytherbg: 0.010x19 = 320270.66 (10 SP, 0.000%, 보상 0.02 SP)
asinayo: 1.098x19 = 33659201.78 (1,098 SP, 0.013%, 보상 2.92 SP)
avle-anouncement: 0.159x19 = 4868010.65 (159 SP, 0.002%, 보상 0.44 SP)
avle-curator: 0.200x9 = 2905115.13 (200 SP, 0.001%, 보상 0.26 SP)
avle-market: 85.322x6 + 86.902x2 + 87.584x4 + 88.131x7 = 2666278185.30 (88,131 SP, 1.018%, 보상 245.63 SP)
banguri: 82.203x5 + 82.276x3 + 82.407x4 + 82.536x2 + 82.624x4 + 82.753x1 = 2525637550.02 (82,753 SP, 0.964%, 보상 219.75 SP)
bbn1: 43.335x11 + 44.804x8 = 1347045923.50 (44,804 SP, 0.514%, 보상 117.20 SP)
bcs5: 1.048x19 = 32114473.74 (1,048 SP, 0.012%, 보상 2.79 SP)
bluesky81: 7.754x19 = 237643251.34 (7,754 SP, 0.091%, 보상 21.89 SP)
bomspring: 0.100x1 = 161307.01 (100 SP, 0.000%, 보상 0.01 SP)
brendaalek: 0.045x9 + 0.057x6 + 0.068x4 = 1645029.36 (68 SP, 0.001%, 보상 0.14 SP)
busantravel1: 0.036x19 = 1113685.35 (36 SP, 0.000%, 보상 0.09 SP)
cancerdoctor: 517.379x19 = 15856191829.76 (517,379 SP, 6.053%, 보상 1460.78 SP)
centering: 233.081x19 = 7143255511.12 (233,081 SP, 2.727%, 보상 658.08 SP)
cjsdns: 783.312x19 = 24006274945.72 (783,312 SP, 9.164%, 보상 2088.76 SP)
classicalondon: 81.129x19 = 2486373127.83 (81,129 SP, 0.949%, 보상 229.06 SP)
diffusedcreation: 0.032x19 = 974737.56 (32 SP, 0.000%, 보상 0.08 SP)
dmstnr: 103.670x19 = 3177204407.14 (103,670 SP, 1.213%, 보상 276.44 SP)
dodoim: 421.156x19 = 12907217513.81 (421,156 SP, 4.927%, 보상 1123.04 SP)
dorian-lee: 4.048x19 = 124067877.71 (4,048 SP, 0.047%, 보상 10.79 SP)
ellymin: 10.103x19 = 309631680.98 (10,103 SP, 0.118%, 보상 26.94 SP)
epitt925: 3.004x14 + 3.501x5 = 96078331.37 (3,501 SP, 0.037%, 보상 8.35 SP)
feelsogood: 0.719x19 = 22022633.92 (719 SP, 0.008%, 보상 1.91 SP)
greentree: 432.845x19 = 13265448688.35 (432,845 SP, 5.064%, 보상 1222.10 SP)
hallcat: 2.425x19 = 74315921.69 (2,425 SP, 0.028%, 보상 6.46 SP)
happyworkingmom: 132.065x19 = 4047420440.56 (132,065 SP, 1.545%, 보상 372.87 SP)
harryji: 2.360x19 = 72332919.04 (2,360 SP, 0.028%, 보상 6.29 SP)
hdc: 133.022x19 = 4076751339.66 (133,022 SP, 1.556%, 보상 375.57 SP)
hiziny: 7.633x19 = 233929790.08 (7,633 SP, 0.089%, 보상 21.55 SP)
huahua888: 0.002x19 = 63796.06 (2 SP, 0.000%, 보상 0.00 SP)
hubing97421: 0.105x19 = 3229610.27 (105 SP, 0.001%, 보상 0.28 SP)
isun: 0.971x19 = 29748929.99 (971 SP, 0.011%, 보상 2.58 SP)
jangin-jeongsin: 0.559x19 = 17117327.33 (559 SP, 0.007%, 보상 1.48 SP)
jeong851212: 1.093x19 = 33484222.94 (1,093 SP, 0.013%, 보상 2.91 SP)
jhj8595: 3.043x19 = 93252615.70 (3,043 SP, 0.036%, 보상 8.11 SP)
jizibebe: 1.052x19 = 32240264.98 (1,052 SP, 0.012%, 보상 2.80 SP)
jjj1: 54.402x19 = 1667267472.49 (54,402 SP, 0.636%, 보상 153.60 SP)
jjy: 261.430x11 + 262.609x8 = 8027286256.83 (262,609 SP, 3.064%, 보상 698.44 SP)
joviansummer: 1.999x19 = 61250315.00 (1,999 SP, 0.023%, 보상 5.32 SP)
jsj1215: 509.377x19 = 15610946744.89 (509,377 SP, 5.959%, 보상 1438.19 SP)
jswit: 1.057x19 = 32387891.41 (1,057 SP, 0.012%, 보상 2.81 SP)
juyo: 1.092x19 = 33456914.46 (1,092 SP, 0.013%, 보상 2.91 SP)
kgakakillerg: 0.511x19 = 15654411.53 (511 SP, 0.006%, 보상 1.36 SP)
kk2: 8.117x19 = 248777627.73 (8,117 SP, 0.095%, 보상 22.91 SP)
kk7: 7.917x19 = 242646460.36 (7,917 SP, 0.093%, 보상 22.35 SP)
koreanwar17: 10.048x19 = 307947732.01 (10,048 SP, 0.118%, 보상 26.79 SP)
kstop1: 20.806x19 = 637631591.55 (20,806 SP, 0.243%, 보상 55.47 SP)
kyju: 58.897x19 = 1805018177.03 (58,897 SP, 0.689%, 보상 157.05 SP)
la-ajumma: 21.928x19 = 672042975.94 (21,928 SP, 0.257%, 보상 58.47 SP)
leemikyung: 127.191x19 = 3898047454.13 (127,191 SP, 1.488%, 보상 359.11 SP)
levoyant: 7.161x19 = 219451310.77 (7,161 SP, 0.084%, 보상 19.09 SP)
light-hearted: 0.656x19 = 20119811.62 (656 SP, 0.008%, 보상 1.75 SP)
lotusofmymom: 20.954x19 = 642166090.87 (20,954 SP, 0.245%, 보상 59.16 SP)
lucky2015: 1.510x9 + 2.001x10 = 54207405.44 (2,001 SP, 0.021%, 보상 4.99 SP)
luminaryhmo: 2.618x19 = 80247639.98 (2,618 SP, 0.031%, 보상 6.98 SP)
m69n: 1.650x19 = 50581039.87 (1,650 SP, 0.019%, 보상 4.40 SP)
maikuraki: 6.744x19 = 206689970.88 (6,744 SP, 0.079%, 보상 17.98 SP)
mint1: 7.863x19 = 240973046.12 (7,863 SP, 0.092%, 보상 22.20 SP)
mirae1080: 0.525x19 = 16074808.29 (525 SP, 0.006%, 보상 1.39 SP)
neojew: 10.327x19 = 316506777.64 (10,327 SP, 0.121%, 보상 27.53 SP)
newiz: 14.334x19 = 439294342.23 (14,334 SP, 0.168%, 보상 38.22 SP)
niikii: 0.113x19 = 3467053.91 (113 SP, 0.001%, 보상 0.30 SP)
oldstone: 215.288x6 + 215.918x13 = 6611169992.78 (215,918 SP, 2.524%, 보상 575.23 SP)
osj: 0.134x11 + 0.265x8 = 5791879.87 (265 SP, 0.002%, 보상 0.50 SP)
parkname: 12.500x19 = 383096919.37 (12,500 SP, 0.146%, 보상 33.33 SP)
peterchung: 57.402x19 = 1759202725.92 (57,402 SP, 0.672%, 보상 153.06 SP)
peterpa: 1.509x19 = 46259388.12 (1,509 SP, 0.018%, 보상 4.02 SP)
powerego: 64.261x19 = 1969427907.68 (64,261 SP, 0.752%, 보상 171.35 SP)
pposil: 4.430x19 = 135775546.35 (4,430 SP, 0.052%, 보상 11.81 SP)
puss.coin: 519.244x19 = 15913354353.90 (519,244 SP, 6.075%, 보상 1384.60 SP)
redcross21: 96.775x19 = 2965867007.12 (96,775 SP, 1.132%, 보상 273.23 SP)
redpsy1040: 27.509x19 = 843073158.95 (27,509 SP, 0.322%, 보상 73.35 SP)
remnant39: 150.749x19 = 4620041040.03 (150,750 SP, 1.764%, 보상 425.63 SP)
rme: 104.910x19 = 3215192384.30 (104,910 SP, 1.227%, 보상 279.75 SP)
rtytf2: 211.320x19 = 6476349681.04 (211,320 SP, 2.472%, 보상 563.50 SP)
sandyloreto: 0.009x19 = 276711.91 (9 SP, 0.000%, 보상 0.02 SP)
sanscrist: 1.097x19 = 33612093.65 (1,097 SP, 0.013%, 보상 2.92 SP)
section-0: 0.090x4 = 581023.36 (0 SP, 0.000%, 보상 0.05 SP)
section-1: 0.180x4 = 1162046.66 (0 SP, 0.000%, 보상 0.10 SP)
section-3: 0.260x4 = 1678511.73 (0 SP, 0.001%, 보상 0.14 SP)
seraphim502: 302.155x19 = 9260183176.76 (302,155 SP, 3.535%, 보상 853.11 SP)
ssnam90: 23.868x19 = 731494067.97 (23,868 SP, 0.279%, 보상 63.64 SP)
steem-agora: 699.418x10 + 701.217x8 + 704.233x1 = 21466144207.16 (704,233 SP, 8.194%, 보상 1977.61 SP)
steemzzang: 255.404x11 + 256.083x8 = 7836160045.36 (256,083 SP, 2.991%, 보상 681.81 SP)
stj91: 4.409x19 = 135134813.77 (4,409 SP, 0.052%, 보상 11.75 SP)
stylegold: 0.297x19 = 9112937.08 (297 SP, 0.003%, 보상 0.79 SP)
tb420292: 11.794x19 = 361459534.58 (11,794 SP, 0.138%, 보상 33.30 SP)
tecnoticias: 0.001x19 = 32826.34 (1 SP, 0.000%, 보상 0.00 SP)
theron11: 1.655x19 = 50725565.71 (1,655 SP, 0.019%, 보상 4.41 SP)
thomashnblum: 0.001x19 = 32056.56 (1 SP, 0.000%, 보상 0.00 SP)
trafalgar: 661.847x19 = 20283724381.09 (661,847 SP, 7.743%, 보상 1764.86 SP)
travechno: 0.033x19 = 1016944.63 (33 SP, 0.000%, 보상 0.08 SP)
uwep: 0.161x19 = 4942979.34 (161 SP, 0.002%, 보상 0.43 SP)
veronicalee: 659.201x10 + 660.393x9 = 20219938001.45 (660,393 SP, 7.719%, 보상 1862.80 SP)
visionaer3003: 3.058x19 = 93709601.77 (3,058 SP, 0.036%, 보상 8.15 SP)
whitejangmi: 1.417x19 = 43425617.18 (1,417 SP, 0.017%, 보상 3.77 SP)
wjs: 1.248x11 + 1.505x8 = 41554482.72 (1,505 SP, 0.016%, 보상 3.61 SP)
yasu: 137.840x19 = 4224407324.92 (137,840 SP, 1.613%, 보상 367.56 SP)
yasu.witness: 1.220x19 = 37391988.41 (1,220 SP, 0.014%, 보상 3.25 SP)
ygs: 62.503x2 + 62.541x6 + 62.553x8 = 1614099540.29 (62,553 SP, 0.616%, 보상 140.44 SP)
yoghurty: 1.015x19 = 31104743.68 (1,015 SP, 0.012%, 보상 2.70 SP)

Sort:  

High-Yield Curation by @steem-seven

Your content has been supported!

| Vote Witness @seven.wit | Meet Speak on Steem |
|---|---|---|


We are the hope!

S7VEN Banner

This post has been upvoted by @italygame witness curation trail


If you like our work and want to support us, please consider to approve our witness




CLICK HERE 👇

Come and visit Italy Community



Congratulations!

Your post has been selected and upvoted by the SteemPro Team 🚀

Explore more on SteemPro:
🌐 https://www.steempro.com
🎮 Play SteemHeights: https://www.steempro.com/games/steem-heights
💬 Join our Discord: https://discord.gg/Bsf98vMg6U

💪 Supporting the growth of the Steem ecosystem together.

🟩 Vote for witness faisalamin:
https://steemitwallet.com/~witnesses
https://www.steempro.com/witnesses#faisalamin

steempro-cover-black.png
This is an automated message.