mirror of
https://github.com/alexgo-io/stacks-puppet-node.git
synced 2026-01-12 22:43:42 +08:00
fix: proper stack-stx signature in mockamoto tests
This commit is contained in:
@@ -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()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user