mirror of
https://github.com/logos-blockchain/lssa-zkvm-testing.git
synced 2026-01-07 07:43:07 +00:00
add piñata program
This commit is contained in:
parent
8234c0cb68
commit
d56298e42c
@ -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];
|
||||
}
|
||||
|
||||
@ -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,
|
||||
]);
|
||||
}
|
||||
@ -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);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user