Post #1395
905
Стандарт ERC-6909 Minimal Multi-Token Standard. Часть 2
Продолжаем знакомится с данным стандартом.
Модель оператора в ERC-6909
В функции ERC-6909 setOperator, показанной ниже, переменная spender устанавливается в качестве оператора и получает глобальные разрешения на передачу всех идентификаторов токенов, принадлежащих счету, без ограничений по разрешению.
Модель разрешений в ERC-6909
Модель разрешений (allowance model) представляет собой систему управления по конкретным токенам и суммам, в которой учетная запись может установить ограниченное количество разрешений для конкретного ID токена.
Например, Алиса может разрешить Бобу перевести 100 единиц токена с ID 42, не предоставляя доступа к другим токенам или неограниченным суммам, используя функцию одобрения в ERC-6909, показанную далее.
Переменная spender в approve - это учетная запись, уполномоченная переводить определенные суммы определенного id токена от имени владельца.
Например, владелец может разрешить spender переводить <= 100 единиц определенного ID токена. Кроме того, он может дать бесконечное разрешение на перевод определенного id токена, установив разрешение на type(uint256).max.
В ERC-6909 не указано, должны ли вычитаться надбавки, установленные в type(uint256).max, или нет. Это поведение оставлено на усмотрение исполнителя, аналогично ERC-20.
Основные структуры данных
Реализации ERC-6909 используют три маппинга для обновления состояния остатков на счетах и разрешений.
1. balanceOf: Баланс владельца id
Маппинг balanceOf отслеживает баланс определенного ID токена, принадлежащего определенному адресу (владельцу). Структура owner => (id => amount) в связке указывает на то, что один владелец может владеть несколькими токенами и отслеживать их баланс по соответствующим ID.
2. allowance: Разрешение на передачу токена
Маппинг allowance определяет, какое количество конкретного токена (ID) может передать spender от имени владельца. Это облегчает тонкий контроль над расходованием токенов.
3. isOperator: Статус утверждения оператора
Этот маппинг отслеживает, был ли spender утвержден в качестве оператора для всех токенов, принадлежащих адресу. Например, isOperator[0x123...][0xABC...] возвращает true, если адресу 0xABC... разрешено тратить токены, принадлежащие адресу 0x123...; в противном случае возвращается false.
Далее разберем функции.
#eip6909
Продолжаем знакомится с данным стандартом.
Модель оператора в ERC-6909
В функции ERC-6909 setOperator, показанной ниже, переменная spender устанавливается в качестве оператора и получает глобальные разрешения на передачу всех идентификаторов токенов, принадлежащих счету, без ограничений по разрешению.
function setOperator(address spender, bool approved) public returns (bool) {
isOperator[msg.sender][spender] = approved;
emit OperatorSet(msg.sender, spender, approved);
return true;
}Модель разрешений в ERC-6909
Модель разрешений (allowance model) представляет собой систему управления по конкретным токенам и суммам, в которой учетная запись может установить ограниченное количество разрешений для конкретного ID токена.
Например, Алиса может разрешить Бобу перевести 100 единиц токена с ID 42, не предоставляя доступа к другим токенам или неограниченным суммам, используя функцию одобрения в ERC-6909, показанную далее.
function approve(address spender, uint256 id, uint256 amount) public returns (bool) {
allowance[msg.sender][spender][id] = amount;
emit Approval(msg.sender, spender, id, amount);
return true;
}Переменная spender в approve - это учетная запись, уполномоченная переводить определенные суммы определенного id токена от имени владельца.
Например, владелец может разрешить spender переводить <= 100 единиц определенного ID токена. Кроме того, он может дать бесконечное разрешение на перевод определенного id токена, установив разрешение на type(uint256).max.
В ERC-6909 не указано, должны ли вычитаться надбавки, установленные в type(uint256).max, или нет. Это поведение оставлено на усмотрение исполнителя, аналогично ERC-20.
Основные структуры данных
Реализации ERC-6909 используют три маппинга для обновления состояния остатков на счетах и разрешений.
1. balanceOf: Баланс владельца id
Маппинг balanceOf отслеживает баланс определенного ID токена, принадлежащего определенному адресу (владельцу). Структура owner => (id => amount) в связке указывает на то, что один владелец может владеть несколькими токенами и отслеживать их баланс по соответствующим ID.
mapping(address owner => mapping(uint256 id => uint256 amount)) public balanceOf;
2. allowance: Разрешение на передачу токена
Маппинг allowance определяет, какое количество конкретного токена (ID) может передать spender от имени владельца. Это облегчает тонкий контроль над расходованием токенов.
mapping(address owner => mapping(address spender => mapping(uint256 id => uint256 amount))) public allowance;
3. isOperator: Статус утверждения оператора
mapping(address owner => mapping(address operator => bool isOperator)) public isOperator;
Этот маппинг отслеживает, был ли spender утвержден в качестве оператора для всех токенов, принадлежащих адресу. Например, isOperator[0x123...][0xABC...] возвращает true, если адресу 0xABC... разрешено тратить токены, принадлежащие адресу 0x123...; в противном случае возвращается false.
Далее разберем функции.
#eip6909
- 👍 5
- ❤ 2
