fix: proper stack-stx signature in mockamoto tests

This commit is contained in:
Hank Stoever
2024-02-02 12:28:36 -08:00
parent 1d7caa7c62
commit 4bb930d49d

View File

@@ -69,6 +69,7 @@ use stacks::net::atlas::{AtlasConfig, AtlasDB};
use stacks::net::relay::Relayer;
use stacks::net::stackerdb::StackerDBs;
use stacks::util_lib::db::Error as DBError;
use stacks::util_lib::signed_structured_data::{make_structured_data_domain, sign_structured_data};
use stacks_common::address::{AddressHashMode, C32_ADDRESS_VERSION_TESTNET_SINGLESIG};
use stacks_common::bitvec::BitVec;
use stacks_common::codec::StacksMessageCodec;
@@ -81,7 +82,7 @@ use stacks_common::types::chainstate::{
};
use stacks_common::types::{PrivateKey, StacksEpochId};
use stacks_common::util::hash::{to_hex, Hash160, MerkleTree, Sha512Trunc256Sum};
use stacks_common::util::secp256k1::{MessageSignature, Secp256k1PublicKey};
use stacks_common::util::secp256k1::{MessageSignature, Secp256k1PrivateKey, Secp256k1PublicKey};
use stacks_common::util::vrf::{VRFPrivateKey, VRFProof, VRFPublicKey, VRF};
use self::signer::SelfSigner;
@@ -832,8 +833,18 @@ impl MockamotoNode {
Some(AddressHashMode::SerializeP2PKH),
);
let mut signer_key = miner_nonce.to_be_bytes().to_vec();
signer_key.resize(33, 0);
let signer_sk = Secp256k1PrivateKey::from_seed(&miner_nonce.to_be_bytes());
let signer_key = Secp256k1PublicKey::from_private(&signer_sk).to_bytes_compressed();
let block_height = sortition_tip.block_height;
let reward_cycle = self
.sortdb
.pox_constants
.block_height_to_reward_cycle(self.sortdb.first_block_height, block_height)
.unwrap();
let signature =
make_signer_key_signature(&pox_address, &signer_sk, reward_cycle.into(), chain_id);
let stack_stx_payload = if parent_chain_length < 2 {
TransactionPayload::ContractCall(TransactionContractCall {
@@ -845,6 +856,7 @@ impl MockamotoNode {
pox_address.as_clarity_tuple().unwrap().into(),
ClarityValue::UInt(u128::from(parent_burn_height)),
ClarityValue::UInt(12),
ClarityValue::buff_from(signature).unwrap(),
ClarityValue::buff_from(signer_key).unwrap(),
],
})
@@ -858,6 +870,7 @@ impl MockamotoNode {
function_args: vec![
ClarityValue::UInt(5),
pox_address.as_clarity_tuple().unwrap().into(),
ClarityValue::buff_from(signature).unwrap(),
ClarityValue::buff_from(signer_key).unwrap(),
],
})
@@ -1019,3 +1032,28 @@ impl MockamotoNode {
Ok(chain_length)
}
}
fn make_signer_key_signature(
pox_addr: &PoxAddress,
signer_key: &StacksPrivateKey,
reward_cycle: u128,
chain_id: u32,
) -> Vec<u8> {
let domain_tuple = make_structured_data_domain("pox-4-signer", "1.0.0", chain_id);
let data_tuple = clarity::vm::types::TupleData::from_data(vec![
(
"pox-addr".into(),
pox_addr.clone().as_clarity_tuple().unwrap().into(),
),
(
"reward-cycle".into(),
clarity::vm::Value::UInt(reward_cycle),
),
])
.unwrap();
let signature = sign_structured_data(data_tuple.into(), domain_tuple, signer_key).unwrap();
signature.to_rsv()
}