0

我的合约需要 LINK 代币才能运行。

我想让用户通过合约上的一个函数为合约提供 LINK 代币,然后根据他们的资金为用户做一些逻辑。

我怎样才能在合同中做到这一点?我试过这样打电话。

LINK.balanceOf(walletaddress) 确实有效,(它获取钱包中的链接金额)。但是,由于某种原因,下面的此功能不起作用。它通过了所有,但像空数据一样。

当我从他们的前端按钮进行相同的调用时,Metamask 显示不同。(我认为它和混音一样)

https://testnet.bscscan.com/token/0x84b9B910527Ad5C03A9Ca831909E21e236EA7b06#readContract

以下是我尝试获得合同批准的方法。

function approveTransfer(uint256 amount) public returns(string memory) {
        uint256 approveAmt = amount * 10**18;
        LINK.approve(_msgSender(),approveAmt);
        approvedAmount = approveAmt;
    }
4

2 回答 2

1

在您的合同中不可能,除非外部合同明确允许它或包含使用 deprecatedtx.origin而不是msg.sender.

请参阅此答案中的最后一段和代码片段,以了解如果可能的话,它是如何被滥用的。


your contract执行 LINK 的功能时,msg.senderLINK contract现在your contract- 不是用户。

transfer()approve()(为了稍后调用)函数都transferFrom()依赖于msg.sender,您需要成为用户。但它不是——这是你的合同。


your contract委托对 LINK 函数的调用时,状态更改存储在your contract- 而不是 LINK 中。

但是您需要将状态更改存储在 LINK 合约中,因此这也不是一个选项。

于 2021-05-05T14:54:04.277 回答
0

好吧,所以我一直在搜索,搜索和搜索......

直到我在他们的不和谐频道上发现了一些惊人的东西。(它很可能也写在其他地方)。

哈利 | 链环

LINK 令牌是具有 transferAndCall 功能的 ERC677。因此,根据生成随机数的智能合约函数调用的方式,您可以将其更改为“transferAndCall”函数,而不是仅执行 VRF 请求的函数,其想法是它将传输足够的 LINK 来完成VRF 请求。然后在执行 VRF 请求的消费合约中,实现“onTokenTransfer”函数,该函数仅调用执行 VRF 请求的其他函数。这样做的最终结果是,当用户将 LINK 转移到合约时,它会在 1 笔交易中自动进行 VRF 请求。

因此,用户无需按下调用消费合约中的函数来执行 VRF 请求的按钮,而是按下 LINK 代币合约中执行“transferAndCall”功能的按钮,然后将 LINK 传输到消费合约并调用您的消费合约中的“onTokenTransfer”函数,然后调用您的函数来执行 VRF 请求,该请求将成功执行,因为它刚刚收到请求的 LINK 在我之前的黑客马拉松条目“链接加油站”中查看此实现

https://github.com/pappas999/Link-Gas-Station/blob/master/contracts/WeatherCheck.sol https://github.com/pappas999/Link-Gas-Station/blob/master/src/relayer/relayer .js

简而言之,这是可能的,因为我的合同有

function onTokenTransfer(address from, uint256 amount, bytes memory data)  public {
        receivedTokenTransfer = true;
        lastDepositer = from;
        lastDepositerAmountInLink = amount / 10**18;
    }

因此,我可以将 LINK 发送到 LINK 的合约地址,而不是发送 LINK 到我自己的合约,其中包含数据有效负载 transferAndCall 、 MycontractAddress 以及我的合约应该收到的 LINK 数量。

发送此付款后,chainlink 将向我的合约发送付款并调用名为onTokenTransfer(在我的合约上)的函数。:)))

希望这对将来的某人有所帮助。

于 2021-05-06T02:15:34.043 回答