Now we will fill the Initialize context according to our needs :) First we will assign the Crew account to `crew` field.
#[account(init, payer = user, space = 8 + 8)]
pub crew: Account<'info, Crew>
The Initialize struct is used to initialize a new instance of the Crew account buuut WTF these are???? init, payer, space???????? These means that when the program is run, a new account will be created and initialized with default values(init). The account creation will be paid for by the user account(payer). The account will be able to store two 8-byte integers (64 bits each).(space) This annotation specifies that the account needs to be able to store two u64s, which take up 8 bytes each, plus any account metadata that Solana requires.
Now, we have user which is signer of the context :) also it is payer as you can see above. Add this code also inside your Initialize context:
#[account(mut)]
pub user: Signer<'info>,
But wait! What are `<'info>` ??? <'info> is a lifetime parameter that is used in Solana programs to indicate that the program has access to information about the current state of the network. It is a way to ensure that the program is executed correctly.
Lastly we will add this code below user field. It indicates the system_program is a reference to a built-in program in the Solana blockchain that provides basic functionality, like creating new accounts and processing transactions. It is included as a read-only account in the Initialize struct, but it is not directly used by the crew_counter program.
pub system_program: Program<'info, System>,
If you writes these three field to your context, Lets go to next chapter!