Skip to content

Commit a7eaff5

Browse files
committed
Fix CI: update librustzcash rev and derive test reference notes via IssueBundle
- Bump librustzcash to the fixed revision (removes the extra expiry_height check). - Rewrite zebra-chain test reference-note generation to derive notes with rho via IssueBundle (replaces the removed Orchard create_test_reference_note helper).
1 parent a2ec43c commit a7eaff5

File tree

3 files changed

+107
-50
lines changed

3 files changed

+107
-50
lines changed

Cargo.lock

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1370,7 +1370,7 @@ dependencies = [
13701370
[[package]]
13711371
name = "equihash"
13721372
version = "0.2.2"
1373-
source = "git+https://github.com/QED-it/librustzcash?rev=bfaa14af4fb3e623d05e3323274c98a5886615b4#bfaa14af4fb3e623d05e3323274c98a5886615b4"
1373+
source = "git+https://github.com/QED-it/librustzcash?rev=acd68d123997ea9788c14244bc3805c6d2e8d68c#acd68d123997ea9788c14244bc3805c6d2e8d68c"
13741374
dependencies = [
13751375
"blake2b_simd",
13761376
"core2",
@@ -1406,7 +1406,7 @@ dependencies = [
14061406
[[package]]
14071407
name = "f4jumble"
14081408
version = "0.1.1"
1409-
source = "git+https://github.com/QED-it/librustzcash?rev=bfaa14af4fb3e623d05e3323274c98a5886615b4#bfaa14af4fb3e623d05e3323274c98a5886615b4"
1409+
source = "git+https://github.com/QED-it/librustzcash?rev=acd68d123997ea9788c14244bc3805c6d2e8d68c#acd68d123997ea9788c14244bc3805c6d2e8d68c"
14101410
dependencies = [
14111411
"blake2b_simd",
14121412
]
@@ -5853,7 +5853,7 @@ checksum = "213b7324336b53d2414b2db8537e56544d981803139155afa84f76eeebb7a546"
58535853
[[package]]
58545854
name = "zcash_address"
58555855
version = "0.9.0"
5856-
source = "git+https://github.com/QED-it/librustzcash?rev=bfaa14af4fb3e623d05e3323274c98a5886615b4#bfaa14af4fb3e623d05e3323274c98a5886615b4"
5856+
source = "git+https://github.com/QED-it/librustzcash?rev=acd68d123997ea9788c14244bc3805c6d2e8d68c#acd68d123997ea9788c14244bc3805c6d2e8d68c"
58575857
dependencies = [
58585858
"bech32",
58595859
"bs58",
@@ -5866,7 +5866,7 @@ dependencies = [
58665866
[[package]]
58675867
name = "zcash_client_backend"
58685868
version = "0.20.0"
5869-
source = "git+https://github.com/QED-it/librustzcash?rev=bfaa14af4fb3e623d05e3323274c98a5886615b4#bfaa14af4fb3e623d05e3323274c98a5886615b4"
5869+
source = "git+https://github.com/QED-it/librustzcash?rev=acd68d123997ea9788c14244bc3805c6d2e8d68c#acd68d123997ea9788c14244bc3805c6d2e8d68c"
58705870
dependencies = [
58715871
"base64 0.22.1",
58725872
"bech32",
@@ -5908,7 +5908,7 @@ dependencies = [
59085908
[[package]]
59095909
name = "zcash_encoding"
59105910
version = "0.3.0"
5911-
source = "git+https://github.com/QED-it/librustzcash?rev=bfaa14af4fb3e623d05e3323274c98a5886615b4#bfaa14af4fb3e623d05e3323274c98a5886615b4"
5911+
source = "git+https://github.com/QED-it/librustzcash?rev=acd68d123997ea9788c14244bc3805c6d2e8d68c#acd68d123997ea9788c14244bc3805c6d2e8d68c"
59125912
dependencies = [
59135913
"core2",
59145914
"nonempty",
@@ -5917,7 +5917,7 @@ dependencies = [
59175917
[[package]]
59185918
name = "zcash_history"
59195919
version = "0.4.0"
5920-
source = "git+https://github.com/QED-it/librustzcash?rev=bfaa14af4fb3e623d05e3323274c98a5886615b4#bfaa14af4fb3e623d05e3323274c98a5886615b4"
5920+
source = "git+https://github.com/QED-it/librustzcash?rev=acd68d123997ea9788c14244bc3805c6d2e8d68c#acd68d123997ea9788c14244bc3805c6d2e8d68c"
59215921
dependencies = [
59225922
"blake2b_simd",
59235923
"byteorder",
@@ -5927,7 +5927,7 @@ dependencies = [
59275927
[[package]]
59285928
name = "zcash_keys"
59295929
version = "0.11.0"
5930-
source = "git+https://github.com/QED-it/librustzcash?rev=bfaa14af4fb3e623d05e3323274c98a5886615b4#bfaa14af4fb3e623d05e3323274c98a5886615b4"
5930+
source = "git+https://github.com/QED-it/librustzcash?rev=acd68d123997ea9788c14244bc3805c6d2e8d68c#acd68d123997ea9788c14244bc3805c6d2e8d68c"
59315931
dependencies = [
59325932
"bech32",
59335933
"blake2b_simd",
@@ -5965,7 +5965,7 @@ dependencies = [
59655965
[[package]]
59665966
name = "zcash_primitives"
59675967
version = "0.25.0"
5968-
source = "git+https://github.com/QED-it/librustzcash?rev=bfaa14af4fb3e623d05e3323274c98a5886615b4#bfaa14af4fb3e623d05e3323274c98a5886615b4"
5968+
source = "git+https://github.com/QED-it/librustzcash?rev=acd68d123997ea9788c14244bc3805c6d2e8d68c#acd68d123997ea9788c14244bc3805c6d2e8d68c"
59695969
dependencies = [
59705970
"bip32",
59715971
"blake2b_simd",
@@ -6007,7 +6007,7 @@ dependencies = [
60076007
[[package]]
60086008
name = "zcash_proofs"
60096009
version = "0.25.0"
6010-
source = "git+https://github.com/QED-it/librustzcash?rev=bfaa14af4fb3e623d05e3323274c98a5886615b4#bfaa14af4fb3e623d05e3323274c98a5886615b4"
6010+
source = "git+https://github.com/QED-it/librustzcash?rev=acd68d123997ea9788c14244bc3805c6d2e8d68c#acd68d123997ea9788c14244bc3805c6d2e8d68c"
60116011
dependencies = [
60126012
"bellman",
60136013
"blake2b_simd",
@@ -6029,7 +6029,7 @@ dependencies = [
60296029
[[package]]
60306030
name = "zcash_protocol"
60316031
version = "0.6.2"
6032-
source = "git+https://github.com/QED-it/librustzcash?rev=bfaa14af4fb3e623d05e3323274c98a5886615b4#bfaa14af4fb3e623d05e3323274c98a5886615b4"
6032+
source = "git+https://github.com/QED-it/librustzcash?rev=acd68d123997ea9788c14244bc3805c6d2e8d68c#acd68d123997ea9788c14244bc3805c6d2e8d68c"
60336033
dependencies = [
60346034
"core2",
60356035
"document-features",
@@ -6072,7 +6072,7 @@ dependencies = [
60726072
[[package]]
60736073
name = "zcash_transparent"
60746074
version = "0.5.0"
6075-
source = "git+https://github.com/QED-it/librustzcash?rev=bfaa14af4fb3e623d05e3323274c98a5886615b4#bfaa14af4fb3e623d05e3323274c98a5886615b4"
6075+
source = "git+https://github.com/QED-it/librustzcash?rev=acd68d123997ea9788c14244bc3805c6d2e8d68c#acd68d123997ea9788c14244bc3805c6d2e8d68c"
60766076
dependencies = [
60776077
"bip32",
60786078
"blake2b_simd",
@@ -6613,7 +6613,7 @@ dependencies = [
66136613
[[package]]
66146614
name = "zip321"
66156615
version = "0.5.0"
6616-
source = "git+https://github.com/QED-it/librustzcash?rev=bfaa14af4fb3e623d05e3323274c98a5886615b4#bfaa14af4fb3e623d05e3323274c98a5886615b4"
6616+
source = "git+https://github.com/QED-it/librustzcash?rev=acd68d123997ea9788c14244bc3805c6d2e8d68c#acd68d123997ea9788c14244bc3805c6d2e8d68c"
66176617
dependencies = [
66186618
"base64 0.22.1",
66196619
"nom",

Cargo.toml

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -113,14 +113,14 @@ sinsemilla = { git = "https://github.com/zcash/sinsemilla", rev = "aabb707e862bc
113113
zcash_note_encryption = { version = "0.4.1", git = "https://github.com/zcash/zcash_note_encryption", rev = "9f7e93d42cef839d02b9d75918117941d453f8cb" }
114114
sapling-crypto = { package = "sapling-crypto", version = "0.5", git = "https://github.com/QED-it/sapling-crypto", rev = "9393f93fe547d1b3738c9f4618c0f8a2fffed29f" }
115115
orchard = { version = "0.11.0", git = "https://github.com/QED-it/orchard", rev = "7ec34c9be7d36ecdce7c3658efe9a78c2863ed97" }
116-
zcash_primitives = { version = "0.25.0", git = "https://github.com/QED-it/librustzcash", rev = "bfaa14af4fb3e623d05e3323274c98a5886615b4" }
117-
zcash_protocol = { version = "0.6.2", git = "https://github.com/QED-it/librustzcash", rev = "bfaa14af4fb3e623d05e3323274c98a5886615b4" }
118-
zcash_address = { version = "0.9.0", git = "https://github.com/QED-it/librustzcash", rev = "bfaa14af4fb3e623d05e3323274c98a5886615b4" }
119-
zcash_encoding = { version = "0.3.0", git = "https://github.com/QED-it/librustzcash", rev = "bfaa14af4fb3e623d05e3323274c98a5886615b4" }
120-
zcash_history = { version = "0.4.0", git = "https://github.com/QED-it/librustzcash", rev = "bfaa14af4fb3e623d05e3323274c98a5886615b4" }
121-
zcash_client_backend = { version = "0.20.0", git = "https://github.com/QED-it/librustzcash", rev = "bfaa14af4fb3e623d05e3323274c98a5886615b4" }
122-
zcash_keys = { version = "0.11.0", git = "https://github.com/QED-it/librustzcash", rev = "bfaa14af4fb3e623d05e3323274c98a5886615b4" }
123-
zcash_transparent = { version = "0.5.0", git = "https://github.com/QED-it/librustzcash", rev = "bfaa14af4fb3e623d05e3323274c98a5886615b4" }
124-
zcash_proofs = { version = "0.25.0", git = "https://github.com/QED-it/librustzcash", rev = "bfaa14af4fb3e623d05e3323274c98a5886615b4" }
125-
equihash = { version = "0.2.2", git = "https://github.com/QED-it/librustzcash", rev = "bfaa14af4fb3e623d05e3323274c98a5886615b4" }
116+
zcash_primitives = { version = "0.25.0", git = "https://github.com/QED-it/librustzcash", rev = "acd68d123997ea9788c14244bc3805c6d2e8d68c" }
117+
zcash_protocol = { version = "0.6.2", git = "https://github.com/QED-it/librustzcash", rev = "acd68d123997ea9788c14244bc3805c6d2e8d68c" }
118+
zcash_address = { version = "0.9.0", git = "https://github.com/QED-it/librustzcash", rev = "acd68d123997ea9788c14244bc3805c6d2e8d68c" }
119+
zcash_encoding = { version = "0.3.0", git = "https://github.com/QED-it/librustzcash", rev = "acd68d123997ea9788c14244bc3805c6d2e8d68c" }
120+
zcash_history = { version = "0.4.0", git = "https://github.com/QED-it/librustzcash", rev = "acd68d123997ea9788c14244bc3805c6d2e8d68c" }
121+
zcash_client_backend = { version = "0.20.0", git = "https://github.com/QED-it/librustzcash", rev = "acd68d123997ea9788c14244bc3805c6d2e8d68c" }
122+
zcash_keys = { version = "0.11.0", git = "https://github.com/QED-it/librustzcash", rev = "acd68d123997ea9788c14244bc3805c6d2e8d68c" }
123+
zcash_transparent = { version = "0.5.0", git = "https://github.com/QED-it/librustzcash", rev = "acd68d123997ea9788c14244bc3805c6d2e8d68c" }
124+
zcash_proofs = { version = "0.25.0", git = "https://github.com/QED-it/librustzcash", rev = "acd68d123997ea9788c14244bc3805c6d2e8d68c" }
125+
equihash = { version = "0.2.2", git = "https://github.com/QED-it/librustzcash", rev = "acd68d123997ea9788c14244bc3805c6d2e8d68c" }
126126
zcash_spec = { git = "https://github.com/QED-it/zcash_spec", rev = "d5e84264d2ad0646b587a837f4e2424ca64d3a05" }

zebra-chain/src/orchard_zsa/asset_state.rs

Lines changed: 85 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -291,52 +291,110 @@ pub mod testing {
291291
use orchard::{
292292
issuance::{
293293
auth::{IssueAuthKey, IssueValidatingKey, ZSASchnorr},
294-
compute_asset_desc_hash, create_test_reference_note as create_reference_note,
294+
compute_asset_desc_hash, IssueBundle,
295295
},
296-
note::{AssetBase, AssetId},
296+
note::{AssetBase, AssetId, Nullifier},
297297
value::NoteValue,
298298
};
299299

300-
use rand::SeedableRng;
300+
use group::{ff::PrimeField, Curve, Group};
301+
use halo2::{arithmetic::CurveAffine, pasta::pallas};
302+
use rand::{RngCore, SeedableRng};
301303
use rand_chacha::ChaChaRng;
302304

303-
/// Deterministic "random" AssetBase for tests.
304-
pub fn mock_asset_base(desc: &[u8]) -> AssetBase {
305-
let mut rng = ChaChaRng::seed_from_u64(0);
305+
const TEST_RNG_SEED: u64 = 0;
306+
307+
fn hash_asset_desc(desc: &[u8]) -> [u8; 32] {
308+
let (first, rest) = desc
309+
.split_first()
310+
.expect("asset description must be non-empty");
311+
compute_asset_desc_hash(&(*first, rest.to_vec()).into())
312+
}
313+
314+
fn random_bytes<const N: usize>(rng: &mut impl RngCore) -> [u8; N] {
315+
let mut bytes = [0u8; N];
316+
rng.fill_bytes(&mut bytes);
317+
bytes
318+
}
319+
320+
// Coordinate extractor for Pallas (nu5.pdf, § 5.4.9.7), used to create a nullifier.
321+
fn extract_p(point: &pallas::Point) -> pallas::Base {
322+
point
323+
.to_affine()
324+
.coordinates()
325+
.map(|c| *c.x())
326+
.unwrap_or_else(pallas::Base::zero)
327+
}
328+
329+
fn dummy_nullifier(rng: impl RngCore) -> Nullifier {
330+
Nullifier::from_bytes(&extract_p(&pallas::Point::random(rng)).to_repr())
331+
.expect("pallas x-coordinate is a valid nullifier")
332+
}
306333

307-
let isk = IssueAuthKey::<ZSASchnorr>::random(&mut rng);
334+
fn create_issue_keys(
335+
rng: &mut (impl RngCore + rand::CryptoRng),
336+
) -> (IssueAuthKey<ZSASchnorr>, IssueValidatingKey<ZSASchnorr>) {
337+
let isk = IssueAuthKey::<ZSASchnorr>::random(rng);
308338
let ik = IssueValidatingKey::<ZSASchnorr>::from(&isk);
339+
(isk, ik)
340+
}
309341

310-
let desc_hash = compute_asset_desc_hash(
311-
&desc
312-
.split_first()
313-
.map(|(first, rest)| (*first, rest.to_vec()))
314-
.expect("Asset description must be non-empty")
315-
.into(),
316-
);
342+
// Creates a reference note whose `rho` is set, making it serializable via `AssetState::to_bytes`.
343+
fn create_reference_note_with_rho(
344+
asset_desc: &[u8],
345+
rng: &mut (impl RngCore + rand::CryptoRng),
346+
) -> orchard::Note {
347+
let (isk, ik) = create_issue_keys(&mut *rng);
348+
let desc_hash = hash_asset_desc(asset_desc);
349+
350+
let sighash = random_bytes::<32>(rng);
351+
let first_nullifier = dummy_nullifier(&mut *rng);
352+
let (bundle, _) = IssueBundle::new(ik, desc_hash, None, true, &mut *rng);
353+
354+
let signed_bundle = bundle
355+
.update_rho(&first_nullifier, rng)
356+
.prepare(sighash)
357+
.sign(&isk)
358+
.expect("signing a freshly-created bundle must succeed");
359+
360+
signed_bundle
361+
.actions()
362+
.first()
363+
.get_reference_note()
364+
.expect("first action of IssueBundle always has a reference note")
365+
.clone()
366+
}
317367

318-
AssetBase::custom(&AssetId::new_v0(&ik, &desc_hash))
368+
/// Returns a deterministic [`AssetBase`] for the given description.
369+
pub fn mock_asset_base(desc: &[u8]) -> AssetBase {
370+
let mut rng = ChaChaRng::seed_from_u64(TEST_RNG_SEED);
371+
let (_, ik) = create_issue_keys(&mut rng);
372+
AssetBase::custom(&AssetId::new_v0(&ik, &hash_asset_desc(desc)))
319373
}
320374

321-
/// Mock AssetState for tests.
322-
pub fn mock_asset_state(asset: AssetBase, total_supply: u64, is_finalized: bool) -> AssetState {
323-
let reference_note = create_reference_note(asset, ChaChaRng::seed_from_u64(0));
324-
let amount = NoteValue::from_bytes(total_supply.to_le_bytes());
325-
AssetState::new(amount, is_finalized, reference_note)
375+
/// Returns a deterministic [`AssetState`] for use in tests.
376+
pub fn mock_asset_state(
377+
asset_desc: &[u8],
378+
total_supply: u64,
379+
is_finalized: bool,
380+
) -> AssetState {
381+
let mut rng = ChaChaRng::seed_from_u64(TEST_RNG_SEED);
382+
let reference_note = create_reference_note_with_rho(asset_desc, &mut rng);
383+
AssetState::new(
384+
NoteValue::from_bytes(total_supply.to_le_bytes()),
385+
is_finalized,
386+
reference_note,
387+
)
326388
}
327389
}
328390

329391
#[cfg(test)]
330392
mod tests {
331-
use super::{
332-
testing::{mock_asset_base, mock_asset_state},
333-
*,
334-
};
393+
use super::{testing::mock_asset_state, *};
335394

336395
#[test]
337396
fn asset_state_roundtrip_serialization() {
338-
let asset = mock_asset_base(b"test_asset");
339-
let state = mock_asset_state(asset, 1000, false);
397+
let state = mock_asset_state(b"test_asset", 1000, false);
340398

341399
let bytes = state.to_bytes().unwrap();
342400
let decoded = AssetState::from_bytes(&bytes).unwrap();
@@ -346,8 +404,7 @@ mod tests {
346404

347405
#[test]
348406
fn asset_state_finalized_roundtrip() {
349-
let asset = mock_asset_base(b"finalized");
350-
let state = mock_asset_state(asset, 5000, true);
407+
let state = mock_asset_state(b"finalized", 5000, true);
351408

352409
let bytes = state.to_bytes().unwrap();
353410
let decoded = AssetState::from_bytes(&bytes).unwrap();

0 commit comments

Comments
 (0)