Polkadot-API(PAPI) 소개 및 사용 가이드

Polkadot 생태계에서 분산형 애플리케이션(dApp), 웹 페이지, 지갑 개발자는 일반적으로 개발에 JavaScript와 TypeScript를 사용합니다. Polkadot SDK 기반 블록체인과의 상호작용은 전통적으로 Polkadot JS 라이브러리에 주로 의존해 왔습니다. 그러나 최근 Polkadot 생태계에서 많은 주목을 받고 있는 새로운 도구가 등장했습니다. 바로 Polkadot-API(PAPI)로, 보다 현대적이고 모듈식 개발 경험을 제공하며 라이트 클라이언트에 최적화되어 있습니다. 본 논문에서는 PAPI의 특성, 환경 구성, 기본 사용법, 실제 개발에서의 장점 등을 소개한다.

Polkadot-API(PAPI) 소개 및 사용 가이드

Polkadot 생태계에서 분산형 애플리케이션(dApp), 웹 페이지, 지갑 개발자는 일반적으로 개발에 JavaScript와 TypeScript를 사용합니다. Polkadot SDK 기반 블록체인과의 상호작용은 전통적으로 Polkadot JS 라이브러리에 주로 의존해 왔습니다. 그러나 최근 Polkadot 생태계에서 많은 주목을 받고 있는 새로운 도구인 Polkadot-API(PAPI) 가 등장했습니다. 이 도구는 보다 현대적이고 모듈식 개발 경험을 제공하며 라이트 클라이언트에 최적화되어 있습니다. 본 논문에서는 PAPI의 특성, 환경구성, 기본 사용법, 실제 개발에서의 장점 등을 소개한다.

PAPI의 특징

Polkadot-API(PAPI)는 분산 애플리케이션(dApp) 개발자를 위한 모듈식 구성 가능 라이브러리로, 특히 " 가벼운 클라이언트 우선 " 접근 방식을 위해 설계되었습니다. 이 플랫폼의 목표는 개발자가 효율적이고 완전히 분산된 애플리케이션을 구축하는 데 도움이 되는 포괄적인 도구 세트를 제공하는 것입니다. PAPI에는 다음과 같은 특징이 있습니다.

  • 경량 클라이언트 최적화: JSON-RPC 사양 의 새로운 버전을 통해 완전히 분산된 상호작용을 지원합니다.

  • 강력한 TypeScript 지원: 온체인 메타데이터를 통해 자동으로 유형 정의와 문서를 생성하고, 개발 작업을 간소화하며, 온체인 스토리지, 상수, 트랜잭션, 이벤트 및 런타임 호출에 원활하게 액세스할 수 있습니다.

  • 다중 체인 호환성: 개발자가 여러 블록체인에 동시에 연결할 수 있도록 하고 다중 설명자 지원 및 런타임 업데이트 호환성 검사를 제공합니다.

  • 성능 최적화: 불필요한 리소스 묶음을 방지하기 위해 기본 BigInt 유형 , 동적 가져오기 , 모듈식 하위 경로를 활용하여 성능을 향상시킵니다.

  • 유연한 API 옵션: Promise 기반 API와 관찰 가능한 API를 지원하고, Polkadot.js와의 통합을 용이하게 하며, 브라우저 확장 프로그램이나 개인 키를 통한 서명 옵션을 제공합니다.

이 모든 요소 덕분에 PAPI는 분산형 애플리케이션을 구축하고 개발 효율성을 개선하는 동시에 애플리케이션 성능과 확장성을 최적화하는 데 이상적인 도구가 되었습니다. 실제 사용 관점에서 볼 때 PAPI의 가장 매력적인 기능 중 하나는 체인의 메타데이터를 기반으로 TypeScript 유형 정의를 쉽게 생성 할 수 있다는 것입니다. 자세한 설명서는 Polkadot 공식 설명서를 참조하거나 PAPI 공식 웹사이트를 방문하세요.

🔗Polkadot 공식 문서 :

https://docs.polkadot.com/develop/toolkit/api-libraries/papi/

🔗 PAPI 공식 웹사이트 : https://papi.how/

환경건설

종속성 설치

먼저 npm이나 yarn을 통해 설치해야 합니다.

 npm i polkadot-api yarn add polkadot-api

체인의 메타데이터 가져오기

Polkadot의 릴레이 체인처럼 스크립트에서 이미 기본 지원이 있으며 이름으로 직접 얻을 수 있습니다 . help를 실행하면 polkadot, kusama 및 해당 시스템 병렬 체인 목록을 얻을 수 있습니다.

 npx papi add -h Usage: polkadot-api add [options] <key>

Add a new chain spec to the list

Arguments: key Key identifier for the chain spec

Options: --config <filename> Source for the config file -f, --file <filename> Source from metadata encoded file -w, --wsUrl <URL> Source from websocket url -c, --chainSpec <filename> Source from chain spec file -n, --name <name> Source from a well-known chain (choices: "ksmcc3", "ksmcc3_asset_hub", "ksmcc3_bridge_hub", "ksmcc3_encointer", "ksmcc3_people", "paseo", "paseo_asset_hub", "paseo_people", "polkadot", "polkadot_asset_hub", "polkadot_bridge_hub", "polkadot_collectives", "polkadot_people", "rococo_v2_2", "rococo_v2_2_asset_hub", "rococo_v2_2_bridge_hub", "rococo_v2_2_people", "westend2", "westend2_asset_hub", "westend2_bridge_hub", "westend2_collectives", "westend2_people")

추가할 때 이름을 지정할 수 있습니다.

 npx papi add dot -n polkadot

-w 옵션을 사용하면 목록에 없는 체인을 추가할 수도 있습니다. 기본 포트를 사용하여 로컬 서버로 체인을 시작하고 추가합니다.

 npx papi add asset -w ws://10.0.0.11:9944

성공적으로 추가한 후, .papi라는 숨겨진 디렉토리가 프로젝트 디렉토리에 나타나고, 여기서 얻은 메타데이터를 기반으로 유형 파일이 생성됩니다.

Polkadot-API(PAPI) 소개 및 사용 가이드

원칙은 설명자를 포함하여 packagejson에 종속성을 추가하는 것 입니다.

 "dependencies": { "@polkadot-api/descriptors": "file:.papi/descriptors",

프로그래밍 경험

백그라운드 로그를 보고 디버깅을 용이하게 하기 위해 코드는 로컬 노드와 상호 작용합니다. 공식 문서에 따르면 클라이언트는 Smoldot과 같은 다양한 모드를 지원합니다 . 여기서는 기본 웹 모드만 보여드리겠습니다.

클라이언트 API 가져오기

먼저, ws 공급자를 통해 체인의 RPC 노드 주소와 포트를 지정한 다음 클라이언트를 초기화합니다. 모든 유형은 getTypedApi 메서드를 통해 얻을 수 있는데, 이 메서드는 강력한 유형의 프로그래밍에 익숙한 개발자에게 매우 편리하고 매우 친숙합니다.

유형 정의는 이전 단계의 명령을 사용하여 생성됩니다.

 import { asset } from '@polkadot-api/descriptors'; import { createClient } from 'polkadot-api'; import { getWsProvider } from 'polkadot-api/ws-provider/web';

async function main() { const provider = getWsProvider('ws://10.0.0.11:9944'); const client = createClient(provider); const dotApi = client.getTypedApi(asset);

상수와 변수 가져오기

그런 다음 API를 통해 체인과 간단히 상호작용할 수 있습니다. 여기서는 잔액에 대한 상수와 변수를 얻습니다 . 이 코드는 각각 계좌의 최소 잔액과 Alice 계좌의 사용 가능한 잔액을 출력합니다.

 import { asset } from '@polkadot-api/descriptors'; import { createClient } from 'polkadot-api'; import { getWsProvider } from 'polkadot-api/ws-provider/web';

async function main() { const provider = getWsProvider('ws://10.0.0.11:9944'); const client = createClient(provider); const dotApi = client.getTypedApi(asset); const existentialDeposit = (await dotApi.constants.Balances.ExistentialDeposit()).toString(); console.log(existentialDeposit); const balance = await dotApi.query.System.Account.getValue("5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY"); console.log(balance["data"]["free"].toString()); }

main()

거래 전송 중

여기서는 앨리스에서 밥으로의 가장 간단한 전송 작업을 완료합니다. API를 받은 후, Alice와 Bob의 계정을 각각 가져오고, Alice의 서명자를 초기화하고, Bob의 공개 키를 MultiAddress 형식으로 변환합니다. 마지막으로 거래에 서명하고 보냅니다.

 import { MultiAddress } from "@polkadot-api/descriptors" import { asset } from '@polkadot-api/descriptors'; import { createClient } from 'polkadot-api'; import { getWsProvider } from 'polkadot-api/ws-provider/web'; import { getPolkadotSigner } from "polkadot-api/signer" import { sr25519, DEV_PHRASE, entropyToMiniSecret, mnemonicToEntropy, ss58Address } from "@polkadot-labs/hdkd-helpers" import { sr25519CreateDerive } from "@polkadot-labs/hdkd"

async function main() { const provider = getWsProvider('ws://10.0.0.11:9944'); const client = createClient(provider); const dotApi = client.getTypedApi(asset);

const entropy = mnemonicToEntropy(DEV_PHRASE) const miniSecret = entropyToMiniSecret(entropy) const derive = sr25519CreateDerive(miniSecret)

const alice = derive("//Alice") const bob = derive("//Bob") const signer = getPolkadotSigner(alice.publicKey, "Sr25519", alice.sign)

const dest = MultiAddress.Id(ss58Address(bob.publicKey)) const result = await dotApi.tx.Balances.transfer_keep_alive({ dest, value: BigInt(123), }).signAndSubmit(signer) console.log(result) } main()

거래가 성공적으로 완료되면 결과 형식은 다음과 같습니다.

 { txHash: '0x803428a07a2e1c6de378e84a01249bc4f237df546a719bcd369e0418800f54cc', block: { index: 2, number: 1162, hash: '0x17aeb0944a33b848655c6fc3945bae1a3bd436e5fe92b0f15a2d7fe027764cc7' }, ok: true, events: [ { type: 'Balances', value: [Object], topics: [] }, { type: 'Balances', value: [Object], topics: [] }, { 유형 { type: 'Treasury', value: [Object], topics: [] }, { type: 'Balances', value: [Object], topics: [] }, { type: 'Treasury', value: [Object], topics: [] }, { type: 'Balances', value: [Object], topics: [] }, { type: 'TransactionPayment', value: [Object], topics: [] }, { type: 'System', value: [Object], topics: [] } ] }

이벤트 수신

Dapp 개발에서도 이벤트 처리가 필수적입니다. 다음 코드는 체인을 얻는 방법을 보여줍니다.

 import { asset } from '@polkadot-api/descriptors'; import { createClient } from 'polkadot-api'; import { getWsProvider } from 'polkadot-api/ws-provider/web';

async function main() { const provider = getWsProvider('ws://10.0.0.11:9944'); const client = createClient(provider); const dotApi = client.getTypedApi(asset); dotApi.event.Balances.Transfer.watch().pipe().forEach(console.log) } main()

획득한 이벤트의 형식은 다음과 같습니다. 발신자, 수신자 주소 등을 기준으로 필터링하는 등 모니터링에 몇 가지 필터를 적용 할 수도 있습니다. 직접 시도해 볼 수 있습니다.

 { meta: { phase: { type: 'ApplyExtrinsic', value: 2 }, block: { hash: '0x9aa50c25fcc0801ab98d588a8faf8648a98b51adc01ebe2816e381348e6275c2', number: 1078, parent: '0xcf12ee84af9eff68b525d1d0c6a6b032accc914e80f05ed78b4d62d8170e076c' } }, payload: { from: '5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY', to: '5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty', amount: 1000000000000n } }

요약하다

기존 Polkadot JS 라이브러리와 비교했을 때 PAPI는 보다 현대적인 개발 환경을 제공하며, 특히 TypeScript 유형 정의를 자동 생성하는 기능을 제공하여 개발자가 온체인 데이터 구조를 보다 명확하게 이해하고 개발 효율성을 크게 향상시킬 수 있습니다 . 모듈식 디자인, 가벼운 클라이언트 우선 전략, 다중 체인 호환성 덕분에 Polkadot 생태계에서 주목할 만한 새로운 도구가 되었습니다. 물론, PAPI는 아직 최적화 중이므로 개발자는 사용 중에 몇 가지 버그를 만날 수 있습니다. 적극적인 피드백과 홍보 기여를 환영합니다 . PAPI가 폴카닷 생태계의 발전을 더욱 촉진하고, 개발자들이 블록체인과 상호작용할 수 있는 더욱 편리한 방법을 제공하기를 바랍니다!

"블록체인 기술 개발 입문 17판" 등록이 시작되었습니다.

OneBlock+와 Polkadot이 공동 출시한 "블록체인 기술 개발 입문 17판 | Polkadot에서의 Solidity 개발"이 곧 시작됩니다! 본 과정은 공식적으로 2025년 3월 7일 에 시작되어, 6주 동안 진행되며, 6개의 녹화된 수업 , 6개의 과제, 여러 워크숍 으로 구성됩니다. 체계적인 학습과 실습을 통해 여러분이 블록체인 기술을 심도 있게 탐구하고 암호화의 미래에서 새로운 장을 열 수 있도록 도와드리겠습니다!

✨ 이 과정은 완전 무료이며 대중에게 공개됩니다 . 신청을 통해 입장할 수 있으며 정원이 제한되어 있습니다 ! 아래 링크를 클릭하여 신청서를 즉시 작성하세요. 신청서가 승인되면, 귀하의 학업 자리를 확보하기 위해 연락드리겠습니다!

🔗지금 입학 신청하세요:

https://wj.qq.com/s2/17653871/18t2/

Polkadot-API(PAPI) 소개 및 사용 가이드

공유하기:

작성자: OneBlock Community

이 글은 PANews 입주 칼럼니스트의 관점으로, PANews의 입장을 대표하지 않으며 법적 책임을 지지 않습니다.

글 및 관점은 투자 조언을 구성하지 않습니다

이미지 출처: OneBlock Community 침해가 있는 경우 저자에게 삭제를 요청하세요.

PANews 공식 계정을 팔로우하고 함께 상승장과 하락장을 헤쳐나가세요
추천 읽기
4시간 전
9시간 전
11시간 전
15시간 전
16시간 전
2025-12-29 12:00

인기 기사

업계 뉴스
시장 핫스팟
엄선된 읽을거리

엄선 특집

App内阅读