测试直接向智能合约地址付款

Testing payments directly to smart contract address

我有一个构造函数支付类型的智能合约。根据我的理解,声明应付构造函数意味着智能合约可以接收付款。我已经通过测试网 Binance 智能链上的 metamask 发布了它。但是一旦我去将资金直接发送到智能合约地址。好像是 gas price 的错误,即使我发送的最小数量的交易也不起作用,

合同部署于:https://testnet.bscscan.com/address/0x75d0b70f597fd23e73c5f193af45023bc65471d7

交易失败:https://testnet.bscscan.com/tx/0x1258efe59c2fd2d074858082d3b20c6742256c231ecbfa9c48eee4d81a73153a 坚固代码:

// SPDX-License-Identifier: Unlicensed
pragma solidity ^0.8.0;
import "hardhat/console.sol";

contract BurgerShop {

    uint256 public cost = 0.2 * (10**18);
    event BurgerBought(address indexed _from, uint256 cost);
    
    constructor() payable{
        emit BurgerBought(msg.sender, cost);
    }

}  

其次,我想知道接收通过智能合约地址直接发送的资金的最佳方法是什么。就像如果我有一个地址为 0xaaa 的智能合约 A...zzzz 用户如何直接从 WALLET 存入智能合约地址?

constructor 使用 payable 修饰符时,合约能够在部署期间接受 ETH。 IE。部署事务可以有 non-zero value.

但这并不意味着合约以后可以接受ETH。

为了像最终用户地址一样接受 ETH,合约需要实现 fallback()receive() 特殊功能。

文档:https://docs.soliditylang.org/en/v0.8.13/contracts.html#special-functions

示例:

pragma solidity ^0.8;

contract MyContract {
    receive() external payable {
        // executed when the `data` field is empty and `value` is > 0
    }
}