Я хочу создать что-то вроде криптобиржи, в которой мне нужно генерировать разные уникальные адреса депозита для каждого пользователя, чтобы они могли отправлять средства на свои счета, а я мог бы отслеживать, сколько внес депозит каждый пользователь. Это довольно легко сделать в других криптовалютах, таких как биткойн. Однако кажется, что это невозможно в Ethereum (или, может быть, я ошибаюсь).
Основная проблема здесь заключается в том, что если я генерирую несколько закрытых ключей или использую HD-кошелек и извлекаю из него несколько закрытых ключей, средства, отправленные на любой из этих кошельков, должны быть подписаны разными ключами, чтобы их можно было потратить, поэтому я должен заплатить огромная сумма комиссии за транзакцию (один раз на аккаунт), если я попытаюсь отправить все средства на один большой кошелек для обслуживания.
Поэтому мне было интересно, могу ли я создать несколько депозитных адресов, соответствующих одной учетной записи в Ethereum, чтобы каждый пользователь мог отправлять средства на другой адрес, поэтому я могу отслеживать, какой пользователь отправил, сколько и когда я хочу потратить эти средства, я могу подписать транзакцию с одним закрытым ключом и оплатить комиссию за транзакцию только один раз (потратить все эфиры вместе)? И если совершенно невозможно иметь несколько депозитных адресов, соответствующих одной учетной записи, то что я могу сделать?
PS: я видел несколько подобных вопросов в этом StackExchange, но ни один из ответов на самом деле не ответил на мой вопрос. Поэтому, пожалуйста, помедлите, прежде чем отмечать это как дубликат.
PS2: я не ищу решение с использованием смарт-контрактов, потому что это потребует от моих пользователей вносить депозиты с использованием специальных кошельков, поддерживающих web3, таких как метамаски. Мне больше интересно узнать, как другие биржи, такие как Binance, справляются с этим, чтобы пользователи могли вносить депозиты. из любого кошелька!!!!
Вы пытаетесь применить модель, подходящую для Биткойна, в основном из-за его ограничений. Это будет неудобная стратегия для Ethereum, которая упускает из виду его сильные стороны.
Биткойн: Не особо программируемый, но легко вывести средства с нескольких счетов. Ethereum: особенно программируемый, но не так просто вывести средства с нескольких счетов.
Ethereum также имеет уникальные соображения безопасности, и важно подтвердить, что у вашего клиента есть все возможности, которые предполагает ваш контракт, такие как возможность формировать транзакцию и подписывать запрос на снятие средств. Это НЕ тот случай, если они отправляются с другого обмена, поэтому вам нужно предотвратить это. Вам, вероятно, в любом случае потребуется регистрация / KYC, поэтому подтвердите, что они имеют полный контроль над счетами, которые они будут использовать, а затем сообщите в контракте, что они «одобрены» для отправки денег.
Вы должны подтвердить, что ваши пользователи могут подписывать транзакцию. Это гарантирует, что они смогут работать с любым интерфейсом контракта, который вы им покажете в будущем .
Для краткости я пропущу функциональность вывода средств, потому что вы, вероятно, будете переводить средства на операционные счета, как только они будут получены, и у вас может быть совершенно другой контракт, в котором вы отправляете средства для вывода - или отправляете пользователю на основе веб-сайта. взаимодействие с сайтом.
Это представлено не как готовый к бою производственный контракт, а скорее как простой пример, демонстрирующий подход.
pragma solidity 0.5.16;
contract Deposit {
address payable public wallet;
mapping(address => bool) public approved;
event LogApproved(address approver, address approved);
event LogDeposit(address sender, uint amount);
function authorize(address allowed) public {
require(msg.sender == wallet, "Only the owner can do this, e.g. from their admin server.");
emit LogApproved(msg.sender, allowed);
approved[allowed] = true;
}
function deposit() public payable {
require(approved[msg.sender], "Unauthorized sender. Please register.");
emit LogDeposit(msg.sender, msg.value); // <=== there's your accounting
wallet.transfer(msg.value);
}
}
Проблема бухгалтерского учета увековечена в блокчейне и может быть проверена внешним клиентом, например, nodejs. Деньги поступают на ваш wallet
счет, и вы можете продолжить оттуда.
Надеюсь, поможет.
F_IVI_L
Роб Хитченс
Сабина