1.提款(Withdrawal)模式:
当在智能合约中,直接向一个地址转账时,如该地址是一个合约地址,合约中可以编写代码,拒绝接受付款,导致交易失败。为避免这种情况,通常会使用提款模式。
提款模式是让收款方主动来提取款项,而不是直接转账给收款方。
示例
直接转账给收款方。
这是个比富游戏,智能合约接收用户发送的款项(以太),金额最高的将获得首富头衔,前一位首富失去头衔,但将获得金钱补偿,当前首富发送的款项,将转账给前首富(示例中此处使用直接转账)。
不理解游戏没关系,重点是转账给前首富时,是直接转账。
示例
提款模式,让收款方(前首富)主动来提取款项,交易不会失败,游戏可以继续。
2.限制(restricted)访问
对合约进行访问限制,是一种常见做法。默认情况下合约是只读的,除非将合约状态指定为public。
使用限制访问修饰符,我们可以限制谁能修改合约状态,或者调用合约函数等操作。
下面示例中,创建了多个修饰符:
- onlyBy 限制可以调用该函数的调用者(根据地址)。
- onlyAfter 限制该函数只能在特定的时间段之后调用。
- costs 调用方只能在提供特定值的情况下调用此函数。。
For Example: