используя закрытый ключ, чтобы доказать, что вы владеете этой учетной записью

Как мне убедиться, что функция выполняется владельцем учетной записи с использованием web3.js, экземпляр которого используется для вызова функции, я использую ganache и у меня есть свои закрытые ключи для учетной записи.

Ответы (1)

Для этого вы должны подтвердить отправителя транзакции в своем смарт-контракте. Например:

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подтверждает, что они подписали транзакцию с этой учетной записи, поэтому у них есть закрытый ключ для этой учетной записи. Это максимально близко к тому, чтобы доказать, что они владеют учетной записью.