2016-06-29 3 views
2

Я экспериментирую со смарт-контрактами на блок-цепочке Ethereum. Допустим, у меня есть контракт, что-то вроде SimpleStorage.sol найдено in the Solidity documentation, у которого есть состояние хранения, доступное любому. Как ссылка описывает,Как Smart Contracts обрабатывают несколько пользователей и разные хранилища?

любой мог просто позвонить установить снова с другим значением и переписывает номер

Это приведет к проблемам, а также решение об ограничении доступности этой функции для определенных учетных записей не подходит в моем случае использования. В моем контракте я хочу, чтобы данные, которые каждая из учетных записей устанавливает позже, могут быть доступны другой предопределенной учетной записью (подумайте о связи, когда человек A-> B, поэтому B использует данные исключительно из A и x-> y, где y использует данные исключительно от x. Никакое перекрытие не может существовать там, где y может использовать данные A). По моему мнению, есть 2 решения проблемы:

  1. Адрес карты друг другу и отслеживать все данные в рамках этого единственного смарт-контракта.
  2. Имейте разумный контракт «шаблон», к которому будет иметь доступ начальная учетная запись, и создайте отдельный смарт-контракт для каждой новой учетной записи, чтобы просто хранить данные, которые взаимодействуют с шаблоном.

Проблема с происходит, когда отношения между счетами становятся более сложными (карта отдельных структур?) Или большой объем людей пытается хранить свою информацию в договоре.

Проблема с является избыточным. Действительно ли мне нужно создать отдельный «контракт» для каждого человека, пытающегося получить доступ к основному шаблону?

Если мой вопрос неясен, я могу объяснить больше, но я в основном ищу концептуальный ответ. Большинство примеров смарт-контрактов, которые я нашел, либо чрезвычайно просты, либо излишне сложны и не обеспечивают конкретного использования.

ответ

1

Вы можете создать списки доступа в своем умном контракте. Самый простая идея будет создание владельца:

contract example { 

    // Define variable owner of the type address 
    address owner; 

    // this function is executed at initialization and sets the owner of the contract 
    function example() { 
     owner = msg.sender; 
    } 

    function doSomething() { 
     if (msg.sender == owner) { 
      // only the owner can do something, like storage access 
     } 
    } 
} 

Эта логика может быть расширена для ваших потребностей, вы можете создать структуры или массивы хранения списка разрешенных учетные записей, или вы могли бы создать логику, которая позволяет динамически добавление и удаление привилегированных пользователей. Это все зависит от вас.

Если вы только хотите, чтобы каждый пользователь имел доступ к его собственной информации, вы можете либо сохранить эти данные в структурах с выделенным владельцем счета, как вы описали в или, я бы рекомендовал, чтобы каждый пользователь создает свой собственный контракт хранилище, которое было бы самым чистым способом доступности.

Основной контракт должен содержать только список ссылок для внешних контрактов, поэтому на самом деле нет избыточности в , если у вас есть основной контракт, который содержит логику хранения и выделенные контракты для каждого пользователя, который должен хранить данные.

Смежные вопросы