mirror of
https://github.com/jwinterm/grin-wallet.git
synced 2026-10-17 15:21:39 +02:00
unify payment proof storage
This commit is contained in:
@@ -616,7 +616,7 @@ where
|
|||||||
sender_address: p.sender_address,
|
sender_address: p.sender_address,
|
||||||
timestamp: p.timestamp.unwrap().timestamp(),
|
timestamp: p.timestamp.unwrap().timestamp(),
|
||||||
memo: p.memo,
|
memo: p.memo,
|
||||||
promise_signature: p.promise_signature,
|
promise_signature: p.receiver_signature,
|
||||||
witness_data: None,
|
witness_data: None,
|
||||||
},
|
},
|
||||||
p.sender_part_sig.unwrap(),
|
p.sender_part_sig.unwrap(),
|
||||||
|
|||||||
@@ -47,7 +47,6 @@ without a user confirmation step.
|
|||||||
- Expose the kernel feature constants from `grin_core` and reuse them here.
|
- Expose the kernel feature constants from `grin_core` and reuse them here.
|
||||||
- Move payment-proof handling onto `Slate` so it can be used outside contracts and
|
- Move payment-proof handling onto `Slate` so it can be used outside contracts and
|
||||||
versioned with the slate format
|
versioned with the slate format
|
||||||
- Unify legacy and early payment-proof storage
|
|
||||||
- Add compact Slatepack support for contracts
|
- Add compact Slatepack support for contracts
|
||||||
- Keep Slate V5 experimental until the related RFCs are accepted
|
- Keep Slate V5 experimental until the related RFCs are accepted
|
||||||
- Add contract history, lookup and transport.
|
- Add contract history, lookup and transport.
|
||||||
|
|||||||
@@ -126,21 +126,20 @@ where
|
|||||||
};
|
};
|
||||||
|
|
||||||
tx_log_entry.payment_proof = Some(StoredProofInfo {
|
tx_log_entry.payment_proof = Some(StoredProofInfo {
|
||||||
receiver_address: p.receiver_address,
|
|
||||||
receiver_signature: p.promise_signature,
|
|
||||||
sender_address: sender_address.to_ed25519()?,
|
|
||||||
sender_address_path,
|
|
||||||
sender_signature: None,
|
|
||||||
// Filled as separate steps for now; could be merged into a general case
|
|
||||||
// once we know which nonces here belong to the recipient.
|
|
||||||
proof_type: Some(p.proof_type.as_u8()),
|
proof_type: Some(p.proof_type.as_u8()),
|
||||||
receiver_public_nonce: Some(recipient.public_nonce),
|
receiver_public_nonce: Some(recipient.public_nonce),
|
||||||
receiver_public_excess: Some(recipient.public_blind_excess),
|
receiver_public_excess: Some(recipient.public_blind_excess),
|
||||||
timestamp: Some(timestamp),
|
timestamp: Some(timestamp),
|
||||||
memo: p.memo.clone(),
|
memo: p.memo.clone(),
|
||||||
promise_signature: p.promise_signature,
|
|
||||||
sender_part_sig: sender.part_sig,
|
sender_part_sig: sender.part_sig,
|
||||||
sender_public_nonce,
|
sender_public_nonce,
|
||||||
|
..StoredProofInfo::new(
|
||||||
|
p.receiver_address,
|
||||||
|
p.promise_signature,
|
||||||
|
sender_address.to_ed25519()?,
|
||||||
|
sender_address_path,
|
||||||
|
None,
|
||||||
|
)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -779,14 +779,14 @@ pub struct StoredProofInfo {
|
|||||||
#[serde(with = "dalek_ser::dalek_pubkey_serde")]
|
#[serde(with = "dalek_ser::dalek_pubkey_serde")]
|
||||||
pub receiver_address: DalekPublicKey,
|
pub receiver_address: DalekPublicKey,
|
||||||
#[serde(with = "dalek_ser::option_dalek_sig_serde")]
|
#[serde(with = "dalek_ser::option_dalek_sig_serde")]
|
||||||
/// receiver signature
|
/// Receiver signature for legacy proofs, or promise signature for early proofs
|
||||||
pub receiver_signature: Option<DalekSignature>,
|
pub receiver_signature: Option<DalekSignature>,
|
||||||
/// sender address derivation path index
|
/// sender address derivation path index
|
||||||
pub sender_address_path: u32,
|
pub sender_address_path: u32,
|
||||||
/// sender address
|
/// sender address
|
||||||
#[serde(with = "dalek_ser::dalek_pubkey_serde")]
|
#[serde(with = "dalek_ser::dalek_pubkey_serde")]
|
||||||
pub sender_address: DalekPublicKey,
|
pub sender_address: DalekPublicKey,
|
||||||
/// sender signature
|
/// Legacy sender signature
|
||||||
#[serde(with = "dalek_ser::option_dalek_sig_serde")]
|
#[serde(with = "dalek_ser::option_dalek_sig_serde")]
|
||||||
pub sender_signature: Option<DalekSignature>,
|
pub sender_signature: Option<DalekSignature>,
|
||||||
// Fields beyond here are specific to early payment proofs
|
// Fields beyond here are specific to early payment proofs
|
||||||
@@ -800,10 +800,7 @@ pub struct StoredProofInfo {
|
|||||||
pub timestamp: Option<DateTime<Utc>>,
|
pub timestamp: Option<DateTime<Utc>>,
|
||||||
/// Optional payment memo
|
/// Optional payment memo
|
||||||
pub memo: Option<PaymentMemo>,
|
pub memo: Option<PaymentMemo>,
|
||||||
/// recipient promise signature
|
/// Early-proof sender partial signature
|
||||||
#[serde(default, with = "dalek_ser::option_dalek_sig_serde")]
|
|
||||||
pub promise_signature: Option<DalekSignature>,
|
|
||||||
/// Original Sender partial key
|
|
||||||
pub sender_part_sig: Option<Signature>,
|
pub sender_part_sig: Option<Signature>,
|
||||||
/// Untweaked sender public nonce for a sender-nonce proof
|
/// Untweaked sender public nonce for a sender-nonce proof
|
||||||
pub sender_public_nonce: Option<PublicKey>,
|
pub sender_public_nonce: Option<PublicKey>,
|
||||||
@@ -828,7 +825,6 @@ impl StoredProofInfo {
|
|||||||
receiver_public_excess: None,
|
receiver_public_excess: None,
|
||||||
timestamp: None,
|
timestamp: None,
|
||||||
memo: None,
|
memo: None,
|
||||||
promise_signature: None,
|
|
||||||
sender_part_sig: None,
|
sender_part_sig: None,
|
||||||
sender_public_nonce: None,
|
sender_public_nonce: None,
|
||||||
}
|
}
|
||||||
@@ -1103,7 +1099,10 @@ mod tests {
|
|||||||
});
|
});
|
||||||
|
|
||||||
let proof: StoredProofInfo = serde_json::from_value(proof).unwrap();
|
let proof: StoredProofInfo = serde_json::from_value(proof).unwrap();
|
||||||
assert!(proof.promise_signature.is_none());
|
assert!(proof.receiver_signature.is_none());
|
||||||
|
let proof = serde_json::to_value(proof).unwrap();
|
||||||
|
assert!(proof.get("receiver_signature").is_some());
|
||||||
|
assert!(proof.get("promise_signature").is_none());
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|||||||
Reference in New Issue
Block a user