HackQuest keep learning
Storage 存储的读写
在 Stylus Rust SDK 中则需要使用相应的 get, set, push, insert 等函数进行读写操作。
sol_storage! {
pub struct Erc20<T> {
mapping(address => uint256) balances;
mapping(address => mapping(address => uint256)) allowances;
uint256 total_supply;
PhantomData<T> phantom;
}
}
impl<T: Erc20Params> Erc20<T> {
pub fn mint(&mut self, address: Address, value: U256) {
let mut balance = self.balances.setter(address);
let new_balance = balance.get() + value;
balance.set(new_balance);
self.tota;_supply.set(self.total_supply.get() + value);
}
}
mint 方法,用于增发新的代币并将其分配给指定的地址。
- &mut selft 表示这个方法是对
Erc20实例的可变引用。 - address: Address 是要增发代币的目标地址
- value: U256 是增发的代币数量
- 通过 self.balances.setter(address) 获取目标地址的余额,并将其存储在 balance 变量中。
- 计算增发后的余额
new_balance, 并通过balance.set(new_balance)更新目标地址的余额 - 更新总供应量,即将增发的代币数量加到总供应量上:
self.total_supply.set(self.total_supply.get() + value)