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
Pallet
e 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: 2
E é 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.