|
@@ -154,7 +154,8 @@ pub struct Wallet {
|
|
|
pub keypair: Keypair,
|
|
pub keypair: Keypair,
|
|
|
pub state: ValidatorStatePtr,
|
|
pub state: ValidatorStatePtr,
|
|
|
pub money_merkle_tree: MerkleTree,
|
|
pub money_merkle_tree: MerkleTree,
|
|
|
- pub consensus_merkle_tree: MerkleTree,
|
|
|
|
|
|
|
+ pub consensus_staked_merkle_tree: MerkleTree,
|
|
|
|
|
+ pub consensus_unstaked_merkle_tree: MerkleTree,
|
|
|
pub wallet: WalletPtr,
|
|
pub wallet: WalletPtr,
|
|
|
pub coins: Vec<OwnCoin>,
|
|
pub coins: Vec<OwnCoin>,
|
|
|
pub spent_coins: Vec<OwnCoin>,
|
|
pub spent_coins: Vec<OwnCoin>,
|
|
@@ -179,7 +180,8 @@ impl Wallet {
|
|
|
.await?;
|
|
.await?;
|
|
|
|
|
|
|
|
let money_merkle_tree = MerkleTree::new(100);
|
|
let money_merkle_tree = MerkleTree::new(100);
|
|
|
- let consensus_merkle_tree = MerkleTree::new(100);
|
|
|
|
|
|
|
+ let consensus_staked_merkle_tree = MerkleTree::new(100);
|
|
|
|
|
+ let consensus_unstaked_merkle_tree = MerkleTree::new(100);
|
|
|
|
|
|
|
|
let coins = vec![];
|
|
let coins = vec![];
|
|
|
let spent_coins = vec![];
|
|
let spent_coins = vec![];
|
|
@@ -188,7 +190,8 @@ impl Wallet {
|
|
|
keypair,
|
|
keypair,
|
|
|
state,
|
|
state,
|
|
|
money_merkle_tree,
|
|
money_merkle_tree,
|
|
|
- consensus_merkle_tree,
|
|
|
|
|
|
|
+ consensus_staked_merkle_tree,
|
|
|
|
|
+ consensus_unstaked_merkle_tree,
|
|
|
wallet,
|
|
wallet,
|
|
|
coins,
|
|
coins,
|
|
|
spent_coins,
|
|
spent_coins,
|
|
@@ -395,7 +398,7 @@ impl ConsensusTestHarness {
|
|
|
let erroneous_txs =
|
|
let erroneous_txs =
|
|
|
wallet.state.read().await.verify_transactions(&[tx], slot, true).await?;
|
|
wallet.state.read().await.verify_transactions(&[tx], slot, true).await?;
|
|
|
assert!(erroneous_txs.is_empty());
|
|
assert!(erroneous_txs.is_empty());
|
|
|
- wallet.consensus_merkle_tree.append(&MerkleNode::from(params.output.coin.inner()));
|
|
|
|
|
|
|
+ wallet.consensus_staked_merkle_tree.append(&MerkleNode::from(params.output.coin.inner()));
|
|
|
tx_action_benchmark.verify_times.push(timer.elapsed());
|
|
tx_action_benchmark.verify_times.push(timer.elapsed());
|
|
|
|
|
|
|
|
Ok(())
|
|
Ok(())
|
|
@@ -515,7 +518,7 @@ impl ConsensusTestHarness {
|
|
|
let erroneous_txs =
|
|
let erroneous_txs =
|
|
|
wallet.state.read().await.verify_transactions(&[tx], slot, true).await?;
|
|
wallet.state.read().await.verify_transactions(&[tx], slot, true).await?;
|
|
|
assert!(erroneous_txs.is_empty());
|
|
assert!(erroneous_txs.is_empty());
|
|
|
- wallet.consensus_merkle_tree.append(&MerkleNode::from(params.output.coin.inner()));
|
|
|
|
|
|
|
+ wallet.consensus_staked_merkle_tree.append(&MerkleNode::from(params.output.coin.inner()));
|
|
|
tx_action_benchmark.verify_times.push(timer.elapsed());
|
|
tx_action_benchmark.verify_times.push(timer.elapsed());
|
|
|
|
|
|
|
|
Ok(())
|
|
Ok(())
|
|
@@ -542,7 +545,7 @@ impl ConsensusTestHarness {
|
|
|
slot_checkpoint,
|
|
slot_checkpoint,
|
|
|
fork_hash,
|
|
fork_hash,
|
|
|
fork_previous_hash: fork_hash,
|
|
fork_previous_hash: fork_hash,
|
|
|
- merkle_tree: wallet.consensus_merkle_tree.clone(),
|
|
|
|
|
|
|
+ merkle_tree: wallet.consensus_staked_merkle_tree.clone(),
|
|
|
proposal_zkbin: proposal_zkbin.clone(),
|
|
proposal_zkbin: proposal_zkbin.clone(),
|
|
|
proposal_pk: proposal_pk.clone(),
|
|
proposal_pk: proposal_pk.clone(),
|
|
|
}
|
|
}
|
|
@@ -591,7 +594,7 @@ impl ConsensusTestHarness {
|
|
|
let erroneous_txs =
|
|
let erroneous_txs =
|
|
|
wallet.state.read().await.verify_transactions(&[tx], slot, true).await?;
|
|
wallet.state.read().await.verify_transactions(&[tx], slot, true).await?;
|
|
|
assert!(erroneous_txs.is_empty());
|
|
assert!(erroneous_txs.is_empty());
|
|
|
- wallet.consensus_merkle_tree.append(&MerkleNode::from(params.output.coin.inner()));
|
|
|
|
|
|
|
+ wallet.consensus_staked_merkle_tree.append(&MerkleNode::from(params.output.coin.inner()));
|
|
|
tx_action_benchmark.verify_times.push(timer.elapsed());
|
|
tx_action_benchmark.verify_times.push(timer.elapsed());
|
|
|
|
|
|
|
|
Ok(())
|
|
Ok(())
|
|
@@ -636,7 +639,7 @@ impl ConsensusTestHarness {
|
|
|
let unstake_request_call_debris = ConsensusUnstakeRequestCallBuilder {
|
|
let unstake_request_call_debris = ConsensusUnstakeRequestCallBuilder {
|
|
|
coin: staked_oc.clone(),
|
|
coin: staked_oc.clone(),
|
|
|
epoch,
|
|
epoch,
|
|
|
- tree: wallet.consensus_merkle_tree.clone(),
|
|
|
|
|
|
|
+ tree: wallet.consensus_staked_merkle_tree.clone(),
|
|
|
burn_zkbin: burn_zkbin.clone(),
|
|
burn_zkbin: burn_zkbin.clone(),
|
|
|
burn_pk: burn_pk.clone(),
|
|
burn_pk: burn_pk.clone(),
|
|
|
mint_zkbin: mint_zkbin.clone(),
|
|
mint_zkbin: mint_zkbin.clone(),
|
|
@@ -686,7 +689,7 @@ impl ConsensusTestHarness {
|
|
|
let erroneous_txs =
|
|
let erroneous_txs =
|
|
|
wallet.state.read().await.verify_transactions(&[tx], slot, true).await?;
|
|
wallet.state.read().await.verify_transactions(&[tx], slot, true).await?;
|
|
|
assert!(erroneous_txs.is_empty());
|
|
assert!(erroneous_txs.is_empty());
|
|
|
- wallet.consensus_merkle_tree.append(&MerkleNode::from(params.output.coin.inner()));
|
|
|
|
|
|
|
+ wallet.consensus_unstaked_merkle_tree.append(&MerkleNode::from(params.output.coin.inner()));
|
|
|
tx_action_benchmark.verify_times.push(timer.elapsed());
|
|
tx_action_benchmark.verify_times.push(timer.elapsed());
|
|
|
|
|
|
|
|
Ok(())
|
|
Ok(())
|
|
@@ -727,7 +730,7 @@ impl ConsensusTestHarness {
|
|
|
// Building Consensus::Unstake params
|
|
// Building Consensus::Unstake params
|
|
|
let consensus_unstake_call_debris = ConsensusUnstakeCallBuilder {
|
|
let consensus_unstake_call_debris = ConsensusUnstakeCallBuilder {
|
|
|
coin: staked_oc.clone(),
|
|
coin: staked_oc.clone(),
|
|
|
- tree: wallet.consensus_merkle_tree.clone(),
|
|
|
|
|
|
|
+ tree: wallet.consensus_unstaked_merkle_tree.clone(),
|
|
|
burn_zkbin: burn_zkbin.clone(),
|
|
burn_zkbin: burn_zkbin.clone(),
|
|
|
burn_pk: burn_pk.clone(),
|
|
burn_pk: burn_pk.clone(),
|
|
|
}
|
|
}
|
|
@@ -830,14 +833,38 @@ impl ConsensusTestHarness {
|
|
|
Ok(oc)
|
|
Ok(oc)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- pub fn gather_consensus_owncoin(
|
|
|
|
|
|
|
+ pub fn gather_consensus_staked_owncoin(
|
|
|
&mut self,
|
|
&mut self,
|
|
|
holder: Holder,
|
|
holder: Holder,
|
|
|
output: ConsensusOutput,
|
|
output: ConsensusOutput,
|
|
|
secret_key: Option<SecretKey>,
|
|
secret_key: Option<SecretKey>,
|
|
|
) -> Result<ConsensusOwnCoin> {
|
|
) -> Result<ConsensusOwnCoin> {
|
|
|
let wallet = self.holders.get_mut(&holder).unwrap();
|
|
let wallet = self.holders.get_mut(&holder).unwrap();
|
|
|
- let leaf_position = wallet.consensus_merkle_tree.witness().unwrap();
|
|
|
|
|
|
|
+ let leaf_position = wallet.consensus_staked_merkle_tree.witness().unwrap();
|
|
|
|
|
+ let secret_key = match secret_key {
|
|
|
|
|
+ Some(key) => key,
|
|
|
|
|
+ None => wallet.keypair.secret,
|
|
|
|
|
+ };
|
|
|
|
|
+ let note: ConsensusNote = output.note.decrypt(&secret_key)?;
|
|
|
|
|
+ let oc = ConsensusOwnCoin {
|
|
|
|
|
+ coin: Coin::from(output.coin),
|
|
|
|
|
+ note: note.clone(),
|
|
|
|
|
+ secret: secret_key,
|
|
|
|
|
+ nullifier: Nullifier::from(poseidon_hash([wallet.keypair.secret.inner(), note.serial])),
|
|
|
|
|
+ leaf_position,
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
|
|
+ Ok(oc)
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ pub fn gather_consensus_unstaked_owncoin(
|
|
|
|
|
+ &mut self,
|
|
|
|
|
+ holder: Holder,
|
|
|
|
|
+ output: ConsensusOutput,
|
|
|
|
|
+ secret_key: Option<SecretKey>,
|
|
|
|
|
+ ) -> Result<ConsensusOwnCoin> {
|
|
|
|
|
+ let wallet = self.holders.get_mut(&holder).unwrap();
|
|
|
|
|
+ let leaf_position = wallet.consensus_unstaked_merkle_tree.witness().unwrap();
|
|
|
let secret_key = match secret_key {
|
|
let secret_key = match secret_key {
|
|
|
Some(key) => key,
|
|
Some(key) => key,
|
|
|
None => wallet.keypair.secret,
|
|
None => wallet.keypair.secret,
|