测试直接向智能合约地址付款
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
}
}
我有一个构造函数支付类型的智能合约。根据我的理解,声明应付构造函数意味着智能合约可以接收付款。我已经通过测试网 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
}
}