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

Posted

技术标签:

【中文标题】在我用于测试的 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 :在我用于测试的 js 文件中。我将发送交易调用到智能合约,那么 value 和 gas 之间有什么区别: 【发布时间】:2021-10-23 13:36:42 【问题描述】:
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?

【问题讨论】:

【参考方案1】:

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 是您随交易发送的费用金额。为了更好地解释什么是气体,以太坊 StackExchange 上有一个 great post。

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

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

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

【讨论】:

以上是关于在我用于测试的 js 文件中。我将发送交易调用到智能合约,那么 value 和 gas 之间有啥区别:的主要内容,如果未能解决你的问题,请参考以下文章

关于web3.js中与交易发送交易签名智能合约函数调用相关api的理解

如何通过 activemerchant 将实时交易发送到测试服务器 authorize.net

将签名的交易发送到 Ropsten

强制使用以太币发送交易

谷歌分析事件跟踪:如何避免发送数据进行本地测试?

错误:在调用 Multicall Contract ethereum 的聚合函数时发送交易需要签名者