ゼファーネットのロゴ

定期支払いのPoCとは何ですか?どのように機能しますか?

日付:

Lisk HackerNoonプロフィール写真

@リスクLisk

JavaScriptで記述されたブロックチェーンアプリケーション用のソフトウェア開発キットを開発者に提供します。

Moostyチームでは、行うことで学びます。 概念実証を構築することで、ブロックチェーンテクノロジーとネットワークダイナミクスの作成について学びます。 私たちはコミュニティ(オンラインおよびオフライン)、知識機関、組織と協力し、ユトレヒトのLiskコミュニティ、LCUコミュニティ、地元企業と強いつながりを持っています。 このイノベーションの旅に私たちと一緒に参加しませんか? 一緒に概念実証を構築しましょう。

プロジェクト紹介

定期支払いは、 リスクSDK。 これは、カスタムトランザクションを利用して、XNUMXつのパーティ間(ピアツーピア)で決定論的な契約を構築する比較的単純な技術ソリューションを示しています。 これにより、システムでアカウント(ウォレット)を作成するすべての人と契約を結ぶことができます。 アカウント、契約、そのすべての変更、およびすべてのアクティビティは、このPoC用に特別に作成されたブロックチェーンに保存されます。

プロジェクトは取得しました リスクビルダー 付与。 以下、概念実証について詳しく説明します。 

ユースケース「政府機関による補助金」

現状

組織(A)は政府(B)からの補助金を申請します。 これは現在、1年間にXNUMXつの金額で支払われます。 受信側は、この期間中に特定の条件を満たす必要があります。 受領者が年末に条件を満たしていない場合、助成金は全額または一部返済されなければなりません。

なぜそれが異なって動作する必要がありますか?

当事者Aが条件を順守しておらず、補助金の全部または一部を返済しなければならない状況では、ほとんどの場合、全額がすでに使われているという問題に直面します。 これにより、補助金提供者(当事者B)は、回収される金額が保証されず、当事者Aが財政問題に直面する可能性があります。

定期支払いはどのように機能しますか?

当事者Aは、頻度、時期、金額などの支払い条件を使用して契約を作成します。 パーティBは、契約条件を満たすために金庫にトークンを入れます。 当事者Aが契約からトークンを受け取る資格がある期間であれば、当事者Aはトランザクションを実行して、その期間のトークンを受け取ることができます。

当事者Bが契約を早期に終了したい場合は、事前設定された料金を当事者Aに支払う必要があり、当事者Bは金庫から残りのトークンを受け取ります。 これは、契約の早期終了と比較することができます。

未来

「将来、あなたは自分と、たまたまギターの先生である隣人との間に契約を結ぶことができるようになります。 あなたは1年間の契約を結び、それによって毎月合意された金額を彼に支払います。 その後、XNUMXか月分の支払いを前払いし、いずれかの当事者が契約を終了した場合、先月が教師に提供されます。 一旦確立されると、契約は不変であり、それは二者間の透明で読みやすい合意を作成します。」

柔軟なサービスインフラストラクチャ

今日、ツールは 一握りのカスタムトランザクション。 これらのXNUMXつのカスタムトランザクションにより、XNUMX者間で柔軟な契約ソリューションを作成する強力なブロックチェーンアプリケーションを構築できる可能性があります。 それはあなたに以下を作成する可能性を与えます:

  • 毎月の支払いメカニズム。
  • 誰かが契約を終了しない限り、3か月(またはそれ以上)後にお金が自動的にロック解除される補助金を提供します。
  • 全額を前払いするサブスクリプション(割引を受けるため)。
  • 2期間前払いのサービス契約。
  • あなたの子供のためにポケットマネーを取っておきなさい。
  • 最大額まで毎月の寄付をスケジュールします。

これらのトランザクションの機能を拡張する場合、または新しいカスタムトランザクションが追加され、10または20の異なるトランザクションが組み込まれる場合、さまざまな可能性があります。

例:クラウドファンダーへの(最大)毎月の支払いでクラウドファンディングを作成します。 

お問合わせ あなたがさらに良いアイデアを持っているなら! 

技術的な詳細

このセクションには、技術的な詳細の概要が含まれ、使用されるさまざまなフレームワークの概要、作成されたカスタムトランザクション、そして最後にLiskSDKの使用経験が含まれています。

PoCのコンポーネント

  • バックエンド:ブロックチェーンで実行できる作業カスタムトランザクション。
  • バックエンドとフロントエンドを接続する拡張HTTPAPI。
  • フロントエンド:コン​​トラクトを管理する(トランザクションと対話する)ためのReactJSフロントエンドウォレット。

カスタムトランザクション

「トランザクションは、ネットワーク内のユーザーが実行できる一連のアクションを定義するため、LiskSDKを使用して作成されるブロックチェーンアプリケーションの重要な部分です。 各トランザクションは、ネットワークに登録されている特定のトランザクションタイプに属しています。」  LiskSDKドキュメント.

この概念実証では、XNUMXつの異なるカスタムトランザクションを使用します。 さまざまなトランザクション 以下にリストされているように、コントラクトウォレットと相互作用できます。

  • 作成–契約を結ぶ。
  • レビュー/承認–契約をレビューおよび検証します。
  • ファンド契約–契約にトークンを預けます。
  • 撤回–契約からトークンを取得します。 
  • 終了–契約の早期終了。 
  • 蛇口トランザクション–ウォレットにトークンとユーザー名登録を提供します。

注:トランザクションは、この概念実証で分単位で機能し、契約をより迅速にシミュレートします。

ジョブの設定方法については、 Liskトランザクションタイプ登録リポジトリを開く 登録されているすべてのLiskトランザクションタイプのリスト。 誰でもプルリクエストを行って、新しい登録を追加したり、既存の登録を更新したりできます。また、登録済みのカスタムトランザクションを再利用して、独自のブロックチェーンアプリをすばやくセットアップすることもできます。

契約

契約は、以下に示すように遵守しなければならないさまざまなルールで行われます。

  • 単位:時間単位[日次、週次、月次、年次]。
  • 単価:各ユニットが金庫から取得できるトークンの数。
  • プリペイドユニット:何ユニット*価格は金庫になければなりません。
  • 開始:契約が開始されたとき。
  • 合計ユニット:契約に含まれるユニットの数。
  • 解約手数料:契約の早期解約に伴う手数料の額。
  • 受信者:各ユニットが金庫(ロットA)からタイムトークンを取得できるアドレス。
  • 契約者:安全に記入できる住所(ロットB)。
  • 説明:説明契約。
  • 名前:契約の名前。 

システムを教えてください。

契約は、将来の送信者または契約の受信者のいずれかが行うことができます。 この契約は、検証トランザクションを通じて相手方が承認または変更できます。

契約が変更された場合、最初の当事者はこの変更を承認または拒否する必要があります。 このプロセスは、両者が合意するまで繰り返すことができます。 ボールトは、送信者(パーティB)が、完全な支払い金額を使用して契約をアクティブ化するカスタムファンドトランザクションで埋めることができます。

受信側(A)は、その時点で契約で許可されている場合、トランザクションを使用してボールトからトークンを取得できます。 前払いの条件が満たされない場合、契約はアクティブ化されません。

両当事者は、ショートフィーを差し引いた後、残りの金額がパーティ(B)に返還され、その後、ショートフィーがパーティAに支払われる終了トランザクションで、契約を早期に終了することができます。

SDK 4.0

このPoCはLiskSDK4.0を使用します。 これにより、動的料金とチェーン状態が提供されます。 チェーン状態ストアは、トランザクションの時間を決定するために使用され、コントラクト状態からロック解除可能なトークンの数を決定できます。 このバージョンのSDKでは、タイムスタンプが基本トランザクションから削除され、ナンスが導入されています。

ナンスのインクリメンタルな性質により、フロントエンドは、トランザクションが署名される直前に、毎回ブロックチェーンからアカウントナンスを取得します。 

// 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()`

。 この関数はLiskSDKで使用され、トランザクションに署名するために必要です。

この関数のプルリクエストはパイプラインにありますが、執筆時点ではまだ受け入れられていません。 バッファリポジトリをフォークし、プルリクエストとマージして、今のところ機能するようにすることで修正しました。

HTTP API

デフォルトのリスク HTTP API 追加のAPIモジュールで拡張され、部分的なユーザー名、契約固有の資産フィールド、およびトランザクション固有の資産フィールドを検索できるようになりました。

たとえば、すべての契約にはそれ自体に属するトランザクションがありますが、アカウントがトランザクションの送信者になることはありません。

コントラクトに属するすべてのトランザクションを収集するために、APIはトランザクションエンティティからトランザクションを受け取ります。

`asset_contains`

トランザクションエンティティにフィルターします。 これにより、検索が可能になります

`.asset.contractPublicKey`

===

`contract.publicKey`

フロントエンド

バックエンドでのカスタムトランザクションの作成は、コツをつかみ始めたときに比較的簡単です。 最も時間のかかる要素は、UI要件に応じてフロントエンドであり、XNUMXつを相互に接続します。 ブロックチェーンからのデータ収集はさらに最適化できますが、この概念実証の範囲外です。 

undoAsset()メソッド 

加えて、

UndoAsset()

カスタムトランザクションのメソッドは、静的な公称データを使用して作成するのが難しい場合があります。 後のバージョンのSDKですでに計画されているUndoAsset()メソッドを使用せずにカスタムトランザクションを作成する新しいソリューションを楽しみにしています。 これを解決すると、レビュートランザクションが送信するデータが大幅に少なくなるため、使用するネットワークリソースが少なくなり、動的料金が低くなります。

リソース

インスピレーションを感じ、独自の概念実証ブロックチェーン アプリケーションを構築したい場合は、Lisk Builders プログラムをチェックしてください。 プログラムとアプリケーション手順の詳細については、Lisk の Web ページを参照してください。 Lisk Builders プログラム.

免責事項:このブログ投稿は、コミュニティメンバーのJurre(リスクチャット ユーザー名:Jurre | Moosty)LiskBuildersプログラムへの参加の一環として。

by Lisk @リスク. JavaScriptで記述されたブロックチェーンアプリケーション用のソフトウェア開発キットを開発者に提供します。私たちを訪問する

タグ

ハッカー正午に参加

無料のアカウントを作成して、カスタムの読書体験のロックを解除します。

コインスマート。 BesteBitcoin-ヨーロッパのBörse
ソース:https://hackernoon.com/what-is-the-recurring-payments-poc-and-how-does-it-work-6ql323i?source = rss

スポット画像

最新のインテリジェンス

スポット画像

私たちとチャット

やあ! どんな御用でしょうか?