# LN fee paymentのテストシナリオ ###### tags: `テスト設計` ## Proof of Payment ```javascript= describe("Proof of Payment", () => { // 発行ノードの公開鍵、Invoice、Preimageを受け取ることで、確かにこのユーザーはln払いを成功したと検証できる it("should verify proof of payment with OK: pubkey, OK: Invoice, OK: Preimage", () => {}); // 不正な発行ノードの公開鍵だと、Proof of paymentの検証に失敗する it("should not verify proof of payment with NG: pubkey, OK: Invoice, OK: Preimage", () => {}); // 不正なInvoiceだと、Proof of paymentの検証に失敗する it("should not verify proof of payment with OK: pubkey, NG: Invoice, OK: Preimage", () => {}); // 不正なPreimageだと、Proof of paymentの検証に失敗する it("should not verify proof of payment with OK: pubkey, OK: Invoice, NG: Preimage", () => {}); }); ``` ## ユーザーからのTxの受け取りとInvoice・OPSIGの作成 ```javascript= // LNノードがP2PでTXデータを受け取る (HTTP等、他の通信経路でもほぼ同様) describe("Receive TX request", () => { // TXリクエストを検証 it("Validate TX request", () => {}); // もしinvalidなtxであればエラーを返す it("should fail if this is invalid TX request", () => {}); // TX feeを計算 it("Calculate TX fee", () => {}); // 算出したFeeをもとにInvoiceを作成する describe("Create Invoice", () => { // AmountはTxDataから算出されたfeeと同額である必要がある it("Check amount", () => {}); // 有効期限はLeaderが交代するより十分前である必要がある it("Check expiry", () => {}); // 正しくPreimageを保存する it("Create and save preimage", () => {}); }); // InvoiceおよびOneTimeAddressをもとにOPSIGを作成 describe("Create OPSIG", () => { // 署名するメッセージが正しく生成されているか it("Create message", () => {}); // 事前に登録した公開鍵で複合できるか確かめる it("OPSIG can be verified by Operator's pubkey", () => {}) }); // LNノードにP2Pで、あるいは別の通信経路でreceipt, invoice, OPSIGを返す it("Send receipt, invoice, OPSIG") }); ``` ```javascript= // Paymentの受け取りの検知とTxの実行を行う describe("Receive LN Payment", () => { // LN払いのFeeを正しく受け取って実行する it("Receive LN fee and execute", () => {}); it("txと紐づいてないinvoiceの支払いがあっても何もしない", () => {}); }); ```