contract/money: Return more useful metadata in TransferV1 debris.

This commit is contained in:
parazyd
2023-07-13 14:33:51 +02:00
parent c359b02dd7
commit feed040f70
2 changed files with 30 additions and 3 deletions

View File

@@ -28,7 +28,6 @@ async-std = {version = "1.12.0", features = ["attributes"]}
darkfi = {path = "../../../", features = ["tx", "blockchain"]}
simplelog = "0.12.1"
sled = "0.34.7"
#sqlx = {version = "0.6.3", features = ["runtime-async-std-rustls", "sqlite"]}
darkfi-contract-test-harness = {path = "../test-harness"}
# We need to disable random using "custom" which makes the crate a noop

View File

@@ -41,11 +41,22 @@ use crate::{
model::{ClearInput, Coin, Input, MoneyTransferParamsV1, Output},
};
/// Output metadata claimed from building a `Money::Transfer` call
pub struct TransferCallDebris {
/// The parameters for `Money::Transfer` respective to this call
pub params: MoneyTransferParamsV1,
/// The ZK proofs created in this builder
pub proofs: Vec<Proof>,
/// The ephemeral secret keys created for signing
pub signature_secrets: Vec<SecretKey>,
/// The coins that have been spent in this builder
pub spent_coins: Vec<OwnCoin>,
/// The coins that have been minted in this builder
pub minted_coins: Vec<OwnCoin>,
/// The value blinds created for the inputs
pub input_value_blinds: Vec<pallas::Scalar>,
/// The value blinds created for the outputs
pub output_value_blinds: Vec<pallas::Scalar>,
}
pub struct TransferMintRevealed {
@@ -181,6 +192,7 @@ impl TransferCallBuilder {
let mut outputs = vec![];
let mut change_outputs = vec![];
let mut spent_coins = vec![];
let mut minted_coins = vec![];
let mut signature_secrets = vec![];
let mut proofs = vec![];
@@ -287,7 +299,7 @@ impl TransferCallBuilder {
token_commit: public_inputs.token_commit,
nullifier: public_inputs.nullifier,
merkle_root: public_inputs.merkle_root,
spend_hook: public_inputs.spend_hook, // FIXME: Do we need spend hook here?
spend_hook: public_inputs.spend_hook,
user_data_enc: public_inputs.user_data_enc,
signature_public: public_inputs.signature_public,
});
@@ -345,6 +357,14 @@ impl TransferCallBuilder {
let encrypted_note = AeadEncryptedNote::encrypt(&note, &output.public_key, &mut OsRng)?;
minted_coins.push(OwnCoin {
coin: public_inputs.coin,
note,
secret: SecretKey::from(pallas::Base::ZERO),
nullifier: Nullifier::from(pallas::Base::ZERO),
leaf_position: 0.into(),
});
params.outputs.push(Output {
value_commit: public_inputs.value_commit,
token_commit: public_inputs.token_commit,
@@ -355,7 +375,15 @@ impl TransferCallBuilder {
// Now we should have all the params, zk proofs, and signature secrets.
// We return it all and let the caller deal with it.
let debris = TransferCallDebris { params, proofs, signature_secrets, spent_coins };
let debris = TransferCallDebris {
params,
proofs,
signature_secrets,
spent_coins,
minted_coins,
input_value_blinds: input_blinds,
output_value_blinds: output_blinds,
};
Ok(debris)
}
}