pipegate/
lib.rs

1pub mod error;
2pub mod middleware;
3pub mod utils;
4
5#[cfg(target_arch = "wasm32")]
6pub mod wasm;
7
8#[cfg(test)]
9#[cfg(not(target_arch = "wasm32"))]
10mod tests {
11    use std::str::FromStr;
12
13    use alloy::primitives::{aliases::I96, Address, FixedBytes, PrimitiveSignature, U256};
14
15    use crate::middleware::{
16        one_time_payment::{
17            types::{OneTimePaymentConfig, SignedPaymentTx},
18            verify::verify_tx,
19        },
20        stream_payment::{
21            types::{SignedStream, StreamsConfig},
22            verify::{verify_stream, verify_stream_via_indexer},
23        },
24    };
25
26    #[tokio::test]
27    async fn test_verify_and_update() {}
28
29    #[tokio::test]
30    async fn test_verify_tx() {
31        let rpc_url = "https://base-sepolia-rpc.publicnode.com";
32
33        let onetime_payment_config = OneTimePaymentConfig {
34            recipient: Address::from_str("0x62c43323447899acb61c18181e34168903e033bf").unwrap(),
35            token_address: Address::from_str("0x036CbD53842c5426634e7929541eC2318f3dCF7e").unwrap(),
36            amount: U256::from(1000000), // 1 USDC
37            period_ttl_sec: None,
38            rpc_url: rpc_url.to_string(),
39        };
40
41        let signed_payment_tx = SignedPaymentTx {
42            signature: PrimitiveSignature::from_str("0xe3ebb83954309b86cc6d27e7e70b5dbcb0447cf79f8d74fc3806a6e814138fb573d3df3c1fcae6fd8fe1dca34ba8bb2748da3b68790df8ce45108016b601c12a1b").unwrap(),
43            tx_hash: FixedBytes::<32>::from_str("0xe88140d4787b1305c24961dcef2f7f73d583bb862b3cbde4b7eec854f61a0248").unwrap(),
44        };
45
46        let result = verify_tx(signed_payment_tx, onetime_payment_config).await;
47        println!("Result: {:?}", result);
48
49        assert_eq!(result.is_ok(), true);
50
51        let (_, is_valid) = result.unwrap();
52        assert_eq!(is_valid, true);
53    }
54
55    #[tokio::test]
56    async fn test_stream() {
57        let rpc_url = "https://base-sepolia-rpc.publicnode.com";
58
59        let stream_payment_config = StreamsConfig {
60            recipient: Address::from_str("0x62c43323447899acb61c18181e34168903e033bf").unwrap(),
61            token_address: Address::from_str("0x1650581f573ead727b92073b5ef8b4f5b94d1648").unwrap(),
62            amount: "761035007610".parse::<I96>().unwrap(), // 2 USDC per month
63            cfa_forwarder: Address::from_str("0xcfA132E353cB4E398080B9700609bb008eceB125").unwrap(),
64            rpc_url: rpc_url.to_string(),
65            cache_time: 900,
66        };
67
68        let signed_stream = SignedStream {
69            signature: PrimitiveSignature::from_str("0x9dce84f7bd5fea33c7d91042f8fd5ee539d8c4ed9dcfcd49884ae1cb99842a8c4fa243b75eb3fd2d611e953e40202a5e94a3c513268f75a002f89c5a375527231b").unwrap(),
70            sender: Address::from_str("0x898d0DBd5850e086E6C09D2c83A26Bb5F1ff8C33").unwrap(),
71        };
72
73        let result = verify_stream(signed_stream, stream_payment_config).await;
74        println!("Result: {:?}", result);
75
76        assert_eq!(result.is_ok(), true);
77        assert_eq!(result.unwrap(), true);
78    }
79
80    #[tokio::test]
81    async fn test_stream_indexer() {
82        let rpc_url = "https://base-sepolia-rpc.publicnode.com";
83
84        let stream_payment_config = StreamsConfig {
85            recipient: Address::from_str("0x62c43323447899acb61c18181e34168903e033bf").unwrap(),
86            token_address: Address::from_str("0x1650581f573ead727b92073b5ef8b4f5b94d1648").unwrap(),
87            amount: "761035007610".parse::<I96>().unwrap(), // 2 USDC per month
88            cfa_forwarder: Address::from_str("0xcfA132E353cB4E398080B9700609bb008eceB125").unwrap(),
89            rpc_url: rpc_url.to_string(),
90            cache_time: 900,
91        };
92
93        let signed_stream = SignedStream {
94            signature: PrimitiveSignature::from_str("0x9dce84f7bd5fea33c7d91042f8fd5ee539d8c4ed9dcfcd49884ae1cb99842a8c4fa243b75eb3fd2d611e953e40202a5e94a3c513268f75a002f89c5a375527231b").unwrap(),
95            sender: Address::from_str("0x898d0DBd5850e086E6C09D2c83A26Bb5F1ff8C33").unwrap(),
96        };
97
98        let result: Result<bool, crate::error::AuthError> =
99            verify_stream_via_indexer(signed_stream, stream_payment_config).await;
100        println!("Result: {:?}", result);
101
102        assert_eq!(result.is_ok(), true);
103        assert_eq!(result.unwrap(), true);
104    }
105}
106
107#[cfg(test)]
108#[cfg(target_arch = "wasm32")]
109mod tests {
110    use super::*;
111
112    #[test]
113    fn it_works() {}
114}