Interagindo com Pallet Balances
Nesta aula, iremos implementar a interação com o Pallet Balances, criando funções para adicionar saldo, consultar saldo e transferir saldo entre contas.
Primeiro, vamos adicionar uma função para adicionar saldo a uma conta. Para isso, criamos um método set_balance que
recebe o endereço da conta e o valor do saldo a ser adicionado.
pub fn set_balance(&mut self, account: String, amount: u128) {
self.balances.insert(account, amount);
}Nota-se que o método
set_balanceé mutável, pois estamos alterando o estado do Pallet. O métodoinserté utilizado para adicionar um novo par chave-valor aoBTreeMap.
Além disso, ele é um método que existe dentro do
Pallete recebe como parâmetro oaccount, que é umaString, e oamount, que é umu128.
Esta é a implementação completa:
impl Pallet {
pub fn new() -> Self {
Self {
balances: BTreeMap::new(),
}
}
pub fn set_balance(&mut self, account: String, amount: u128) {
self.balances.insert(account, amount);
}
}Na explicação do Daniel, consegui entender melhor do que se trata essa "macarronada". O &self é o próprio objeto que
estamos manipulando nessa função, e, quando usamos o modificador &mut, significa que estamos alterando o estado do
objeto. Já o & sozinho significa que estamos apenas lendo o objeto.
Partindo para a próxima função que vamos construir, ela deve ser a get_balance:
pub fn get_balance(&self, account: String) -> u128 {
*self.balances.get(&account).unwrap_or(&0)
}Aqui ficou mais fácil de entender. Basicamente, estamos pegando o saldo de uma conta e, se a conta não existir, retornamos 0.
Para utilizarmos o que construímos, vamos fazer um teste no main.rs, utilizando as funções que criamos:
mod balances;
use balances::Pallet;
fn main() {
let mut pallet = Pallet::new();
pallet.set_balance("daniel".to_string(), 2);
let balance = pallet.get_balance("daniel".to_string());
println!("Balance: {}", balance);
}Utilizamos o comando cargo run para rodar o código e ver o resultado.
➜ learn-rust-web3 git:(main) ✗ cargo run
Compiling learn-rust-web3 v0.1.0 (/home/yan/Documentos/Repository/learn-rust-web3)
Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.30s
Running `target/debug/learn-rust-web3`
Balance: 2E é isso! Conseguimos adicionar saldo a uma conta, consultar o saldo e imprimir o saldo na tela.
É importante perceber que, dessa maneira, conseguimos garantir que a implementação do Pallet com BTreeMap fique
restrita apenas ao Pallet e não seja acessível de fora, garantindo a integridade dos dados e flexibilidade.