function mint(address _to, uint256 _amount) public onlyOwner {
_mint(_to, _amount);
_moveDelegates(address(0), _delegates[_to], _amount);
}
address:solidity的数据类型,方便保存一个以太坊的地址,就是把公钥用sha256hash之后,取其后160位生成的16进制字符串(40个字符)再加上前缀“0x”(总共42位)
uint256:solidity的数据类型,无符号数字,32个字节
这个函数用来铸造sushi代币,onlyOwner表示仅仅持有智能合约本身的钱包地址可以调用此函数
// 参与Sushi流动性挖矿锁定一定数额Sushi代币得到xSushi的质押的证明代币
function enter(uint256 _amount) public {
// 获取到合约地址账户的总Sushi数额,即为流动性挖矿池中的代币
uint256 totalSushi = sushi.balanceOf(address(this));
uint256 totalShares = totalSupply();
if (totalShares == 0 || totalSushi == 0) {
_mint(msg.sender, _amount);
} else {
uint256 what = _amount.mul(totalShares).div(totalSushi);
_mint(msg.sender, what);
// 锁定一定数额的代币,发给合约地址,代为保管
sushi.transferFrom(msg.sender, address(this), _amount);
}
}
// 取消质押sushi流动性挖矿调用这个函数
function leave(uint256 _share) public {
uint256 totalShares = totalSupply();
uint256 what = _share.mul(sushi.balanceOf(address(this))).div(totalShares);
_burn(msg.sender, _share);
// 给调用智能合约的钱包地址转入Sushi代币
sushi.transfer(msg.sender, what);
由于每个地址都可以发布智能合约,所以智能合约也对应一个钱包地址,发布的智能合约也有一个合约的地址,这两个地址是不一样的。调用智能合约的函数都要支付以太币,除了带pure关键字的函数。如果你一个函数如果不读取和修改状态变量,比如只是简单的计算然后返回数据,你应该加上pure关键字,可以不用支付gas费。msg.sender就是调用智能合约的钱包地址。