dalek 4.0

This commit is contained in:
Luke Parker 2023-07-23 14:32:14 -04:00
parent 8e6e05ae2d
commit 23e1c9769c
No known key found for this signature in database
34 changed files with 395 additions and 413 deletions

522
Cargo.lock generated

File diff suppressed because it is too large Load diff

View file

@ -79,5 +79,6 @@ panic = "unwind"
[patch.crates-io] [patch.crates-io]
# subxt *can* pull these off crates.io yet there's no benefit to this # subxt *can* pull these off crates.io yet there's no benefit to this
sp-core-hashing = { git = "https://github.com/serai-dex/substrate" } sp-core-hashing = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0" }
sp-std = { git = "https://github.com/serai-dex/substrate" } sp-std = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0" }
snow = { git = "https://github.com/kayabaNerve/snow", branch = "0.9.2" }

View file

@ -31,7 +31,7 @@ crc = { version = "3", default-features = false }
sha3 = { version = "0.10", default-features = false } sha3 = { version = "0.10", default-features = false }
pbkdf2 = { version = "0.12", features = ["simple"], default-features = false } pbkdf2 = { version = "0.12", features = ["simple"], default-features = false }
curve25519-dalek = { version = "^3.2", default-features = false } curve25519-dalek = { version = "4", default-features = false, features = ["alloc", "zeroize", "precomputed-tables"] }
# Used for the hash to curve, along with the more complicated proofs # Used for the hash to curve, along with the more complicated proofs
group = { version = "0.13", default-features = false } group = { version = "0.13", default-features = false }
@ -90,8 +90,6 @@ std = [
"sha3/std", "sha3/std",
"curve25519-dalek/std",
"multiexp/std", "multiexp/std",
"monero-generators/std", "monero-generators/std",

View file

@ -18,7 +18,7 @@ subtle = { version = "^2.4", default-features = false }
sha3 = { version = "0.10", default-features = false } sha3 = { version = "0.10", default-features = false }
curve25519-dalek = { version = "3", default-features = false } curve25519-dalek = { version = "4", default-features = false, features = ["alloc", "zeroize", "precomputed-tables"] }
group = { version = "0.13", default-features = false } group = { version = "0.13", default-features = false }
dalek-ff-group = { path = "../../../crypto/dalek-ff-group", version = "0.3" } dalek-ff-group = { path = "../../../crypto/dalek-ff-group", version = "0.3" }

View file

@ -179,7 +179,7 @@ pub struct Commitment {
impl Commitment { impl Commitment {
/// A commitment to zero, defined with a mask of 1 (as to not be the identity). /// A commitment to zero, defined with a mask of 1 (as to not be the identity).
pub fn zero() -> Commitment { pub fn zero() -> Commitment {
Commitment { mask: Scalar::one(), amount: 0 } Commitment { mask: Scalar::ONE, amount: 0 }
} }
pub fn new(mask: Scalar, amount: u64) -> Commitment { pub fn new(mask: Scalar, amount: u64) -> Commitment {
@ -188,7 +188,7 @@ impl Commitment {
/// Calculate a Pedersen commitment, as a point, from the transparent structure. /// Calculate a Pedersen commitment, as a point, from the transparent structure.
pub fn calculate(&self) -> EdwardsPoint { pub fn calculate(&self) -> EdwardsPoint {
(&self.mask * &ED25519_BASEPOINT_TABLE) + (Scalar::from(self.amount) * H()) (&self.mask * ED25519_BASEPOINT_TABLE) + (Scalar::from(self.amount) * H())
} }
} }
@ -210,6 +210,6 @@ pub fn hash_to_scalar(data: &[u8]) -> Scalar {
// This library acknowledges its practical impossibility of it occurring, and doesn't bother to // This library acknowledges its practical impossibility of it occurring, and doesn't bother to
// code in logic to handle it. That said, if it ever occurs, something must happen in order to // code in logic to handle it. That said, if it ever occurs, something must happen in order to
// not generate/verify a proof we believe to be valid when it isn't // not generate/verify a proof we believe to be valid when it isn't
assert!(scalar != Scalar::zero(), "ZERO HASH: {data:?}"); assert!(scalar != Scalar::ZERO, "ZERO HASH: {data:?}");
scalar scalar
} }

View file

@ -169,7 +169,7 @@ fn core(
} }
// Perform the core loop // Perform the core loop
let mut c1 = CtOption::new(Scalar::zero(), Choice::from(0)); let mut c1 = CtOption::new(Scalar::ZERO, Choice::from(0));
for i in (start .. end).map(|i| i % n) { for i in (start .. end).map(|i| i % n) {
// This will only execute once and shouldn't need to be constant time. Making it constant time // This will only execute once and shouldn't need to be constant time. Making it constant time
// removes the risk of branch prediction creating timing differences depending on ring index // removes the risk of branch prediction creating timing differences depending on ring index
@ -179,7 +179,7 @@ fn core(
let c_p = mu_P * c; let c_p = mu_P * c;
let c_c = mu_C * c; let c_c = mu_C * c;
let L = (&s[i] * &ED25519_BASEPOINT_TABLE) + (c_p * P[i]) + (c_c * C[i]); let L = (&s[i] * ED25519_BASEPOINT_TABLE) + (c_p * P[i]) + (c_c * C[i]);
let PH = hash_to_point(P[i]); let PH = hash_to_point(P[i]);
// Shouldn't be an issue as all of the variables in this vartime statement are public // Shouldn't be an issue as all of the variables in this vartime statement are public
let R = (s[i] * PH) + images_precomp.vartime_multiscalar_mul([c_p, c_c]); let R = (s[i] * PH) + images_precomp.vartime_multiscalar_mul([c_p, c_c]);
@ -241,7 +241,7 @@ impl Clsag {
msg: [u8; 32], msg: [u8; 32],
) -> Vec<(Clsag, EdwardsPoint)> { ) -> Vec<(Clsag, EdwardsPoint)> {
let mut res = Vec::with_capacity(inputs.len()); let mut res = Vec::with_capacity(inputs.len());
let mut sum_pseudo_outs = Scalar::zero(); let mut sum_pseudo_outs = Scalar::ZERO;
for i in 0 .. inputs.len() { for i in 0 .. inputs.len() {
let mut mask = random_scalar(rng); let mut mask = random_scalar(rng);
if i == (inputs.len() - 1) { if i == (inputs.len() - 1) {
@ -257,7 +257,7 @@ impl Clsag {
&inputs[i].2, &inputs[i].2,
mask, mask,
&msg, &msg,
nonce.deref() * &ED25519_BASEPOINT_TABLE, nonce.deref() * ED25519_BASEPOINT_TABLE,
nonce.deref() * nonce.deref() *
hash_to_point(inputs[i].2.decoys.ring[usize::from(inputs[i].2.decoys.i)][0]), hash_to_point(inputs[i].2.decoys.ring[usize::from(inputs[i].2.decoys.i)][0]),
); );

View file

@ -28,7 +28,7 @@ use crate::{
/// Generate a key image for a given key. Defined as `x * hash_to_point(xG)`. /// Generate a key image for a given key. Defined as `x * hash_to_point(xG)`.
pub fn generate_key_image(secret: &Zeroizing<Scalar>) -> EdwardsPoint { pub fn generate_key_image(secret: &Zeroizing<Scalar>) -> EdwardsPoint {
hash_to_point(&ED25519_BASEPOINT_TABLE * secret.deref()) * secret.deref() hash_to_point(ED25519_BASEPOINT_TABLE * secret.deref()) * secret.deref()
} }
#[derive(Clone, PartialEq, Eq, Debug)] #[derive(Clone, PartialEq, Eq, Debug)]

View file

@ -119,7 +119,7 @@ pub(crate) fn read_varint<R: Read>(r: &mut R) -> io::Result<u64> {
// https://github.com/monero-project/monero/issues/8438, where some scalars had an archaic // https://github.com/monero-project/monero/issues/8438, where some scalars had an archaic
// reduction applied // reduction applied
pub(crate) fn read_scalar<R: Read>(r: &mut R) -> io::Result<Scalar> { pub(crate) fn read_scalar<R: Read>(r: &mut R) -> io::Result<Scalar> {
Scalar::from_canonical_bytes(read_bytes(r)?) Option::from(Scalar::from_canonical_bytes(read_bytes(r)?))
.ok_or_else(|| io::Error::new(io::ErrorKind::Other, "unreduced scalar")) .ok_or_else(|| io::Error::new(io::ErrorKind::Other, "unreduced scalar"))
} }

View file

@ -73,8 +73,8 @@ fn featured() {
[(Network::Mainnet, 'C'), (Network::Testnet, 'K'), (Network::Stagenet, 'F')] [(Network::Mainnet, 'C'), (Network::Testnet, 'K'), (Network::Stagenet, 'F')]
{ {
for _ in 0 .. 100 { for _ in 0 .. 100 {
let spend = &random_scalar(&mut OsRng) * &ED25519_BASEPOINT_TABLE; let spend = &random_scalar(&mut OsRng) * ED25519_BASEPOINT_TABLE;
let view = &random_scalar(&mut OsRng) * &ED25519_BASEPOINT_TABLE; let view = &random_scalar(&mut OsRng) * ED25519_BASEPOINT_TABLE;
for features in 0 .. (1 << 3) { for features in 0 .. (1 << 3) {
const SUBADDRESS_FEATURE_BIT: u8 = 1; const SUBADDRESS_FEATURE_BIT: u8 = 1;
@ -143,9 +143,9 @@ fn featured_vectors() {
_ => panic!("Unknown network"), _ => panic!("Unknown network"),
}; };
let spend = let spend =
CompressedEdwardsY::from_slice(&hex::decode(vector.spend).unwrap()).decompress().unwrap(); CompressedEdwardsY::from_slice(&hex::decode(vector.spend).unwrap()).unwrap().decompress().unwrap();
let view = let view =
CompressedEdwardsY::from_slice(&hex::decode(vector.view).unwrap()).decompress().unwrap(); CompressedEdwardsY::from_slice(&hex::decode(vector.view).unwrap()).unwrap().decompress().unwrap();
let addr = MoneroAddress::from_str(network, &vector.address).unwrap(); let addr = MoneroAddress::from_str(network, &vector.address).unwrap();
assert_eq!(addr.spend, spend); assert_eq!(addr.spend, spend);

View file

@ -81,7 +81,7 @@ macro_rules! bulletproofs_tests {
// Check Bulletproofs errors if we try to prove for too many outputs // Check Bulletproofs errors if we try to prove for too many outputs
let mut commitments = vec![]; let mut commitments = vec![];
for _ in 0 .. 17 { for _ in 0 .. 17 {
commitments.push(Commitment::new(Scalar::zero(), 0)); commitments.push(Commitment::new(Scalar::ZERO, 0));
} }
assert!(Bulletproofs::prove(&mut OsRng, &commitments, $plus).is_err()); assert!(Bulletproofs::prove(&mut OsRng, &commitments, $plus).is_err());
} }

View file

@ -40,7 +40,7 @@ fn clsag() {
for real in 0 .. RING_LEN { for real in 0 .. RING_LEN {
let msg = [1; 32]; let msg = [1; 32];
let mut secrets = (Zeroizing::new(Scalar::zero()), Scalar::zero()); let mut secrets = (Zeroizing::new(Scalar::ZERO), Scalar::ZERO);
let mut ring = vec![]; let mut ring = vec![];
for i in 0 .. RING_LEN { for i in 0 .. RING_LEN {
let dest = Zeroizing::new(random_scalar(&mut OsRng)); let dest = Zeroizing::new(random_scalar(&mut OsRng));
@ -53,7 +53,7 @@ fn clsag() {
amount = OsRng.next_u64(); amount = OsRng.next_u64();
} }
ring ring
.push([dest.deref() * &ED25519_BASEPOINT_TABLE, Commitment::new(mask, amount).calculate()]); .push([dest.deref() * ED25519_BASEPOINT_TABLE, Commitment::new(mask, amount).calculate()]);
} }
let image = generate_key_image(&secrets.0); let image = generate_key_image(&secrets.0);
@ -92,7 +92,7 @@ fn clsag_multisig() {
let mask; let mask;
let amount; let amount;
if i != u64::from(RING_INDEX) { if i != u64::from(RING_INDEX) {
dest = &random_scalar(&mut OsRng) * &ED25519_BASEPOINT_TABLE; dest = &random_scalar(&mut OsRng) * ED25519_BASEPOINT_TABLE;
mask = random_scalar(&mut OsRng); mask = random_scalar(&mut OsRng);
amount = OsRng.next_u64(); amount = OsRng.next_u64();
} else { } else {

View file

@ -156,8 +156,8 @@ fn test_classic_seed() {
let spend: [u8; 32] = hex::decode(vector.spend).unwrap().try_into().unwrap(); let spend: [u8; 32] = hex::decode(vector.spend).unwrap().try_into().unwrap();
// For classical seeds, Monero directly uses the entropy as a spend key // For classical seeds, Monero directly uses the entropy as a spend key
assert_eq!( assert_eq!(
Scalar::from_canonical_bytes(*seed.entropy()), Option::<Scalar>::from(Scalar::from_canonical_bytes(*seed.entropy())),
Scalar::from_canonical_bytes(spend) Option::<Scalar>::from(Scalar::from_canonical_bytes(spend)),
); );
let view: [u8; 32] = hex::decode(vector.view).unwrap().try_into().unwrap(); let view: [u8; 32] = hex::decode(vector.view).unwrap().try_into().unwrap();

View file

@ -150,7 +150,7 @@ impl ViewPair {
} }
pub fn view(&self) -> EdwardsPoint { pub fn view(&self) -> EdwardsPoint {
self.view.deref() * &ED25519_BASEPOINT_TABLE self.view.deref() * ED25519_BASEPOINT_TABLE
} }
fn subaddress_derivation(&self, index: SubaddressIndex) -> Scalar { fn subaddress_derivation(&self, index: SubaddressIndex) -> Scalar {
@ -167,7 +167,7 @@ impl ViewPair {
fn subaddress_keys(&self, index: SubaddressIndex) -> (EdwardsPoint, EdwardsPoint) { fn subaddress_keys(&self, index: SubaddressIndex) -> (EdwardsPoint, EdwardsPoint) {
let scalar = self.subaddress_derivation(index); let scalar = self.subaddress_derivation(index);
let spend = self.spend + (&scalar * &ED25519_BASEPOINT_TABLE); let spend = self.spend + (&scalar * ED25519_BASEPOINT_TABLE);
let view = self.view.deref() * spend; let view = self.view.deref() * spend;
(spend, view) (spend, view)
} }
@ -175,7 +175,7 @@ impl ViewPair {
/// Returns an address with the provided specification. /// Returns an address with the provided specification.
pub fn address(&self, network: Network, spec: AddressSpec) -> MoneroAddress { pub fn address(&self, network: Network, spec: AddressSpec) -> MoneroAddress {
let mut spend = self.spend; let mut spend = self.spend;
let mut view: EdwardsPoint = self.view.deref() * &ED25519_BASEPOINT_TABLE; let mut view: EdwardsPoint = self.view.deref() * ED25519_BASEPOINT_TABLE;
// construct the address meta // construct the address meta
let meta = match spec { let meta = match spec {

View file

@ -356,7 +356,7 @@ impl Scanner {
// P - shared == spend // P - shared == spend
let subaddress = self let subaddress = self
.subaddresses .subaddresses
.get(&(output_key - (&shared_key * &ED25519_BASEPOINT_TABLE)).compress()); .get(&(output_key - (&shared_key * ED25519_BASEPOINT_TABLE)).compress());
if subaddress.is_none() { if subaddress.is_none() {
continue; continue;
} }

View file

@ -261,10 +261,11 @@ impl ClassicSeed {
let (lang, entropy) = seed_to_bytes(&words)?; let (lang, entropy) = seed_to_bytes(&words)?;
// Make sure this is a valid scalar // Make sure this is a valid scalar
let mut scalar = Scalar::from_canonical_bytes(*entropy); let scalar = Scalar::from_canonical_bytes(*entropy);
if scalar.is_none() { if scalar.is_none().into() {
Err(SeedError::InvalidSeed)?; Err(SeedError::InvalidSeed)?;
} }
let mut scalar = scalar.unwrap();
scalar.zeroize(); scalar.zeroize();
// Call from_entropy so a trimmed seed becomes a full seed // Call from_entropy so a trimmed seed becomes a full seed
@ -272,7 +273,7 @@ impl ClassicSeed {
} }
pub fn from_entropy(lang: Language, entropy: Zeroizing<[u8; 32]>) -> Option<ClassicSeed> { pub fn from_entropy(lang: Language, entropy: Zeroizing<[u8; 32]>) -> Option<ClassicSeed> {
Scalar::from_canonical_bytes(*entropy).map(|scalar| key_to_seed(lang, Zeroizing::new(scalar))) Option::from(Scalar::from_canonical_bytes(*entropy)).map(|scalar| key_to_seed(lang, Zeroizing::new(scalar)))
} }
pub(crate) fn to_string(&self) -> Zeroizing<String> { pub(crate) fn to_string(&self) -> Zeroizing<String> {

View file

@ -83,7 +83,7 @@ impl SendOutput {
SendOutput { SendOutput {
R, R,
view_tag, view_tag,
dest: ((&shared_key * &ED25519_BASEPOINT_TABLE) + output.0.spend), dest: ((&shared_key * ED25519_BASEPOINT_TABLE) + output.0.spend),
commitment: Commitment::new(commitment_mask(shared_key), output.1), commitment: Commitment::new(commitment_mask(shared_key), output.1),
amount: amount_encryption(output.1, shared_key), amount: amount_encryption(output.1, shared_key),
}, },
@ -105,7 +105,7 @@ impl SendOutput {
output, output,
r.deref() * address.view, r.deref() * address.view,
if !address.is_subaddress() { if !address.is_subaddress() {
r.deref() * &ED25519_BASEPOINT_TABLE r.deref() * ED25519_BASEPOINT_TABLE
} else { } else {
r.deref() * address.spend r.deref() * address.spend
}, },
@ -577,7 +577,7 @@ impl SignableTransaction {
// Used for all non-subaddress outputs, or if there's only one subaddress output and a change // Used for all non-subaddress outputs, or if there's only one subaddress output and a change
let tx_key = Zeroizing::new(random_scalar(&mut rng)); let tx_key = Zeroizing::new(random_scalar(&mut rng));
let mut tx_public_key = tx_key.deref() * &ED25519_BASEPOINT_TABLE; let mut tx_public_key = tx_key.deref() * ED25519_BASEPOINT_TABLE;
// If any of these outputs are to a subaddress, we need keys distinct to them // If any of these outputs are to a subaddress, we need keys distinct to them
// The only time this *does not* force having additional keys is when the only other output // The only time this *does not* force having additional keys is when the only other output
@ -597,7 +597,7 @@ impl SignableTransaction {
InternalPayment::Change(_, _) => {} InternalPayment::Change(_, _) => {}
} }
} }
debug_assert!(tx_public_key != (tx_key.deref() * &ED25519_BASEPOINT_TABLE)); debug_assert!(tx_public_key != (tx_key.deref() * ED25519_BASEPOINT_TABLE));
} }
// Actually create the outputs // Actually create the outputs
@ -810,7 +810,7 @@ impl SignableTransaction {
let mut images = Vec::with_capacity(self.inputs.len()); let mut images = Vec::with_capacity(self.inputs.len());
for (input, _) in &self.inputs { for (input, _) in &self.inputs {
let mut offset = Zeroizing::new(spend.deref() + input.key_offset()); let mut offset = Zeroizing::new(spend.deref() + input.key_offset());
if (offset.deref() * &ED25519_BASEPOINT_TABLE) != input.key() { if (offset.deref() * ED25519_BASEPOINT_TABLE) != input.key() {
Err(TransactionError::WrongPrivateKey)?; Err(TransactionError::WrongPrivateKey)?;
} }

View file

@ -337,7 +337,7 @@ impl SignMachine<Transaction> for TransactionSignMachine {
sorted.sort_by(|x, y| key_image_sort(&x.0, &y.0)); sorted.sort_by(|x, y| key_image_sort(&x.0, &y.0));
let mut rng = ChaCha20Rng::from_seed(self.transcript.rng_seed(b"pseudo_out_masks")); let mut rng = ChaCha20Rng::from_seed(self.transcript.rng_seed(b"pseudo_out_masks"));
let mut sum_pseudo_outs = Scalar::zero(); let mut sum_pseudo_outs = Scalar::ZERO;
while !sorted.is_empty() { while !sorted.is_empty() {
let value = sorted.remove(0); let value = sorted.remove(0);

View file

@ -21,7 +21,7 @@ use monero_serai::{
pub fn random_address() -> (Scalar, ViewPair, MoneroAddress) { pub fn random_address() -> (Scalar, ViewPair, MoneroAddress) {
let spend = random_scalar(&mut OsRng); let spend = random_scalar(&mut OsRng);
let spend_pub = &spend * &ED25519_BASEPOINT_TABLE; let spend_pub = &spend * ED25519_BASEPOINT_TABLE;
let view = Zeroizing::new(random_scalar(&mut OsRng)); let view = Zeroizing::new(random_scalar(&mut OsRng));
( (
spend, spend,
@ -29,7 +29,7 @@ pub fn random_address() -> (Scalar, ViewPair, MoneroAddress) {
MoneroAddress { MoneroAddress {
meta: AddressMeta::new(Network::Mainnet, AddressType::Standard), meta: AddressMeta::new(Network::Mainnet, AddressType::Standard),
spend: spend_pub, spend: spend_pub,
view: view.deref() * &ED25519_BASEPOINT_TABLE, view: view.deref() * ED25519_BASEPOINT_TABLE,
}, },
) )
} }
@ -95,8 +95,8 @@ pub async fn rpc() -> Rpc<HttpRpc> {
let addr = MoneroAddress { let addr = MoneroAddress {
meta: AddressMeta::new(Network::Mainnet, AddressType::Standard), meta: AddressMeta::new(Network::Mainnet, AddressType::Standard),
spend: &random_scalar(&mut OsRng) * &ED25519_BASEPOINT_TABLE, spend: &random_scalar(&mut OsRng) * ED25519_BASEPOINT_TABLE,
view: &random_scalar(&mut OsRng) * &ED25519_BASEPOINT_TABLE, view: &random_scalar(&mut OsRng) * ED25519_BASEPOINT_TABLE,
} }
.to_string(); .to_string();
@ -193,7 +193,7 @@ macro_rules! test {
let keys = key_gen::<_, Ed25519>(&mut OsRng); let keys = key_gen::<_, Ed25519>(&mut OsRng);
let spend_pub = if !multisig { let spend_pub = if !multisig {
spend.deref() * &ED25519_BASEPOINT_TABLE spend.deref() * ED25519_BASEPOINT_TABLE
} else { } else {
#[cfg(not(feature = "multisig"))] #[cfg(not(feature = "multisig"))]
panic!("Multisig branch called without the multisig feature"); panic!("Multisig branch called without the multisig feature");
@ -215,7 +215,7 @@ macro_rules! test {
rpc.get_fee(protocol, FeePriority::Low).await.unwrap(), rpc.get_fee(protocol, FeePriority::Low).await.unwrap(),
Some(Change::new( Some(Change::new(
&ViewPair::new( &ViewPair::new(
&random_scalar(&mut OsRng) * &ED25519_BASEPOINT_TABLE, &random_scalar(&mut OsRng) * ED25519_BASEPOINT_TABLE,
Zeroizing::new(random_scalar(&mut OsRng)) Zeroizing::new(random_scalar(&mut OsRng))
), ),
false false

View file

@ -104,7 +104,7 @@ test!(
use monero_serai::wallet::FeePriority; use monero_serai::wallet::FeePriority;
let change_view = ViewPair::new( let change_view = ViewPair::new(
&random_scalar(&mut OsRng) * &ED25519_BASEPOINT_TABLE, &random_scalar(&mut OsRng) * ED25519_BASEPOINT_TABLE,
Zeroizing::new(random_scalar(&mut OsRng)), Zeroizing::new(random_scalar(&mut OsRng)),
); );
@ -117,7 +117,7 @@ test!(
// Send to a subaddress // Send to a subaddress
let sub_view = ViewPair::new( let sub_view = ViewPair::new(
&random_scalar(&mut OsRng) * &ED25519_BASEPOINT_TABLE, &random_scalar(&mut OsRng) * ED25519_BASEPOINT_TABLE,
Zeroizing::new(random_scalar(&mut OsRng)), Zeroizing::new(random_scalar(&mut OsRng)),
); );
builder.add_payment( builder.add_payment(

View file

@ -29,7 +29,7 @@ frost = { package = "modular-frost", path = "../crypto/frost" }
scale = { package = "parity-scale-codec", version = "3", features = ["derive"] } scale = { package = "parity-scale-codec", version = "3", features = ["derive"] }
sp-application-crypto = { git = "https://github.com/serai-dex/substrate", default-features = false } sp-application-crypto = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0", default-features = false }
rocksdb = "0.21" rocksdb = "0.21"
serai-db = { path = "../common/db", features = ["rocksdb"] } serai-db = { path = "../common/db", features = ["rocksdb"] }

View file

@ -27,9 +27,8 @@ group = { version = "0.13", default-features = false }
crypto-bigint = { version = "0.5", default-features = false } crypto-bigint = { version = "0.5", default-features = false }
sha2 = { version = "0.9", default-features = false } sha2 = { version = "0.10", default-features = false }
# The default features are ["std", "u64_backend"] curve25519-dalek = { version = "4", default-features = false, features = ["alloc", "zeroize", "digest", "precomputed-tables", "legacy_compatibility"] }
curve25519-dalek = { version = "^3.2", default-features = false, features = ["alloc", "u64_backend"] }
[dev-dependencies] [dev-dependencies]
rand_core = { version = "0.6", features = ["std"] } rand_core = { version = "0.6", features = ["std"] }

View file

@ -1,3 +1,5 @@
#![allow(deprecated)]
#![cfg_attr(docsrs, feature(doc_auto_cfg))] #![cfg_attr(docsrs, feature(doc_auto_cfg))]
#![no_std] // Prevents writing new code, in what should be a simple wrapper, which requires std #![no_std] // Prevents writing new code, in what should be a simple wrapper, which requires std
#![doc = include_str!("../README.md")] #![doc = include_str!("../README.md")]
@ -234,12 +236,8 @@ impl Scalar {
} }
impl Field for Scalar { impl Field for Scalar {
const ZERO: Scalar = Scalar(DScalar::from_bits([0; 32])); const ZERO: Scalar = Scalar(DScalar::ZERO);
const ONE: Scalar = Scalar(DScalar::from_bits({ const ONE: Scalar = Scalar(DScalar::ONE);
let mut bytes = [0; 32];
bytes[0] = 1;
bytes
}));
fn random(mut rng: impl RngCore) -> Self { fn random(mut rng: impl RngCore) -> Self {
let mut r = [0; 64]; let mut r = [0; 64];
@ -321,7 +319,7 @@ impl PrimeField for Scalar {
fn from_repr(bytes: [u8; 32]) -> CtOption<Self> { fn from_repr(bytes: [u8; 32]) -> CtOption<Self> {
let scalar = DScalar::from_canonical_bytes(bytes); let scalar = DScalar::from_canonical_bytes(bytes);
// TODO: This unwrap_or_else isn't constant time, yet we don't exactly have an alternative... // TODO: This unwrap_or_else isn't constant time, yet we don't exactly have an alternative...
CtOption::new(Scalar(scalar.unwrap_or_else(DScalar::zero)), choice(black_box(scalar).is_some())) CtOption::new(Scalar(scalar.unwrap_or(DScalar::ZERO)), black_box(scalar).is_some())
} }
fn to_repr(&self) -> [u8; 32] { fn to_repr(&self) -> [u8; 32] {
self.0.to_bytes() self.0.to_bytes()
@ -357,7 +355,7 @@ impl PrimeFieldBits for Scalar {
fn char_le_bits() -> FieldBits<Self::ReprBits> { fn char_le_bits() -> FieldBits<Self::ReprBits> {
let mut bytes = (Scalar::ZERO - Scalar::ONE).to_repr(); let mut bytes = (Scalar::ZERO - Scalar::ONE).to_repr();
bytes[0] += 1; bytes[0] += 1;
debug_assert_eq!(DScalar::from_bytes_mod_order(bytes), DScalar::zero()); debug_assert_eq!(DScalar::from_bytes_mod_order(bytes), DScalar::ZERO);
bytes.into() bytes.into()
} }
} }
@ -424,9 +422,12 @@ macro_rules! dalek_group {
type Scalar = Scalar; type Scalar = Scalar;
fn random(mut rng: impl RngCore) -> Self { fn random(mut rng: impl RngCore) -> Self {
loop { loop {
let mut bytes = [0; 64]; let mut bytes = [0; 32];
rng.fill_bytes(&mut bytes); rng.fill_bytes(&mut bytes);
let point = $Point($DPoint::hash_from_bytes::<sha2::Sha512>(&bytes)); let Some(point) = $DCompressed(bytes).decompress() else {
continue;
};
let point = $Point(point);
// Ban identity, per the trait specification // Ban identity, per the trait specification
if !bool::from(point.is_identity()) { if !bool::from(point.is_identity()) {
return point; return point;

View file

@ -24,7 +24,7 @@ ciphersuite = { path = "../ciphersuite", version = "0.3", features = ["std", "ri
schnorr = { package = "schnorr-signatures", path = "../schnorr", version = "0.4" } schnorr = { package = "schnorr-signatures", path = "../schnorr", version = "0.4" }
frost = { path = "../frost", package = "modular-frost", version = "0.7", features = ["ristretto"] } frost = { path = "../frost", package = "modular-frost", version = "0.7", features = ["ristretto"] }
schnorrkel = "0.10" schnorrkel = { version = "0.11", git = "https://github.com/serai-dex/schnorrkel" }
[dev-dependencies] [dev-dependencies]
frost = { path = "../frost", package = "modular-frost", features = ["tests"] } frost = { path = "../frost", package = "modular-frost", features = ["tests"] }

View file

@ -39,7 +39,7 @@ frost = { package = "modular-frost", path = "../crypto/frost", features = ["rist
frost-schnorrkel = { path = "../crypto/schnorrkel" } frost-schnorrkel = { path = "../crypto/schnorrkel" }
# Substrate # Substrate
sp-application-crypto = { git = "https://github.com/serai-dex/substrate", default-features = false } sp-application-crypto = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0", default-features = false }
# Bitcoin # Bitcoin
secp256k1 = { version = "0.27", features = ["global-context", "rand-std"], optional = true } secp256k1 = { version = "0.27", features = ["global-context", "rand-std"], optional = true }

View file

@ -21,7 +21,7 @@ scale-info = { version = "2", optional = true }
serai-runtime = { path = "../runtime", version = "0.1" } serai-runtime = { path = "../runtime", version = "0.1" }
sp-core = { git = "https://github.com/serai-dex/substrate" } sp-core = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0" }
subxt = { version = "0.29", default-features = false, features = ["jsonrpsee-ws"], optional = true } subxt = { version = "0.29", default-features = false, features = ["jsonrpsee-ws"], optional = true }
bitcoin = { version = "0.30", optional = true } bitcoin = { version = "0.30", optional = true }

View file

@ -17,11 +17,11 @@ thiserror = { version = "1", optional = true }
scale = { package = "parity-scale-codec", version = "3", default-features = false, features = ["derive", "max-encoded-len"] } scale = { package = "parity-scale-codec", version = "3", default-features = false, features = ["derive", "max-encoded-len"] }
scale-info = { version = "2", default-features = false, features = ["derive"] } scale-info = { version = "2", default-features = false, features = ["derive"] }
sp-application-crypto = { git = "https://github.com/serai-dex/substrate", default-features = false } sp-application-crypto = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0", default-features = false }
sp-runtime = { git = "https://github.com/serai-dex/substrate", default-features = false } sp-runtime = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0", default-features = false }
frame-system = { git = "https://github.com/serai-dex/substrate", default-features = false } frame-system = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0", default-features = false }
frame-support = { git = "https://github.com/serai-dex/substrate", default-features = false } frame-support = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0", default-features = false }
serai-primitives = { path = "../../primitives", default-features = false } serai-primitives = { path = "../../primitives", default-features = false }
in-instructions-primitives = { package = "serai-in-instructions-primitives", path = "../primitives", default-features = false } in-instructions-primitives = { package = "serai-in-instructions-primitives", path = "../primitives", default-features = false }

View file

@ -18,9 +18,9 @@ serde = { version = "1", default-features = false, features = ["derive", "alloc"
scale = { package = "parity-scale-codec", version = "3", default-features = false, features = ["derive"] } scale = { package = "parity-scale-codec", version = "3", default-features = false, features = ["derive"] }
scale-info = { version = "2", default-features = false, features = ["derive"] } scale-info = { version = "2", default-features = false, features = ["derive"] }
sp-application-crypto = { git = "https://github.com/serai-dex/substrate", default-features = false } sp-application-crypto = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0", default-features = false }
sp-std = { git = "https://github.com/serai-dex/substrate", default-features = false } sp-std = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0", default-features = false }
sp-runtime = { git = "https://github.com/serai-dex/substrate", default-features = false } sp-runtime = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0", default-features = false }
serai-primitives = { path = "../../primitives", default-features = false } serai-primitives = { path = "../../primitives", default-features = false }
tokens-primitives = { package = "serai-tokens-primitives", path = "../../tokens/primitives", default-features = false } tokens-primitives = { package = "serai-tokens-primitives", path = "../../tokens/primitives", default-features = false }

View file

@ -17,47 +17,47 @@ clap = { version = "4", features = ["derive"] }
futures = "0.3" futures = "0.3"
jsonrpsee = { version = "0.16", features = ["server"] } jsonrpsee = { version = "0.16", features = ["server"] }
sp-core = { git = "https://github.com/serai-dex/substrate" } sp-core = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0" }
sp-keyring = { git = "https://github.com/serai-dex/substrate" } sp-keyring = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0" }
sp-inherents = { git = "https://github.com/serai-dex/substrate" } sp-inherents = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0" }
sp-timestamp = { git = "https://github.com/serai-dex/substrate" } sp-timestamp = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0" }
sp-io = { git = "https://github.com/serai-dex/substrate" } sp-io = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0" }
sp-runtime = { git = "https://github.com/serai-dex/substrate" } sp-runtime = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0" }
sp-blockchain = { git = "https://github.com/serai-dex/substrate" } sp-blockchain = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0" }
sp-api = { git = "https://github.com/serai-dex/substrate" } sp-api = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0" }
sp-block-builder = { git = "https://github.com/serai-dex/substrate" } sp-block-builder = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0" }
sp-consensus-babe = { git = "https://github.com/serai-dex/substrate" } sp-consensus-babe = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0" }
frame-benchmarking = { git = "https://github.com/serai-dex/substrate" } frame-benchmarking = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0" }
frame-benchmarking-cli = { git = "https://github.com/serai-dex/substrate" } frame-benchmarking-cli = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0" }
serai-runtime = { path = "../runtime", features = ["std"] } serai-runtime = { path = "../runtime", features = ["std"] }
sc-offchain = { git = "https://github.com/serai-dex/substrate" } sc-offchain = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0" }
sc-transaction-pool = { git = "https://github.com/serai-dex/substrate" } sc-transaction-pool = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0" }
sc-transaction-pool-api = { git = "https://github.com/serai-dex/substrate" } sc-transaction-pool-api = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0" }
sc-basic-authorship = { git = "https://github.com/serai-dex/substrate" } sc-basic-authorship = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0" }
sc-executor = { git = "https://github.com/serai-dex/substrate" } sc-executor = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0" }
sc-service = { git = "https://github.com/serai-dex/substrate" } sc-service = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0" }
sc-client-api = { git = "https://github.com/serai-dex/substrate" } sc-client-api = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0" }
sc-network-common = { git = "https://github.com/serai-dex/substrate" } sc-network-common = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0" }
sc-network = { git = "https://github.com/serai-dex/substrate" } sc-network = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0" }
sc-consensus = { git = "https://github.com/serai-dex/substrate" } sc-consensus = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0" }
sc-consensus-babe = { git = "https://github.com/serai-dex/substrate" } sc-consensus-babe = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0" }
sc-consensus-grandpa = { git = "https://github.com/serai-dex/substrate" } sc-consensus-grandpa = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0" }
sc-authority-discovery = { git = "https://github.com/serai-dex/substrate" } sc-authority-discovery = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0" }
sc-telemetry = { git = "https://github.com/serai-dex/substrate" } sc-telemetry = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0" }
sc-cli = { git = "https://github.com/serai-dex/substrate" } sc-cli = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0" }
sc-rpc-api = { git = "https://github.com/serai-dex/substrate" } sc-rpc-api = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0" }
substrate-frame-rpc-system = { git = "https://github.com/serai-dex/substrate" } substrate-frame-rpc-system = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0" }
pallet-transaction-payment-rpc = { git = "https://github.com/serai-dex/substrate" } pallet-transaction-payment-rpc = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0" }
[build-dependencies] [build-dependencies]
substrate-build-script-utils = { git = "https://github.com/serai-dex/substrate.git" } substrate-build-script-utils = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0" }
[features] [features]
default = [] default = []

View file

@ -21,8 +21,8 @@ serde = { version = "1", default-features = false, features = ["derive", "alloc"
scale = { package = "parity-scale-codec", version = "3", default-features = false, features = ["derive"] } scale = { package = "parity-scale-codec", version = "3", default-features = false, features = ["derive"] }
scale-info = { version = "2", default-features = false, features = ["derive"] } scale-info = { version = "2", default-features = false, features = ["derive"] }
sp-core = { git = "https://github.com/serai-dex/substrate", default-features = false } sp-core = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0", default-features = false }
sp-runtime = { git = "https://github.com/serai-dex/substrate", default-features = false } sp-runtime = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0", default-features = false }
[features] [features]
std = ["lazy_static", "zeroize", "scale/std", "scale-info/std", "serde/std", "sp-core/std", "sp-runtime/std"] std = ["lazy_static", "zeroize", "scale/std", "scale-info/std", "serde/std", "sp-core/std", "sp-runtime/std"]

View file

@ -15,53 +15,53 @@ rustdoc-args = ["--cfg", "docsrs"]
codec = { package = "parity-scale-codec", version = "3", default-features = false, features = ["derive"] } codec = { package = "parity-scale-codec", version = "3", default-features = false, features = ["derive"] }
scale-info = { version = "2", default-features = false, features = ["derive"] } scale-info = { version = "2", default-features = false, features = ["derive"] }
sp-core = { git = "https://github.com/serai-dex/substrate", default-features = false } sp-core = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0", default-features = false }
sp-std = { git = "https://github.com/serai-dex/substrate", default-features = false } sp-std = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0", default-features = false }
sp-offchain = { git = "https://github.com/serai-dex/substrate", default-features = false } sp-offchain = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0", default-features = false }
sp-version = { git = "https://github.com/serai-dex/substrate", default-features = false } sp-version = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0", default-features = false }
sp-inherents = { git = "https://github.com/serai-dex/substrate", default-features = false } sp-inherents = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0", default-features = false }
sp-session = { git = "https://github.com/serai-dex/substrate", default-features = false } sp-session = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0", default-features = false }
sp-consensus-babe = { git = "https://github.com/serai-dex/substrate", default-features = false } sp-consensus-babe = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0", default-features = false }
sp-consensus-grandpa = { git = "https://github.com/serai-dex/substrate", default-features = false } sp-consensus-grandpa = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0", default-features = false }
sp-authority-discovery = { git = "https://github.com/serai-dex/substrate", default-features = false } sp-authority-discovery = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0", default-features = false }
sp-transaction-pool = { git = "https://github.com/serai-dex/substrate", default-features = false } sp-transaction-pool = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0", default-features = false }
sp-block-builder = { git = "https://github.com/serai-dex/substrate", default-features = false } sp-block-builder = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0", default-features = false }
sp-runtime = { git = "https://github.com/serai-dex/substrate", default-features = false } sp-runtime = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0", default-features = false }
sp-api = { git = "https://github.com/serai-dex/substrate", default-features = false } sp-api = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0", default-features = false }
frame-system = { git = "https://github.com/serai-dex/substrate", default-features = false } frame-system = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0", default-features = false }
frame-support = { git = "https://github.com/serai-dex/substrate", default-features = false } frame-support = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0", default-features = false }
frame-executive = { git = "https://github.com/serai-dex/substrate", default-features = false } frame-executive = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0", default-features = false }
frame-benchmarking = { git = "https://github.com/serai-dex/substrate", default-features = false, optional = true } frame-benchmarking = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0", default-features = false, optional = true }
serai-primitives = { path = "../primitives", default-features = false } serai-primitives = { path = "../primitives", default-features = false }
pallet-timestamp = { git = "https://github.com/serai-dex/substrate", default-features = false } pallet-timestamp = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0", default-features = false }
pallet-balances = { git = "https://github.com/serai-dex/substrate", default-features = false } pallet-balances = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0", default-features = false }
pallet-assets = { git = "https://github.com/serai-dex/substrate", default-features = false } pallet-assets = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0", default-features = false }
pallet-transaction-payment = { git = "https://github.com/serai-dex/substrate", default-features = false } pallet-transaction-payment = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0", default-features = false }
tokens-pallet = { package = "serai-tokens-pallet", path = "../tokens/pallet", default-features = false } tokens-pallet = { package = "serai-tokens-pallet", path = "../tokens/pallet", default-features = false }
in-instructions-pallet = { package = "serai-in-instructions-pallet", path = "../in-instructions/pallet", default-features = false } in-instructions-pallet = { package = "serai-in-instructions-pallet", path = "../in-instructions/pallet", default-features = false }
validator-sets-pallet = { package = "serai-validator-sets-pallet", path = "../validator-sets/pallet", default-features = false } validator-sets-pallet = { package = "serai-validator-sets-pallet", path = "../validator-sets/pallet", default-features = false }
pallet-session = { git = "https://github.com/serai-dex/substrate", default-features = false } pallet-session = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0", default-features = false }
pallet-babe = { git = "https://github.com/serai-dex/substrate", default-features = false } pallet-babe = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0", default-features = false }
pallet-grandpa = { git = "https://github.com/serai-dex/substrate", default-features = false } pallet-grandpa = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0", default-features = false }
pallet-authority-discovery = { git = "https://github.com/serai-dex/substrate", default-features = false } pallet-authority-discovery = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0", default-features = false }
frame-system-rpc-runtime-api = { git = "https://github.com/serai-dex/substrate", default-features = false } frame-system-rpc-runtime-api = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0", default-features = false }
pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/serai-dex/substrate", default-features = false } pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0", default-features = false }
[build-dependencies] [build-dependencies]
substrate-wasm-builder = { git = "https://github.com/serai-dex/substrate" } substrate-wasm-builder = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0" }
[features] [features]
std = [ std = [

View file

@ -15,10 +15,10 @@ rustdoc-args = ["--cfg", "docsrs"]
scale = { package = "parity-scale-codec", version = "3", default-features = false, features = ["derive", "max-encoded-len"] } scale = { package = "parity-scale-codec", version = "3", default-features = false, features = ["derive", "max-encoded-len"] }
scale-info = { version = "2", default-features = false, features = ["derive"] } scale-info = { version = "2", default-features = false, features = ["derive"] }
frame-system = { git = "https://github.com/serai-dex/substrate", default-features = false } frame-system = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0", default-features = false }
frame-support = { git = "https://github.com/serai-dex/substrate", default-features = false } frame-support = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0", default-features = false }
pallet-assets = { git = "https://github.com/serai-dex/substrate", default-features = false } pallet-assets = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0", default-features = false }
serai-primitives = { path = "../../primitives", default-features = false } serai-primitives = { path = "../../primitives", default-features = false }
tokens-primitives = { package = "serai-tokens-primitives", path = "../primitives", default-features = false } tokens-primitives = { package = "serai-tokens-primitives", path = "../primitives", default-features = false }

View file

@ -21,7 +21,7 @@ scale-info = { version = "2", default-features = false, features = ["derive"] }
serai-primitives = { path = "../../primitives", default-features = false } serai-primitives = { path = "../../primitives", default-features = false }
[dev-dependencies] [dev-dependencies]
sp-runtime = { git = "https://github.com/serai-dex/substrate", default-features = false } sp-runtime = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0", default-features = false }
[features] [features]
std = ["zeroize", "serde/std", "scale/std", "scale-info/std", "sp-runtime/std", "serai-primitives/std"] std = ["zeroize", "serde/std", "scale/std", "scale-info/std", "sp-runtime/std", "serai-primitives/std"]

View file

@ -17,13 +17,13 @@ hashbrown = { version = "0.14", default-features = false }
scale = { package = "parity-scale-codec", version = "3", default-features = false, features = ["derive"] } scale = { package = "parity-scale-codec", version = "3", default-features = false, features = ["derive"] }
scale-info = { version = "2", default-features = false, features = ["derive"] } scale-info = { version = "2", default-features = false, features = ["derive"] }
sp-core = { git = "https://github.com/serai-dex/substrate", default-features = false } sp-core = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0", default-features = false }
sp-std = { git = "https://github.com/serai-dex/substrate", default-features = false } sp-std = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0", default-features = false }
sp-application-crypto = { git = "https://github.com/serai-dex/substrate", default-features = false } sp-application-crypto = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0", default-features = false }
sp-runtime = { git = "https://github.com/serai-dex/substrate", default-features = false } sp-runtime = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0", default-features = false }
frame-system = { git = "https://github.com/serai-dex/substrate", default-features = false } frame-system = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0", default-features = false }
frame-support = { git = "https://github.com/serai-dex/substrate", default-features = false } frame-support = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0", default-features = false }
serai-primitives = { path = "../../primitives", default-features = false } serai-primitives = { path = "../../primitives", default-features = false }
validator-sets-primitives = { package = "serai-validator-sets-primitives", path = "../primitives", default-features = false } validator-sets-primitives = { package = "serai-validator-sets-primitives", path = "../primitives", default-features = false }

View file

@ -22,8 +22,8 @@ serde = { version = "1", default-features = false, features = ["derive", "alloc"
scale = { package = "parity-scale-codec", version = "3", default-features = false, features = ["derive", "max-encoded-len"] } scale = { package = "parity-scale-codec", version = "3", default-features = false, features = ["derive", "max-encoded-len"] }
scale-info = { version = "2", default-features = false, features = ["derive"] } scale-info = { version = "2", default-features = false, features = ["derive"] }
sp-core = { git = "https://github.com/serai-dex/substrate", default-features = false } sp-core = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0", default-features = false }
sp-std = { git = "https://github.com/serai-dex/substrate", default-features = false } sp-std = { git = "https://github.com/serai-dex/substrate", branch = "dalek-4.0", default-features = false }
serai-primitives = { path = "../../primitives", default-features = false } serai-primitives = { path = "../../primitives", default-features = false }