example/dao: each Vec<Signature> corresponds to ONE function call

This commit is contained in:
lunar-mining
2022-11-05 13:02:38 +01:00
parent f6296bf3f2
commit 5c98311c98
2 changed files with 59 additions and 16 deletions

View File

@@ -89,7 +89,12 @@ pub async fn example() -> Result<()> {
let func_call = builder.build(&zk_bins);
let func_calls = vec![func_call];
let signatures = sign([signature_secret].to_vec(), &func_calls);
let mut signatures = vec![];
for func_call in &func_calls {
let sign = sign([signature_secret].to_vec(), func_call);
signatures.push(sign);
}
let tx = Transaction { func_calls, signatures };
//// Validator
@@ -230,7 +235,12 @@ async fn main() -> Result<()> {
let func_call = builder.build(&zk_bins);
let func_calls = vec![func_call];
let signatures = sign([signature_secret].to_vec(), &func_calls);
let mut signatures = vec![];
for func_call in &func_calls {
let sign = sign([signature_secret].to_vec(), func_call);
signatures.push(sign);
}
let tx = Transaction { func_calls, signatures };
//// Validator
@@ -327,7 +337,12 @@ async fn main() -> Result<()> {
let func_call = builder.build(&zk_bins)?;
let func_calls = vec![func_call];
let signatures = sign([cashier_signature_secret].to_vec(), &func_calls);
let mut signatures = vec![];
for func_call in &func_calls {
let sign = sign([cashier_signature_secret].to_vec(), func_call);
signatures.push(sign);
}
let tx = Transaction { func_calls, signatures };
//// Validator
@@ -454,7 +469,12 @@ async fn main() -> Result<()> {
let func_call = builder.build(&zk_bins)?;
let func_calls = vec![func_call];
let signatures = sign([cashier_signature_secret].to_vec(), &func_calls);
let mut signatures = vec![];
for func_call in &func_calls {
let sign = sign([cashier_signature_secret].to_vec(), func_call);
signatures.push(sign);
}
let tx = Transaction { func_calls, signatures };
//// Validator
@@ -602,7 +622,12 @@ async fn main() -> Result<()> {
let func_call = builder.build(&zk_bins);
let func_calls = vec![func_call];
let signatures = sign([signature_secret].to_vec(), &func_calls);
let mut signatures = vec![];
for func_call in &func_calls {
let sign = sign([signature_secret].to_vec(), func_call);
signatures.push(sign);
}
let tx = Transaction { func_calls, signatures };
//// Validator
@@ -723,7 +748,12 @@ async fn main() -> Result<()> {
let func_call = builder.build(&zk_bins);
let func_calls = vec![func_call];
let signatures = sign([signature_secret].to_vec(), &func_calls);
let mut signatures = vec![];
for func_call in &func_calls {
let sign = sign([signature_secret].to_vec(), func_call);
signatures.push(sign);
}
let tx = Transaction { func_calls, signatures };
//// Validator
@@ -809,7 +839,12 @@ async fn main() -> Result<()> {
let func_call = builder.build(&zk_bins);
let func_calls = vec![func_call];
let signatures = sign([signature_secret].to_vec(), &func_calls);
let mut signatures = vec![];
for func_call in &func_calls {
let sign = sign([signature_secret].to_vec(), func_call);
signatures.push(sign);
}
let tx = Transaction { func_calls, signatures };
//// Validator
@@ -895,7 +930,12 @@ async fn main() -> Result<()> {
let func_call = builder.build(&zk_bins);
let func_calls = vec![func_call];
let signatures = sign([signature_secret].to_vec(), &func_calls);
let mut signatures = vec![];
for func_call in &func_calls {
let sign = sign([signature_secret].to_vec(), func_call);
signatures.push(sign);
}
let tx = Transaction { func_calls, signatures };
//// Validator
@@ -1082,7 +1122,12 @@ async fn main() -> Result<()> {
let exec_func_call = builder.build(&zk_bins);
let func_calls = vec![transfer_func_call, exec_func_call];
let signatures = sign([tx_signature_secret, exec_signature_secret].to_vec(), &func_calls);
let mut signatures = vec![];
for func_call in &func_calls {
let sign = sign([signature_secret].to_vec(), func_call);
signatures.push(sign);
}
let tx = Transaction { func_calls, signatures };
{

View File

@@ -140,7 +140,7 @@ impl ZkContractTable {
pub struct Transaction {
pub func_calls: Vec<FuncCall>,
pub signatures: Vec<Signature>,
pub signatures: Vec<Vec<Signature>>,
}
impl Transaction {
@@ -187,12 +187,12 @@ impl Transaction {
pub fn verify_sigs(&self) {
let mut unsigned_tx_data = vec![];
for (i, (func_call, signature)) in
for (i, (func_call, signatures)) in
self.func_calls.iter().zip(self.signatures.clone()).enumerate()
{
func_call.encode(&mut unsigned_tx_data).expect("failed to encode data");
let signature_pub_keys = func_call.call_data.signature_public_keys();
for signature_pub_key in signature_pub_keys {
for (signature_pub_key, signature) in signature_pub_keys.iter().zip(signatures) {
let verify_result = signature_pub_key.verify(&unsigned_tx_data[..], &signature);
assert!(verify_result, "verify sigs[{}] failed", i);
}
@@ -201,12 +201,10 @@ impl Transaction {
}
}
pub fn sign(signature_secrets: Vec<SecretKey>, func_calls: &Vec<FuncCall>) -> Vec<Signature> {
pub fn sign(signature_secrets: Vec<SecretKey>, func_call: &FuncCall) -> Vec<Signature> {
let mut signatures = vec![];
let mut unsigned_tx_data = vec![];
for (_i, (signature_secret, func_call)) in
signature_secrets.iter().zip(func_calls.iter()).enumerate()
{
for signature_secret in signature_secrets {
func_call.encode(&mut unsigned_tx_data).expect("failed to encode data");
let signature = signature_secret.sign(&unsigned_tx_data[..]);
signatures.push(signature);