ethereum smart contract payable
Method 1: No function name
function () payable external {
t = msg.value;
emit Buyvalue(msg.value);
}
function () payable external {
OR
function () external payable {
pragma solidity >=0.4.0 <0.6.0;
contract SimpleStorage {
uint storedData;
uint256 t;
event Set(address indexed _from, uint value);
event Buyvalue(uint tokens);
function set(uint x) public {
storedData = x;
emit Set(msg.sender, x);
}
function get() public view returns (uint) {
return storedData;
}
function gett() public view returns (uint) {
return t;
}
function () payable external {
t = msg.value;
emit Buyvalue(msg.value);
}
}
MetaMask can not director send contract address eth, so use console
web3.eth.sendTransaction({
to:'0xc356362efcce609fbe141b9bbda9e5ddc8a25526',
from:'0x5921a4C1B13afbD4b61d63e9c7BD47741C47B176',
value:web3.toWei("1", "ether")
}, console.log)
https://ethereum.stackexchange.com/questions/40862/how-to-set-msg-value-in-metamask
This method have warning about
Fallback function of contract SimpleStorage requires too much gas (21202). If the fallback function requires more than 2300 gas, the contract cannot receive Ether.
Method 2:buy function
https://www.ethereum.org/token
function buy() payable public {
t = msg.value;
emit Buyvalue(msg.value);
}
pragma solidity >=0.4.0 <0.6.0;
contract SimpleStorage {
uint storedData;
uint256 t;
event Set(address indexed _from, uint value);
event Buyvalue(uint tokens);
function set(uint x) public {
storedData = x;
emit Set(msg.sender, x);
}
function get() public view returns (uint) {
return storedData;
}
function gett() public view returns (uint) {
return t;
}
function buy() payable public {
t = msg.value;
emit Buyvalue(msg.value);
}
}
MetaMask can not director send contract address eth, so use console
var thecontract = web3.eth.contract([{"constant":false,"inputs":[{"name":"x","type":"uint256"}],"name":"set","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"get","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"gett","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"buy","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Set","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokens","type":"uint256"}],"name":"Buyvalue","type":"event"}]);
var MyContract = thecontract.at('0x75e65c1f6de85183ba4937dafb62f54450f314b6');
MyContract.buy({
from:'0x5921a4C1B13afbD4b61d63e9c7BD47741C47B176',
value:web3.toWei("1", "ether")
}, console.log)
Here have one problem about line 1: web3.eth.contract( ooxxooxx )
ooxxooxx How to get
result same method 1