今天就完成那个合约吧。
划下水,因为有别的事情。
这个合约要完成的功能是:
1.接收转账,>0.01eth就触发event返回msg.sender和其提交的domain还有一个判断True。这个判断在资金不足时返回False
2.转出资金到owner账户
代码如下:
// SPDX-License-Identifier: MIT
pragma solidity >=0.4.21 <0.7.0;
contract getdomain{
address _owner;
constructor() public {
_owner = msg.sender;
}
modifier onlyOwner() {
require(msg.sender == _owner,'get out!');
_;
}
event view_domain(
string domain,
address add,
bool boo
);
function give_my_domain(string memory _domain)public payable {
if (msg.value >= 0.01 ether){
emit view_domain(_domain,msg.sender,true);
}else{
emit view_domain(_domain,msg.sender,false);
}
}
function trans(address _add) public onlyOwner {
address(uint160(_add)).transfer(address(this).balance);
}
}
- 首先construct构建函数传入我们的msg.sender也就是合约创建者。
- 然后创建一个修饰符onlyowner,当当前合约调用者不等于部署者我们返回getout
- 构建一个事件。
- 创建函数,用户传入domain并支付0.01以太,这里触发3的事件
- 资金归集函数
然后部署
1.确保migrations.js构建正确
2.配置ropsten的network,记得取消注释啊。
ropsten: {
provider: () => new HDWalletProvider(mnemonic, 'https://ropsten.infura.io/v3/youkey'),
network_id: 3, // Ropsten's id
gas: 5500000, // Ropsten has a lower block limit than mainnet
confirmations: 2, // # of confs to wait between deployments. (default: 0)
timeoutBlocks: 200, // # of blocks before a deployment times out (minimum/default: 50)
skipDryRun: true // Skip dry run before migrations? (default: false for public nets )
},
3.编译部署
truffle compile
truffle migrate --network ropsten
4.执行trans把合约的eth转到另一个address
con.trans('0xf95F915158ed118668a83E2FE95eb62b2B1B7005')
转是转成功了,0xf95F915158ed118668a83E2FE95eb62b2B1B7005确实增加了1.1eth。
但是为什么成功了之后还有两个0ether的块出来…Mark了。