#ethereum #solidity #web3js #metamask #daap
Вопрос:
Я пытался создать рынок NFT с возможностью выставления товара на аукцион. Но я не знаю, как достичь этого с помощью транзакции подписи.
Я пытался использовать почти все методы подписи с web3.js, но для этого требуется закрытый ключ пользователя.
однако есть функция web3.eth.signTransaction
, которая не требует никакого закрытого ключа для подписи транзакции, но выдает ошибку на консоли. говоря : Error: The method 'eth_signTransaction' does not exist / is not available
.
Может ли кто-нибудь дать мне обзор того, как можно выполнить эту транзакцию подписания и отправки, реализуя функциональность аукциона nft, например, на рынках nft: opensea или foundation.
Ответ №1:
Из документов:
Подписывает сделку. Эту учетную запись необходимо разблокировать.
Для этого не требуется закрытый ключ, но требуется, чтобы учетная запись (которая используется для подписания транзакции) была разблокирована на узле. Это означает, что узел должен хранить закрытый ключ, чтобы разблокировать учетную запись.
Обычно это разрешено на локальных узлах, таких как Ganache или частные узлы.
И общедоступные узлы, такие как Infura, обычно отключают эту функцию (следовательно, сообщение об ошибке « eth_signTransaction
недоступно»), поскольку они не хранят ваши закрытые ключи.
Вы можете попросить пользователя подписать транзакцию, используя его кошелек. Например, с помощью MetaMask (или любого другого кошелька, реализующего API поставщика Ethereum):
const transactionParameters = {
from: ethereum.selectedAddress, // must match user's active address
to: 'your address'
};
await ethereum.request({
method: 'eth_sendTransaction',
params: [transactionParameters],
});
Комментарии:
1. Приведенная выше функция фактически выполняет транзакцию, но я хочу подписать ее для последующего использования. Существуют ли какие-либо другие методы для этого?