У меня есть ситуация, когда я хотел бы выполнить массив с элементами, которые не являются дубликатами (установлены одинаково), поэтому я написал простую функцию для сравнения адресов перед вставкой.
Функция довольно проста, но она не работает, поэтому я должен попросить о помощи ... заранее спасибо.
// function to prevent insertion of duplicates in array
function isDuplicate() public view returns (bool){
for(uint i = 0; i < addressIndices.length; i++){
if(addressIndices[i] == msg.sender) return true;
else return false;
}
}
Для полноты вопроса я предоставлю вам дополнительную информацию:
Первый: Основные структуры:
struct Match{
bytes32 teamHome;
bytes32 teamAway;
uint teamHomeGoals;
uint teamAwayGoals;
uint oddsTeamHome;
uint oddsTeamAway;
uint oddsDraw;
uint outcome; // outcome of a match ( possible values: '1', 'X', '2', mapped to, because of uint, as: '1', '2', '3');
}
struct Bet{
address bettor; // address a of creator of a bet;
bytes32 name; // name in a relation with ^ a provided address;
uint amount; // deposit on bet;
uint bet; // match index being bet on;
uint outcome; // bet placed on a outcome; defined as: '1', 'X', '2', mapped to, because of uint, as: '1', '2', '3';
Второй: функция для размещения ставки.
function placeBet(bytes32 name, uint _outcome, uint desiredMatchIndex, uint _amount) public payable{
// find a way to store a bid in order to be easily searchable, in order to easily send money to winners;
// require(!roundEnd, "Interactions with contract are locked, be careful next time!");
// require(state == State.Active, "Betting is over, game have already started!");
require(msg.value > 0, "It isn't possible to place a bet without a money ");
if(!isDuplicate()){
addressIndices.push(msg.sender);
}
existingBets[msg.sender].push(Bet({
bettor: msg.sender,
name: name,
amount: _amount,
bet: desiredMatchIndex,
outcome: _outcome
}));
// emit event, finally;
}
Проблема действительно странная:
После того, как я сделаю 3 ставки с 3 разными адресами, длина моего массива, который я пытаюсь использовать в качестве набора, равна 7. Если функция сработала, она должна быть 3, если нет, то должна быть 9.
Есть идеи?
Редактировать: функция isDuplicate () работает только для первого вставленного адреса