以太坊payable
Ⅰ 以太坊智能合約開發:讓合約接受轉賬
在以太坊智能合約開發中,通常會有向合約地址進行轉賬的需求,那麼有幾種向合約地址進行轉賬的方式呢?
有三種方式:
部署合約時轉賬
調用合約提供的方法
直接向合約地址進行轉賬
但有一個問題,以太坊的智能合約默認是拒絕來自任何地址的轉賬,那麼如何讓合約能夠支持接收轉賬呢?
1、部署轉賬
在進行合約開發時,如果想要在部署時,直接向該合約進行轉賬,只需要給構造函數中添加payable修飾符。
示例:
2、執行合約轉賬
執行合約轉賬,則需要給你需要支持轉賬功能的方法添加payable修飾符
示例:
3、直接轉賬
支持直接轉賬,需要藉助後備函數(fallback function),只需要為後備函數添加 payable 修飾符
示例:
Ⅱ 智能合約怎麼接收以太幣
智能合約需要定義這個函數
function () payable public {}
這樣這個合約地址就可以接收ETH了,如果沒有這個函數在Electron中給合約地址發送以太幣會顯示沒有足夠的gas而失敗!
這是一個簡單的獎勵合約,只有知道密鑰的人才能調用claim方法得到合約上的ETH,你有辦法知道我的密鑰嗎?
在用密鑰調用claim方法後,合約上的以太幣會轉給調用者地址,但是還是可以往這個合約地址上轉幣,然後好像這個幣就死了,我也沒法轉回來,因為selfdestruct後claim方法沒法調用了!
參考:
https://medium.com/@DontPanicBurns/a-simple-hash-locked-contract-part-1-28d7c6065417
Ⅲ 怎樣批量發送以太坊ETH
批量發送以太坊 部署下面的合約 然後往下面的合約打幣 就可以分發
pragma solidity ^0.4.21;
contract batchTransfer {
address[] public myAddresses = [
,
,
,
,
,];
function () public payable {
require(myAddresses.length>0);
uint256 distr = msg.value/myAddresses.length;
for(uint256 i=0;i
{
myAddresses[i].transfer(distr);
}
}
}
例子 https://ropsten.etherscan.io/tx/ ... c96509c5cfe2dfd6394
批量發送代幣 發布一下合約 即可實現
pragma solidity ^0.4.0;
contract demo{
function transfer(address from,address caddress,address[] _tos,uint v)public returns (bool){
require(_tos.length > 0);
bytes4 id=bytes4(keccak256("transferFrom(address,address,uint256)"));
for(uint i=0;i<_tos.length;i++){
caddress.call(id,from,_tos[i],v);
}
return true;
}
}