Ethereum 以太坊如何在交易期间验证我是否有足够的资金进行交易?

Ethereum 以太坊如何在交易期间验证我是否有足够的资金进行交易?,ethereum,smartcontracts,evm,Ethereum,Smartcontracts,Evm,我正在研究以太坊,我有一个问题,以太坊如何在交易期间验证我的余额是否足以执行交易? 是当前的智能合约做了这项检查,EVM是否以某种方式从世界状态树检索数据? 先谢谢你 ETH余额: 区块链存储状态变化,用于计算地址的当前ETH余额 理论上,您可以创建和广播花费超过当前余额的交易。但网络将拒绝该交易,因为该交易无效: 您很可能找不到任何将此交易纳入区块的矿工。如果您有一个miner将tx包含在一个块中,网络的其余部分将拒绝这个(无效)块,并接受其他人的(有效)块 代币余额: 令牌余额存储在令牌合

我正在研究以太坊,我有一个问题,以太坊如何在交易期间验证我的余额是否足以执行交易? 是当前的智能合约做了这项检查,EVM是否以某种方式从世界状态树检索数据?
先谢谢你

ETH余额:

区块链存储状态变化,用于计算地址的当前ETH余额

理论上,您可以创建和广播花费超过当前余额的交易。但网络将拒绝该交易,因为该交易无效:

您很可能找不到任何将此交易纳入区块的矿工。如果您有一个miner将tx包含在一个块中,网络的其余部分将拒绝这个(无效)块,并接受其他人的(有效)块


代币余额:

令牌余额存储在令牌合约存储器中。(在某些情况下,余额可能存储在另一个合同中,但它仍然是某个合同的存储。)

大多数令牌合约的逻辑包含验证发送方是否有足够的令牌余额来发送令牌。如果他们没有足够的令牌余额,契约将创建无效的EVM操作码,这将导致恢复事务(因此令牌余额不会更改)。或者有时候合同只允许以太坊事务通过,但它不更新任何令牌余额

OpenZeppelin实现ERC-20令牌的验证示例代码:(函数
\u transfer()
中的
require()
语句)


只有少数代币合约是错误的,并且没有此验证。但是错误的实现可能会允许发送方发送比当前拥有的令牌更多的令牌。

ETH balance:

区块链存储状态变化,用于计算地址的当前ETH余额

理论上,您可以创建和广播花费超过当前余额的交易。但网络将拒绝该交易,因为该交易无效:

您很可能找不到任何将此交易纳入区块的矿工。如果您有一个miner将tx包含在一个块中,网络的其余部分将拒绝这个(无效)块,并接受其他人的(有效)块


代币余额:

令牌余额存储在令牌合约存储器中。(在某些情况下,余额可能存储在另一个合同中,但它仍然是某个合同的存储。)

大多数令牌合约的逻辑包含验证发送方是否有足够的令牌余额来发送令牌。如果他们没有足够的令牌余额,契约将创建无效的EVM操作码,这将导致恢复事务(因此令牌余额不会更改)。或者有时候合同只允许以太坊事务通过,但它不更新任何令牌余额

OpenZeppelin实现ERC-20令牌的验证示例代码:(函数
\u transfer()
中的
require()
语句)

只有少数代币合约是错误的,并且没有此验证。但是错误的实现可能会允许发送方发送比当前拥有的令牌更多的令牌