题目
一个「质押 ETH」的按钮在两种场景下出错:给一个不接收 ETH 的函数传了 value,交易立即失败;另一次操作是纯 ETH 转账,却走了合约调用路径,用户在确认弹窗里看不到转账金额。请从 payable 与 value 的处理出发说明正确做法。
考察目标
- payable 与 nonpayable 的差异。
- value 的单位与前端换算方式。
- 纯 ETH 转账与 payable 合约调用的路径选择。
说明 payable 与 state mutability 的关系、value 的单位与换算方式,以及纯转账与合约调用的路径选择。
一个「质押 ETH」的按钮在两种场景下出错:给一个不接收 ETH 的函数传了 value,交易立即失败;另一次操作是纯 ETH 转账,却走了合约调用路径,用户在确认弹窗里看不到转账金额。请从 payable 与 value 的处理出发说明正确做法。
声明为 payable 的函数与接收入口可以接收随调用发送的 value;nonpayable 函数收到非零 value 的调用会失败。value 以最小单位整数传入,前端需要把用户输入的以太数量换算后再提交。纯 ETH 转账与合约 payable 调用是两条路径:前者提交 to 与 value,后者在调用函数时附带 value。实现差异与工程取舍见深入回答。
发现这道题有问题? 反馈此题