Skip to content

Repository files navigation

ProofPay

결과물이 출처 검증을 통과해야만 에이전트에게 지급하고, 실패하면 환불하는 Solana 결제 데모입니다. 일꾼은 유료 데이터를 구매하고, 검증자는 구매한 원문만으로 주장을 대조합니다.

1분 실행

cp .env.example .env
npm start

http://localhost:3000에서 성공 케이스를 실행한 뒤 환각 주입을 켜고 실패/환불 케이스를 실행합니다. 기본값은 외부 비용이 없는 demo 모드이며 영수증에 SIMULATED가 표시됩니다.

실제 devnet 데이터 결제

한 명령으로 데이터 API, devnet 잔액 어댑터, Pay 게이트와 앱을 함께 실행합니다.

npm run devnet

이 명령은 실제 데이터 결제만 승인하고(0.03 devnet USDC / 작업), 최종 에스크로 정산은 demo 모드로 유지합니다. Ctrl+C를 누르면 네 프로세스가 함께 종료됩니다.

성공 정산까지 실제 devnet USDC로 실행하려면 별도 명령을 사용합니다.

npm run pay:setup
npm run devnet:full

pay:setup은 공식 solana-foundation/pay 소스를 고정 커밋으로 받아 ProofPay의 devnet 직접 정산 어댑터를 빌드합니다. 비밀키를 export하지 않고 Pay 보안 저장소의 default 계정이 서명하며, 정산 트랜잭션은 제출 전에 simulateTransaction을 통과해야 합니다.

배포된 PDA 에스크로를 사용하는 별도 경로는 다음과 같습니다.

npm run pay:setup
npm run devnet:escrow

기본 $0.06 작업은 open_job으로 전액을 vault에 예치하고, 실제 MPP 데이터 구매 뒤 record_data_spend로 선결제 비용 $0.03을 funder에게 보전합니다. 이후 PASS는 남은 $0.03을 worker에게 지급하고 FAIL은 funder에게 환불합니다. 각 명령은 unsigned 및 signed devnet 시뮬레이션을 모두 통과해야 제출됩니다.

기본 예산 $0.06 기준으로 앱 지갑 GniW...GQqQ가 데이터 판매자 8uBou...ZU8k$0.03을 지급하고, 검증 PASS 시 남은 $0.03을 Pay 운영자 2Mo8...qGC에 지급합니다. 실행 화면에 전체 주소와 최대 금액이 먼저 표시되며, 작업 제출이 해당 예산 범위의 devnet 거래 승인입니다.

검증된 자동 E2E 예시(2026-08-03, Job 333543ca-7cf4-41dd-a50c-3c03625e122a)는 Gemini 검증 PASS 86점 후 아래 두 거래가 모두 Finalized 됐습니다.

npm run devnetPROOFPAY_DEBUG=true로 실행되어 서버 설정(비밀값 제외), 잡 단계, 지출 한도, Pay 실행 결과와 receipt 서명을 JSON 로그로 출력합니다. GEMINI_API_KEY가 없으면 화면과 로그에 GEMINI DEMO가 표시되고 결정론적 폴백을 사용합니다.

영수증 탭의 유료 데이터 구매 · MPP · ONCHAIN 카드는 데이터 구매 거래이고, full 모드의 에스크로 지급 · SPL · ONCHAIN 카드는 검증 통과 뒤 남은 예약금의 직접 정산 거래입니다. SIMULATED 카드는 실제 송금 영수증이 아닙니다.

devnetdevnet:full의 에스크로 표시는 앱 지갑 회계이고, devnet:escrow만 배포된 Anchor 프로그램의 PDA vault를 사용합니다. Program ID는 Hb7rbZ6JQFVyn1qp1NwBv4N4gLw7dpHdEyVkcKNzaJeU입니다. signer 연결, 로컬/LiteSVM 검증과 실제 devnet PASS smoke test까지 완료했습니다. 계정 구조와 신뢰 경계는 온체인 에스크로 설계를 참고하십시오.

실제 온체인 PASS E2E(2026-08-03, Job 0f5d9e64-5892-403f-8715-fe13fbdfad7d)는 Gemini 검증 PASS 83점 후 아래 네 거래가 모두 Finalized 됐습니다. Job PDA는 Paid, 지출과 지급은 각각 0.03 USDC로 기록됐고 vault ATA는 정산 시 닫혔습니다.

개별 실행이 필요할 때만 다음 명령을 사용합니다.

npm run data:api
npm run balance:api
npm run pay:gate
npm start

실제 결제 전에 .env에서 APP_MODE=live, PAY_MODE=live, PAY_ACCOUNT=default, PAY_API_URL=http://127.0.0.1:4601, APPROVE_LIVE_PAYMENT=true를 명시합니다. 게이트는 0.03 USDC를 devnet 데이터 판매자 8uBouRGv78yhVRHEcdmd385YTLV9WuFJNhmprZdNZU8k에 청구합니다.

모드

  • APP_MODE=demo: 결정론적 리포트/검증으로 성공과 실패를 항상 재현합니다.
  • APP_MODE=live: Gemini API를 사용합니다. Pro 호출이 quota 오류면 Flash로 폴백합니다.
  • PAY_MODE=sandbox: Pay.sh sandbox 결제 흐름을 사용합니다.
  • PAY_MODE=live: Pay CLI로 실제 유료 API를 호출합니다. APPROVE_LIVE_PAYMENT=true가 추가로 필요합니다.
  • SETTLEMENT_MODE=live: 검증 통과 뒤 USDC를 실제로 보냅니다. 수신자/금액 검토 후 AGENT_RECIPIENTAPPROVE_LIVE_SETTLEMENT=true를 명시해야 합니다.
  • SETTLEMENT_TRANSPORT=direct: Pay 보안 저장소 서명자를 사용하되 fee-sponsor API를 거치지 않고 devnet SPL TransferChecked를 시뮬레이션한 뒤 제출합니다.
  • ESCROW_MODE=onchain: 배포된 프로그램에 예산을 예치하고 APPROVE_LIVE_ESCROW=true일 때만 온체인 정산 명령을 허용합니다. 보통 직접 환경변수를 조합하지 않고 npm run devnet:escrow를 사용합니다.

SOLANA_NETWORK=devnetSOLANA_RPC_URL이 Pay 프로세스에 강제 전달됩니다. GCP/컨테이너에서 외부 접속을 허용할 때만 HOST=0.0.0.0으로 바꾸십시오.

실제 결제 전에는 수신자, 금액, fee payer, 네트워크(devnet)를 검토하고 시뮬레이션하십시오. 비밀키나 시드 문구는 프로젝트 .env에 넣지 않습니다. Pay 계정의 안전한 키 저장소를 사용합니다.

검증

npm test
npm run escrow:check
npm run escrow:test
npm run escrow:integration

escrow:integration은 빌드된 target/deploy/proofpay_escrow.so를 LiteSVM에 올려 실제 System/Associated Token/SPL Token CPI를 실행합니다. devnet RPC나 실제 지갑은 사용하지 않습니다.

데모 순서

  1. 작업과 $0.06 예산 제출 → 앱 지갑에 $0.06 예약
  2. 유료 데이터 구매 → 지출 $0.03, 예약 잔액 $0.03, 영수증 표시
  3. 형식 검사와 주장별 근거 대조 → PASS
  4. 통과 시 남은 $0.03 지급 → PAID
  5. 환각 주입 활성화 후 재실행 → 지원되지 않은 수치 FAIL → 남은 $0.03 예약 해제
  6. 한도 초과 시도 활성화 → 온체인 결제 전에 거절 → $0.06 전액 예약 해제

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages