Композиция объекта в Solidity

Как работает композиция объектов в Solidity? Я не нашел исчерпывающего руководства, и все примеры, похоже, имеют дело с вещами мирового уровня или реализациями токенов ERC20.

  1. Могу ли я заключить договор с публичной недвижимостью, которая является другими договорами?
  2. Могут ли эти экземпляры контрактов передаваться в качестве аргументов функций между контрактами?

person Adam Szabo    schedule 17.12.2017    source источник
comment
Это должно быть на ethereum.stackexchange.com, поэтому я проголосовал за закрытие. При этом вы должны использовать адрес, указывающий на развернутый контракт, который вы можете хранить в свойствах, передавать по своему усмотрению и т. Д.   -  person Michael Kohl    schedule 18.12.2017


Ответы (1)


Да на оба эти вопроса - простой пример для иллюстрации будет выглядеть примерно так:

    contract HelperContract {
        function foo() public pure returns(uint) {
            return(0);
        }
    }

    contract MainContract {
        HelperContract helperContract;

        function MainContract(address helperAddress) public {
            helperContract = HelperContract(helperAddress);
        }

        function bar() public view returns(uint) {
            return helperContract.foo();
        }
    }

После развертывания HelperContract и создания экземпляра MainContract с уже развернутым адресом HelperContract мы можем вызвать bar, который, в свою очередь, вызовет foo.

Вы можете скопировать и вставить этот код в remix и довольно быстро убедитесь, что это так.

Если вы хотите увидеть реальный пример помимо типа Hello world!, вы можете просмотреть CryptoKitties здесь, где они используют этот тип шаблона.

Это довольно объемный код, но вы можете поискать KittyAuction контракт, который содержит методы setSaleAuctionAddress и setSiringAuctionAddress. Эти функции устанавливают ссылки на отдельно развернутые SaleClockAuction и SiringClockAuction контракты соответственно.

person elsyr    schedule 23.12.2017