在我用于测试的 js 文件中。我将发送交易调用到智能合约,那么 value 和 gas 之间有什么区别:

In my js file for testing .I call a send transaction to the smart contract, so what is the difference between value and gas :

it("allows a manager to make a payment request f(createRequest) ", async ()=> {
        await campaign.methods.createRequest('buy beer', accounts[2], '100').send({
            from: accounts[0],
            gas: '1000000'
        });
it('Contribute money from another account & checks whether it is approved or not', async () =>{
        await campaign.methods.contribute().send({
            from: accounts[1],
            value: '200'
        });

我想知道决定因素,什么时候使用gas,什么时候使用value?

value 是您随交易发送的本机令牌的数量。

Network Native token
Ethereum ETH
Binance Smart Chain BNB
Tron TRX

以不可分割的最小单位表示。如果是 ETH,那就是 wei。 1 ETH 是 10^18 wei.

因此,根据您的示例,当您将 value 设置为 200 时,您将通过执行 contribute() 函数向合约发送 0.0000000000000002 ETH .

value 的一个示例用法是当合约想要以 0.1 ETH 的价格向您出售代币时。在这种情况下,您在执行合约的 buy() 函数时将 value 设置为 0.1 ETH。

value 不会取代 gas 费用:


gas 是您随交易发送的费用金额。为了更好地解释什么是 gas,以太坊 StackExchange 上有一个 great post

但简而言之 - gas 是执行智能合约功能的一种支付方式。

执行函数所需的最小gas量通常可以使用web3 estimateGas()方法计算(也有一些例外情况,估计不正确或无法计算)。

根据 gasPrice(根据最近的数据自动计算或您可以手动覆盖),总交易费用以原生代币(例如 ETH)计算。