mirror of
https://github.com/alexgo-io/stacks-puppet-node.git
synced 2026-06-19 17:21:00 +08:00
feat: add signer-sig to stack-aggregation-commit
This commit is contained in:
@@ -732,6 +732,7 @@
|
||||
;; *New in Stacks 2.1.*
|
||||
(define-private (inner-stack-aggregation-commit (pox-addr { version: (buff 1), hashbytes: (buff 32) })
|
||||
(reward-cycle uint)
|
||||
(signer-sig (buff 65))
|
||||
(signer-key (buff 33)))
|
||||
(let ((partial-stacked
|
||||
;; fetch the partial commitments
|
||||
@@ -740,6 +741,7 @@
|
||||
;; must be called directly by the tx-sender or by an allowed contract-caller
|
||||
(asserts! (check-caller-allowed)
|
||||
(err ERR_STACKING_PERMISSION_DENIED))
|
||||
(try! (verify-signer-key-sig tx-sender signer-sig signer-key))
|
||||
(let ((amount-ustx (get stacked-amount partial-stacked)))
|
||||
(try! (can-stack-stx pox-addr amount-ustx reward-cycle u1))
|
||||
;; Add the pox addr to the reward cycle, and extract the index of the PoX address
|
||||
@@ -773,8 +775,9 @@
|
||||
;; Returns (err ...) on failure.
|
||||
(define-public (stack-aggregation-commit (pox-addr { version: (buff 1), hashbytes: (buff 32) })
|
||||
(reward-cycle uint)
|
||||
(signer-sig (buff 65))
|
||||
(signer-key (buff 33)))
|
||||
(match (inner-stack-aggregation-commit pox-addr reward-cycle signer-key)
|
||||
(match (inner-stack-aggregation-commit pox-addr reward-cycle signer-sig signer-key)
|
||||
pox-addr-index (ok true)
|
||||
commit-err (err commit-err)))
|
||||
|
||||
@@ -782,8 +785,9 @@
|
||||
;; *New in Stacks 2.1.*
|
||||
(define-public (stack-aggregation-commit-indexed (pox-addr { version: (buff 1), hashbytes: (buff 32) })
|
||||
(reward-cycle uint)
|
||||
(signer-sig (buff 65))
|
||||
(signer-key (buff 33)))
|
||||
(inner-stack-aggregation-commit pox-addr reward-cycle signer-key))
|
||||
(inner-stack-aggregation-commit pox-addr reward-cycle signer-sig signer-key))
|
||||
|
||||
;; Commit partially stacked STX to a PoX address which has already received some STX (more than the Stacking min).
|
||||
;; This allows a delegator to lock up marginally more STX from new delegates, even if they collectively do not
|
||||
|
||||
@@ -2089,12 +2089,17 @@ fn delegate_stack_stx_signer_key() {
|
||||
AddressHashMode::SerializeP2WSH,
|
||||
key_to_stacks_addr(delegate_key).bytes,
|
||||
);
|
||||
let signer_bytes =
|
||||
hex_bytes("03a0f9818ea8c14a827bb144aec9cfbaeba225af22be18ed78a2f298106f4e281b").unwrap();
|
||||
let signer_key = Secp256k1PublicKey::from_slice(&signer_bytes).unwrap();
|
||||
let signer_key_val = Value::buff_from(signer_bytes.clone()).unwrap();
|
||||
let signer_sk = Secp256k1PrivateKey::from_seed(&[1, 1, 1]);
|
||||
let signer_key = Secp256k1PublicKey::from_private(&signer_sk);
|
||||
let signer_key_val = Value::buff_from(signer_key.to_bytes_compressed()).unwrap();
|
||||
let min_ustx = get_stacking_minimum(&mut peer, &latest_block);
|
||||
|
||||
let signature = make_signer_key_signature(
|
||||
&delegate_principal,
|
||||
&signer_sk,
|
||||
(next_reward_cycle - 1).into(),
|
||||
);
|
||||
|
||||
let txs = vec![
|
||||
make_pox_4_contract_call(
|
||||
stacker_key,
|
||||
@@ -2128,6 +2133,7 @@ fn delegate_stack_stx_signer_key() {
|
||||
vec![
|
||||
pox_addr.clone(),
|
||||
Value::UInt(next_reward_cycle.into()),
|
||||
Value::buff_from(signature).unwrap(),
|
||||
signer_key_val.clone(),
|
||||
],
|
||||
),
|
||||
@@ -2159,7 +2165,10 @@ fn delegate_stack_stx_signer_key() {
|
||||
PoxAddress::try_from_pox_tuple(false, &pox_addr).unwrap(),
|
||||
reward_entry.reward_address
|
||||
);
|
||||
assert_eq!(&reward_entry.signer.unwrap(), signer_bytes.as_slice(),);
|
||||
assert_eq!(
|
||||
&reward_entry.signer.unwrap(),
|
||||
signer_key.to_bytes_compressed().as_slice()
|
||||
);
|
||||
}
|
||||
|
||||
// In this test case, Alice delegates to Bob.
|
||||
@@ -2249,10 +2258,12 @@ fn delegate_stack_stx_extend_signer_key() {
|
||||
.expect("No stacking state, stack-stx failed")
|
||||
.expect_tuple();
|
||||
|
||||
let next_reward_cycle = 1 + burnchain
|
||||
let reward_cycle = burnchain
|
||||
.block_height_to_reward_cycle(block_height)
|
||||
.unwrap();
|
||||
|
||||
let next_reward_cycle = 1 + reward_cycle;
|
||||
|
||||
let extend_cycle = 1 + next_reward_cycle;
|
||||
|
||||
let partially_stacked_0 = get_partially_stacked_state_pox_4(
|
||||
@@ -2275,8 +2286,8 @@ fn delegate_stack_stx_extend_signer_key() {
|
||||
|
||||
bob_nonce += 1;
|
||||
|
||||
// let signature =
|
||||
// make_signer_key_signature(&alice_principal, &bob_new_signer_private_key, reward_cycle);
|
||||
let signature =
|
||||
make_signer_key_signature(&bob_delegate_principal, &signer_sk, reward_cycle.into());
|
||||
|
||||
let delegate_stack_extend = make_pox_4_delegate_stack_extend(
|
||||
bob_delegate_private_key,
|
||||
@@ -2293,10 +2304,17 @@ fn delegate_stack_stx_extend_signer_key() {
|
||||
vec![
|
||||
pox_addr.as_clarity_tuple().unwrap().into(),
|
||||
Value::UInt(next_reward_cycle.into()),
|
||||
Value::buff_from(signature).unwrap(),
|
||||
signer_key_val.clone(),
|
||||
],
|
||||
);
|
||||
|
||||
let extend_signature = make_signer_key_signature(
|
||||
&bob_delegate_principal,
|
||||
&signer_extend_sk,
|
||||
reward_cycle.into(),
|
||||
);
|
||||
|
||||
let agg_tx_1 = make_pox_4_contract_call(
|
||||
bob_delegate_private_key,
|
||||
bob_nonce + 2,
|
||||
@@ -2304,6 +2322,7 @@ fn delegate_stack_stx_extend_signer_key() {
|
||||
vec![
|
||||
pox_addr.as_clarity_tuple().unwrap().into(),
|
||||
Value::UInt(extend_cycle.into()),
|
||||
Value::buff_from(extend_signature).unwrap(),
|
||||
signer_extend_key_val.clone(),
|
||||
],
|
||||
);
|
||||
@@ -2503,6 +2522,12 @@ fn delegate_stack_increase() {
|
||||
min_ustx,
|
||||
);
|
||||
|
||||
let signature = make_signer_key_signature(
|
||||
&bob_delegate_address,
|
||||
&signer_sk,
|
||||
(next_reward_cycle - 1).into(),
|
||||
);
|
||||
|
||||
let agg_tx = make_pox_4_contract_call(
|
||||
bob_delegate_key,
|
||||
bob_nonce + 1,
|
||||
@@ -2510,6 +2535,7 @@ fn delegate_stack_increase() {
|
||||
vec![
|
||||
pox_addr.as_clarity_tuple().unwrap().into(),
|
||||
Value::UInt(next_reward_cycle.into()),
|
||||
Value::buff_from(signature).unwrap(),
|
||||
signer_key_val.clone(),
|
||||
],
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user