There's a number of questions and answers about calling contract methods via web3, but they are either outdated (i.e. for web3 0.x while 1.x has many breaking changes) and/or don't include signing (1, 2, 3). The first steps, as far as I understand, should be these:
import Web3 from "web3"
import { AbiItem } from "web3-utils"
;(async() => {
const provider = new Web3.providers.HttpProvider(...)
const web3 = new Web3(provider)
// see https://ethereum.stackexchange.com/a/98149/40080 and https://github.com/ChainSafe/web3.js/issues/3310#issuecomment-997396686
const abi = ... as AbiItem[] // imported from a file
const methodName = ...
const callParameters = [
...
]
const contractAddress = ...
const universeContract = new web3.eth.Contract(abi, contractAddress)
const call = universeContract.methods[methodName](callParameters)
})()
but then I also have to sign this with private key and send, and this is what I haven't achieved yet. According to this answer, I should be using eth.accounts.sign(data, privateKey)
(since I have to do this without a node), but I have no idea what data
I should extract from call
and how (and how to further send it). Can somebody show how to do this or at least give some pointers?