легко на меня, потому что я совершенно новичок во всем этом материале.
Итак, я создал функцию, которая подписывает мою транзакцию с помощью библиотеки web3js и выглядит так:
signTx = async () => {
const { accounts, contract, web3} = this.state
const msg = 'henlo frendo'
const hex_msg = web3.utils.toHex(msg)
let signature = await web3.eth.sign(hex_msg, accounts[0])
signature = signature.substr(2);
var r = '0x' + signature.slice(0, 64)
var s = '0x' + signature.slice(64, 128)
var v = '0x' + signature.slice(128, 130)
var v_decimal = this.state.web3.utils.toDecimal(v)
//v_decimal has to be either 27 or 28
if (v_decimal != 27 || v_decimal != 28) {
v_decimal += 27
}
// Get the value from the contract to prove it worked.
const fixed_msg = `\x19Ethereum Signed Message:\n${msg.length}${msg}`
const fixed_msg_sha = this.state.web3.utils.sha3(fixed_msg)
const response = await contract.methods.recoverAddr(fixed_msg_sha,
v_decimal, r, s).call()
};
Я ясно вижу, что транзакция подписана правильно, если я делаю некоторые журналы консоли, но, например, если я добавляю кнопку в свой внешний интерфейс, которая продолжает вызывать эту функцию signTx(), новая транзакция никогда не будет выполнена. В чем причина этого? Это потому, что я не подпитываю транзакцию средствами? Если кто-то может предоставить некоторые документы по этому поводу, я был бы очень признателен!
PS Я использую ganache в качестве сетевого провайдера.
Ну, я думаю, ответ в том, что вызов call() по контракту только считывает данные
См.: https://truffleframework.com/docs/truffle/getting-started/interacting-with-your-contracts