繁体   English   中英

如何将帐户添加到 web3 object?

[英]How to add account to web3 object?

我有私钥,这就是我访问帐户的方式(币安智能链网络):

const web3 = new Web3('https://bsc-dataseed1.binance.org:443')
const account = await web3.eth.accounts.privateKeyToAccount(pk)

所以,我有帐户 object, { address: '0x...', privateKey: '0x...', signTransaction: [Function: signTransaction], sign: [Function: sign], encrypt: [Function: encrypt] }

我想在 BEP-20 令牌地址上使用 send() 方法:

const contract = new web3.eth.Contract(ABI, address)
const tx = await contract.methods.transfer(address, amount).send({
    from: account.address
})

但我收到错误Error: Returned error: unknown account

我必须签署每笔交易然后发送吗?

也许有一种方法可以让提供商为我签署交易?

怎么做? 如何将账户 object 添加到 web3.eth.accounts?

在这里:

const tx = await contract.methods.transfer(address, amount).send({
    from: account.address
})

您实际上是在要求您正在与之通信的以太坊节点为您签署交易。

为了使其工作,您首先需要通过发送适当的请求来解锁该节点上的指定帐户。

或者(可能更安全),您可以自己签署交易:

async function signAndSend(web3, account, gasPrice, transaction, value = 0) {
    while (true) {
        try {
            const options = {
                to      : transaction._parent._address,
                data    : transaction.encodeABI(),
                gas     : await transaction.estimateGas({from: account.address, value: value}),
                gasPrice: gasPrice,
                value   : value,
            };
            const signed  = await web3.eth.accounts.signTransaction(options, account.privateKey);
            const receipt = await web3.eth.sendSignedTransaction(signed.rawTransaction);
            return receipt;
        }
        catch (error) {
            console.log(error.message);
        }
    }
}

async function yourFunc(web3, account, gasPrice, address, amount) {
    const contract = new web3.eth.Contract(ABI, address)
    const receipt = await signAndSend(web3, account, gasPrice, contract.methods.transfer(address, amount));
}

顺便说一句,我觉得你试图将代币从你的账户转移到代币合约中很奇怪。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM