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 프로그램 참여의 일환으로.
태그
무료 계정을 만들어 맞춤형 독서 경험을 잠금 해제하세요.
코인 스마트. 유로파 최고의 비트 코인-보르 스
출처 : https://hackernoon.com/what-is-the-recurring-payments-poc-and-how-does-it-work-6ql323i?source=rss