# オペレーターノードのLNに関するテスト設計 ###### 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", () => {}); }); ``` ## リーダー選出と公開鍵の登録 ```javascript= // リーダー選出時に公開鍵を登録する describe("Initialize Leader", () => { // 公開鍵を生成してL1に登録する it("Generate and Register Public key", () => {}); }); ``` ## ユーザーからのTxの受け取りとInvoice・OPSIGの作成 ```javascript= // LNノードがP2PでTXデータを受け取る (HTTP等、他の通信経路でもほぼ同様) describe("Receive TX request", () => { // TXリクエストを検証 it("Validate 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", () => {}); }); ``` ## sendCustomMessage ```javascript= describe("sendCustomMessage", () => { describe("ブロックのブロードキャストができる", () => { // ProtoBufでエンコードして、ブロックを送れる it("should send block which encoded by protobuf", ()=>{}); // ProtoBufでエンコードして、txを送れる it("should send tx which encoded by protobuf", ()=>{}); }); }); ``` ## SubscribeCustomMessage - ブロックを受け取って処理することができる - txを受け取って処理することができる ```javascript= describe("SubscribeCustomMessage", () => { describe("ブロックのブロードキャストを受け取ることができる", () => { // ProtoBufでデコードして、ブロックを受け取り、検証が成功する it("should verify valid block which decoded by protobuf", ()=>{}); // ProtoBufでデコードして、不正なブロックを受けとった場合、検証が失敗する it("should not verify invalid block which decoded by protobuf", ()=>{}); // ProtoBufでデコードして、txを受け取り、検証が成功する it("should verify valid tx which decoded by protobuf", ()=>{}); // ProtoBufでデコードして、不正なtxを受け取り、検証が失敗する it("should not verify valid tx which decoded by protobuf", ()=>{}); }); }); ```