Цель состоит в том, чтобы создать контракт, который позволяет стороне B снимать средства со счета стороны A в соответствии с некоторой формулой. Я не хочу использовать модель условного депонирования, а просто для того, чтобы:
Есть ли примеры или лучшие практики для этого?
Вы не можете вывести деньги с чужого счета напрямую. Однако вы можете создать смарт-контракты, в которых А может внести деньги. Затем B разрешается снимать деньги со смарт-контракта в течение определенного периода времени. Если B не вывел деньги и период закончился, A может вывести деньги из смарт-контракта.
Я рекомендую использовать Vault. Вы можете проверить OpenZeppelin RefundVault. Пользователи отправляют некоторые средства в это хранилище, и в зависимости от вашей бизнес-логики пользователь может запросить возврат и снятие средств.
Для токенов ERC20 вы можете использовать approve
функцию, позволяющую кому-то другому вывести средства из ваших запасов токенов:
https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md#approve
Позволяет
_spender
снимать с вашего счета несколько раз, до_value
суммы. Если эта функция вызывается снова, она перезаписывает текущий допуск на_value
.
Для эфира вы можете настроить что-то вроде мультиподписного кошелька, где отдельные лица имеют доступ к тем же средствам, которые хранятся в этом контракте. Этот контракт может работать не совсем так, как вы предполагали, но должен стать отличным началом:
Пол Разван Берг
Шон Табризи