제퍼넷 로고

반복 결제 PoC 란 무엇이며 어떻게 작동합니까?

시간

Lisk Hacker Noon 프로필 사진

@liskLisk

JavaScript로 작성된 블록 체인 애플리케이션을위한 소프트웨어 개발 키트를 개발자에게 제공합니다.

Moosty 팀에서는 실천을 통해 배웁니다. 개념 증명을 구축함으로써 우리는 블록 체인 기술과 네트워크 역학의 생성에 대해 배웁니다. 우리는 커뮤니티 (온라인 및 오프라인), 지식 기관 및 조직과 협력하고 위트레흐트의 Lisk 커뮤니티, LCU 커뮤니티 및 지역 비즈니스와 강력한 유대 관계를 맺고 있습니다. 우리와 함께이 혁신 여정에 동참 하시겠습니까? 개념 증명을 함께 구축합시다.

프로젝트 소개

반복 지불은 리스크 SDK. 두 당사자 (피어 투 피어)간에 결정적 계약을 구축하기 위해 사용자 지정 트랜잭션을 활용하는 비교적 간단한 기술 솔루션을 보여줍니다. 시스템에서 계정 (지갑)을 생성 한 사람과 계약을 체결 할 수 있습니다. 계정, 계약, 모든 변경 사항 및 모든 활동은이 PoC를 위해 특별히 생성 된 블록 체인에 저장됩니다.

이 프로젝트는 Lisk 빌더 부여. 이제 개념 증명에 대해 자세히 설명합니다. 

사용 사례“정부 기관의 보조금”

현재 상황

조직 (A)이 정부 (B)로부터 보조금을 신청합니다. 이것은 현재 1 년 동안 한 가지 금액으로 지급됩니다. 수신 측은이 기간 동안 특정 조건을 충족해야합니다. 수령인이 연말에 조건을 충족하지 않은 경우 보조금을 전액 또는 부분적으로 상환해야합니다.

왜 다르게 작동해야합니까?

당사자 A가 조건을 준수하지 않고 보조금의 전체 또는 일부를 상환해야하는 상황에서 대부분의 경우 전체 금액이 이미 지출 된 문제가 발생합니다. 이렇게하면 보조금 제공자 (파티 B)가 회수 할 금액을 보장받지 못하고 당사자 A가 재정 문제에 부딪 힐 수 있습니다.

정기 결제는 어떻게 이루어 집니까?

당사자 A는 얼마나 자주, 언제, 금액을 포함하여 지불 조건으로 계약을 작성합니다. 당사자 B는 계약 조건을 충족하기 위해 금고를 토큰으로 채 웁니다. 당사자 A가 계약에서 토큰을받을 자격이있는 기간 동안 당사자 A는 해당 기간 동안 토큰을 받기 위해 거래를 실행할 수 있습니다.

당사자 B가 계약을 조기에 종료하려는 경우 사전 설정된 수수료를 당사자 A에게 지불해야하며 당사자 B는 금고에서 남은 토큰을 받게됩니다. 이것은 계약의 조기 종료와 비교할 수 있습니다.

미래

“미래에 여러분은 기타 교사 인 이웃과 자신과 계약을 맺을 수 있습니다. 1 년 계약을 체결하고 매월 합의 된 금액을 지불합니다. 그런 다음 한 달 전에 선불금을 입금하고 어느 쪽이 계약을 해지하면 마지막 달이 교사에게 제공됩니다. 일단 계약이 성립되면 불변이며 두 당사자간에 투명하고 읽기 쉬운 계약이 생성됩니다.”

유연한 서비스 인프라

오늘날이 도구는 소수의 사용자 지정 트랜잭션. 이 XNUMX 가지 맞춤형 트랜잭션을 통해 우리는 두 당사자간에 유연한 계약 솔루션을 생성하는 강력한 블록 체인 애플리케이션을 구축 할 수 있습니다. 다음을 생성 할 수 있습니다.

  • 월별 지불 메커니즘.
  • 누군가가 계약을 해지하지 않는 한 3 개월 (또는 그 이상) 후에 돈이 자동으로 잠금 해제되는 보조금을 제공하십시오.
  • 전체 금액을 선불로 지불하는 구독 (할인을 받기 위해).
  • 2 기간을 선불로 지불하는 서비스 계약.
  • 자녀를 위해 용돈을 따로 마련하십시오.
  • 최대 금액까지 월간 기부를 예약하십시오.

이러한 트랜잭션의 기능을 확장하거나 새로운 사용자 지정 트랜잭션이 추가되고 10 개 또는 20 개의 서로 다른 트랜잭션을 통합 할 때 많은 가능성이 있습니다.

예 : 크라우드 펀더에 대한 (최대) 월 지불금으로 크라우드 펀드를 만듭니다. 

지금 연락주십시오! 더 나은 아이디어가 있다면! 

기술적 세부 사항

이 섹션에는 기술 세부 정보에 대한 소개가 포함되어 있으며 사용 된 다양한 프레임 워크, 생성 된 사용자 지정 트랜잭션 및 마지막으로 Lisk SDK 작업 경험에 대한 개요를 제공합니다.

PoC의 구성 요소

  • 백엔드 : 블록 체인에서 실행할 수있는 사용자 지정 트랜잭션 작업.
  • 백과 프런트 엔드를 연결하는 확장 된 HTTP API입니다.
  • 프런트 엔드 : 계약을 관리하기위한 ReactJS 프런트 엔드 지갑 (트랜잭션과 상호 작용).

맞춤 거래

“트랜잭션은 Lisk SDK를 사용하여 생성 된 블록 체인 애플리케이션의 필수 부분입니다. 네트워크에서 사용자가 수행 할 수있는 일련의 작업을 정의하기 때문입니다. 각 거래는 네트워크에 등록 된 특정 거래 유형에 속합니다.”  Lisk SDK 문서.

이 개념 증명은 XNUMX 개의 서로 다른 사용자 지정 트랜잭션을 사용합니다. 다른 거래 아래 나열된 계약 지갑과 상호 작용할 수 있습니다.

  • 만들기 – 계약하기.
  • 검토 / 수락 – 계약을 검토하고 확인합니다.
  • 펀드 계약 – 계약에 토큰을 예치합니다.
  • 인출 – 계약에서 토큰을받습니다. 
  • 종료 – 계약의 조기 종료. 
  • 수도꼭지 거래 – 지갑에 토큰 및 사용자 이름 등록을 제공합니다.

참고 : 트랜잭션은 계약을 더 빠르게 시뮬레이션하기 위해이 개념 증명에서 분 단위로 작동합니다.

을 참조 Lisk 거래 유형 등록 저장소 열기 등록 된 모든 Lisk 트랜잭션 유형 목록 누구나 풀 요청을 통해 신규 등록을 추가하거나 기존 등록을 업데이트 할 수 있으며 등록 된 사용자 지정 트랜잭션을 재사용하여 자신의 블록 체인 앱을 빠르게 설정할 수도 있습니다.

계약

계약은 아래와 같이 준수해야하는 다른 규칙으로 작성됩니다.

  • 단위 : 시간 단위 [매일, 매주, 매월, 매년].
  • 단가 : 각 유닛이 금고에서 검색 할 수있는 토큰 수.
  • 선불 단위 : 금고에 있어야하는 단위 수 * 가격.
  • 시작 : 계약이 시작될 때.
  • 총 단위 : 계약에 포함 된 단위 수.
  • 해지 수수료 : 계약의 조기 취소로 지불되는 수수료입니다.
  • 수신자 : 각 유닛이 금고 (lot A)에서 시간 토큰을 가져올 수있는 주소입니다.
  • 계약자 : 안전한 채울 수있는 주소 (로트 B).
  • 설명 : 설명 계약.
  • 이름 : 계약 이름입니다. 

어떻게 진행합니까?

계약은 미래의 발송 인 또는 계약 수령인이 작성할 수 있습니다. 이 계약은 검증 거래를 통해 상대방이 승인하거나 수정할 수 있습니다.

계약이 수정 된 경우 첫 번째 당사자는이 수정을 승인하거나 거부해야합니다. 양 당사자가 합의 할 때까지이 프로세스를 반복 할 수 있습니다. 송금인 (파티 B)은 금고를 전체 지불 금액을 사용하고 계약을 활성화하는 커스텀 펀드 거래로 채울 수 있습니다.

수신 당사자 (A)는 계약에서 허용하는 경우 거래를 통해 저장소에서 토큰을 검색 할 수 있습니다. 선불 조건이 충족되지 않으면 계약이 활성화되지 않습니다.

양 당사자는 숏 수수료를 공제 한 후 남은 금액이 당사자 (B)에게 반환되는 해지 거래로 계약을 조기에 종료 할 수 있으며, 이후에 숏 수수료가 당사자 A에게 지급됩니다.

SDK4.0

이 PoC는 Lisk SDK 4.0을 사용합니다. 이것은 동적 수수료 및 체인 상태를 제공합니다. 체인 상태 저장소는 트랜잭션 시간을 결정하는 데 사용되며 계약 상태에서 잠금 해제 가능한 토큰 수를 결정할 수 있습니다. 이 SDK 버전에서는 타임 스탬프가 기본 트랜잭션에서 제거되고 임시 값이 도입됩니다.

nonce의 증분 특성으로 인해 프런트 엔드는 트랜잭션이 서명되기 직전에 매번 블록 체인에서 계정 임시 값을 검색합니다. 

// slotTypes = [minutes, hours, days, months] in seconds
export const getPastSlots = ( start, now, type, length, unit
) => { const slot = slotTypes[type] * length; return Math.floor((now - start) / slot) - unit;
}
const unitsAvailable = getPastSlots( contract.asset.start, store.chain.lastBlockHeader.timestamp, contract.asset.unit.type, contract.asset.unit.typeAmount, contract.asset.payments
);

동적 수수료 솔루션

동적 수수료는 매력처럼 작동합니다. 문서가 누락 되었기 때문에 (v4를 너무 일찍 사용하기 시작 했으므로) 계산 방법을 찾는 데 시간이 걸렸습니다. 아래에 설명 된 방식으로 해결했습니다.

const tx = new FundContractTransaction({ nonce: nonce.toString(), senderPublicKey: publicKey, asset: { ...data }
}); tx.fee = (tx.minFee + BigInt(65000)).toString();
tx.sign(config.networkIdentifier, passphrase);

BigInt

프론트 엔드의 경우 BigInt (발행물), BigInt는 아직 통합을 완료하지 않은 브라우저에서 js 용 버퍼 라이브러리를 사용하기 때문입니다.

`buffer.readBigUint64BE()`

. 이 함수는 Lisk SDK에서 사용되며 트랜잭션 서명에 필요합니다.

이 함수에 대한 pull 요청은 파이프 라인에 있지만 작성 시점에 아직 수락되지 않았습니다. 버퍼 리포지토리를 포크하고 풀 리퀘스트와 병합하여 현재 작동하도록 수정했습니다.

HTTP API

기본 Lisk HTTP API 부분적인 사용자 이름, 계약 특정 자산 필드 및 트랜잭션 특정 자산 필드를 검색 할 수 있도록 추가 API 모듈로 확장되었습니다.

예를 들어 모든 계약에는 자신에게 속한 거래가 있지만 계정은 거래의 발신자가 아닙니다.

계약에 속한 모든 트랜잭션을 수집하기 위해 API는 트랜잭션 엔티티로부터 트랜잭션을 수신합니다.

`asset_contains`

트랜잭션 엔터티로 필터링합니다. 이를 통해 검색 할 수 있습니다.

`.asset.contractPublicKey`

===

`contract.publicKey`

프런트 엔드

백엔드에서 사용자 지정 트랜잭션을 만드는 것은 익숙해지기 시작할 때 상대적으로 쉽습니다. 가장 시간이 많이 걸리는 요소는 UI 요구 사항에 따라 두 가지를 함께 연결하는 프런트 엔드입니다. 블록 체인에서 데이터를 수집하는 것은 더욱 최적화 될 수 있지만이 개념 증명의 범위를 벗어납니다. 

undoAsset () 메서드 

또한,

UndoAsset()

커스텀 트랜잭션의 메서드는 정적 명목 데이터로 생성하기 어려울 수 있습니다. SDK의 이후 버전에서 이미 계획된 UndoAsset () 메서드없이 사용자 지정 트랜잭션을 생성하는 새로운 솔루션을 기대하고 있습니다. 이를 해결하면 검토 트랜잭션이 훨씬 적은 데이터를 전송하므로 네트워크 리소스를 덜 사용하므로 동적 수수료가 낮아집니다.

자료

영감을 받고 자신 만의 개념 증명 블록 체인 애플리케이션을 구축하고 싶다면 Lisk Builders 프로그램을 확인하세요. 프로그램 및 신청 절차에 대한 자세한 정보는 Lisk 웹 페이지에서 찾을 수 있습니다. Lisk Builders 프로그램.

면책 조항 :이 블로그 게시물은 커뮤니티 회원 Jurre (리스크 채팅 사용자 이름 : Jurre | Moosty)는 Lisk Builders 프로그램 참여의 일환으로.

by Lisk @lisk. JavaScript로 작성된 블록 체인 애플리케이션을위한 소프트웨어 개발 키트를 개발자에게 제공합니다.우리를 방문하십시오

태그

Hacker Noon 가입

무료 계정을 만들어 맞춤형 독서 경험을 잠금 해제하세요.

코인 스마트. 유로파 최고의 비트 코인-보르 스
출처 : https://hackernoon.com/what-is-the-recurring-payments-poc-and-how-does-it-work-6ql323i?source=rss

spot_img

최신 인텔리전스

spot_img

우리와 함께 채팅

안녕하세요! 어떻게 도와 드릴까요?