Contrato – Parte 5

To Share and +4 nLEARNs

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.

Generate comment with AI 2 nL
Scroll to Top