Can a contract with no payable function have ether?
Clash Royale CLAN TAG#URR8PPP
The question in the title says it all.
To the best of my understanding, the only way to deposit ether into a contract is by calling a payable
function, and set msg.value
larger than 0 (and of course, the function should complete successfully without reverting).
But if there are no payable
functions to begin with, is it ever possible that the ether balance of the contract will be larger than 0?
Thank you!
solidity ether balances payable
add a comment |
The question in the title says it all.
To the best of my understanding, the only way to deposit ether into a contract is by calling a payable
function, and set msg.value
larger than 0 (and of course, the function should complete successfully without reverting).
But if there are no payable
functions to begin with, is it ever possible that the ether balance of the contract will be larger than 0?
Thank you!
solidity ether balances payable
add a comment |
The question in the title says it all.
To the best of my understanding, the only way to deposit ether into a contract is by calling a payable
function, and set msg.value
larger than 0 (and of course, the function should complete successfully without reverting).
But if there are no payable
functions to begin with, is it ever possible that the ether balance of the contract will be larger than 0?
Thank you!
solidity ether balances payable
The question in the title says it all.
To the best of my understanding, the only way to deposit ether into a contract is by calling a payable
function, and set msg.value
larger than 0 (and of course, the function should complete successfully without reverting).
But if there are no payable
functions to begin with, is it ever possible that the ether balance of the contract will be larger than 0?
Thank you!
solidity ether balances payable
solidity ether balances payable
asked Dec 12 at 11:57
goodvibration
2,748721
2,748721
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
Yes, a contract can have Ether balance without any payable
function.
There are three ways to do it:
1) selfdestruction. Another contract self destructrs and sends its remaining Ether to your contract
2) Target of mining. Ether rewarded from mining can't be refused.
3) Ether sent to the contract before the contract exists.
More details about these alternatives can found for example here: https://medium.com/@alexsherbuck/two-ways-to-force-ether-into-a-contract-1543c1311c56
Great, thank you! Question on bullet #3: So this is just "a long shot in the dark"? I send ether to some public address without knowing it's private key, and at a later point in time, somebody deploys a contract which happens to "fall" on the same address - is that correct, or have I misinterpreted you intention?
– goodvibration
Dec 12 at 12:56
2
@goodvibration The chance of someone generating any completely random address (either through a private key or contract deployment) is incredibly small. However, contract addresses are not random, they are deterministic. For any given address, you can know in advance the contract addresses it will generate: ethereum.stackexchange.com/questions/9776/…
– Jesse Busman
Dec 12 at 14:29
2
Additionally, a trivial case: before Solidity 0.4payable
didn't exist, so all those Solidity contracts have ether without apayable
function :)
– eth♦
Dec 13 at 2:52
add a comment |
Your Answer
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "642"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fethereum.stackexchange.com%2fquestions%2f63987%2fcan-a-contract-with-no-payable-function-have-ether%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
Yes, a contract can have Ether balance without any payable
function.
There are three ways to do it:
1) selfdestruction. Another contract self destructrs and sends its remaining Ether to your contract
2) Target of mining. Ether rewarded from mining can't be refused.
3) Ether sent to the contract before the contract exists.
More details about these alternatives can found for example here: https://medium.com/@alexsherbuck/two-ways-to-force-ether-into-a-contract-1543c1311c56
Great, thank you! Question on bullet #3: So this is just "a long shot in the dark"? I send ether to some public address without knowing it's private key, and at a later point in time, somebody deploys a contract which happens to "fall" on the same address - is that correct, or have I misinterpreted you intention?
– goodvibration
Dec 12 at 12:56
2
@goodvibration The chance of someone generating any completely random address (either through a private key or contract deployment) is incredibly small. However, contract addresses are not random, they are deterministic. For any given address, you can know in advance the contract addresses it will generate: ethereum.stackexchange.com/questions/9776/…
– Jesse Busman
Dec 12 at 14:29
2
Additionally, a trivial case: before Solidity 0.4payable
didn't exist, so all those Solidity contracts have ether without apayable
function :)
– eth♦
Dec 13 at 2:52
add a comment |
Yes, a contract can have Ether balance without any payable
function.
There are three ways to do it:
1) selfdestruction. Another contract self destructrs and sends its remaining Ether to your contract
2) Target of mining. Ether rewarded from mining can't be refused.
3) Ether sent to the contract before the contract exists.
More details about these alternatives can found for example here: https://medium.com/@alexsherbuck/two-ways-to-force-ether-into-a-contract-1543c1311c56
Great, thank you! Question on bullet #3: So this is just "a long shot in the dark"? I send ether to some public address without knowing it's private key, and at a later point in time, somebody deploys a contract which happens to "fall" on the same address - is that correct, or have I misinterpreted you intention?
– goodvibration
Dec 12 at 12:56
2
@goodvibration The chance of someone generating any completely random address (either through a private key or contract deployment) is incredibly small. However, contract addresses are not random, they are deterministic. For any given address, you can know in advance the contract addresses it will generate: ethereum.stackexchange.com/questions/9776/…
– Jesse Busman
Dec 12 at 14:29
2
Additionally, a trivial case: before Solidity 0.4payable
didn't exist, so all those Solidity contracts have ether without apayable
function :)
– eth♦
Dec 13 at 2:52
add a comment |
Yes, a contract can have Ether balance without any payable
function.
There are three ways to do it:
1) selfdestruction. Another contract self destructrs and sends its remaining Ether to your contract
2) Target of mining. Ether rewarded from mining can't be refused.
3) Ether sent to the contract before the contract exists.
More details about these alternatives can found for example here: https://medium.com/@alexsherbuck/two-ways-to-force-ether-into-a-contract-1543c1311c56
Yes, a contract can have Ether balance without any payable
function.
There are three ways to do it:
1) selfdestruction. Another contract self destructrs and sends its remaining Ether to your contract
2) Target of mining. Ether rewarded from mining can't be refused.
3) Ether sent to the contract before the contract exists.
More details about these alternatives can found for example here: https://medium.com/@alexsherbuck/two-ways-to-force-ether-into-a-contract-1543c1311c56
answered Dec 12 at 12:01
Lauri Peltonen
4,4562322
4,4562322
Great, thank you! Question on bullet #3: So this is just "a long shot in the dark"? I send ether to some public address without knowing it's private key, and at a later point in time, somebody deploys a contract which happens to "fall" on the same address - is that correct, or have I misinterpreted you intention?
– goodvibration
Dec 12 at 12:56
2
@goodvibration The chance of someone generating any completely random address (either through a private key or contract deployment) is incredibly small. However, contract addresses are not random, they are deterministic. For any given address, you can know in advance the contract addresses it will generate: ethereum.stackexchange.com/questions/9776/…
– Jesse Busman
Dec 12 at 14:29
2
Additionally, a trivial case: before Solidity 0.4payable
didn't exist, so all those Solidity contracts have ether without apayable
function :)
– eth♦
Dec 13 at 2:52
add a comment |
Great, thank you! Question on bullet #3: So this is just "a long shot in the dark"? I send ether to some public address without knowing it's private key, and at a later point in time, somebody deploys a contract which happens to "fall" on the same address - is that correct, or have I misinterpreted you intention?
– goodvibration
Dec 12 at 12:56
2
@goodvibration The chance of someone generating any completely random address (either through a private key or contract deployment) is incredibly small. However, contract addresses are not random, they are deterministic. For any given address, you can know in advance the contract addresses it will generate: ethereum.stackexchange.com/questions/9776/…
– Jesse Busman
Dec 12 at 14:29
2
Additionally, a trivial case: before Solidity 0.4payable
didn't exist, so all those Solidity contracts have ether without apayable
function :)
– eth♦
Dec 13 at 2:52
Great, thank you! Question on bullet #3: So this is just "a long shot in the dark"? I send ether to some public address without knowing it's private key, and at a later point in time, somebody deploys a contract which happens to "fall" on the same address - is that correct, or have I misinterpreted you intention?
– goodvibration
Dec 12 at 12:56
Great, thank you! Question on bullet #3: So this is just "a long shot in the dark"? I send ether to some public address without knowing it's private key, and at a later point in time, somebody deploys a contract which happens to "fall" on the same address - is that correct, or have I misinterpreted you intention?
– goodvibration
Dec 12 at 12:56
2
2
@goodvibration The chance of someone generating any completely random address (either through a private key or contract deployment) is incredibly small. However, contract addresses are not random, they are deterministic. For any given address, you can know in advance the contract addresses it will generate: ethereum.stackexchange.com/questions/9776/…
– Jesse Busman
Dec 12 at 14:29
@goodvibration The chance of someone generating any completely random address (either through a private key or contract deployment) is incredibly small. However, contract addresses are not random, they are deterministic. For any given address, you can know in advance the contract addresses it will generate: ethereum.stackexchange.com/questions/9776/…
– Jesse Busman
Dec 12 at 14:29
2
2
Additionally, a trivial case: before Solidity 0.4
payable
didn't exist, so all those Solidity contracts have ether without a payable
function :)– eth♦
Dec 13 at 2:52
Additionally, a trivial case: before Solidity 0.4
payable
didn't exist, so all those Solidity contracts have ether without a payable
function :)– eth♦
Dec 13 at 2:52
add a comment |
Thanks for contributing an answer to Ethereum Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fethereum.stackexchange.com%2fquestions%2f63987%2fcan-a-contract-with-no-payable-function-have-ether%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown