实验3.4 transfer转账
国库是随着人类社会的进步,社会生产力水平的提高,国家的产生而发展起来的,是社会生产发展到一定阶段的必然产物。Solidity中的合约地址类似于一个小小的“国库”,它由合约拥有者所管理。任何无明确接受者的金额交易最终都会归为“国库”所有。
实验目的
1. 明白空方法体的payable函数默认转账地址
2. 了解在transfer方法中自定义转账数额与传入转账数额同在时,数额的流向情况。
实验要求
1. 查看函数pay,思考空方法体的payable函数,转账会给哪个地址?然后进行操作验证。首先编译部署改合约,调用getContractBalance函数,查看合约余额(为0)。接着在部署页面的VALUE那输入转账数额5(ether),注意变换单位,再调用pay函数。查看账户一余额是否为正常(余额大约为95ether)。再次调用getContractBalance函数,这时地址账户余额为5ether(显示的余额是以wei为单位的)。这时你就清楚空方法体的payable函数默认会给谁转账。
2. 请按照ToAccount2,transferToAccount3函数的注释,修改或补充好代码。修改补充完后,请你用ToAccount2函数,给账户二转30ether。此时你的账户一大约有65ether,账户二有130ether。 这是常规的transfer函数的转账,接下来我们看看特殊的转账。
3. 请你查看ToAccount2与transferToAccount3函数,除了接受地址与函数名不一样,还有什么地方不同?请你思考一下如果在部署界面的VALUE那输入30ether,再调用transferToAccount3函数,它的资金流向是怎样的?
思考完后,请进行操作检查。
①在部署界面VALUE那输入30(ether),再调用transferToAccount3函数。
②查看账户一,账户三和合约地址的余额。
③总结函数transferToAccount3函数的资金流向,思考其与空方法体payable函数的关系。
以下是本次实验所使用到的测试代码,请使用remix编辑器完成该实验
// SPDX-License-Identifier: GPL-3.0
pragma solidity^0.8.0;
contract transfer{
//思考空方法体的payable函数默认会给哪个地址转账?
function pay() public payable{
}
function getContractBalance()public view returns(uint){
return address(this).balance;
}
//请拷贝你账户二的地址赋值给account2,并去掉方法体里的注释。
function ToAccount2()public payable{
// address account2 =**账户2**;
// payable(account2).transfer(msg.value);
}
//请拷贝你账户三的地址赋值给account3,拷贝完记得转回账户一。并去掉方法体里的注释。
function transferToAccount3()public payable{
// address account3 =**账户3**;
// payable(account3).transfer(10 ether);
}
}
下面是本次实验所配套的视频教程: