Quantcast
Channel: Recent Questions - Solana Stack Exchange
Viewing all articles
Browse latest Browse all 7925

How can we make comparisons using clock.unix_timestamps and the time provided by the instructions arguments?

$
0
0

As you can see below I am trying to place a requirement to make sure a Poll as started and not finished so we can initiate a candidate (had a candidate to a poll).

The problem is that the comparison is not working and I am getting the error triggered when it shouldn't.

I suspect it must be something with Anchor Serialization or some mismatching types in TS.

This is the code:

//Instructionspub fn initialize_candidate(  context: Context<InitializeCandidate>,   candidate_name: String,  poll_id: u64,) -> Result<()> {  let candidate = &mut context.accounts.candidate;  let poll = &mut context.accounts.poll;  let clock = Clock::get()?;  //-------  Trying to debug ----------  msg!("poll_start: {}", poll.poll_start as i64);  msg!("clock.unix_timestamp: {}", clock.unix_timestamp);  msg!("Poll start < clock.unix_timestamp: {}", poll.poll_start as i64 > clock.unix_timestamp);  msg!("poll_end: {}", poll.poll_end as i64);  msg!("Poll end < clock.unix_timestamp: {}", poll.poll_end as i64 <= clock.unix_timestamp);  //----------------------------------  require!(poll.poll_owner == *context.accounts.signer.key, ErrorCode::Unauthorized);  require!(poll.poll_end as i64 <= clock.unix_timestamp, ErrorCode::PollEnded);  require!(poll.poll_start as i64 > clock.unix_timestamp, ErrorCode::PollNotStarted);  require!(poll.candidate_amount + 1 <= 10, ErrorCode::TooManyCandidates);  candidate.candidate_name = candidate_name;  candidate.candidate_votes = 0;  poll.candidate_amount += 1;  msg!("You have initialized a candidate called and added them to the poll");  Ok(())}

Test from the test file:

it('Initialize and add Candidates to the pool', async () => {    //call the initialize candidate instruction to add candidates to the poll    try {      await program.methods        .initializeCandidate('Yes, easy!', new anchor.BN(1))        .rpc();    } catch (e) {      // Log the full error for debugging      console.log(`Error details: ${e.message}. Now the full log here:`, e);      assert.fail('Poll did not initialize successfully. Check the error message for more details'      );    }    try {      await program.methods        .initializeCandidate('No, never!', new anchor.BN(1))        .rpc();    } catch (e) {      // Log the full error for debugging      console.log(`Error details: ${e.message}. Now the full log here:`, e);      assert.fail('Poll did not initialize successfully. Check the error message for more details'      );    }    //Get the address of the poll    const [yesAddress] = PublicKey.findProgramAddressSync(      [        new anchor.BN(1).toArrayLike(Buffer, 'le', 8),        Buffer.from('Yes, easy!'),      ],      programId    );    const [noAddress] = PublicKey.findProgramAddressSync(      [        new anchor.BN(1).toArrayLike(Buffer, 'le', 8),        Buffer.from('No, never!'),      ],      programId    );    //Fetch the candidates    const yesCandidate = await program.account.candidate.fetch(yesAddress);    const noCandidate = await program.account.candidate.fetch(noAddress);    //lets confirm the candidates added to the pool have been initialized and have 0 votes    assert.equal(yesCandidate.candidateVotes.toNumber(), 0);    assert.equal(noCandidate.candidateVotes.toNumber(), 0);  });

These are the logs:

   1) Initialize and add Candidates to the poolError details: AnchorError thrown in programs/voting-dapp/src/instructions/initialize_candidate.rs:48. Error Code: PollEnded. Error Number: 6003. Error Message: Unable to initialize a new candidat. Poll has already ended.. Now the full log here: AnchorError: AnchorError thrown in programs/voting-dapp/src/instructions/initialize_candidate.rs:48. Error Code: PollEnded. Error Number: 6003. Error Message: Unable to initialize a new candidat. Poll has already ended.    at Function.parse (/Users/josesantos/Desktop/Jose/School Of Solana/program-Jars1987-1/anchor_project/voting-dapp/node_modules/@coral-xyz/anchor/src/error.ts:152:14)    at translateError (/Users/josesantos/Desktop/Jose/School Of Solana/program-Jars1987-1/anchor_project/voting-dapp/node_modules/@coral-xyz/anchor/src/error.ts:277:35)    at MethodsBuilder.rpc [as _rpcFn] (/Users/josesantos/Desktop/Jose/School Of Solana/program-Jars1987-1/anchor_project/voting-dapp/node_modules/@coral-xyz/anchor/src/program/namespace/rpc.ts:35:29)    at processTicksAndRejections (node:internal/process/task_queues:95:5) {  errorLogs: ['Program log: AnchorError thrown in programs/voting-dapp/src/instructions/initialize_candidate.rs:48. Error Code: PollEnded. Error Number: 6003. Error Message: Unable to initialize a new candidat. Poll has already ended.'  ],  logs: ['Program 5TkN5PsZXQaznE4FqkpgtDzj8D5PQvJHctnNc4hShTDV invoke [1]','Program log: Instruction: InitializeCandidate','Program 11111111111111111111111111111111 invoke [2]','Program 11111111111111111111111111111111 success','Program log: poll_start: 1731946140','Program log: clock.unix_timestamp: 1731966934','Program log: Poll start < clock.unix_timestamp: false','Program log: poll_end: 1735689599','Program log: Poll end < clock.unix_timestamp: false','Program log: AnchorError thrown in programs/voting-dapp/src/instructions/initialize_candidate.rs:48. Error Code: PollEnded. Error Number: 6003. Error Message: Unable to initialize a new candidat. Poll has already ended.','Program 5TkN5PsZXQaznE4FqkpgtDzj8D5PQvJHctnNc4hShTDV consumed 19328 of 200000 compute units','Program 5TkN5PsZXQaznE4FqkpgtDzj8D5PQvJHctnNc4hShTDV failed: custom program error: 0x1773'  ],  error: {    errorCode: { code: 'PollEnded', number: 6003 },    errorMessage: 'Unable to initialize a new candidat. Poll has already ended',    comparedValues: undefined,    origin: {      file: 'programs/voting-dapp/src/instructions/initialize_candidate.rs',      line: 48    }  },  _programErrorStack: ProgramErrorStack {    stack: [      [PublicKey [PublicKey(5TkN5PsZXQaznE4FqkpgtDzj8D5PQvJHctnNc4hShTDV)]]    ]  }}

How do I fix this?


Viewing all articles
Browse latest Browse all 7925

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>