Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions payjoin-cli/src/app/v2/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -106,11 +106,11 @@ impl AppTrait for App {
self.config.v2()?.pj_directory.clone(),
ohttp_keys,
None,
Some(amount),
)
.save(&persister)?;
println!("Receive session established");
let mut pj_uri = session.pj_uri();
pj_uri.amount = Some(amount);
let pj_uri = session.pj_uri();
println!("Request Payjoin by sharing this Payjoin Uri:");
println!("{}", pj_uri);

Expand Down
2 changes: 1 addition & 1 deletion payjoin-ffi/dart/test/test_payjoin_integration_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ payjoin.Initialized create_receiver_context(
payjoin.OhttpKeys ohttp_keys,
InMemoryReceiverPersister persister) {
var receiver = payjoin.UninitializedReceiver()
.createSession(address, directory, ohttp_keys, null)
.createSession(address, directory, ohttp_keys, null, null)
.save(persister);
return receiver;
}
Expand Down
2 changes: 2 additions & 0 deletions payjoin-ffi/dart/test/test_payjoin_unit_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,7 @@ void main() {
"https://example.com",
payjoin.OhttpKeys.fromString(
"OH1QYPM5JXYNS754Y4R45QWE336QFX6ZR8DQGVQCULVZTV20TFVEYDMFQC"),
null,
null)
.save(persister);
final result = payjoin.replayReceiverEventLog(persister);
Expand All @@ -126,6 +127,7 @@ void main() {
"https://example.com",
payjoin.OhttpKeys.fromString(
"OH1QYPM5JXYNS754Y4R45QWE336QFX6ZR8DQGVQCULVZTV20TFVEYDMFQC"),
null,
null)
.save(receiver_persister);
var uri = receiver.pjUri();
Expand Down
2 changes: 1 addition & 1 deletion payjoin-ffi/python/test/test_payjoin_integration_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ async def process_receiver_proposal(self, receiver: ReceiveSession, recv_persist
raise Exception(f"Unknown receiver state: {receiver}")

def create_receiver_context(self, receiver_address: bitcoinffi.Address, directory: Url, ohttp_keys: OhttpKeys, recv_persister: InMemoryReceiverSessionEventLog) -> Initialized:
receiver = UninitializedReceiver().create_session(address=receiver_address, directory=directory.as_string(), ohttp_keys=ohttp_keys, expire_after=None).save(recv_persister)
receiver = UninitializedReceiver().create_session(address=receiver_address, directory=directory.as_string(), ohttp_keys=ohttp_keys, expire_after=None, amount=None).save(recv_persister)
return receiver

async def retrieve_receiver_proposal(self, receiver: Initialized, recv_persister: InMemoryReceiverSessionEventLog, ohttp_relay: Url):
Expand Down
2 changes: 2 additions & 0 deletions payjoin-ffi/python/test/test_payjoin_unit_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ def test_receiver_persistence(self):
address,
"https://example.com",
payjoin.OhttpKeys.from_string("OH1QYPM5JXYNS754Y4R45QWE336QFX6ZR8DQGVQCULVZTV20TFVEYDMFQC"),
None,
None
).save(persister)
result = payjoin.payjoin_ffi.replay_receiver_event_log(persister)
Expand Down Expand Up @@ -83,6 +84,7 @@ def test_sender_persistence(self):
address,
"https://example.com",
payjoin.OhttpKeys.from_string("OH1QYPM5JXYNS754Y4R45QWE336QFX6ZR8DQGVQCULVZTV20TFVEYDMFQC"),
None,
None
).save(persister)
uri = receiver.pj_uri()
Expand Down
2 changes: 2 additions & 0 deletions payjoin-ffi/src/receive/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -236,13 +236,15 @@ impl UninitializedReceiver {
directory: String,
ohttp_keys: Arc<OhttpKeys>,
expire_after: Option<u64>,
amount: Option<u64>,
) -> InitialReceiveTransition {
InitialReceiveTransition(Arc::new(RwLock::new(Some(
payjoin::receive::v2::Receiver::create_session(
(*address).clone().into(),
directory,
(*ohttp_keys).clone().into(),
expire_after.map(Duration::from_secs),
amount.map(payjoin::bitcoin::Amount::from_sat),
),
))))
}
Expand Down
12 changes: 10 additions & 2 deletions payjoin/src/core/receive/v2/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ use std::time::{Duration, SystemTime};

use bitcoin::hashes::{sha256, Hash};
use bitcoin::psbt::Psbt;
use bitcoin::{Address, FeeRate, OutPoint, Script, TxOut};
use bitcoin::{Address, Amount, FeeRate, OutPoint, Script, TxOut};
pub(crate) use error::InternalSessionError;
pub use error::SessionError;
use serde::de::Deserializer;
Expand Down Expand Up @@ -70,6 +70,7 @@ pub struct SessionContext {
mailbox: Option<url::Url>,
ohttp_keys: OhttpKeys,
expiry: SystemTime,
amount: Option<Amount>,
s: HpkeKeyPair,
e: Option<HpkePublicKey>,
}
Expand Down Expand Up @@ -270,6 +271,7 @@ impl Receiver<UninitializedReceiver> {
directory: impl IntoUrl,
ohttp_keys: OhttpKeys,
expire_after: Option<Duration>,
amount: Option<Amount>,
) -> MaybeBadInitInputsTransition<SessionEvent, Receiver<Initialized>, IntoUrlError> {
let directory = match directory.into_url() {
Ok(url) => url,
Expand All @@ -284,6 +286,7 @@ impl Receiver<UninitializedReceiver> {
expiry: SystemTime::now() + expire_after.unwrap_or(TWENTY_FOUR_HOURS_DEFAULT_EXPIRY),
s: HpkeKeyPair::gen_keypair(),
e: None,
amount,
};
MaybeBadInitInputsTransition::success(
SessionEvent::Created(session_context.clone()),
Expand Down Expand Up @@ -1025,7 +1028,10 @@ pub(crate) fn pj_uri<'a>(
pj.set_ohttp(session_context.ohttp_keys.clone());
pj.set_exp(session_context.expiry);
let extras = PayjoinExtras { endpoint: pj, output_substitution };
bitcoin_uri::Uri::with_extras(session_context.address.clone(), extras)
let mut uri = bitcoin_uri::Uri::with_extras(session_context.address.clone(), extras);
uri.amount = session_context.amount;

uri
}

#[cfg(test)]
Expand Down Expand Up @@ -1056,6 +1062,7 @@ pub mod test {
expiry: SystemTime::now() + Duration::from_secs(60),
s: HpkeKeyPair::gen_keypair(),
e: None,
amount: None,
});

pub(crate) fn unchecked_proposal_v2_from_test_vector() -> UncheckedProposal {
Expand Down Expand Up @@ -1290,6 +1297,7 @@ pub mod test {
SHARED_CONTEXT.directory.clone(),
SHARED_CONTEXT.ohttp_keys.clone(),
None,
None,
)
.save(&noop_persister)
.expect("Noop persister shouldn't fail");
Expand Down
2 changes: 1 addition & 1 deletion payjoin/src/core/send/v2/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -657,7 +657,7 @@ mod test {
let ohttp_keys = OhttpKeys(
ohttp::KeyConfig::new(KEY_ID, KEM, Vec::from(SYMMETRIC)).expect("valid key config"),
);
let pj_uri = Receiver::create_session(address.clone(), directory, ohttp_keys, None)
let pj_uri = Receiver::create_session(address.clone(), directory, ohttp_keys, None, None)
.save(&NoopSessionPersister::default())
.expect("receiver should succeed")
.pj_uri();
Expand Down
16 changes: 12 additions & 4 deletions payjoin/tests/integration.rs
Original file line number Diff line number Diff line change
Expand Up @@ -210,7 +210,7 @@ mod integration {
.assume_checked();
let noop_persister = NoopSessionPersister::default();
let mut bad_initializer =
Receiver::create_session(mock_address, directory, bad_ohttp_keys, None)
Receiver::create_session(mock_address, directory, bad_ohttp_keys, None, None)
.save(&noop_persister)?;
let (req, _ctx) = bad_initializer.create_poll_request(&ohttp_relay)?;
agent
Expand Down Expand Up @@ -254,6 +254,7 @@ mod integration {
directory.clone(),
ohttp_keys.clone(),
Some(Duration::from_secs(0)),
None,
)
.save(&recv_noop_persister)?;
match expired_receiver.create_poll_request(&ohttp_relay) {
Expand Down Expand Up @@ -310,6 +311,7 @@ mod integration {
directory.clone(),
ohttp_keys.clone(),
None,
None,
)
.save(&persister)?;
println!("session: {:#?}", &session);
Expand Down Expand Up @@ -436,6 +438,7 @@ mod integration {
directory.clone(),
ohttp_keys.clone(),
None,
None,
)
.save(&recv_persister)?;
println!("session: {:#?}", &session);
Expand Down Expand Up @@ -621,9 +624,14 @@ mod integration {
let recv_persister = NoopSessionPersister::default();
let send_persister = NoopSessionPersister::default();
let address = receiver.get_new_address(None, None)?.assume_checked();
let mut session =
Receiver::create_session(address, directory.clone(), ohttp_keys.clone(), None)
.save(&recv_persister)?;
let mut session = Receiver::create_session(
address,
directory.clone(),
ohttp_keys.clone(),
None,
None,
)
.save(&recv_persister)?;

// **********************
// Inside the V1 Sender:
Expand Down
Loading