CDT  v4.2.0
инструменты разработчика

◆ modify() [1/2]

template<name::raw TableName, typename T , typename... Indices>
template<typename Lambda >
void eosio::multi_index< TableName, T, Indices >::modify ( const T &  obj,
name  payer,
Lambda &&  updater 
)
inline

Изменяет существующий объект в таблице.

Аргументы
obj— ссылка на обновляемый объект
payer— имя аккаунта-плательщика за хранение обновлённой строки
updater— лямбда, обновляющая целевой объект
Предусловие
obj — существующий объект в таблице
payer — действительный аккаунт, уполномоченный выполнять действие и оплачивать хранение
Постусловие
Изменённый объект сериализуется и заменяет прежний в таблице.
Вторичные индексы обновлены; первичный ключ объекта не меняется.
С плательщика взимается хранение обновлённого объекта.
Если payer совпадает с прежним плательщиком, списывается только разница объёма хранения (при отрицательной разнице — возврат).
Если payer другой, прежнему плательщику возвращается стоимость хранения старого объекта.

Исключения: При нарушении предусловий выполнение прерывается.

Пример:

// This assumes the code from the constructor example. Replace myaction() {...}
void myaction() {
// create reference to address_index - see emplace example
// add dan account to table - see emplace example
auto itr = addresses.find("dan"_n);
eosio::check(itr != addresses.end(), "Address for account not found");
addresses.modify( *itr, payer, [&]( auto& address ) {
address.city = "San Luis Obispo";
address.state = "CA";
});
eosio::check(itr->city == "San Luis Obispo", "Lock arf, Address not modified");
}
}
EOSIO_DISPATCH( addressbook, (myaction) )

См. определение в файле multi_index.hpp строка 1705