#solidity #smartcontracts
Вопрос:
мой контракт
contract Token{
string public name = "Dhruv";
string public symbol = "DhruvToken";
uint256 public decimals = 18;
uint256 public totalSupply;
mapping(address => uint) public balanceOf;
mapping(address => mapping(address => uint256)) public allowance;
constructor() public{
totalSupply = 1000000 * (10 ** decimals);
balanceOf[msg.sender] = totalSupply;
}
//events
event Transfer(address from, address to, uint256 value);
event Approve(address indexed from, address indexed to, uint256 indexed value);
function transfer(address _to, uint256 _value) public returns (bool success){
require(balanceOf[msg.sender] >= _value);
_transfer(msg.sender, _to, _value);
return true;
}
//internal function can be accessed only within the smart contract
function _transfer(address _from, address _to, uint256 _value) internal{
require(_to != address(0));
balanceOf[_from] = balanceOf[_from] - _value;
balanceOf[_to] = balanceOf[_to] _value;
emit Transfer(_from, _to, _value);
}
// approve the tokens
function approve(address _spender, uint256 _value) public returns (bool success){
require(_spender != address(0));
allowance[msg.sender][_spender] = _value;
emit Approve(msg.sender, _spender, _value);
return true;
}
function transferFrom(address _from, address _to, uint256 _value) public returns (bool success){
// require(balanceOf[_from] >= _value);
allowance[_from][msg.sender] = allowance[_from][msg.sender] - _value;
_transfer(_from, _to, _value);
return true;
}
}
функции, называемые
token.transferFrom(deployer, receiver, amount, { from: exchange })
token.approve(exchange, amount, { from: deployer });
token.allowance(deployer, exchange);
мои сомнения
- знак.надбавка позволяет обменнику, т. е. транжире, потратить определенное количество токенов, но при передаче мы сбрасываем надбавку msg.отправителю транжирой, чтобы потратить определенное количество токенов, что создает путаницу, почему происходит переключение ролей
- почему мы вызываем функции с помощью фигурных скобок и почему мы напрямую не передаем значения в функциях
- пожалуйста, разъясните роль msg.отправителя в транзакции, почему биржа напрямую не вызывает транзакцию и почему существует необходимость в посреднике
Пожалуйста, ответьте на мое сомнение, я много исследовал, но это сомнение еще не рассеялось
Комментарии:
1. Пожалуйста, ответьте, я действительно застрял здесь, пожалуйста, предложите, если мне нужно отредактировать свой вопрос, чтобы было более ясно, что я действительно застрял здесь
Ответ №1:
извините, я думаю, что не смогу ответить на все ваши вопросы. Без особого контекста, насколько я понимаю, основная цель этого контракта состоит в том, чтобы позволить кому-то разрешить другому лицу отправлять токены от его имени потенциальной третьей стороне.
Приемлемым сценарием для меня было бы :
-«А» разворачивает контракт.
-«B» вызывает функцию token.approve (таким образом, B является отправителем msg.здесь), чтобы позволить C потратить значение от своего имени. (допустим, для этого примера : 10)
allowance[B][C] = 10;
-«С» вызывает токен.Функция transferFrom для отправки некоторого токена B в D.(скажем, 6. Обратите внимание, что теперь C является отправителем msg.)
allowance[B][C] = allowance[B][C] - 6; (10-6 --> C still can send 4 tokens from now on)
Теперь с этими тремя вызовами функций :
знак.Передача от(отправитель, получатель, сумма, { от: exchange })
allowance[deployer][exchange] = allowance[deployer][exchange] - _value;
токен.одобрить(обмен, сумма, { от: deployer });
allowance[deployer][exhange] = _value;
знак.пособие(развертыватель, обмен);
Вы просто получаете обновленное количество токенов, которые можно отправить. Порядок вызовов этих функций для меня не совсем понятен, так как я ожидал бы, что сначала будет вызвана функция утверждения.
Что касается фигурных скобок, я не знаком с этим синтаксисом. Я больше привык к чему-то вроде
token.transferFrom(deployer, receiver, amount).send( { from: exchange } )
в javascript. В любом случае, это просто способ использовать пары ключ-значение в качестве аргумента функции. Вероятно, первые аргументы (из фигурных скобок) относятся к функции-члену токена, а аргумент между фигурными скобками-к эквиваленту функции отправки, которую я привел в качестве примера выше.
Надеюсь, что это вам поможет.