Agora podemos começar com nossa função de criar eleição. Uma vez que ele irá atualizar dados na blockchain, ela será do tipo *call*
@call({}) create_election({ endsAt, name, startsAt }: Election): void { const election = new Election( { id: this.electionsCounterId, startsAt: BigInt(Number(startsAt) * 10 ** 6), // Convertir milisegundos de JavaScript a nanosegundos estándar del blockchain NEAR endsAt: BigInt(Number(endsAt) * 10 ** 6), // Convertir milisegundos de JavaScript a nanosegundos estándar del blockchain NEAR name, candidates: [], voters: [], totalVotes: 0 } ) this.elections.set(String(this.electionsCounterId), election) this.electionsCounterId += 1 }
Em toda criação de eleição, eleitores e candidatos não existirão ainda, assim como os votos. Portanto, inicializaremos ambos como arrays vazios e os votos como 0. Ao fim da execução, devemos atualizar nosso
UnorderedMap e adicionar nossa nova eleição ao mesmo, usando o ID da mesma como key para referenciá-la.
Além disso, devemos incrementar nosso *electionCounterId* para que não haja eleições com mesmo ID uma vez que isso quebraria nossa aplicação.
Por que estamos multiplicando o startsAt e endsAt por (10 ** 6)? Porque o javascript utiliza milissegundos como timestamp (10 ** 3), enquanto a Near utiliza nanossegundos para o blocktimestamp(10 ** 9).
Considerando que o startsAt e endsAt virão de um frontend, devemos convertê-lo.
Start (l)earning with this Course!
Connect Your Wallet
What is a Wallet?
Safely store and transfer your crypto and NFTs.
No need to create new accounts or credentials. Connect your wallet and you are good to go!