add piñata program

This commit is contained in:
Sergio Chouhy 2025-07-17 11:29:35 -03:00
parent 8234c0cb68
commit d56298e42c
3 changed files with 46 additions and 9 deletions

View File

@ -1,5 +1,5 @@
use serde::{Deserialize, Serialize};
use transfer_methods::{TRANSFER_ELF, TRANSFER_ID};
use transfer_methods::{PINATA_ELF, PINATA_ID, TRANSFER_ELF, TRANSFER_ID};
use transfer_multiple_methods::{TRANSFER_MULTIPLE_ELF, TRANSFER_MULTIPLE_ID};
pub trait Program {
@ -12,7 +12,7 @@ pub struct TransferProgram;
impl Program for TransferProgram {
const PROGRAM_ID: [u32; 8] = TRANSFER_ID;
const PROGRAM_ELF: &[u8] = TRANSFER_ELF;
// Amount to transfer
/// Amount to transfer
type InstructionData = u128;
}
@ -20,6 +20,14 @@ pub struct TransferMultipleProgram;
impl Program for TransferMultipleProgram {
const PROGRAM_ID: [u32; 8] = TRANSFER_MULTIPLE_ID;
const PROGRAM_ELF: &[u8] = TRANSFER_MULTIPLE_ELF;
// Amounts to transfer
/// Amounts to transfer
type InstructionData = Vec<u128>;
}
pub struct PinataProgram;
impl Program for PinataProgram {
const PROGRAM_ID: [u32; 8] = TRANSFER_MULTIPLE_ID;
const PROGRAM_ELF: &[u8] = TRANSFER_MULTIPLE_ELF;
/// Preimage of target hash to win price
type InstructionData = [u32; 8];
}

View File

@ -0,0 +1,33 @@
use core::{account::Account, hash};
use risc0_zkvm::guest::env;
const TARGET_HASH: [u32; 8] = [1, 2, 3, 4, 5, 6, 7, 8];
const PINATA_ACCOUNT_ADDR: [u32; 8] = [0xcafe; 8];
const PINATA_PRICE: u128 = 100;
/// A Piñata program
/// To be used both in public and private contexts.
fn main() {
let mut input_accounts: Vec<Account> = env::read();
let preimage: Vec<u32> = env::read();
assert_eq!(input_accounts.len(), 2);
let [pinata_account] = input_accounts.split_off(1).try_into().unwrap();
let [winner_account] = input_accounts.try_into().unwrap();
assert_eq!(pinata_account.address, PINATA_ACCOUNT_ADDR);
assert_eq!(pinata_account.balance, PINATA_PRICE);
assert_eq!(hash(&preimage), TARGET_HASH);
let mut winner_account_post = winner_account.clone();
let mut pinata_account_post = pinata_account.clone();
pinata_account_post.balance -= PINATA_PRICE;
winner_account_post.balance += PINATA_PRICE;
env::commit(&vec![
winner_account,
pinata_account,
winner_account_post,
pinata_account_post,
]);
}

View File

@ -1,14 +1,10 @@
use core::account::Account;
use risc0_zkvm::{
guest::env,
serde::to_vec,
sha::{Impl, Sha256},
};
use risc0_zkvm::guest::env;
/// A transfer of balance program.
/// To be used both in public and private contexts.
fn main() {
let mut input_accounts: Vec<Account> = env::read();
let input_accounts: Vec<Account> = env::read();
let balance_to_move: u128 = env::read();
assert_eq!(input_accounts.len(), 2);