Как мне убедиться, что функция выполняется владельцем учетной записи с использованием web3.js, экземпляр которого используется для вызова функции, я использую ganache и у меня есть свои закрытые ключи для учетной записи.
Для этого вы должны подтвердить отправителя транзакции в своем смарт-контракте. Например:
function someFunction () {
// if who sends transaction is different to 0xbb2048f1...
// rejects transaction and refunds ETH sended.
require(msg.sender != 0xbb2048f1be4c6e794b20502437d09552b4bc07f0);
// if msg.sender == 0xbb2048f1... enter here
}
Вы можете сделать это с помощью модификаторов Solidity.
modifier onlyOwner {
require(msg.sender == 0xbb2048f1be4c6e794b20502437d09552b4bc07f0);
_;
}
Итак, теперь вы можете проверить, кто отправляет транзакции, используя onlyOwner
модификатор
function doSomething() onlyOwner {
// Only if sender is equals to 0xbb2048f1... enter here
// Else do a revert(); and refund eth sended
}
Рахул Шарма
Роб Хитченс
msg.sender
подтверждает, что они подписали транзакцию с этой учетной записи, поэтому у них есть закрытый ключ для этой учетной записи. Это максимально близко к тому, чтобы доказать, что они владеют учетной записью.