1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
use solana_sdk::{
account_info::AccountInfo, entrypoint, entrypoint::ProgramResult, program_error::ProgramError,
pubkey::Pubkey,
};
use std::str::from_utf8;
entrypoint!(process_instruction);
fn process_instruction<'a>(
_program_id: &Pubkey,
_accounts: &'a [AccountInfo<'a>],
instruction_data: &[u8],
) -> ProgramResult {
from_utf8(instruction_data).map_err(|_| ProgramError::InvalidInstructionData)?;
Ok(())
}
#[cfg(not(target_arch = "bpf"))]
solana_sdk::program_stubs!();
#[cfg(test)]
mod tests {
use super::*;
use solana_sdk::{program_error::ProgramError, pubkey::Pubkey};
#[test]
fn test_utf8_memo() {
let program_id = Pubkey::new(&[0; 32]);
let string = b"letters and such";
assert_eq!(Ok(()), process_instruction(&program_id, &[], string));
let emoji = "🐆".as_bytes();
let bytes = [0xF0, 0x9F, 0x90, 0x86];
assert_eq!(emoji, bytes);
assert_eq!(Ok(()), process_instruction(&program_id, &[], &emoji));
let mut bad_utf8 = bytes;
bad_utf8[3] = 0xFF;
assert_eq!(
Err(ProgramError::InvalidInstructionData),
process_instruction(&program_id, &[], &bad_utf8)
);
}
}