[英]Call smart contract function by connecting contract address in hardhat (ethers)
[英]How to automate a ChainLink Job to call a smart-contract function that requires the caller to be a given admin address?
ChainLink 自動化支持有條件地執行智能合約功能。 但是,當從智能合約調用 function 時,調用 function 的是 ChainLink 注冊合約,而不是注冊 UpKeep 的地址。
因此,如果要調用的 function 具有強制調用者 (msg.sender) 為給定地址(例如管理地址)的要求,則調用很可能會失敗。
是否可以使用 ChainLink Automation 自動執行此類功能(將 msg.sender 設置為所需地址)?
舉個例子:
mapping() private _balance;
address public admin;
constructor {
admin = msg.sender;
}
modifier onlyAdmin {
require(msg.sender == admin, "Only admin");
_;
}
function pay(address _account, uint256 _amount) public onlyAdmin {
_balance[_account] += _amount;
}
function getBalance(address _account) public view returns(uint256) {
return _balance[_account];
}
通過 Chainlink 自動化更新余額。 我希望 _account 的余額更新為之前的值 + _amount。
_balance[account] = _balance[account] + _amount;
正如您所說,Chainlink 自動化發送的交易是與 Chainlink Registry 合約簽署的,據我所知,不可能用消費者合約所有者的簽名替換簽名。
我認為更好的方法是修改修飾符onlyAdmin
以添加注冊表合約的地址。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.