一般的情况下,是可以类似于 chainlink 这类语言机,取到链下 http 的数据。
最近看到一个 https://www.apollox.finance/ 声称:链上存取款,链下交易引擎撮合交易
他在取款的时候,是通过前端发了一个 trasanction 到他的 https://bscscan.com/address/0x3e71726dbba7ce4e63b9ee58cf462184dc4c9737
看他这个 claim 的实现
function claim(bytes calldata message, bytes calldata signature) external notPaused {
address signer = source(message, signature);
require(signer == truthHolder, "only accept truthHolder signed message");
(uint256 id, address payable to, bool isBNB, address currency, uint256 amount, uint256 deadline) = abi.decode(message, (uint256, address, bool, address, uint256, uint256));
require(claimHistory[id] == 0, "already claimed");
require(isBNB || supportCurrency[currency], "currency not support");
require(block.timestamp < deadline, "already passed deadline");
claimHistory[id] = block.number;
_transfer(to, isBNB, currency, amount);
emit Claimed(id, to, isBNB, currency, amount, deadline);
}
例:一个 claim 的 tx: https://bscscan.com/tx/0x83f9f4cdda6d5ae3183a3239b4d6ddb4e0c980756817766aba415f0e7cc16836
貌似就是完全通过前端页面构造的取款金额,然后调用小狐狸签名,上链请求,合约没有做啥检查。。。 请教高手,他这种业务,大概是怎么实现的。。。