Я знаю, что Golem Network Token не реализует функции Approval () Allowance () и TransferFrom (). Таким образом, GNT частично соответствует стандарту ERC20.
Я хотел бы пойти дальше и реализовать функцию transfer() как private() .
Таким образом, держатели токенов не смогут свободно торговать им (это возможно только с использованием специального механизма — см. ниже), но все же смогут увидеть токен в кошельках.
Пример кода будет выглядеть так:
contract CustomToken is ERC20 {
public symbol = “TEST”
public totalSupply = X;
public balanceOf...
//function approve() -- not implemented
//function transferFrom() -- not implemented
// first step: check that the caller is KYC
function placeOrderBuy(int _amountToken, int _maxPrice ) external payable
returns(bool success);
// first step: check that the caller is KYC
function placeOrderSell(int _amountToken, int _minPrice ) external
payable returns(bool success);
//run automatically every month, and transfer the tokens function
executeOrders() private returns(float newPrice);
// triggers Transfer event
transfer(address _to, uint _value) private returns(bool success);
}
Будет ли это принято как частично совместимое с ERC20, как GNT? Примут ли это кошельки?
Я считаю, что вышеуказанный контракт работает, но, может быть, есть какие-то проблемы, о которых я не подумал? Что вы думаете?
если ERC20 отсутствует в таблице, я мог бы просто удалить функцию transfer() и реализовать передачу токена в функциях executeOrders(), верно?
Спасибо!
Инструменты, которые обрабатывают/взаимодействуют со смарт-контрактом, делают это с помощью закодированной подписи функциональных интерфейсов. Сигнатура построена из канонического интерфейса функции, поэтому
transfer(address,uint)
становится каноническим как
transfer(address,uint256)
и закодировано как
0xa9059cbb
Добавление private
не меняет интерфейс, поэтому кодировка та же, поэтому инструменты не будут знать об изменении. Он должен работать нормально.