У меня есть смарт-контракт. Я хочу обновлять содержимое (список имен) этого контракта, скажем, каждые 5 минут. Имена меняются после этого установленного времени. Мой подход состоит в том, чтобы создать экземпляр этого контракта (новый адрес), а затем написать новый набор имен. Однако я чувствую, что это неэффективно. Можно ли обновлять вещи без изменения адреса или создания нового экземпляра? Есть лучший способ сделать это?
в вашем контракте определите сеттер:
pragma solidity ^0.4.24;
contract Names {
string[] names;
function setname(uint i, string s)public returns(bool){
names[i]=s;
return true;
}
}
и в вашем интерфейсе скажем, используя javascript через каждые 5 минут, когда вы вызываете функцию setname следующим образом:
elapsed5minutes();
var abi=[//your abi array];
var contractAddress = "//your contract address";
var contract = web3.eth.contract(abi).at(contractAddress);
contract.setname.sendTransaction(3,"Brian",{{from:web3.eth.accounts[0]}},function (error, result){ if(!error){
console.log(result);
} else{
console.log(error);
}
});
таким образом, вы продолжаете взаимодействовать с одним и тем же экземпляром контракта, не платя больше газа за развертывание нового экземпляра.
пользователь3078335