在我用于测试的 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的理解