Странное Исключение LINQ (Индекс за пределы)

Задача

Мы хотим заключить простой договор ERC-721, в котором владельцы токенов могут (с односторонним согласием) обменять их на любой другой существующий токен.

Эта реализация должна соответствовать стандартам ERC-721 и генерировать два Transfer события при выполнении этого обмена.

Решение

Давайте начнем с базовой реализации, не основанной на эталонной реализации, и включающей в себя функцию mint, чтобы мы могли создать несколько токенов для игры:

pragma solidity 0.5.1;

import "https://github.com/0xcert/ethereum-erc721/src/contracts/tokens/nf-token.sol";

contract ExchangeableTokens is ERC721 {

    /**
    * @dev Mints a new NFT.
    * @param _to The address that will own the minted NFT.
    * @param _tokenId of the NFT to be minted by the msg.sender.
    */
    function mint(
        address _to,
        uint256 _tokenId
    )
        external
        onlyOwner
    {
        super._mint(_to, _tokenId);
    }
}

добавьте желаемое поведение:

function exchangeStars(uint256 myToken, uint256 theirToken, address them) 
    public
{
    require (idToOwner[myToken] == msg.sender);
    require (idToOwner[theirToken] == them);
    require (them != address(0));
    _transfer(them, myToken);
    _transfer(msg.sender, theirToken);
}

Обсуждение

Эта реализация соответствует стандарту и генерирует события по мере необходимости.

10
задан Coral Doe 26 October 2012 в 14:06
поделиться

3 ответа

Исключение происходит в Системной библиотеке, и Ваша история заставляет меня думать, что проблема не находится в Вашем коде. Схема недавно изменилась? Ваше отображение корректно?

0
ответ дан 4 December 2019 в 03:17
поделиться

Я сказал бы, что у Вас есть модель-> несоответствие базы данных где-нибудь. Когда я становлюсь столь же отчаянным как Вы на таких ситуациях, я обычно разжигаю VS.NET, создаю новое консольное приложение и восстанавливаю раздел DBML, который ссылается на объект интереса к этому запросу, и повторно выполненный. Можно найти, что в этом виде изоляции, запрос работает. Вы настраивали какое-либо из своих определений объекта путем заполнения частичных методов, особенно те тот огонь в создание?

1
ответ дан 4 December 2019 в 03:17
поделиться

Это почти наверняка не будет основной причиной, но я столкнулся с тем же самым исключением в своем проекте - и обнаружил, что основная причина заключалась в том, что исключение было выброшено во время создания класса сущности. Как ни странно, истинное исключение «потеряно» и вместо этого проявляется как исключение ArgumentOutOfRange, возникающее в итераторе оператора Linq, который извлекает объект / объекты.

Если вы получаете эту ошибку и в своих объектах POCO использовали методы OnCreated или OnLoaded, попробуйте выполнить их пошагово.

5
ответ дан 4 December 2019 в 03:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: