Я создаю приложение, которое требует создания списка. У меня есть код ниже. У меня есть кнопка, которая вызывает getPledges и отображает список. При подключении к MetaMask и ганашу он работает до момента, когда returnPledge вызывается в первый раз. В первый раз кажется, что это работает, но потом getPledges и returnPledge больше не работают.
const getPledges = async (e) => {
e.preventDefault();
const pledges = await SixtySixDays.methods.getPledges().call()
let pledgeData = [];
for (let i in pledges) {
const data = await SixtySixDays.methods.getPledgeData(i).call();
pledgeData.push({id: i, data: data});
}
console.log(pledgeData);
const listItems = pledgeData.map((pledge) =>
<li key={pledge.id}><b>Name:</b> {pledge.data[2]} - <b>Amount:</b> {pledge.data[1]} ETH -
<b>Remaining Time: </b> {pledge.data[0]}</li>
);
setListItems(listItems);
}
function returnPledge(pledgeId) {
SixtySixDays.methods.returnDeposit(pledgeId).send({from: address});
}
Соответствующая часть смарт-контракта SixtySixDays:
function returnDeposit(uint _id) public onlyOwner(_id) {
require(pledges[_id].endTime < now, 'You have not completed 66 Days');
msg.sender.transfer(pledges[_id].amount);
pledges[_id].returned = true;
addressPledgeCount[msg.sender]--;
}
//@notice returns the pledges owned by an address which havent returned the deposit
function getPledges() external view returns(uint[] memory) {
uint[] memory result = new uint[](addressPledgeCount[msg.sender]);
uint count = 0;
for (uint i = 0; i < pledges.length; i++) {
if (idToAddress[i] == msg.sender && pledges[i].returned == false) {
result[count] = i;
count++;
}
}
return result;
}
//@notice function to return info about pledges
function getPledgeData(uint _id) external view onlyOwner(_id) returns(uint, uint, string memory, bool) {
uint timeLeft;
pledges[_id].endTime <= now ? timeLeft = 0 : timeLeft = pledges[_id].endTime - now;
return (timeLeft, pledges[_id].amount, pledges[_id].label, pledges[_id].returned);
}
}
Я знаю, что это длинный пост, но у меня много часов безуспешно. Если есть что-нибудь вопиющее, дайте мне знать.